Index: /branches/pyyaml3000/tests/test_appliance.py
===================================================================
--- /branches/pyyaml3000/tests/test_appliance.py	(revision 51)
+++ /branches/pyyaml3000/tests/test_appliance.py	(revision 54)
@@ -299,2 +299,14 @@
         return self.events
 
+    def get(self):
+        return self.events.pop(0)
+
+    def check(self, *choices):
+        for choice in choices:
+            if isinstance(self.events[0], choice):
+                return True
+        return False
+
+    def peek(self):
+        return self.events[0]
+
Index: /branches/pyyaml3000/tests/test_structure.py
===================================================================
--- /branches/pyyaml3000/tests/test_structure.py	(revision 53)
+++ /branches/pyyaml3000/tests/test_structure.py	(revision 54)
@@ -5,4 +5,7 @@
 from yaml.scanner import Scanner
 from yaml.parser import *
+from yaml.composer import *
+from yaml.resolver import *
+from yaml.nodes import *
 
 class TestStructure(test_appliance.TestAppliance):
@@ -97,6 +100,47 @@
                 pass
 
+TestParser.add_tests('testParser', '.data', '.canonical')
 
-TestParser.add_tests('testParser', '.data', '.canonical')
+class TestResolver(test_appliance.TestAppliance):
+
+    def _testResolver(self, test_name, data_filename, canonical_filename):
+        nodes1 = None
+        nodes2 = None
+        try:
+            resolver1 = Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb'))))))
+            nodes1 = list(iter(resolver1))
+            canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read())
+            canonical.parse()
+            resolver2 = Resolver(Composer(canonical))
+            nodes2 = list(iter(resolver2))
+            self.failUnlessEqual(len(nodes1), len(nodes2))
+            for node1, node2 in zip(nodes1, nodes2):
+                self._compare(node1, node2)
+        except:
+            print
+            print "DATA1:"
+            print file(data_filename, 'rb').read()
+            print "DATA2:"
+            print file(canonical_filename, 'rb').read()
+            print "NODES1:", nodes1
+            print "NODES2:", nodes2
+            raise
+
+    def _compare(self, node1, node2):
+        self.failUnlessEqual(node1.__class__, node2.__class__)
+        if isinstance(node1, ScalarNode):
+            #self.failUnlessEqual(node1.tag, node2.tag)
+            self.failUnlessEqual(node1.value, node2.value)
+        elif isinstance(node1, SequenceNode):
+            self.failUnlessEqual(len(node1.value), len(node2.value))
+            for item1, item2 in zip(node1.value, node2.value):
+                self._compare(item1, item2)
+        elif isinstance(node1, MappingNode):
+            self.failUnlessEqual(len(node1.value), len(node2.value))
+            for (key1, value1), (key2, value2) in zip(node1.value, node2.value):
+                self._compare(key1, key2)
+                self._compare(value1, value2)
+
+TestResolver.add_tests('testResolver', '.data', '.canonical')
 
 class TestParserOnCanonical(test_appliance.TestAppliance):
Index: /branches/pyyaml3000/lib/yaml/resolver.py
===================================================================
--- /branches/pyyaml3000/lib/yaml/resolver.py	(revision 53)
+++ /branches/pyyaml3000/lib/yaml/resolver.py	(revision 54)
@@ -39,5 +39,5 @@
         elif isinstance(node, SequenceNode):
             self.resolve_sequence(path, node)
-            for index in len(node.value):
+            for index in range(len(node.value)):
                 self.resolve_node(path+[node, index], node.value[index])
         elif isinstance(node, MappingNode):
@@ -47,5 +47,5 @@
                 self.resolve_node(path+[node, key], value)
 
-    def resolve_scalar(self, node):
+    def resolve_scalar(self, path, node):
         if node.tag is None:
             node.tag = self.detect_scalar(node.value)
@@ -53,9 +53,9 @@
             node.tag = self.DEFAULT_SCALAR_TAG
 
-    def resolve_sequence(self, node):
+    def resolve_sequence(self, path, node):
         if node.tag is None or node.tag == u'!':
             node.tag = self.DEFAULT_SEQUENCE_TAG
 
-    def resolve_mapping(self, node):
+    def resolve_mapping(self, path, node):
         if node.tag is None or node.tag == u'!':
             node.tag = self.DEFAULT_MAPPING_TAG
