Can now scan most location paths (without predicates).
[mono.git] / mcs / class / System.XML / Test / XPathScannerTests.cs
1 //\r
2 // XPathScannerTests.cs\r
3 //\r
4 // Author:\r
5 //   Jason Diamond (jason@injektilo.org)\r
6 //\r
7 // (C) 2002 Jason Diamond  http://injektilo.org/\r
8 //\r
9 \r
10 using System;\r
11 using System.Xml.XPath;\r
12 \r
13 using NUnit.Framework;\r
14 \r
15 namespace Ximian.Mono.Tests\r
16 {\r
17         public class XPathScannerTests : TestCase\r
18         {\r
19                 public XPathScannerTests () : base ("Ximian.Mono.Tests.XPathScannerTests testsuite") { }\r
20                 public XPathScannerTests (string name) : base (name) { }\r
21 \r
22                 public void TestLocationPathWithOneNameTest ()\r
23                 {\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
29                 }\r
30 \r
31                 public void TestLocationPathWithTwoNameTests ()\r
32                 {\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
42                 }\r
43 \r
44                 public void TestLocationPathWithOneQualifiedNameTest ()\r
45                 {\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
51                 }\r
52 \r
53                 public void TestLocationPathWithTwoQualifiedNameTests ()\r
54                 {\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
64                 }\r
65 \r
66                 public void TestLocationPathWithOneNameTestWithAxisName ()\r
67                 {\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
77                 }\r
78 \r
79                 public void TestLocationPathWithTwoNameTestsWithAxisNames ()\r
80                 {\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
98                 }\r
99 \r
100                 public void TestCommentNodeType ()\r
101                 {\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
111                 }\r
112 \r
113                 public void TestNodeNodeType ()\r
114                 {\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
124                 }\r
125 \r
126                 public void TestProcessingInstructionNodeType ()\r
127                 {\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
137                 }\r
138 \r
139                 public void TestTextNodeType ()\r
140                 {\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
150                 }\r
151 \r
152                 public void TestFunctionName ()\r
153                 {\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
163                 }\r
164 \r
165                 public void TestQualifiedFunctionName ()\r
166                 {\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
176                 }\r
177 \r
178                 public void TestWildcardNameTest ()\r
179                 {\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
185                 }\r
186 \r
187                 public void TestQualifiedWildcardNameTest ()\r
188                 {\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
194                 }\r
195 \r
196                 public void TestTwoWildcardNameTests ()\r
197                 {\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
207                 }\r
208 \r
209                 public void TestTwoQualifiedWildcardNameTests ()\r
210                 {\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
220                 }\r
221 \r
222                 public void TestAttributeNameTest ()\r
223                 {\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
231                 }\r
232 \r
233                 public void TestNameTestAndAttributeNameTest ()\r
234                 {\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
246                 }\r
247 \r
248                 public void TestAttributeAxis ()\r
249                 {\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
259                 }\r
260 \r
261                 public void TestNameTestAndAttributeAxis ()\r
262                 {\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
276                 }\r
277 \r
278                 public void TestRoot ()\r
279                 {\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
285                 }\r
286 \r
287                 public void TestAbsoluteNameTest ()\r
288                 {\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
296                 }\r
297 \r
298                 public void TestAbbreviatedAbsoluteLocationPathWithNameTest ()\r
299                 {\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
307                 }\r
308 \r
309                 public void TestAbbreviatedRelativeLocationPathWithNameTest ()\r
310                 {\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
320                 }\r
321 \r
322                 public void TestAbbreviatedStepSelf ()\r
323                 {\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
329                 }\r
330 \r
331                 public void TestAbbreviatedStepParent ()\r
332                 {\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
338                 }\r
339         }\r
340 }\r