blob: 961b477d444834e76183fdaee2098b76b4fabdc6 [file] [log] [blame]
import test_appliance
from test_constructor import *
from yaml import *
class TestRepresenterTypes(test_appliance.TestAppliance):
def _testTypesUnicode(self, test_name, data_filename, code_filename):
return self._testTypes(test_name, data_filename, code_filename, allow_unicode=True)
def _testTypes(self, test_name, data_filename, code_filename, allow_unicode=False):
data1 = eval(file(code_filename, 'rb').read())
data2 = None
output = None
try:
output = dump(data1, Dumper=MyDumper, allow_unicode=allow_unicode)
data2 = load(output, Loader=MyLoader)
self.failUnlessEqual(type(data1), type(data2))
try:
self.failUnlessEqual(data1, data2)
except (AssertionError, TypeError):
if isinstance(data1, dict):
data1 = [(repr(key), value) for key, value in data1.items()]
data1.sort()
data1 = repr(data1)
data2 = [(repr(key), value) for key, value in data2.items()]
data2.sort()
data2 = repr(data2)
if data1 != data2:
raise
elif isinstance(data1, list):
self.failUnlessEqual(type(data1), type(data2))
self.failUnlessEqual(len(data1), len(data2))
for item1, item2 in zip(data1, data2):
if (item1 != item1 or (item1 == 0.0 and item1 == 1.0)) and \
(item2 != item2 or (item2 == 0.0 and item2 == 1.0)):
continue
if isinstance(item1, datetime.datetime):
item1 = item1.utctimetuple()
if isinstance(item2, datetime.datetime):
item2 = item2.utctimetuple()
self.failUnlessEqual(item1, item2)
else:
raise
except:
print
print "OUTPUT:"
print output
print "NATIVES1:", data1
print "NATIVES2:", data2
raise
TestRepresenterTypes.add_tests('testTypes', '.data', '.code')
TestRepresenterTypes.add_tests('testTypesUnicode', '.data', '.code')