Mercurial > genshi > genshi-test
comparison markup/tests/path.py @ 145:56d534eb53f9
* Fix error in expression evaluation when the expression evaluates to an iterable that does not produce event tuples.
* The first location step in path expressions longer assumes the `descendant::` axis, but rather the `child::` axis.
* Import cleanups.
author | cmlenz |
---|---|
date | Tue, 15 Aug 2006 09:52:47 +0000 |
parents | d91e1e822969 |
children | 50d4b08017df |
comparison
equal
deleted
inserted
replaced
144:28b56f09a7e1 | 145:56d534eb53f9 |
---|---|
29 | 29 |
30 def test_1step(self): | 30 def test_1step(self): |
31 xml = XML('<root><elem/></root>') | 31 xml = XML('<root><elem/></root>') |
32 | 32 |
33 path = Path('elem') | 33 path = Path('elem') |
34 self.assertEqual('<Path "descendant::elem">', repr(path)) | 34 self.assertEqual('<Path "child::elem">', repr(path)) |
35 self.assertEqual('<elem/>', path.select(xml).render()) | 35 self.assertEqual('<elem/>', path.select(xml).render()) |
36 | 36 |
37 path = Path('child::elem') | 37 path = Path('child::elem') |
38 self.assertEqual('<Path "child::elem">', repr(path)) | 38 self.assertEqual('<Path "child::elem">', repr(path)) |
39 self.assertEqual('<elem/>', path.select(xml).render()) | 39 self.assertEqual('<elem/>', path.select(xml).render()) |
60 | 60 |
61 def test_1step_wildcard(self): | 61 def test_1step_wildcard(self): |
62 xml = XML('<root><elem/></root>') | 62 xml = XML('<root><elem/></root>') |
63 | 63 |
64 path = Path('*') | 64 path = Path('*') |
65 self.assertEqual('<Path "descendant::*">', repr(path)) | 65 self.assertEqual('<Path "child::*">', repr(path)) |
66 self.assertEqual('<elem/>', path.select(xml).render()) | 66 self.assertEqual('<elem/>', path.select(xml).render()) |
67 | 67 |
68 path = Path('child::*') | 68 path = Path('child::*') |
69 self.assertEqual('<Path "child::*">', repr(path)) | 69 self.assertEqual('<Path "child::*">', repr(path)) |
70 self.assertEqual('<elem/>', path.select(xml).render()) | 70 self.assertEqual('<elem/>', path.select(xml).render()) |
92 | 92 |
93 def test_1step_text(self): | 93 def test_1step_text(self): |
94 xml = XML('<root>Hey</root>') | 94 xml = XML('<root>Hey</root>') |
95 | 95 |
96 path = Path('text()') | 96 path = Path('text()') |
97 self.assertEqual('<Path "descendant::text()">', repr(path)) | 97 self.assertEqual('<Path "child::text()">', repr(path)) |
98 self.assertEqual('Hey', path.select(xml).render()) | 98 self.assertEqual('Hey', path.select(xml).render()) |
99 | 99 |
100 path = Path('./text()') | 100 path = Path('./text()') |
101 self.assertEqual('<Path "self::node()/child::text()">', repr(path)) | 101 self.assertEqual('<Path "self::node()/child::text()">', repr(path)) |
102 self.assertEqual('Hey', path.select(xml).render()) | 102 self.assertEqual('Hey', path.select(xml).render()) |
114 xml = XML('<root><foo/><bar/></root>') | 114 xml = XML('<root><foo/><bar/></root>') |
115 self.assertEqual('<foo/><bar/>', Path('*').select(xml).render()) | 115 self.assertEqual('<foo/><bar/>', Path('*').select(xml).render()) |
116 self.assertEqual('<bar/>', Path('bar').select(xml).render()) | 116 self.assertEqual('<bar/>', Path('bar').select(xml).render()) |
117 self.assertEqual('', Path('baz').select(xml).render()) | 117 self.assertEqual('', Path('baz').select(xml).render()) |
118 | 118 |
119 def test_2step_attribute(self): | |
120 xml = XML('<elem class="x"><span id="joe">Hey Joe</span></elem>') | |
121 #self.assertEqual('x', Path('@*').select(xml).render()) | |
122 #self.assertEqual('x', Path('./@*').select(xml).render()) | |
123 #self.assertEqual('xjoe', Path('//@*').select(xml).render()) | |
124 self.assertEqual('joe', Path('*/@*').select(xml).render()) | |
125 | |
126 xml = XML('<elem><foo id="1"/>foo id="2"/></elem>') | |
127 #self.assertEqual('', Path('@*').select(xml).render()) | |
128 #self.assertEqual('12', Path('foo/@*').select(xml).render()) | |
129 | |
119 def test_2step_complex(self): | 130 def test_2step_complex(self): |
120 xml = XML('<root><foo><bar/></foo></root>') | 131 xml = XML('<root><foo><bar/></foo></root>') |
121 | 132 |
122 path = Path('foo/bar') | 133 path = Path('foo/bar') |
123 self.assertEqual('<Path "descendant::foo/child::bar">', repr(path)) | 134 self.assertEqual('<Path "child::foo/child::bar">', repr(path)) |
124 self.assertEqual('<bar/>', path.select(xml).render()) | 135 self.assertEqual('<bar/>', path.select(xml).render()) |
136 | |
137 path = Path('./bar') | |
138 self.assertEqual('<Path "self::node()/child::bar">', repr(path)) | |
139 #self.assertEqual('', path.select(xml).render()) | |
125 | 140 |
126 path = Path('foo/*') | 141 path = Path('foo/*') |
127 self.assertEqual('<Path "descendant::foo/child::*">', repr(path)) | 142 self.assertEqual('<Path "child::foo/child::*">', repr(path)) |
128 self.assertEqual('<bar/>', path.select(xml).render()) | 143 self.assertEqual('<bar/>', path.select(xml).render()) |
129 | 144 |
130 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') | 145 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') |
131 self.assertEqual('<bar id="1"/><bar id="2"/>', | 146 path = Path('./bar') |
132 Path('bar').select(xml).render()) | 147 self.assertEqual('<Path "self::node()/child::bar">', repr(path)) |
148 #self.assertEqual('<bar id="2"/>', path.select(xml).render()) | |
133 | 149 |
134 def test_2step_text(self): | 150 def test_2step_text(self): |
135 xml = XML('<root><item>Foo</item></root>') | 151 xml = XML('<root><item>Foo</item></root>') |
136 | 152 |
137 path = Path('item/text()') | 153 path = Path('item/text()') |
138 self.assertEqual('<Path "descendant::item/child::text()">', repr(path)) | 154 self.assertEqual('<Path "child::item/child::text()">', repr(path)) |
139 self.assertEqual('Foo', path.select(xml).render()) | 155 self.assertEqual('Foo', path.select(xml).render()) |
140 | 156 |
141 path = Path('*/text()') | 157 path = Path('*/text()') |
142 self.assertEqual('<Path "descendant::*/child::text()">', repr(path)) | 158 self.assertEqual('<Path "child::*/child::text()">', repr(path)) |
143 self.assertEqual('Foo', path.select(xml).render()) | 159 self.assertEqual('Foo', path.select(xml).render()) |
144 | 160 |
145 path = Path('//text()') | 161 path = Path('//text()') |
146 self.assertEqual('<Path "descendant-or-self::node()/child::text()">', | 162 self.assertEqual('<Path "descendant-or-self::node()/child::text()">', |
147 repr(path)) | 163 repr(path)) |
148 self.assertEqual('Foo', path.select(xml).render()) | 164 self.assertEqual('Foo', path.select(xml).render()) |
149 | 165 |
166 path = Path('./text()') | |
167 self.assertEqual('<Path "self::node()/child::text()">', repr(path)) | |
168 #self.assertEqual('', path.select(xml).render()) | |
169 | |
150 xml = XML('<root><item>Foo</item><item>Bar</item></root>') | 170 xml = XML('<root><item>Foo</item><item>Bar</item></root>') |
151 self.assertEqual('FooBar', Path('item/text()').select(xml).render()) | 171 path = Path('item/text()') |
172 self.assertEqual('<Path "child::item/child::text()">', repr(path)) | |
173 self.assertEqual('FooBar', path.select(xml).render()) | |
174 | |
175 xml = XML('<root><item>Foo</item><item>Bar</item></root>') | |
176 self.assertEqual('FooBar', path.select(xml).render()) | |
152 | 177 |
153 def test_3step(self): | 178 def test_3step(self): |
154 xml = XML('<root><foo><bar/></foo></root>') | 179 xml = XML('<root><foo><bar/></foo></root>') |
155 path = Path('root/foo/*') | 180 path = Path('root/foo/*') |
156 self.assertEqual('<Path "descendant::root/child::foo/child::*">', | 181 self.assertEqual('<Path "child::root/child::foo/child::*">', |
157 repr(path)) | 182 repr(path)) |
158 self.assertEqual('<bar/>', path.select(xml).render()) | 183 self.assertEqual('<bar/>', path.select(xml).render()) |
159 | 184 |
160 def test_3step_complex(self): | 185 def test_3step_complex(self): |
161 xml = XML('<root><foo><bar/></foo></root>') | 186 xml = XML('<root><foo><bar/></foo></root>') |
162 path = Path('*/bar') | 187 path = Path('*/bar') |
163 self.assertEqual('<Path "descendant::*/child::bar">', repr(path)) | 188 self.assertEqual('<Path "child::*/child::bar">', repr(path)) |
164 self.assertEqual('<bar/>', path.select(xml).render()) | 189 self.assertEqual('<bar/>', path.select(xml).render()) |
165 | 190 |
166 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') | 191 xml = XML('<root><foo><bar id="1"/></foo><bar id="2"/></root>') |
167 path = Path('//bar') | 192 path = Path('//bar') |
168 self.assertEqual('<Path "descendant-or-self::node()/child::bar">', | 193 self.assertEqual('<Path "descendant-or-self::node()/child::bar">', |
171 path.select(xml).render()) | 196 path.select(xml).render()) |
172 | 197 |
173 def test_node_type_comment(self): | 198 def test_node_type_comment(self): |
174 xml = XML('<root><!-- commented --></root>') | 199 xml = XML('<root><!-- commented --></root>') |
175 path = Path('comment()') | 200 path = Path('comment()') |
176 self.assertEqual('<Path "descendant::comment()">', repr(path)) | 201 self.assertEqual('<Path "child::comment()">', repr(path)) |
177 self.assertEqual('<!-- commented -->', path.select(xml).render()) | 202 self.assertEqual('<!-- commented -->', path.select(xml).render()) |
178 | 203 |
179 def test_node_type_text(self): | 204 def test_node_type_text(self): |
180 xml = XML('<root>Some text <br/>in here.</root>') | 205 xml = XML('<root>Some text <br/>in here.</root>') |
181 path = Path('text()') | 206 path = Path('text()') |
182 self.assertEqual('<Path "descendant::text()">', repr(path)) | 207 self.assertEqual('<Path "child::text()">', repr(path)) |
183 self.assertEqual('Some text in here.', path.select(xml).render()) | 208 self.assertEqual('Some text in here.', path.select(xml).render()) |
184 | 209 |
185 def test_node_type_node(self): | 210 def test_node_type_node(self): |
186 xml = XML('<root>Some text <br/>in here.</root>') | 211 xml = XML('<root>Some text <br/>in here.</root>') |
187 path = Path('node()') | 212 path = Path('node()') |
188 self.assertEqual('<Path "descendant::node()">', repr(path)) | 213 self.assertEqual('<Path "child::node()">', repr(path)) |
189 self.assertEqual('Some text <br/>in here.', path.select(xml).render()) | 214 self.assertEqual('Some text <br/>in here.', path.select(xml).render()) |
190 | 215 |
191 def test_node_type_processing_instruction(self): | 216 def test_node_type_processing_instruction(self): |
192 xml = XML('<?python x = 2 * 3 ?><root><?php echo("x") ?></root>') | 217 xml = XML('<?python x = 2 * 3 ?><root><?php echo("x") ?></root>') |
193 | 218 |
194 path = Path('processing-instruction()') | 219 path = Path('processing-instruction()') |
195 self.assertEqual('<Path "descendant::processing-instruction()">', | 220 self.assertEqual('<Path "child::processing-instruction()">', |
196 repr(path)) | 221 repr(path)) |
197 self.assertEqual('<?python x = 2 * 3 ?><?php echo("x") ?>', | 222 self.assertEqual('<?python x = 2 * 3 ?><?php echo("x") ?>', |
198 path.select(xml).render()) | 223 path.select(xml).render()) |
199 | 224 |
200 path = Path('processing-instruction("php")') | 225 path = Path('processing-instruction("php")') |
201 self.assertEqual('<Path "descendant::processing-instruction(\"php\")">', | 226 self.assertEqual('<Path "child::processing-instruction(\"php\")">', |
202 repr(path)) | 227 repr(path)) |
203 self.assertEqual('<?php echo("x") ?>', path.select(xml).render()) | 228 self.assertEqual('<?php echo("x") ?>', path.select(xml).render()) |
204 | 229 |
205 def test_simple_union(self): | 230 def test_simple_union(self): |
206 xml = XML('<root>Oh <foo>my</foo></root>') | 231 xml = XML('<root>Oh <foo>my</foo></root>') |
207 path = Path('*|text()') | 232 path = Path('*|text()') |
208 self.assertEqual('<Path "descendant::*|descendant::text()">', | 233 self.assertEqual('<Path "child::*|child::text()">', |
209 repr(path)) | 234 repr(path)) |
210 self.assertEqual('Oh <foo>my</foo>', path.select(xml).render()) | 235 self.assertEqual('Oh <foo>my</foo>', path.select(xml).render()) |
211 | 236 |
212 def test_predicate_name(self): | 237 def test_predicate_name(self): |
213 xml = XML('<root><foo/><bar/></root>') | 238 xml = XML('<root><foo/><bar/></root>') |