| [133] | 1 | |
|---|
| 2 | import test_appliance |
|---|
| [144] | 3 | from test_constructor import * |
|---|
| [133] | 4 | |
|---|
| 5 | from yaml import * |
|---|
| 6 | |
|---|
| [144] | 7 | class TestRepresenterTypes(test_appliance.TestAppliance): |
|---|
| [133] | 8 | |
|---|
| [153] | 9 | def _testTypesUnicode(self, test_name, data_filename, code_filename): |
|---|
| 10 | return self._testTypes(test_name, data_filename, code_filename, allow_unicode=True) |
|---|
| 11 | |
|---|
| 12 | def _testTypes(self, test_name, data_filename, code_filename, allow_unicode=False): |
|---|
| [136] | 13 | data1 = eval(file(code_filename, 'rb').read()) |
|---|
| 14 | data2 = None |
|---|
| [133] | 15 | output = None |
|---|
| 16 | try: |
|---|
| [153] | 17 | output = dump(data1, Dumper=MyDumper, allow_unicode=allow_unicode) |
|---|
| [136] | 18 | data2 = load(output, Loader=MyLoader) |
|---|
| [144] | 19 | self.failUnlessEqual(type(data1), type(data2)) |
|---|
| [133] | 20 | try: |
|---|
| [136] | 21 | self.failUnlessEqual(data1, data2) |
|---|
| [225] | 22 | except (AssertionError, TypeError): |
|---|
| [136] | 23 | if isinstance(data1, dict): |
|---|
| [150] | 24 | data1 = [(repr(key), value) for key, value in data1.items()] |
|---|
| [136] | 25 | data1.sort() |
|---|
| 26 | data1 = repr(data1) |
|---|
| [150] | 27 | data2 = [(repr(key), value) for key, value in data2.items()] |
|---|
| [136] | 28 | data2.sort() |
|---|
| 29 | data2 = repr(data2) |
|---|
| [147] | 30 | if data1 != data2: |
|---|
| 31 | raise |
|---|
| 32 | elif isinstance(data1, list): |
|---|
| 33 | self.failUnlessEqual(type(data1), type(data2)) |
|---|
| 34 | self.failUnlessEqual(len(data1), len(data2)) |
|---|
| 35 | for item1, item2 in zip(data1, data2): |
|---|
| [173] | 36 | if (item1 != item1 or (item1 == 0.0 and item1 == 1.0)) and \ |
|---|
| 37 | (item2 != item2 or (item2 == 0.0 and item2 == 1.0)): |
|---|
| 38 | continue |
|---|
| [225] | 39 | if isinstance(item1, datetime.datetime): |
|---|
| 40 | item1 = item1.utctimetuple() |
|---|
| 41 | if isinstance(item2, datetime.datetime): |
|---|
| 42 | item2 = item2.utctimetuple() |
|---|
| [147] | 43 | self.failUnlessEqual(item1, item2) |
|---|
| 44 | else: |
|---|
| [133] | 45 | raise |
|---|
| 46 | except: |
|---|
| 47 | print |
|---|
| 48 | print "OUTPUT:" |
|---|
| 49 | print output |
|---|
| [136] | 50 | print "NATIVES1:", data1 |
|---|
| 51 | print "NATIVES2:", data2 |
|---|
| [133] | 52 | raise |
|---|
| 53 | |
|---|
| [144] | 54 | TestRepresenterTypes.add_tests('testTypes', '.data', '.code') |
|---|
| [153] | 55 | TestRepresenterTypes.add_tests('testTypesUnicode', '.data', '.code') |
|---|
| [133] | 56 | |
|---|