implementing XmlElement.SetAttributeNode(localName, namespaceURI) and
[mono.git] / mcs / class / System.XML / Test / SelectNodesTests.cs
1 //
2 // MonoTests.System.Xml.SelectNodesTests
3 //
4 // Author:
5 //   Jason Diamond <jason@injektilo.org>
6 //
7 // (C) 2002 Jason Diamond
8 //
9 \r
10 using System;
11 using System.Xml;
12
13 using NUnit.Framework;
14
15 namespace MonoTests.System.Xml
16 {
17         public class SelectNodesTests : TestCase
18         {
19                 public SelectNodesTests () : base ("MonoTests.System.Xml.SelectNodesTests testsuite") {}
20                 public SelectNodesTests (string name) : base (name) {}
21
22                 public void TestRoot ()
23                 {
24                         XmlDocument document = new XmlDocument ();
25                         document.LoadXml ("<foo />");
26                         XmlNodeList nodes = document.SelectNodes ("/");
27                         AssertEquals (1, nodes.Count);
28                         AssertSame (document, nodes [0]);
29                 }
30
31                 public void TestDocumentElement ()
32                 {
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]);
38                 }
39
40                 public void TestBadDocumentElement ()
41                 {
42                         XmlDocument document = new XmlDocument ();
43                         document.LoadXml ("<foo />");
44                         XmlNodeList nodes = document.SelectNodes ("/bar");
45                         AssertEquals (0, nodes.Count);
46                 }
47
48                 public void TestElementWildcard ()
49                 {
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]);
56                 }
57
58                 public void TestOneChildElement ()
59                 {
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]);
65                 }
66
67                 public void TestOneOtherChildElement ()
68                 {
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]);
74                 }
75
76                 public void TestTextNode ()
77                 {
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]);
83                 }
84
85                 public void TestSplitTextNodes ()
86                 {
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]);
93                 }
94
95                 public void TestAbbreviatedParentAxis ()
96                 {
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]);
102                 }
103
104                 public void TestFullParentAxis ()
105                 {
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]);
111                 }
112
113                 public void TestAbbreviatedAttributeAxis ()
114                 {
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]);
120                 }
121
122                 public void TestFullAttributeAxis ()
123                 {
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]);
129                 }
130
131                 public void TestAbbreviatedAttributeWildcard ()
132                 {
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]);
140                 }
141
142                 public void TestAttributeParent ()
143                 {
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]);
149                 }
150                 
151                 public void TestUnionOperator ()
152                 {
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]);
159                 }
160                 
161                 public void TestNodeWildcard ()
162                 {
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]);
170                 }
171
172                 public void TestPositionalPredicate ()
173                 {
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]);
179                 }
180
181                 public void TestAllFollowingSiblings ()
182                 {
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]);
189                 }
190
191                 public void TestFollowingSiblingBaz ()
192                 {
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]);
198                 }
199
200                 public void TestFollowingSiblingQuux ()
201                 {
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]);
207                 }
208
209                 public void TestUnion ()
210                 {
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]);
216                 }
217         }
218 }