# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals

try:
    import unittest2 as unittest
except ImportError:
    import unittest
import test
import yamlish

test_data_list = [
  {
    "name": 'Simple scalar',
    "in": 1,
    "out": """\
    --- 1
    ...
    """,
  },
  {
    "name": 'Undef',
    "in": None,
    "out": """\
    --- ~
    ...
    """,
  },
  {
    "name": 'Unprintable',
    "in": "\x01\n\t",
    "out": """\
    ---
    "\\x01\\n\\t"
    ...
    """,
  },
  {
    "name": 'Simple array',
    "in": [ 1, 2, 3 ],
    "out": """\
    ---
    - 1
    - 2
    - 3
    ...
    """,
  },
  {
    "name": 'Array, two elements, None',
    "in": [ None, None ],
    "out": """\
    ---
    - ~
    - ~
    ...
    """,
  },
  {
    "name": 'Nested array',
    "in": [ 1, 2, [ 3, 4 ], 5 ],
    "out": """\
    ---
    - 1
    - 2
    -
      - 3
      - 4
    - 5
    ...
    """,
  },
  {
    "name": 'Simple hash',
    "in": { "one": 1, "two": 2, "three": 3 },
    "out": """\
    ---
    one: 1
    three: 3
    two: 2
    ...
    """,
  },
  {
    "name": 'Nested hash',
    "in": {
      "one": 1,
      "two": 2,
      "more": { "three": 3, "four": 4 }
    },
    "out": """\
     ---
     more:
       four: 4
       three: 3
     one: 1
     two: 2
     ...
    """,
  },
  {
    "name": 'Unprintable key',
    "in": { "one": 1, "\x02": 2, "three": 3 },
    "out": """\
     ---
     "\\x02": 2
     one: 1
     three: 3
     ...
    """,
  },
  {
    "name": 'Empty key',
    "in": { '': 'empty' },
    "out": """\
     ---
      '': empty
     ...
    """,
  },
  {
    "name": 'Empty value',
    "in": { '': '' },
    "out": """\
     ---
       '': ''
     ...
    """,
  },
  {
    "name": 'Complex',
    "in": {
      'bill-to': {
        'given': 'Chris',
        'address': {
          'city': 'Royal Oak',
          'postal': 48046,
          'lines': "458 Walkman Dr.\nSuite #292\n",
          'state': 'MI'
        },
        'family': 'Dumars'
      },
      'invoice': 34843,
      'date': '2001-01-23',
      'tax': 251.42,
      'product': [
        {
          'sku': 'BL394D',
          'quantity': 4,
          'price': 450.00,
          'description': 'Basketball'
        },
        {
          'sku': 'BL4438H',
          'quantity': 1,
          'price': 2392.00,
          'description': 'Super Hoop'
        }
      ],
      'comments':
       "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
      'total': 4443.52
    },
    "out": r"""
    ---
    bill-to:
      address:
        city: 'Royal Oak'
        lines: "458 Walkman Dr.\nSuite #292\n"
        postal: 48046
        state: MI
      family: Dumars
      given: Chris
    comments: "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n"
    date: 2001-01-23
    invoice: 34843
    product:
      -
        description: Basketball
        price: 450.00
        quantity: 4
        sku: BL394D
      -
        description: 'Super Hoop'
        price: 2392.00
        quantity: 1
        sku: BL4438H
    tax: 251.42
    total: 4443.52
    ...
    """,
  },
]

class TestWriter(unittest.TestCase):  # IGNORE:C0111
    pass

test.generate_testsuite(test_data_list, TestWriter, yamlish.dump, direction=test.OUTPUT)

if __name__ == "__main__":
    unittest.main()
