Changeset 54


Ignore:
Timestamp:
02/20/06 15:46:35 (9 years ago)
Author:
xi
Message:

Fix bugs in Resolver and add more tests.

Location:
branches/pyyaml3000
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/pyyaml3000/lib/yaml/resolver.py

    r53 r54  
    3939        elif isinstance(node, SequenceNode): 
    4040            self.resolve_sequence(path, node) 
    41             for index in len(node.value): 
     41            for index in range(len(node.value)): 
    4242                self.resolve_node(path+[node, index], node.value[index]) 
    4343        elif isinstance(node, MappingNode): 
     
    4747                self.resolve_node(path+[node, key], value) 
    4848 
    49     def resolve_scalar(self, node): 
     49    def resolve_scalar(self, path, node): 
    5050        if node.tag is None: 
    5151            node.tag = self.detect_scalar(node.value) 
     
    5353            node.tag = self.DEFAULT_SCALAR_TAG 
    5454 
    55     def resolve_sequence(self, node): 
     55    def resolve_sequence(self, path, node): 
    5656        if node.tag is None or node.tag == u'!': 
    5757            node.tag = self.DEFAULT_SEQUENCE_TAG 
    5858 
    59     def resolve_mapping(self, node): 
     59    def resolve_mapping(self, path, node): 
    6060        if node.tag is None or node.tag == u'!': 
    6161            node.tag = self.DEFAULT_MAPPING_TAG 
  • branches/pyyaml3000/tests/test_appliance.py

    r51 r54  
    299299        return self.events 
    300300 
     301    def get(self): 
     302        return self.events.pop(0) 
     303 
     304    def check(self, *choices): 
     305        for choice in choices: 
     306            if isinstance(self.events[0], choice): 
     307                return True 
     308        return False 
     309 
     310    def peek(self): 
     311        return self.events[0] 
     312 
  • branches/pyyaml3000/tests/test_structure.py

    r53 r54  
    55from yaml.scanner import Scanner 
    66from yaml.parser import * 
     7from yaml.composer import * 
     8from yaml.resolver import * 
     9from yaml.nodes import * 
    710 
    811class TestStructure(test_appliance.TestAppliance): 
     
    97100                pass 
    98101 
     102TestParser.add_tests('testParser', '.data', '.canonical') 
    99103 
    100 TestParser.add_tests('testParser', '.data', '.canonical') 
     104class TestResolver(test_appliance.TestAppliance): 
     105 
     106    def _testResolver(self, test_name, data_filename, canonical_filename): 
     107        nodes1 = None 
     108        nodes2 = None 
     109        try: 
     110            resolver1 = Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb')))))) 
     111            nodes1 = list(iter(resolver1)) 
     112            canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read()) 
     113            canonical.parse() 
     114            resolver2 = Resolver(Composer(canonical)) 
     115            nodes2 = list(iter(resolver2)) 
     116            self.failUnlessEqual(len(nodes1), len(nodes2)) 
     117            for node1, node2 in zip(nodes1, nodes2): 
     118                self._compare(node1, node2) 
     119        except: 
     120            print 
     121            print "DATA1:" 
     122            print file(data_filename, 'rb').read() 
     123            print "DATA2:" 
     124            print file(canonical_filename, 'rb').read() 
     125            print "NODES1:", nodes1 
     126            print "NODES2:", nodes2 
     127            raise 
     128 
     129    def _compare(self, node1, node2): 
     130        self.failUnlessEqual(node1.__class__, node2.__class__) 
     131        if isinstance(node1, ScalarNode): 
     132            #self.failUnlessEqual(node1.tag, node2.tag) 
     133            self.failUnlessEqual(node1.value, node2.value) 
     134        elif isinstance(node1, SequenceNode): 
     135            self.failUnlessEqual(len(node1.value), len(node2.value)) 
     136            for item1, item2 in zip(node1.value, node2.value): 
     137                self._compare(item1, item2) 
     138        elif isinstance(node1, MappingNode): 
     139            self.failUnlessEqual(len(node1.value), len(node2.value)) 
     140            for (key1, value1), (key2, value2) in zip(node1.value, node2.value): 
     141                self._compare(key1, key2) 
     142                self._compare(value1, value2) 
     143 
     144TestResolver.add_tests('testResolver', '.data', '.canonical') 
    101145 
    102146class TestParserOnCanonical(test_appliance.TestAppliance): 
Note: See TracChangeset for help on using the changeset viewer.