blob: 794d3e4e220c726eb7953944ed308d57335dc279 [file] [log] [blame]
import test_appliance
try:
import datetime
except ImportError:
pass
try:
set
except NameError:
from sets import Set as set
from yaml import *
class MyConstructor(Constructor):
pass
class MyTestClass1:
def __init__(self, x, y=0, z=0):
self.x = x
self.y = y
self.z = z
def __eq__(self, other):
return self.__class__, self.__dict__ == other.__class__, other.__dict__
def construct1(constructor, node):
mapping = constructor.construct_mapping(node)
return MyTestClass1(**mapping)
MyConstructor.add_constructor("!tag1", construct1)
class MyTestClass2(MyTestClass1, YAMLObject):
yaml_constructor = MyConstructor
yaml_tag = "!tag2"
def from_yaml(cls, constructor, node):
x = constructor.construct_yaml_int(node)
return cls(x=x)
from_yaml = classmethod(from_yaml)
class MyTestClass3(MyTestClass2):
yaml_tag = "!tag3"
def from_yaml(cls, constructor, node):
mapping = constructor.construct_mapping(node)
if '=' in mapping:
x = mapping['=']
del mapping['=']
mapping['x'] = x
return cls(**mapping)
from_yaml = classmethod(from_yaml)
class TestTypes(test_appliance.TestAppliance):
def _testTypes(self, test_name, data_filename, code_filename):
natives1 = None
natives2 = None
try:
constructor1 = MyConstructor(Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb')))))))
natives1 = list(iter(constructor1))
if len(natives1) == 1:
natives1 = natives1[0]
natives2 = eval(file(code_filename, 'rb').read())
try:
self.failUnlessEqual(natives1, natives2)
except AssertionError:
if isinstance(natives1, dict):
natives1 = natives1.items()
natives1.sort()
natives1 = repr(natives1)
natives2 = natives2.items()
natives2.sort()
natives2 = repr(natives2)
if natives1 != natives2:
raise
except:
print
print "DATA:"
print file(data_filename, 'rb').read()
print "CODE:"
print file(code_filename, 'rb').read()
print "NATIVES1:", natives1
print "NATIVES2:", natives2
raise
TestTypes.add_tests('testTypes', '.data', '.code')