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>')
Copyright (C) 2012-2017 Edgewall Software