aboutsummaryrefslogblamecommitdiffstats
path: root/test/test_writer.py
blob: 0c1b5174a09574186ab4157bcca0c94cd48b6185 (plain) (tree)
1
2
3
4
5
6
7





                                                                        
                  









































                                                                   
      


































                                                                
          
                          
        















                                     
        


                                                                               
      





























                                                                                              
 
                                       
 

                                    
                                   
                               
                             
 
                    


                                                                        
                                                                           

                                  
                                             




                                                                 
 
                                    
                                                                      




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

import unittest
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": [
      "---",
      "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",
      "...",
    ],
  },
]

# plan(tests = len(test_data_list) * 5)

class TestWriter(unittest.TestCase):
    def test_writer(self):
        for test in test_data_list:
            name = test['name']
            data = test['in']

            got = ""
            # We currently don't throw any exceptions in Writer, so this
            # this is always false
            if 'error' in test:
                self.assertRaises(test['error'], yamlish.dumps, test['in'])
            else:
                want = test['out']
                yamlish.dump(test['in'], got)
                self.assertEqual(got, want, """%s: Result matches
                    expected = %s
                    
                    observed = %s
                    """ % (name, want, got))

                # Now try parsing it
                parsed = yamlish.load(got) # FIXME got has an iterator
                self.assertEqual(parsed, data, """%s: Reparse OK
                    expected = %s
                    
                    observed = %s
                    """ % (name, data, parsed))