2 // MonoTests.System.Xml.XPathNavigatorTests
5 // Jason Diamond <jason@injektilo.org>
6 // Martin Willemoes Hansen <mwh@sysrq.dk>
8 // (C) 2002 Jason Diamond
9 // (C) 2003 Martin Willemoes Hansen
14 using System.Xml.XPath;
16 using NUnit.Framework;
18 namespace MonoTests.System.Xml
21 public class XPathNavigatorTests : Assertion
24 XPathNavigator navigator;
27 public void GetReady ()
29 document = new XmlDocument ();
33 public void CreateNavigator ()
35 document.LoadXml ("<foo />");
36 navigator = document.CreateNavigator ();
37 AssertNotNull (navigator);
41 public void PropertiesOnDocument ()
43 document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
44 navigator = document.CreateNavigator ();
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);
57 public void PropertiesOnElement ()
59 document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
60 navigator = document.DocumentElement.CreateNavigator ();
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);
73 public void PropertiesOnAttribute ()
75 document.LoadXml ("<foo bar:baz='quux' xmlns:bar='#bar' />");
76 navigator = document.DocumentElement.GetAttributeNode("baz", "#bar").CreateNavigator ();
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);
89 public void Navigation ()
91 document.LoadXml ("<foo><bar /><baz /></foo>");
92 navigator = document.DocumentElement.CreateNavigator ();
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);
123 public void MoveToAndIsSamePosition ()
125 XmlDocument document1 = new XmlDocument ();
126 document1.LoadXml ("<foo><bar /></foo>");
127 XPathNavigator navigator1a = document1.DocumentElement.CreateNavigator ();
128 XPathNavigator navigator1b = document1.DocumentElement.CreateNavigator ();
130 XmlDocument document2 = new XmlDocument ();
131 document2.LoadXml ("<foo><bar /></foo>");
132 XPathNavigator navigator2 = document2.DocumentElement.CreateNavigator ();
134 AssertEquals ("foo", navigator1a.Name);
135 Assert (navigator1a.MoveToFirstChild ());
136 AssertEquals ("bar", navigator1a.Name);
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);
144 Assert (!navigator2.IsSamePosition (navigator1a));
145 AssertEquals ("foo", navigator2.Name);
146 Assert (!navigator2.MoveTo (navigator1a));
147 AssertEquals ("foo", navigator2.Name);
151 public void AttributeNavigation ()
153 document.LoadXml ("<foo bar='baz' quux='quuux' />");
154 navigator = document.DocumentElement.CreateNavigator ();
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);
169 public void ElementAndRootValues()
171 document.LoadXml ("<foo><bar>baz</bar><quux>quuux</quux></foo>");
172 navigator = document.DocumentElement.CreateNavigator ();
174 AssertEquals (XPathNodeType.Element, navigator.NodeType);
175 AssertEquals ("foo", navigator.Name);
176 //AssertEquals ("bazquuux", navigator.Value);
178 navigator.MoveToRoot ();
179 //AssertEquals ("bazquuux", navigator.Value);
183 public void DocumentWithXmlDeclaration ()
185 document.LoadXml ("<?xml version=\"1.0\" standalone=\"yes\"?>\"<Root><foo>bar</foo></Root>");
186 navigator = document.CreateNavigator ();
188 navigator.MoveToRoot ();
189 navigator.MoveToFirstChild ();
190 AssertEquals (XPathNodeType.Element, navigator.NodeType);
191 AssertEquals ("Root", navigator.Name);