import test_appliance from yaml import * class MyLoader(Loader): pass class MyDumper(Dumper): pass add_path_resolver(u'!root', [], Loader=MyLoader, Dumper=MyDumper) add_path_resolver(u'!root/scalar', [], str, Loader=MyLoader, Dumper=MyDumper) add_path_resolver(u'!root/key11/key12/*', ['key11', 'key12'], Loader=MyLoader, Dumper=MyDumper) add_path_resolver(u'!root/key21/1/*', ['key21', 1], Loader=MyLoader, Dumper=MyDumper) add_path_resolver(u'!root/key31/*/*/key14/map', ['key31', None, None, 'key14'], dict, Loader=MyLoader, Dumper=MyDumper) class TestResolver(test_appliance.TestAppliance): def _testImplicitResolver(self, test_name, data_filename, detect_filename): node = None correct_tag = None try: correct_tag = file(detect_filename, 'rb').read().strip() node = compose(file(data_filename, 'rb')) self.failUnless(isinstance(node, SequenceNode)) for scalar in node.value: self.failUnless(isinstance(scalar, ScalarNode)) self.failUnlessEqual(scalar.tag, correct_tag) except: print print "DATA:" print file(data_filename, 'rb').read() print "CORRECT_TAG:" print file(detect_filename, 'rb').read() print "ROOT NODE:", node print "SCALAR NODES:", node.value raise def _testPathResolverLoader(self, test_name, data_filename, path_filename): #print serialize_all(compose_all(file(data_filename, 'rb').read(), Loader=MyLoader)) nodes1 = compose_all(file(data_filename, 'rb').read(), Loader=MyLoader) nodes2 = compose_all(file(path_filename, 'rb').read()) for node1, node2 in zip(nodes1, nodes2): self.failUnlessEqual(self._convert(node1), self._convert(node2)) def _testPathResolverDumper(self, test_name, data_filename, path_filename): for filename in [data_filename, path_filename]: output = serialize_all(compose_all(file(filename, 'rb').read()), Dumper=MyDumper) #print output nodes1 = compose_all(output) nodes2 = compose_all(file(data_filename, 'rb').read()) for node1, node2 in zip(nodes1, nodes2): self.failUnlessEqual(self._convert(node1), self._convert(node2)) def _convert(self, node): if isinstance(node, ScalarNode): return node.tag, node.value elif isinstance(node, SequenceNode): value = [] for item in node.value: value.append(self._convert(item)) return node.tag, value elif isinstance(node, MappingNode): value = [] for key, item in node.value: value.append((self._convert(key), self._convert(item))) value.sort() return node.tag, value TestResolver.add_tests('testImplicitResolver', '.data', '.detect') TestResolver.add_tests('testPathResolverLoader', '.data', '.path') TestResolver.add_tests('testPathResolverDumper', '.data', '.path')