Mercurial > genshi > mirror
comparison markup/tests/path.py @ 106:f9473bdc93b2 trunk
Complete rewrite of the XPath parsing, which was a mess before. Closes #19.
author | cmlenz |
---|---|
date | Fri, 28 Jul 2006 16:51:35 +0000 |
parents | 59eb24184e9c |
children | 2368c3becc52 |
comparison
equal
deleted
inserted
replaced
105:71f3db26eecb | 106:f9473bdc93b2 |
---|---|
22 | 22 |
23 def test_1step(self): | 23 def test_1step(self): |
24 xml = XML('<root><elem/></root>') | 24 xml = XML('<root><elem/></root>') |
25 self.assertEqual('<elem/>', Path('elem').select(xml).render()) | 25 self.assertEqual('<elem/>', Path('elem').select(xml).render()) |
26 self.assertEqual('<elem/>', Path('//elem').select(xml).render()) | 26 self.assertEqual('<elem/>', Path('//elem').select(xml).render()) |
27 | 27 |
28 def test_1step_self(self): | |
29 xml = XML('<root><elem/></root>') | |
30 self.assertEqual('<root><elem/></root>', Path('.').select(xml).render()) | |
31 | |
28 def test_1step_wildcard(self): | 32 def test_1step_wildcard(self): |
29 xml = XML('<root><elem/></root>') | 33 xml = XML('<root><elem/></root>') |
30 self.assertEqual('<elem/>', Path('*').select(xml).render()) | 34 self.assertEqual('<elem/>', Path('*').select(xml).render()) |
31 self.assertEqual('<elem/>', Path('//*').select(xml).render()) | 35 self.assertEqual('<elem/>', Path('//*').select(xml).render()) |
32 | 36 |
33 def test_1step_attribute(self): | 37 def test_1step_attribute(self): |
34 path = Path('@foo') | 38 path = Path('@foo') |
35 self.assertEqual('', path.select(XML('<root/>')).render()) | 39 self.assertEqual('', path.select(XML('<root/>')).render()) |
36 self.assertEqual('bar', path.select(XML('<root foo="bar"/>')).render()) | 40 self.assertEqual('bar', path.select(XML('<root foo="bar"/>')).render()) |
37 | 41 |
65 xml = XML('<root><foo><bar/></foo></root>') | 69 xml = XML('<root><foo><bar/></foo></root>') |
66 self.assertEqual('<bar/>', Path('root/foo/*').select(xml).render()) | 70 self.assertEqual('<bar/>', Path('root/foo/*').select(xml).render()) |
67 | 71 |
68 def test_3step_complex(self): | 72 def test_3step_complex(self): |
69 xml = XML('<root><foo><bar/></foo></root>') | 73 xml = XML('<root><foo><bar/></foo></root>') |
70 self.assertEqual('<bar/>', Path('root/*/bar').select(xml).render()) | 74 self.assertEqual('<bar/>', Path('*/bar').select(xml).render()) |
71 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') | 75 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') |
72 self.assertEqual('<bar id="1"/><bar id="2"/>', | 76 self.assertEqual('<bar id="1"/><bar id="2"/>', |
73 Path('root//bar').select(xml).render()) | 77 Path('//bar').select(xml).render()) |
78 | |
79 def test_node_type_comment(self): | |
80 xml = XML('<root><!-- commented --></root>') | |
81 self.assertEqual('<!-- commented -->', | |
82 Path('comment()').select(xml).render()) | |
83 | |
84 def test_node_type_text(self): | |
85 xml = XML('<root>Some text <br/>in here.</root>') | |
86 self.assertEqual('Some text in here.', | |
87 Path('text()').select(xml).render()) | |
88 | |
89 def test_node_type_node(self): | |
90 xml = XML('<root>Some text <br/>in here.</root>') | |
91 self.assertEqual('<root>Some text <br/>in here.</root>', | |
92 Path('node()').select(xml).render()) | |
93 | |
94 def test_node_type_processing_instruction(self): | |
95 xml = XML('<?python x = 2 * 3 ?><root><?php echo("x") ?></root>') | |
96 self.assertEqual('<?python x = 2 * 3 ?><?php echo("x") ?>', | |
97 Path('processing-instruction()').select(xml).render()) | |
98 self.assertEqual('<?php echo("x") ?>', | |
99 Path('processing-instruction("php")').select(xml).render()) | |
100 | |
101 def test_simple_union(self): | |
102 xml = XML('<root>Oh <foo>my</foo></root>') | |
103 self.assertEqual('Oh <foo>my</foo>', | |
104 Path('*|text()').select(xml).render()) | |
74 | 105 |
75 def test_predicate_attr(self): | 106 def test_predicate_attr(self): |
76 xml = XML('<root><item/><item important="very"/></root>') | 107 xml = XML('<root><item/><item important="very"/></root>') |
77 self.assertEqual('<item important="very"/>', | 108 self.assertEqual('<item important="very"/>', |
78 Path('root/item[@important]').select(xml).render()) | 109 Path('root/item[@important]').select(xml).render()) |
79 self.assertEqual('<item important="very"/>', | 110 self.assertEqual('<item important="very"/>', |
80 Path('root/item[@important="very"]').select(xml).render()) | 111 Path('root/item[@important="very"]').select(xml).render()) |
81 | 112 |
113 def test_predicate_attr_equality(self): | |
82 xml = XML('<root><item/><item important="notso"/></root>') | 114 xml = XML('<root><item/><item important="notso"/></root>') |
83 self.assertEqual('', | 115 self.assertEqual('', |
84 Path('root/item[@important="very"]').select(xml).render()) | 116 Path('root/item[@important="very"]').select(xml).render()) |
85 self.assertEqual('<item/><item important="notso"/>', | 117 self.assertEqual('<item/><item important="notso"/>', |
86 Path('root/item[@important!="very"]').select(xml).render()) | 118 Path('root/item[@important!="very"]').select(xml).render()) |
87 | 119 |
120 def test_predicate_attr_and(self): | |
121 xml = XML('<root><item/><item important="very"/></root>') | |
122 path = Path('root/item[@important and @important="very"]') | |
123 self.assertEqual('<item important="very"/>', path.select(xml).render()) | |
124 path = Path('root/item[@important and @important="notso"]') | |
125 self.assertEqual('', path.select(xml).render()) | |
126 | |
127 def test_predicate_attr_or(self): | |
128 xml = XML('<root><item/><item important="very"/></root>') | |
129 path = Path('root/item[@urgent or @important]') | |
130 self.assertEqual('<item important="very"/>', path.select(xml).render()) | |
131 path = Path('root/item[@urgent or @notso]') | |
132 self.assertEqual('', path.select(xml).render()) | |
133 | |
88 | 134 |
89 def suite(): | 135 def suite(): |
90 suite = unittest.TestSuite() | 136 suite = unittest.TestSuite() |
91 suite.addTest(doctest.DocTestSuite(Path.__module__)) | 137 #suite.addTest(doctest.DocTestSuite(Path.__module__)) |
92 suite.addTest(unittest.makeSuite(PathTestCase, 'test')) | 138 suite.addTest(unittest.makeSuite(PathTestCase, 'test')) |
93 return suite | 139 return suite |
94 | 140 |
95 if __name__ == '__main__': | 141 if __name__ == '__main__': |
96 unittest.main(defaultTest='suite') | 142 unittest.main(defaultTest='suite') |