A single dot is not a float value (fixes #62).
[pyyaml/python3.git] / tests / test_representer.py
blob6746146c4eb216400f88c9204226c16b3da9e6e8
2 import test_appliance
3 from test_constructor import *
5 from yaml import *
7 class TestRepresenterTypes(test_appliance.TestAppliance):
9 def _testTypesUnicode(self, test_name, data_filename, code_filename):
10 return self._testTypes(test_name, data_filename, code_filename, allow_unicode=True)
12 def _testTypes(self, test_name, data_filename, code_filename, allow_unicode=False):
13 data1 = eval(file(code_filename, 'rb').read())
14 data2 = None
15 output = None
16 try:
17 output = dump(data1, Dumper=MyDumper, allow_unicode=allow_unicode)
18 data2 = load(output, Loader=MyLoader)
19 self.failUnlessEqual(type(data1), type(data2))
20 try:
21 self.failUnlessEqual(data1, data2)
22 except (AssertionError, TypeError):
23 if isinstance(data1, dict):
24 data1 = [(repr(key), value) for key, value in data1.items()]
25 data1.sort()
26 data1 = repr(data1)
27 data2 = [(repr(key), value) for key, value in data2.items()]
28 data2.sort()
29 data2 = repr(data2)
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):
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
39 if isinstance(item1, datetime.datetime) \
40 and isinstance(item2, datetime.datetime):
41 self.failUnlessEqual(item1.microsecond,
42 item2.microsecond)
43 if isinstance(item1, datetime.datetime):
44 item1 = item1.utctimetuple()
45 if isinstance(item2, datetime.datetime):
46 item2 = item2.utctimetuple()
47 self.failUnlessEqual(item1, item2)
48 else:
49 raise
50 except:
51 print
52 print "OUTPUT:"
53 print output
54 print "NATIVES1:", data1
55 print "NATIVES2:", data2
56 raise
58 TestRepresenterTypes.add_tests('testTypes', '.data', '.code')
59 TestRepresenterTypes.add_tests('testTypesUnicode', '.data', '.code')