diff markup/tests/path.py @ 228:f79b20a50919

Add support for position predicates in XPath expressions.
author cmlenz
date Fri, 08 Sep 2006 10:51:14 +0000
parents e4dad1145f84
children
line wrap: on
line diff
--- a/markup/tests/path.py
+++ b/markup/tests/path.py
@@ -27,9 +27,6 @@
         self.assertRaises(PathSyntaxError, Path, '..')
         self.assertRaises(PathSyntaxError, Path, 'parent::ma')
 
-    def test_error_position_predicate(self):
-        self.assertRaises(PathSyntaxError, Path, 'item[0]')
-
     def test_1step(self):
         xml = XML('<root><elem/></root>')
 
@@ -407,6 +404,23 @@
         self.assertEqual('<foo>bar</foo>',
                          path.select(xml, variables=variables).render())
 
+    def test_predicate_position(self):
+        xml = XML('<root><foo id="a1"/><foo id="a2"/><foo id="a3"/></root>')
+        path = Path('*[2]')
+        self.assertEqual('<foo id="a2"/>', path.select(xml).render())
+
+    def test_predicate_attr_and_position(self):
+        xml = XML('<root><foo/><foo id="a1"/><foo id="a2"/></root>')
+        path = Path('*[@id][2]')
+        self.assertEqual('<foo id="a2"/>', path.select(xml).render())
+
+    def test_predicate_position_and_attr(self):
+        xml = XML('<root><foo/><foo id="a1"/><foo id="a2"/></root>')
+        path = Path('*[1][@id]')
+        self.assertEqual('', path.select(xml).render())
+        path = Path('*[2][@id]')
+        self.assertEqual('<foo id="a1"/>', path.select(xml).render())
+
     def test_name_with_namespace(self):
         xml = XML('<root xmlns:f="FOO"><f:foo>bar</f:foo></root>')
         path = Path('f:foo')
Copyright (C) 2012-2017 Edgewall Software