2 // MonoTests.System.Xml.SelectNodesTests
4 // Author: Jason Diamond <jason@injektilo.org>
5 // Author: Martin Willemoes Hansen <mwh@sysrq.dk>
7 // (C) 2002 Jason Diamond
8 // (C) 2003 Martin Willemoes Hansen
14 using NUnit.Framework;
16 namespace MonoTests.System.Xml.XPath
19 public class SelectNodesTests : Assertion
25 XmlDocument document = new XmlDocument ();
26 document.LoadXml ("<foo />");
27 XmlNodeList nodes = document.SelectNodes ("/");
28 AssertEquals (1, nodes.Count);
29 AssertSame (document, nodes [0]);
33 public void DocumentElement ()
35 XmlDocument document = new XmlDocument ();
36 document.LoadXml ("<foo />");
37 XmlNodeList nodes = document.SelectNodes ("/foo");
38 AssertEquals (1, nodes.Count);
39 AssertSame (document.DocumentElement, nodes [0]);
43 public void BadDocumentElement ()
45 XmlDocument document = new XmlDocument ();
46 document.LoadXml ("<foo />");
47 XmlNodeList nodes = document.SelectNodes ("/bar");
48 AssertEquals (0, nodes.Count);
52 public void ElementWildcard ()
54 XmlDocument document = new XmlDocument ();
55 document.LoadXml ("<foo><bar /><baz /></foo>");
56 XmlNodeList nodes = document.SelectNodes ("/foo/*");
57 AssertEquals (2, nodes.Count);
58 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
59 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
63 public void OneChildElement ()
65 XmlDocument document = new XmlDocument ();
66 document.LoadXml ("<foo><bar /><baz /></foo>");
67 XmlNodeList nodes = document.SelectNodes ("/foo/bar");
68 AssertEquals (1, nodes.Count);
69 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
73 public void OneOtherChildElement ()
75 XmlDocument document = new XmlDocument ();
76 document.LoadXml ("<foo><bar /><baz /></foo>");
77 XmlNodeList nodes = document.SelectNodes ("/foo/baz");
78 AssertEquals (1, nodes.Count);
79 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
83 public void TextNode ()
85 XmlDocument document = new XmlDocument ();
86 document.LoadXml ("<foo>bar</foo>");
87 XmlNodeList nodes = document.SelectNodes ("/foo/text()");
88 AssertEquals (1, nodes.Count);
89 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
93 public void SplitTextNodes ()
95 XmlDocument document = new XmlDocument ();
96 document.LoadXml ("<foo>bar<baz />quux</foo>");
97 XmlNodeList nodes = document.SelectNodes ("/foo/text()");
98 AssertEquals (2, nodes.Count);
99 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
100 AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
104 public void AbbreviatedParentAxis ()
106 XmlDocument document = new XmlDocument ();
107 document.LoadXml ("<foo><bar /></foo>");
108 XmlNodeList nodes = document.SelectNodes ("/foo/bar/..");
109 AssertEquals (1, nodes.Count);
110 AssertSame (document.DocumentElement, nodes [0]);
114 public void FullParentAxis ()
116 XmlDocument document = new XmlDocument ();
117 document.LoadXml ("<foo><bar /></foo>");
118 XmlNodeList nodes = document.SelectNodes ("/foo/bar/parent::node()");
119 AssertEquals (1, nodes.Count);
120 AssertSame (document.DocumentElement, nodes [0]);
124 public void AbbreviatedAttributeAxis ()
126 XmlDocument document = new XmlDocument ();
127 document.LoadXml ("<foo bar='baz' />");
128 XmlNodeList nodes = document.SelectNodes ("/foo/@bar");
129 AssertEquals (1, nodes.Count);
130 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
134 public void FullAttributeAxis ()
136 XmlDocument document = new XmlDocument ();
137 document.LoadXml ("<foo bar='baz' />");
138 XmlNodeList nodes = document.SelectNodes ("/foo/attribute::bar");
139 AssertEquals (1, nodes.Count);
140 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
144 public void AbbreviatedAttributeWildcard ()
146 XmlDocument document = new XmlDocument ();
147 document.LoadXml ("<foo bar='baz' quux='quuux' />");
148 XmlNodeList nodes = document.SelectNodes ("/foo/@*");
149 AssertEquals (2, nodes.Count);
150 // are the attributes guanteed to be ordered in the node list?
151 AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
152 AssertSame (document.DocumentElement.Attributes ["quux"], nodes [1]);
156 public void AttributeParent ()
158 XmlDocument document = new XmlDocument ();
159 document.LoadXml ("<foo bar='baz' />");
160 XmlNodeList nodes = document.SelectNodes ("/foo/@bar/..");
161 AssertEquals (1, nodes.Count);
162 AssertSame (document.DocumentElement, nodes [0]);
166 public void UnionOperator ()
168 XmlDocument document = new XmlDocument ();
169 document.LoadXml ("<foo><bar /><baz /></foo>");
170 XmlNodeList nodes = document.SelectNodes ("/foo/bar|/foo/baz");
171 AssertEquals (2, nodes.Count);
172 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
173 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
177 public void NodeWildcard ()
179 XmlDocument document = new XmlDocument ();
180 document.LoadXml ("<foo><bar />baz<quux /></foo>");
181 XmlNodeList nodes = document.SelectNodes ("/foo/node()");
182 AssertEquals (3, nodes.Count);
183 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
184 AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
185 AssertSame (document.DocumentElement.ChildNodes [2], nodes [2]);
189 public void PositionalPredicate ()
191 XmlDocument document = new XmlDocument ();
192 document.LoadXml ("<foo><bar>1</bar><bar>2</bar></foo>");
193 XmlNodeList nodes = document.SelectNodes ("/foo/bar[1]");
194 AssertEquals (1, nodes.Count);
195 AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
199 public void AllFollowingSiblings ()
201 XmlDocument document = new XmlDocument ();
202 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
203 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::*");
204 AssertEquals (2, nodes.Count);
205 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
206 AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
210 public void FollowingSiblingBaz ()
212 XmlDocument document = new XmlDocument ();
213 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
214 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::baz");
215 AssertEquals (1, nodes.Count);
216 AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
220 public void FollowingSiblingQuux ()
222 XmlDocument document = new XmlDocument ();
223 document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
224 XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::quux");
225 AssertEquals (1, nodes.Count);
226 AssertSame (document.DocumentElement.ChildNodes [2], nodes [0]);
232 XmlDocument document = new XmlDocument ();
233 document.LoadXml ("<foo />");
234 XmlNodeList nodes = document.SelectNodes ("(/foo) | (/foo)");
235 AssertEquals (1, nodes.Count); // bug #27548
236 AssertSame (document.DocumentElement, nodes [0]);
240 public void AlphabetDigitMixedName ()
242 XmlDocument document = new XmlDocument ();
243 document.LoadXml ("<foo1 />");
244 XmlNodeList nodes = document.SelectNodes ("/foo1");
245 AssertEquals (1, nodes.Count);
246 AssertSame (document.DocumentElement, nodes [0]);
250 public void NamespaceSelect ()
252 XmlDocument document = new XmlDocument ();
253 document.LoadXml ("<root xmlns=\"urn:foo1:foo2\"/>");
254 XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
255 nsmgr.AddNamespace("foons", "urn:foo1:foo2");
256 XmlNodeList nodes = document.SelectNodes ("/foons:root", nsmgr);
257 AssertEquals (1, nodes.Count);
261 public void NamespaceSelectWithNsElasure ()
263 XmlDocument doc = new XmlDocument ();
\r
265 doc.LoadXml ("<root xmlns='urn:root' xmlns:hoge='urn:hoge'><foo xmlns='urn:foo'><bar xmlns=''><baz/></bar></foo></root>");
\r
266 XmlNode n = doc.FirstChild.FirstChild.FirstChild.FirstChild; //baz
\r
267 XmlNodeList nl = n.SelectNodes ("namespace::*");
\r
268 AssertEquals ("hoge", nl [0].LocalName);
\r
269 AssertEquals ("xml", nl [1].LocalName);
\r
270 AssertEquals (2, nl.Count);
\r
272 n = doc.FirstChild.FirstChild; // foo
\r
273 nl = n.SelectNodes ("namespace::*");
\r
274 Console.WriteLine ("at foo::");
\r
275 AssertEquals ("xmlns", nl [0].LocalName);
\r
276 AssertEquals ("hoge", nl [1].LocalName);
\r
277 AssertEquals ("xml", nl [2].LocalName);
\r
278 AssertEquals (3, nl.Count);
\r