43e7b483ea7f3fc35d4a9f3e9cf04d8a914cf751
[mono.git] / mcs / class / System.XML / Test / System.Xml.XPath / XPathNavigatorTests.cs
1 //
2 // MonoTests.System.Xml.XPathNavigatorTests
3 //
4 // Authors:
5 //   Jason Diamond <jason@injektilo.org>
6 //   Martin Willemoes Hansen <mwh@sysrq.dk>
7 //
8 // (C) 2002 Jason Diamond
9 // (C) 2003 Martin Willemoes Hansen
10 //
11
12 using System;
13 using System.Xml;
14 using System.Xml.XPath;
15
16 using NUnit.Framework;
17
18 namespace MonoTests.System.Xml
19 {
20         [TestFixture]
21         public class XPathNavigatorTests : Assertion
22         {
23                 XmlDocument document;
24                 XPathNavigator navigator;
25
26                 [SetUp]
27                 public void GetReady ()
28                 {
29                         document = new XmlDocument ();
30                 }
31                 
32                 [Test]
33                 public void CreateNavigator ()
34                 {
35                         document.LoadXml ("<foo />");
36                         navigator = document.CreateNavigator ();
37                         AssertNotNull (navigator);
38                 }
39
40                 [Test]
41                 public void PropertiesOnDocument ()
42                 {
43                         document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
44                         navigator = document.CreateNavigator ();
45                         
46                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
47                         AssertEquals (String.Empty, navigator.Name);
48                         AssertEquals (String.Empty, navigator.LocalName);
49                         AssertEquals (String.Empty, navigator.NamespaceURI);
50                         AssertEquals (String.Empty, navigator.Prefix);
51                         Assert (!navigator.HasAttributes);
52                         Assert (navigator.HasChildren);
53                         Assert (!navigator.IsEmptyElement);
54                 }
55
56                 [Test]
57                 public void PropertiesOnElement ()
58                 {
59                         document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
60                         navigator = document.DocumentElement.CreateNavigator ();
61                         
62                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
63                         AssertEquals ("foo:bar", navigator.Name);
64                         AssertEquals ("bar", navigator.LocalName);
65                         AssertEquals ("#foo", navigator.NamespaceURI);
66                         AssertEquals ("foo", navigator.Prefix);
67                         Assert (!navigator.HasAttributes);
68                         Assert (!navigator.HasChildren);
69                         Assert (navigator.IsEmptyElement);
70                 }
71
72                 [Test]
73                 public void PropertiesOnAttribute ()
74                 {
75                         document.LoadXml ("<foo bar:baz='quux' xmlns:bar='#bar' />");
76                         navigator = document.DocumentElement.GetAttributeNode("baz", "#bar").CreateNavigator ();
77                         
78                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
79                         AssertEquals ("bar:baz", navigator.Name);
80                         AssertEquals ("baz", navigator.LocalName);
81                         AssertEquals ("#bar", navigator.NamespaceURI);
82                         AssertEquals ("bar", navigator.Prefix);
83                         Assert (!navigator.HasAttributes);
84                         Assert (!navigator.HasChildren);
85                         Assert (!navigator.IsEmptyElement);
86                 }
87
88                 [Test]
89                 public void Navigation ()
90                 {
91                         document.LoadXml ("<foo><bar /><baz /></foo>");
92                         navigator = document.DocumentElement.CreateNavigator ();
93                         
94                         AssertEquals ("foo", navigator.Name);
95                         Assert (navigator.MoveToFirstChild ());
96                         AssertEquals ("bar", navigator.Name);
97                         Assert (navigator.MoveToNext ());
98                         AssertEquals ("baz", navigator.Name);
99                         Assert (!navigator.MoveToNext ());
100                         AssertEquals ("baz", navigator.Name);
101                         Assert (navigator.MoveToPrevious ());
102                         AssertEquals ("bar", navigator.Name);
103                         Assert (!navigator.MoveToPrevious ());
104                         Assert (navigator.MoveToParent ());
105                         AssertEquals ("foo", navigator.Name);
106                         navigator.MoveToRoot ();
107                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
108                         Assert (!navigator.MoveToParent ());
109                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
110                         Assert (navigator.MoveToFirstChild ());
111                         AssertEquals ("foo", navigator.Name);
112                         Assert (navigator.MoveToFirst ());
113                         AssertEquals ("foo", navigator.Name);
114                         Assert (navigator.MoveToFirstChild ());
115                         AssertEquals ("bar", navigator.Name);
116                         Assert (navigator.MoveToNext ());
117                         AssertEquals ("baz", navigator.Name);
118                         Assert (navigator.MoveToFirst ());
119                         AssertEquals ("bar", navigator.Name);
120                 }
121
122                 [Test]
123                 public void MoveToAndIsSamePosition ()
124                 {
125                         XmlDocument document1 = new XmlDocument ();
126                         document1.LoadXml ("<foo><bar /></foo>");
127                         XPathNavigator navigator1a = document1.DocumentElement.CreateNavigator ();
128                         XPathNavigator navigator1b = document1.DocumentElement.CreateNavigator ();
129
130                         XmlDocument document2 = new XmlDocument ();
131                         document2.LoadXml ("<foo><bar /></foo>");
132                         XPathNavigator navigator2 = document2.DocumentElement.CreateNavigator ();
133
134                         AssertEquals ("foo", navigator1a.Name);
135                         Assert (navigator1a.MoveToFirstChild ());
136                         AssertEquals ("bar", navigator1a.Name);
137
138                         Assert (!navigator1b.IsSamePosition (navigator1a));
139                         AssertEquals ("foo", navigator1b.Name);
140                         Assert (navigator1b.MoveTo (navigator1a));
141                         Assert (navigator1b.IsSamePosition (navigator1a));
142                         AssertEquals ("bar", navigator1b.Name);
143
144                         Assert (!navigator2.IsSamePosition (navigator1a));
145                         AssertEquals ("foo", navigator2.Name);
146                         Assert (!navigator2.MoveTo (navigator1a));
147                         AssertEquals ("foo", navigator2.Name);
148                 }
149
150                 [Test]
151                 public void AttributeNavigation ()
152                 {
153                         document.LoadXml ("<foo bar='baz' quux='quuux' />");
154                         navigator = document.DocumentElement.CreateNavigator ();
155
156                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
157                         AssertEquals ("foo", navigator.Name);
158                         Assert (navigator.MoveToFirstAttribute ());
159                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
160                         AssertEquals ("bar", navigator.Name);
161                         AssertEquals ("baz", navigator.Value);
162                         Assert (navigator.MoveToNextAttribute ());
163                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
164                         AssertEquals ("quux", navigator.Name);
165                         AssertEquals ("quuux", navigator.Value);
166                 }
167
168                 [Test]
169                 public void ElementAndRootValues()
170                 {
171                         document.LoadXml ("<foo><bar>baz</bar><quux>quuux</quux></foo>");
172                         navigator = document.DocumentElement.CreateNavigator ();
173
174                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
175                         AssertEquals ("foo", navigator.Name);
176                         //AssertEquals ("bazquuux", navigator.Value);
177
178                         navigator.MoveToRoot ();
179                         //AssertEquals ("bazquuux", navigator.Value);
180                 }
181
182                 [Test]
183                 public void DocumentWithXmlDeclaration ()
184                 {
185                         document.LoadXml ("<?xml version=\"1.0\" standalone=\"yes\"?>\"<Root><foo>bar</foo></Root>");
186                         navigator = document.CreateNavigator ();
187
188                         navigator.MoveToRoot ();
189                         navigator.MoveToFirstChild ();
190                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
191                         AssertEquals ("Root", navigator.Name);
192                 }
193         }
194 }