2 // MonoTests.System.Xml.SelectNodesTests
5 // Jason Diamond <jason@injektilo.org>
7 // (C) 2002 Jason Diamond
13 using NUnit.Framework;
15 namespace MonoTests.System.Xml
17 public class SelectNodesTests : TestCase
19 public SelectNodesTests () : base ("MonoTests.System.Xml.SelectNodesTests testsuite") {}
20 public SelectNodesTests (string name) : base (name) {}
22 public void TestRoot ()
24 XmlDocument document = new XmlDocument ();
25 document.LoadXml ("<foo />");
26 XmlNodeList nodes = document.SelectNodes ("/");
27 AssertEquals (1, nodes.Count);
28 AssertSame (document, nodes [0]);
31 public void TestDocumentElement ()
33 XmlDocument document = new XmlDocument ();
34 document.LoadXml ("<foo />");
35 XmlNodeList nodes = document.SelectNodes ("/foo");
36 AssertEquals (1, nodes.Count);
37 AssertSame (document.DocumentElement, nodes [0]);
40 public void TestBadDocumentElement ()
42 XmlDocument document = new XmlDocument ();
43 document.LoadXml ("<foo />");
44 XmlNodeList nodes = document.SelectNodes ("/bar");
45 AssertEquals (0, nodes.Count);
48 public void TestElementWildcard ()
50 XmlDocument document = new XmlDocument ();
51 document.LoadXml ("<foo><bar /><baz /></foo>");
52 XmlNodeList nodes = document.SelectNodes ("/foo/*");
53 AssertEquals (2, nodes.Count);
54 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
55 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
58 public void TestOneChildElement ()
60 XmlDocument document = new XmlDocument ();
61 document.LoadXml ("<foo><bar /><baz /></foo>");
62 XmlNodeList nodes = document.SelectNodes ("/foo/bar");
63 AssertEquals (1, nodes.Count);
64 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
67 public void TestOneOtherChildElement ()
69 XmlDocument document = new XmlDocument ();
70 document.LoadXml ("<foo><bar /><baz /></foo>");
71 XmlNodeList nodes = document.SelectNodes ("/foo/baz");
72 AssertEquals (1, nodes.Count);
73 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
76 public void TestTextNode ()
78 XmlDocument document = new XmlDocument ();
79 document.LoadXml ("<foo>bar</foo>");
80 XmlNodeList nodes = document.SelectNodes ("/foo/text()");
81 AssertEquals (1, nodes.Count);
82 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
85 public void TestSplitTextNodes ()
87 XmlDocument document = new XmlDocument ();
88 document.LoadXml ("<foo>bar<baz />quux</foo>");
89 XmlNodeList nodes = document.SelectNodes ("/foo/text()");
90 AssertEquals (2, nodes.Count);
91 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
92 AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
95 public void TestAbbreviatedParentAxis ()
97 XmlDocument document = new XmlDocument ();
98 document.LoadXml ("<foo><bar /></foo>");
99 XmlNodeList nodes = document.SelectNodes ("/foo/bar/..");
100 AssertEquals (1, nodes.Count);
101 AssertSame (document.DocumentElement, nodes [0]);
104 public void TestFullParentAxis ()
106 XmlDocument document = new XmlDocument ();
107 document.LoadXml ("<foo><bar /></foo>");
108 XmlNodeList nodes = document.SelectNodes ("/foo/bar/parent::node()");
109 AssertEquals (1, nodes.Count);
110 AssertSame (document.DocumentElement, nodes [0]);
113 public void TestAbbreviatedAttributeAxis ()
115 XmlDocument document = new XmlDocument ();
116 document.LoadXml ("<foo bar='baz' />");
117 XmlNodeList nodes = document.SelectNodes ("/foo/@bar");
118 AssertEquals (1, nodes.Count);
119 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
122 public void TestFullAttributeAxis ()
124 XmlDocument document = new XmlDocument ();
125 document.LoadXml ("<foo bar='baz' />");
126 XmlNodeList nodes = document.SelectNodes ("/foo/attribute::bar");
127 AssertEquals (1, nodes.Count);
128 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
131 public void TestAbbreviatedAttributeWildcard ()
133 XmlDocument document = new XmlDocument ();
134 document.LoadXml ("<foo bar='baz' quux='quuux' />");
135 XmlNodeList nodes = document.SelectNodes ("/foo/@*");
136 AssertEquals (2, nodes.Count);
137 // are the attributes guanteed to be ordered in the node list?
138 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
139 AssertSame (document.DocumentElement.Attributes ["quux"], nodes [1]);
142 public void TestAttributeParent ()
144 XmlDocument document = new XmlDocument ();
145 document.LoadXml ("<foo bar='baz' />");
146 XmlNodeList nodes = document.SelectNodes ("/foo/@bar/..");
147 AssertEquals (1, nodes.Count);
148 AssertSame (document.DocumentElement, nodes [0]);
151 public void TestUnionOperator ()
153 XmlDocument document = new XmlDocument ();
154 document.LoadXml ("<foo><bar /><baz /></foo>");
155 XmlNodeList nodes = document.SelectNodes ("/foo/bar|/foo/baz");
156 AssertEquals (2, nodes.Count);
157 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
158 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
161 public void TestNodeWildcard ()
163 XmlDocument document = new XmlDocument ();
164 document.LoadXml ("<foo><bar />baz<quux /></foo>");
165 XmlNodeList nodes = document.SelectNodes ("/foo/node()");
166 AssertEquals (3, nodes.Count);
167 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
168 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
169 AssertSame (document.DocumentElement.ChildNodes [2], nodes [2]);
172 public void TestPositionalPredicate ()
174 XmlDocument document = new XmlDocument ();
175 document.LoadXml ("<foo><bar>1</bar><bar>2</bar></foo>");
176 XmlNodeList nodes = document.SelectNodes ("/foo/bar[1]");
177 AssertEquals (1, nodes.Count);
178 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
181 public void TestAllFollowingSiblings ()
183 XmlDocument document = new XmlDocument ();
184 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
185 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::*");
186 AssertEquals (2, nodes.Count);
187 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
188 AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
191 public void TestFollowingSiblingBaz ()
193 XmlDocument document = new XmlDocument ();
194 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
195 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::baz");
196 AssertEquals (1, nodes.Count);
197 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
200 public void TestFollowingSiblingQuux ()
202 XmlDocument document = new XmlDocument ();
203 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
204 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::quux");
205 AssertEquals (1, nodes.Count);
206 AssertSame (document.DocumentElement.ChildNodes [2], nodes [0]);
209 public void TestUnion ()
211 XmlDocument document = new XmlDocument ();
212 document.LoadXml ("<foo />");
213 XmlNodeList nodes = document.SelectNodes ("(/foo) | (/foo)");
214 AssertEquals (1, nodes.Count); // bug #27548
215 AssertSame (document.DocumentElement, nodes [0]);
218 public void TestAlphabetDigitMixedName ()
220 XmlDocument document = new XmlDocument ();
221 document.LoadXml ("<foo1 />");
222 XmlNodeList nodes = document.SelectNodes ("/foo1");
223 AssertEquals (1, nodes.Count);
224 AssertSame (document.DocumentElement, nodes [0]);