implementing XmlElement.SetAttributeNode(localName, namespaceURI) and
[mono.git] / mcs / class / System.XML / Test / XPathNavigatorTests.cs
1 //
2 // MonoTests.System.Xml.XPathNavigatorTests
3 //
4 // Author:
5 //   Jason Diamond <jason@injektilo.org>
6 //
7 // (C) 2002 Jason Diamond
8 //
9
10 using System;
11 using System.Xml;
12 using System.Xml.XPath;
13
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Xml
17 {
18         public class XPathNavigatorTests : TestCase
19         {
20                 public XPathNavigatorTests () : base ("MonoTests.System.Xml.XPathNavigatorTests testsuite") {}
21                 public XPathNavigatorTests (string name) : base (name) {}
22
23                 public void TestCreateNavigator ()
24                 {
25                         XmlDocument document = new XmlDocument ();
26                         document.LoadXml ("<foo />");
27                         XPathNavigator navigator = document.CreateNavigator ();
28                         AssertNotNull (navigator);
29                 }
30
31                 public void TestPropertiesOnDocument ()
32                 {
33                         XmlDocument document = new XmlDocument ();
34                         document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
35                         XPathNavigator navigator = document.CreateNavigator ();
36                         
37                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
38                         AssertEquals (String.Empty, navigator.Name);
39                         AssertEquals (String.Empty, navigator.LocalName);
40                         AssertEquals (String.Empty, navigator.NamespaceURI);
41                         AssertEquals (String.Empty, navigator.Prefix);
42                         Assert (!navigator.HasAttributes);
43                         Assert (navigator.HasChildren);
44                         Assert (!navigator.IsEmptyElement);
45                 }
46
47                 public void TestPropertiesOnElement ()
48                 {
49                         XmlDocument document = new XmlDocument ();
50                         document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
51                         XPathNavigator navigator = document.DocumentElement.CreateNavigator ();
52                         
53                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
54                         AssertEquals ("foo:bar", navigator.Name);
55                         AssertEquals ("bar", navigator.LocalName);
56                         AssertEquals ("#foo", navigator.NamespaceURI);
57                         AssertEquals ("foo", navigator.Prefix);
58                         Assert (!navigator.HasAttributes);
59                         Assert (!navigator.HasChildren);
60                         Assert (navigator.IsEmptyElement);
61                 }
62
63                 public void TestPropertiesOnAttribute ()
64                 {
65                         XmlDocument document = new XmlDocument ();
66                         document.LoadXml ("<foo bar:baz='quux' xmlns:bar='#bar' />");
67                         XPathNavigator navigator = document.DocumentElement.GetAttributeNode("baz", "#bar").CreateNavigator ();
68                         
69                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
70                         AssertEquals ("bar:baz", navigator.Name);
71                         AssertEquals ("baz", navigator.LocalName);
72                         AssertEquals ("#bar", navigator.NamespaceURI);
73                         AssertEquals ("bar", navigator.Prefix);
74                         Assert (!navigator.HasAttributes);
75                         Assert (!navigator.HasChildren);
76                         Assert (!navigator.IsEmptyElement);
77                 }
78
79                 public void TestNavigation ()
80                 {
81                         XmlDocument document = new XmlDocument ();
82                         document.LoadXml ("<foo><bar /><baz /></foo>");
83                         XPathNavigator navigator = document.DocumentElement.CreateNavigator ();
84                         
85                         AssertEquals ("foo", navigator.Name);
86                         Assert (navigator.MoveToFirstChild ());
87                         AssertEquals ("bar", navigator.Name);
88                         Assert (navigator.MoveToNext ());
89                         AssertEquals ("baz", navigator.Name);
90                         Assert (!navigator.MoveToNext ());
91                         AssertEquals ("baz", navigator.Name);
92                         Assert (navigator.MoveToPrevious ());
93                         AssertEquals ("bar", navigator.Name);
94                         Assert (!navigator.MoveToPrevious ());
95                         Assert (navigator.MoveToParent ());
96                         AssertEquals ("foo", navigator.Name);
97                         navigator.MoveToRoot ();
98                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
99                         Assert (!navigator.MoveToParent ());
100                         AssertEquals (XPathNodeType.Root, navigator.NodeType);
101                         Assert (navigator.MoveToFirstChild ());
102                         AssertEquals ("foo", navigator.Name);
103                         Assert (navigator.MoveToFirst ());
104                         AssertEquals ("foo", navigator.Name);
105                         Assert (navigator.MoveToFirstChild ());
106                         AssertEquals ("bar", navigator.Name);
107                         Assert (navigator.MoveToNext ());
108                         AssertEquals ("baz", navigator.Name);
109                         Assert (navigator.MoveToFirst ());
110                         AssertEquals ("bar", navigator.Name);
111                 }
112
113                 public void TestMoveToAndIsSamePosition ()
114                 {
115                         XmlDocument document1 = new XmlDocument ();
116                         document1.LoadXml ("<foo><bar /></foo>");
117                         XPathNavigator navigator1a = document1.DocumentElement.CreateNavigator ();
118                         XPathNavigator navigator1b = document1.DocumentElement.CreateNavigator ();
119
120                         XmlDocument document2 = new XmlDocument ();
121                         document2.LoadXml ("<foo><bar /></foo>");
122                         XPathNavigator navigator2 = document2.DocumentElement.CreateNavigator ();
123
124                         AssertEquals ("foo", navigator1a.Name);
125                         Assert (navigator1a.MoveToFirstChild ());
126                         AssertEquals ("bar", navigator1a.Name);
127
128                         Assert (!navigator1b.IsSamePosition (navigator1a));
129                         AssertEquals ("foo", navigator1b.Name);
130                         Assert (navigator1b.MoveTo (navigator1a));
131                         Assert (navigator1b.IsSamePosition (navigator1a));
132                         AssertEquals ("bar", navigator1b.Name);
133
134                         Assert (!navigator2.IsSamePosition (navigator1a));
135                         AssertEquals ("foo", navigator2.Name);
136                         Assert (!navigator2.MoveTo (navigator1a));
137                         AssertEquals ("foo", navigator2.Name);
138                 }
139
140                 public void TestAttributeNavigation ()
141                 {
142                         XmlDocument document = new XmlDocument ();
143                         document.LoadXml ("<foo bar='baz' quux='quuux' />");
144                         XPathNavigator navigator = document.DocumentElement.CreateNavigator ();
145
146                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
147                         AssertEquals ("foo", navigator.Name);
148                         Assert (navigator.MoveToFirstAttribute ());
149                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
150                         AssertEquals ("bar", navigator.Name);
151                         AssertEquals ("baz", navigator.Value);
152                         Assert (navigator.MoveToNextAttribute ());
153                         AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
154                         AssertEquals ("quux", navigator.Name);
155                         AssertEquals ("quuux", navigator.Value);
156                 }
157
158                 public void TestElementAndRootValues()
159                 {
160                         XmlDocument document = new XmlDocument ();
161                         document.LoadXml ("<foo><bar>baz</bar><quux>quuux</quux></foo>");
162                         XPathNavigator navigator = document.DocumentElement.CreateNavigator ();
163
164                         AssertEquals (XPathNodeType.Element, navigator.NodeType);
165                         AssertEquals ("foo", navigator.Name);
166                         //AssertEquals ("bazquuux", navigator.Value);
167
168                         navigator.MoveToRoot ();
169                         //AssertEquals ("bazquuux", navigator.Value);
170                 }
171         }
172 }