2 // XPathScannerTests.cs
\r
5 // Jason Diamond (jason@injektilo.org)
\r
7 // (C) 2002 Jason Diamond http://injektilo.org/
\r
11 using System.Xml.XPath;
\r
13 using NUnit.Framework;
\r
15 namespace Ximian.Mono.Tests
\r
17 public class XPathScannerTests : TestCase
\r
19 public XPathScannerTests () : base ("Ximian.Mono.Tests.XPathScannerTests testsuite") { }
\r
20 public XPathScannerTests (string name) : base (name) { }
\r
22 public void TestLocationPathWithOneNameTest ()
\r
24 XPathScanner scanner = new XPathScanner ("foo");
\r
25 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
26 AssertEquals ("foo", scanner.Value);
\r
27 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
28 AssertNull (scanner.Value);
\r
31 public void TestLocationPathWithTwoNameTests ()
\r
33 XPathScanner scanner = new XPathScanner ("foo/bar");
\r
34 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
35 AssertEquals ("foo", scanner.Value);
\r
36 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
37 AssertEquals ("/", scanner.Value);
\r
38 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
39 AssertEquals ("bar", scanner.Value);
\r
40 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
41 AssertNull (scanner.Value);
\r
44 public void TestLocationPathWithOneQualifiedNameTest ()
\r
46 XPathScanner scanner = new XPathScanner ("foo:bar");
\r
47 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
48 AssertEquals ("foo:bar", scanner.Value);
\r
49 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
50 AssertNull (scanner.Value);
\r
53 public void TestLocationPathWithTwoQualifiedNameTests ()
\r
55 XPathScanner scanner = new XPathScanner ("foo:bar/baz:quux");
\r
56 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
57 AssertEquals ("foo:bar", scanner.Value);
\r
58 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
59 AssertEquals ("/", scanner.Value);
\r
60 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
61 AssertEquals ("baz:quux", scanner.Value);
\r
62 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
63 AssertNull (scanner.Value);
\r
66 public void TestLocationPathWithOneNameTestWithAxisName ()
\r
68 XPathScanner scanner = new XPathScanner ("child::foo");
\r
69 AssertEquals (XPathTokenType.AxisName, scanner.Scan ());
\r
70 AssertEquals ("child", scanner.Value);
\r
71 AssertEquals (XPathTokenType.ColonColon, scanner.Scan ());
\r
72 AssertEquals ("::", scanner.Value);
\r
73 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
74 AssertEquals ("foo", scanner.Value);
\r
75 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
76 AssertNull (scanner.Value);
\r
79 public void TestLocationPathWithTwoNameTestsWithAxisNames ()
\r
81 XPathScanner scanner = new XPathScanner ("child::foo/preceding-sibling::bar");
\r
82 AssertEquals (XPathTokenType.AxisName, scanner.Scan ());
\r
83 AssertEquals ("child", scanner.Value);
\r
84 AssertEquals (XPathTokenType.ColonColon, scanner.Scan ());
\r
85 AssertEquals ("::", scanner.Value);
\r
86 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
87 AssertEquals ("foo", scanner.Value);
\r
88 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
89 AssertEquals ("/", scanner.Value);
\r
90 AssertEquals (XPathTokenType.AxisName, scanner.Scan ());
\r
91 AssertEquals ("preceding-sibling", scanner.Value);
\r
92 AssertEquals (XPathTokenType.ColonColon, scanner.Scan ());
\r
93 AssertEquals ("::", scanner.Value);
\r
94 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
95 AssertEquals ("bar", scanner.Value);
\r
96 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
97 AssertNull (scanner.Value);
\r
100 public void TestCommentNodeType ()
\r
102 XPathScanner scanner = new XPathScanner ("comment()");
\r
103 AssertEquals (XPathTokenType.NodeType, scanner.Scan ());
\r
104 AssertEquals ("comment", scanner.Value);
\r
105 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
106 AssertEquals ("(", scanner.Value);
\r
107 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
108 AssertEquals (")", scanner.Value);
\r
109 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
110 AssertNull (scanner.Value);
\r
113 public void TestNodeNodeType ()
\r
115 XPathScanner scanner = new XPathScanner ("node()");
\r
116 AssertEquals (XPathTokenType.NodeType, scanner.Scan ());
\r
117 AssertEquals ("node", scanner.Value);
\r
118 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
119 AssertEquals ("(", scanner.Value);
\r
120 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
121 AssertEquals (")", scanner.Value);
\r
122 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
123 AssertNull (scanner.Value);
\r
126 public void TestProcessingInstructionNodeType ()
\r
128 XPathScanner scanner = new XPathScanner ("processing-instruction()");
\r
129 AssertEquals (XPathTokenType.NodeType, scanner.Scan ());
\r
130 AssertEquals ("processing-instruction", scanner.Value);
\r
131 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
132 AssertEquals ("(", scanner.Value);
\r
133 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
134 AssertEquals (")", scanner.Value);
\r
135 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
136 AssertNull (scanner.Value);
\r
139 public void TestTextNodeType ()
\r
141 XPathScanner scanner = new XPathScanner ("text()");
\r
142 AssertEquals (XPathTokenType.NodeType, scanner.Scan ());
\r
143 AssertEquals ("text", scanner.Value);
\r
144 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
145 AssertEquals ("(", scanner.Value);
\r
146 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
147 AssertEquals (")", scanner.Value);
\r
148 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
149 AssertNull (scanner.Value);
\r
152 public void TestFunctionName ()
\r
154 XPathScanner scanner = new XPathScanner ("foo()");
\r
155 AssertEquals (XPathTokenType.FunctionName, scanner.Scan ());
\r
156 AssertEquals ("foo", scanner.Value);
\r
157 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
158 AssertEquals ("(", scanner.Value);
\r
159 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
160 AssertEquals (")", scanner.Value);
\r
161 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
162 AssertNull (scanner.Value);
\r
165 public void TestQualifiedFunctionName ()
\r
167 XPathScanner scanner = new XPathScanner ("foo:bar()");
\r
168 AssertEquals (XPathTokenType.FunctionName, scanner.Scan ());
\r
169 AssertEquals ("foo:bar", scanner.Value);
\r
170 AssertEquals (XPathTokenType.LeftParen, scanner.Scan ());
\r
171 AssertEquals ("(", scanner.Value);
\r
172 AssertEquals (XPathTokenType.RightParen, scanner.Scan ());
\r
173 AssertEquals (")", scanner.Value);
\r
174 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
175 AssertNull (scanner.Value);
\r
178 public void TestWildcardNameTest ()
\r
180 XPathScanner scanner = new XPathScanner ("*");
\r
181 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
182 AssertEquals ("*", scanner.Value);
\r
183 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
184 AssertNull (scanner.Value);
\r
187 public void TestQualifiedWildcardNameTest ()
\r
189 XPathScanner scanner = new XPathScanner ("foo:*");
\r
190 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
191 AssertEquals ("foo:*", scanner.Value);
\r
192 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
193 AssertNull (scanner.Value);
\r
196 public void TestTwoWildcardNameTests ()
\r
198 XPathScanner scanner = new XPathScanner ("*/*");
\r
199 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
200 AssertEquals ("*", scanner.Value);
\r
201 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
202 AssertEquals ("/", scanner.Value);
\r
203 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
204 AssertEquals ("*", scanner.Value);
\r
205 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
206 AssertNull (scanner.Value);
\r
209 public void TestTwoQualifiedWildcardNameTests ()
\r
211 XPathScanner scanner = new XPathScanner ("foo:*/bar:*");
\r
212 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
213 AssertEquals ("foo:*", scanner.Value);
\r
214 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
215 AssertEquals ("/", scanner.Value);
\r
216 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
217 AssertEquals ("bar:*", scanner.Value);
\r
218 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
219 AssertNull (scanner.Value);
\r
222 public void TestAttributeNameTest ()
\r
224 XPathScanner scanner = new XPathScanner ("@foo");
\r
225 AssertEquals (XPathTokenType.At, scanner.Scan ());
\r
226 AssertEquals ("@", scanner.Value);
\r
227 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
228 AssertEquals ("foo", scanner.Value);
\r
229 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
230 AssertNull (scanner.Value);
\r
233 public void TestNameTestAndAttributeNameTest ()
\r
235 XPathScanner scanner = new XPathScanner ("foo/@bar");
\r
236 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
237 AssertEquals ("foo", scanner.Value);
\r
238 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
239 AssertEquals ("/", scanner.Value);
\r
240 AssertEquals (XPathTokenType.At, scanner.Scan ());
\r
241 AssertEquals ("@", scanner.Value);
\r
242 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
243 AssertEquals ("bar", scanner.Value);
\r
244 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
245 AssertNull (scanner.Value);
\r
248 public void TestAttributeAxis ()
\r
250 XPathScanner scanner = new XPathScanner ("attribute::foo");
\r
251 AssertEquals (XPathTokenType.AxisName, scanner.Scan ());
\r
252 AssertEquals ("attribute", scanner.Value);
\r
253 AssertEquals (XPathTokenType.ColonColon, scanner.Scan ());
\r
254 AssertEquals ("::", scanner.Value);
\r
255 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
256 AssertEquals ("foo", scanner.Value);
\r
257 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
258 AssertNull (scanner.Value);
\r
261 public void TestNameTestAndAttributeAxis ()
\r
263 XPathScanner scanner = new XPathScanner ("foo/attribute::bar");
\r
264 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
265 AssertEquals ("foo", scanner.Value);
\r
266 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
267 AssertEquals ("/", scanner.Value);
\r
268 AssertEquals (XPathTokenType.AxisName, scanner.Scan ());
\r
269 AssertEquals ("attribute", scanner.Value);
\r
270 AssertEquals (XPathTokenType.ColonColon, scanner.Scan ());
\r
271 AssertEquals ("::", scanner.Value);
\r
272 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
273 AssertEquals ("bar", scanner.Value);
\r
274 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
275 AssertNull (scanner.Value);
\r
278 public void TestRoot ()
\r
280 XPathScanner scanner = new XPathScanner ("/");
\r
281 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
282 AssertEquals ("/", scanner.Value);
\r
283 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
284 AssertNull (scanner.Value);
\r
287 public void TestAbsoluteNameTest ()
\r
289 XPathScanner scanner = new XPathScanner ("/foo");
\r
290 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
291 AssertEquals ("/", scanner.Value);
\r
292 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
293 AssertEquals ("foo", scanner.Value);
\r
294 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
295 AssertNull (scanner.Value);
\r
298 public void TestAbbreviatedAbsoluteLocationPathWithNameTest ()
\r
300 XPathScanner scanner = new XPathScanner ("//foo");
\r
301 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
302 AssertEquals ("//", scanner.Value);
\r
303 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
304 AssertEquals ("foo", scanner.Value);
\r
305 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
306 AssertNull (scanner.Value);
\r
309 public void TestAbbreviatedRelativeLocationPathWithNameTest ()
\r
311 XPathScanner scanner = new XPathScanner ("foo//bar");
\r
312 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
313 AssertEquals ("foo", scanner.Value);
\r
314 AssertEquals (XPathTokenType.Operator, scanner.Scan ());
\r
315 AssertEquals ("//", scanner.Value);
\r
316 AssertEquals (XPathTokenType.NameTest, scanner.Scan ());
\r
317 AssertEquals ("bar", scanner.Value);
\r
318 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
319 AssertNull (scanner.Value);
\r
322 public void TestAbbreviatedStepSelf ()
\r
324 XPathScanner scanner = new XPathScanner (".");
\r
325 AssertEquals (XPathTokenType.Dot, scanner.Scan ());
\r
326 AssertEquals (".", scanner.Value);
\r
327 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
328 AssertNull (scanner.Value);
\r
331 public void TestAbbreviatedStepParent ()
\r
333 XPathScanner scanner = new XPathScanner ("..");
\r
334 AssertEquals (XPathTokenType.DotDot, scanner.Scan ());
\r
335 AssertEquals ("..", scanner.Value);
\r
336 AssertEquals (XPathTokenType.End, scanner.Scan ());
\r
337 AssertNull (scanner.Value);
\r