changeset 138:8ad716b4180d trunk

Add some more assertions to the XPath tests.
author cmlenz
date Wed, 09 Aug 2006 12:07:26 +0000
parents ac0bc4a6aeba
children 8332287b5508
files markup/eval.py markup/tests/path.py
diffstat 2 files changed, 84 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/markup/eval.py
+++ b/markup/eval.py
@@ -95,10 +95,7 @@
 
 
 def _compile(expr, filename=None, lineno=-1):
-    tree = parse(expr.source, 'eval')
-    xform = ExpressionASTTransformer()
-    tree = xform.visit(tree)
-
+    tree = ExpressionASTTransformer().visit(parse(expr.source, 'eval'))
     if isinstance(filename, unicode):
         # unicode file names not allowed for code objects
         filename = filename.encode('utf-8', 'replace')
@@ -149,6 +146,7 @@
             except (AttributeError, TypeError), e:
                 pass
 
+
 class ASTTransformer(object):
     """General purpose base class for AST transformations.
     
--- a/markup/tests/path.py
+++ b/markup/tests/path.py
@@ -79,17 +79,36 @@
         self.assertEqual('<elem/>', path.select(xml).render())
 
     def test_1step_attribute(self):
-        self.assertEqual('', Path('@foo').select(XML('<root/>')).render())
+        path = Path('@foo')
+        self.assertEqual('<Path "attribute::foo">', repr(path))
+        self.assertEqual('', path.select(XML('<root/>')).render())
+
         xml = XML('<root foo="bar"/>')
-        self.assertEqual('bar', Path('@foo').select(xml).render())
+        self.assertEqual('bar', path.select(xml).render())
+
+        path = Path('./@foo')
+        self.assertEqual('<Path "self::node()/attribute::foo">', repr(path))
         self.assertEqual('bar', Path('./@foo').select(xml).render())
 
     def test_1step_text(self):
         xml = XML('<root>Hey</root>')
-        self.assertEqual('Hey', Path('text()').select(xml).render())
-        self.assertEqual('Hey', Path('./text()').select(xml).render())
-        self.assertEqual('Hey', Path('//text()').select(xml).render())
-        self.assertEqual('Hey', Path('.//text()').select(xml).render())
+
+        path = Path('text()')
+        self.assertEqual('<Path "descendant::text()">', repr(path))
+        self.assertEqual('Hey', path.select(xml).render())
+
+        path = Path('./text()')
+        self.assertEqual('<Path "self::node()/child::text()">', repr(path))
+        self.assertEqual('Hey', path.select(xml).render())
+
+        path = Path('//text()')
+        self.assertEqual('<Path "descendant-or-self::node()/child::text()">',
+                         repr(path))
+        self.assertEqual('Hey', path.select(xml).render())
+
+        path = Path('.//text()')
+        self.assertEqual('<Path "self::node()/child::text()">', repr(path))
+        self.assertEqual('Hey', path.select(xml).render())
 
     def test_2step(self):
         xml = XML('<root><foo/><bar/></root>')
@@ -99,8 +118,14 @@
 
     def test_2step_complex(self):
         xml = XML('<root><foo><bar/></foo></root>')
-        self.assertEqual('<bar/>', Path('foo/bar').select(xml).render())
-        self.assertEqual('<bar/>', Path('foo/*').select(xml).render())
+
+        path = Path('foo/bar')
+        self.assertEqual('<Path "descendant::foo/child::bar">', repr(path))
+        self.assertEqual('<bar/>', path.select(xml).render())
+
+        path = Path('foo/*')
+        self.assertEqual('<Path "descendant::foo/child::*">', repr(path))
+        self.assertEqual('<bar/>', path.select(xml).render())
 
         xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>')
         self.assertEqual('<bar id="1"/><bar id="2"/>',
@@ -108,49 +133,81 @@
 
     def test_2step_text(self):
         xml = XML('<root><item>Foo</item></root>')
-        self.assertEqual('Foo', Path('item/text()').select(xml).render())
-        self.assertEqual('Foo', Path('*/text()').select(xml).render())
-        self.assertEqual('Foo', Path('//text()').select(xml).render())
+
+        path = Path('item/text()')
+        self.assertEqual('<Path "descendant::item/child::text()">', repr(path))
+        self.assertEqual('Foo', path.select(xml).render())
+
+        path = Path('*/text()')
+        self.assertEqual('<Path "descendant::*/child::text()">', repr(path))
+        self.assertEqual('Foo', path.select(xml).render())
+
+        path = Path('//text()')
+        self.assertEqual('<Path "descendant-or-self::node()/child::text()">',
+                         repr(path))
+        self.assertEqual('Foo', path.select(xml).render())
+
         xml = XML('<root><item>Foo</item><item>Bar</item></root>')
         self.assertEqual('FooBar', Path('item/text()').select(xml).render())
 
     def test_3step(self):
         xml = XML('<root><foo><bar/></foo></root>')
-        self.assertEqual('<bar/>', Path('root/foo/*').select(xml).render())
+        path = Path('root/foo/*')
+        self.assertEqual('<Path "descendant::root/child::foo/child::*">',
+                         repr(path))
+        self.assertEqual('<bar/>', path.select(xml).render())
 
     def test_3step_complex(self):
         xml = XML('<root><foo><bar/></foo></root>')
-        self.assertEqual('<bar/>', Path('*/bar').select(xml).render())
+        path = Path('*/bar')
+        self.assertEqual('<Path "descendant::*/child::bar">', repr(path))
+        self.assertEqual('<bar/>', path.select(xml).render())
+
         xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>')
+        path = Path('//bar')
+        self.assertEqual('<Path "descendant-or-self::node()/child::bar">',
+                         repr(path))
         self.assertEqual('<bar id="1"/><bar id="2"/>',
-                         Path('//bar').select(xml).render())
+                         path.select(xml).render())
 
     def test_node_type_comment(self):
         xml = XML('<root><!-- commented --></root>')
-        self.assertEqual('<!-- commented -->',
-                         Path('comment()').select(xml).render())
+        path = Path('comment()')
+        self.assertEqual('<Path "descendant::comment()">', repr(path))
+        self.assertEqual('<!-- commented -->', path.select(xml).render())
 
     def test_node_type_text(self):
         xml = XML('<root>Some text <br/>in here.</root>')
-        self.assertEqual('Some text in here.',
-                         Path('text()').select(xml).render())
+        path = Path('text()')
+        self.assertEqual('<Path "descendant::text()">', repr(path))
+        self.assertEqual('Some text in here.', path.select(xml).render())
 
     def test_node_type_node(self):
         xml = XML('<root>Some text <br/>in here.</root>')
-        self.assertEqual('Some text <br/>in here.',
-                         Path('node()').select(xml).render())
+        path = Path('node()')
+        self.assertEqual('<Path "descendant::node()">', repr(path))
+        self.assertEqual('Some text <br/>in here.', path.select(xml).render())
 
     def test_node_type_processing_instruction(self):
         xml = XML('<?python x = 2 * 3 ?><root><?php echo("x") ?></root>')
+
+        path = Path('processing-instruction()')
+        self.assertEqual('<Path "descendant::processing-instruction()">',
+                         repr(path))
         self.assertEqual('<?python x = 2 * 3 ?><?php echo("x") ?>',
-                         Path('processing-instruction()').select(xml).render())
-        self.assertEqual('<?php echo("x") ?>',
-                         Path('processing-instruction("php")').select(xml).render())
+                         path.select(xml).render())
+
+        path = Path('processing-instruction("php")')
+        self.assertEqual('<Path "descendant::processing-instruction(\"php\")">',
+                         repr(path))
+        self.assertEqual('<?php echo("x") ?>', path.select(xml).render())
 
     def test_simple_union(self):
         xml = XML('<root>Oh <foo>my</foo></root>')
-        self.assertEqual('Oh <foo>my</foo>',
-                         Path('*|text()').select(xml).render())
+        path = Path('*|text()')
+        self.assertEqual('<Path "descendant::*|descendant::text()">',
+                         repr(path))
+        self.assertEqual('Oh <foo>my</foo>', path.select(xml).render())
 
     def test_predicate_name(self):
         xml = XML('<root><foo/><bar/></root>')
Copyright (C) 2012-2017 Edgewall Software