source: branches/pyyaml3000/tests/test_structure.py @ 46

Revision 46, 2.9 KB checked in by xi, 8 years ago (diff)

Some renaming.

RevLine 
[44]1
2import test_appliance
3
[46]4from yaml.reader import Reader
5from yaml.scanner import Scanner
[44]6from yaml.parser import *
7
8class TestStructure(test_appliance.TestAppliance):
9
10    def _testStructure(self, test_name, data_filename, structure_filename):
11        node1 = None
12        node2 = eval(file(structure_filename, 'rb').read())
13        try:
[46]14            parser = Parser(Scanner(Reader(file(data_filename, 'rb'))))
[44]15            node1 = parser.parse()
16            node1 = [self._convert(n) for n in node1]
17            if len(node1) == 1:
18                node1 = node1[0]
19            self.failUnlessEqual(node1, node2)
20        except:
21            print
22            print "DATA:"
23            print file(data_filename, 'rb').read()
24            print "NODE1:", node1
25            print "NODE2:", node2
26            raise
27
28    def _convert(self, node):
29        if isinstance(node, ScalarNode):
30            return True
31        elif isinstance(node, SequenceNode):
32            sequence = []
33            for item in node.value:
34                sequence.append(self._convert(item))
35            return sequence
36        elif isinstance(node, MappingNode):
37            mapping = []
38            for key, value in node.value:
39                mapping.append((self._convert(key), self._convert(value)))
40            return mapping
41        elif isinstance(node, AliasNode):
42            return '*'
43        else:
44            return node
45
46TestStructure.add_tests('testStructure', '.data', '.structure')
47
48class TestParser(test_appliance.TestAppliance):
49
50    def _testParser(self, test_name, data_filename, canonical_filename):
51        documents1 = None
52        documents2 = None
53        try:
[46]54            parser = Parser(Scanner(Reader(file(data_filename, 'rb'))))
[44]55            documents1 = parser.parse()
56            canonical = test_appliance.CanonicalParser(canonical_filename, file(canonical_filename, 'rb').read())
57            documents2 = canonical.parse()
58            self._compare(documents1, documents2)
59        except:
60            print
61            print "DATA1:"
62            print file(data_filename, 'rb').read()
63            print "DATA2:"
64            print file(canonical_filename, 'rb').read()
65            print "DOCUMENTS1:", documents1
66            print "DOCUMENTS2:", documents2
67            raise
68
69    def _compare(self, value1, value2):
70        if value1 is None and hasattr(value2, 'tag') and value2.tag == 'tag:yaml.org,2002:null':
71            return
72        self.failUnlessEqual(type(value1), type(value2))
73        if isinstance(value1, list) or isinstance(value1, tuple):
74            self.failUnlessEqual(len(value1), len(value2))
75            for item1, item2 in zip(value1, value2):
76                self._compare(item1, item2)
77        else:
78            self.failUnlessEqual(value1.__class__.__name__, value2.__class__.__name__)
79            if isinstance(value1, SequenceNode) or isinstance(value1, MappingNode):
80                self._compare(value1.value, value2.value)
81
82TestParser.add_tests('testParser', '.data', '.canonical')
83
Note: See TracBrowser for help on using the repository browser.