Browse Source

then eol-style=native.

svn path=/trunk/mcs/; revision=59289
Atsushi Eno 20 năm trước cách đây
mục cha
commit
847cc799bd

+ 449 - 449
mcs/class/System.XML/Test/System.Xml.XPath/XPathNavigatorCommonTests.cs

@@ -1,449 +1,449 @@
-//
-// MonoTests.System.Xml.XPathNavigatorCommonTests
-//
-// Author:
-//	Atsushi Enomoto <[email protected]>
-//
-// (C) 2003 Atsushi Enomoto
-//
-
-using System;
-using System.IO;
-using System.Xml;
-using System.Xml.XPath;
-using NUnit.Framework;
-
-namespace MonoTests.System.Xml
-{
-	[TestFixture]
-	public class XPathNavigatorCommonTests : Assertion
-	{
-		XmlDocument document;
-		XPathNavigator nav;
-		XPathDocument xpathDocument;
-
-		[SetUp]
-		public void GetReady ()
-		{
-			document = new XmlDocument ();
-		}
-
-		private XPathNavigator GetXmlDocumentNavigator (string xml)
-		{
-			document.LoadXml (xml);
-			return document.CreateNavigator ();
-		}
-		
-		private XPathNavigator GetXPathDocumentNavigator (XmlNode node)
-		{
-			XmlNodeReader xr = new XmlNodeReader (node);
-			xpathDocument = new XPathDocument (xr);
-			return xpathDocument.CreateNavigator ();
-		}
-
-		private void AssertNavigator (string label, XPathNavigator nav, XPathNodeType type, string prefix, string localName, string ns, string name, string value, bool hasAttributes, bool hasChildren, bool isEmptyElement)
-		{
-			label += nav.GetType ();
-			AssertEquals (label + "NodeType", type, nav.NodeType);
-			AssertEquals (label + "Prefix", prefix, nav.Prefix);
-			AssertEquals (label + "LocalName", localName, nav.LocalName);
-			AssertEquals (label + "Namespace", ns, nav.NamespaceURI);
-			AssertEquals (label + "Name", name, nav.Name);
-			AssertEquals (label + "Value", value, nav.Value);
-			AssertEquals (label + "HasAttributes", hasAttributes, nav.HasAttributes);
-			AssertEquals (label + "HasChildren", hasChildren, nav.HasChildren);
-			AssertEquals (label + "IsEmptyElement", isEmptyElement, nav.IsEmptyElement);
-		}
-
-		[Test]
-		public void DocumentWithXmlDeclaration ()
-		{
-			string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><foo>bar</foo>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			DocumentWithXmlDeclaration (nav);
-			nav = GetXPathDocumentNavigator (document);
-			DocumentWithXmlDeclaration (nav);
-		}
-
-		public void DocumentWithXmlDeclaration (XPathNavigator nav)
-		{
-			nav.MoveToFirstChild ();
-			AssertNavigator ("#1", nav, XPathNodeType.Element, "", "foo", "", "foo", "bar", false, true, false);
-		}
-
-		[Test]
-		public void DocumentWithProcessingInstruction ()
-		{
-			string xml = "<?xml-stylesheet href='foo.xsl' type='text/xsl' ?><foo />";
-
-			nav = GetXmlDocumentNavigator (xml);
-			DocumentWithProcessingInstruction (nav);
-			nav = GetXPathDocumentNavigator (document);
-			DocumentWithProcessingInstruction (nav);
-		}
-
-		public void DocumentWithProcessingInstruction (XPathNavigator nav)
-		{
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#1", nav, XPathNodeType.ProcessingInstruction, "", "xml-stylesheet", "", "xml-stylesheet", "href='foo.xsl' type='text/xsl' ", false, false, false);
-			Assert (!nav.MoveToFirstChild ());
-		}
-
-		[Test]
-		public void XmlRootElementOnly ()
-		{
-			string xml = "<foo />";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlRootElementOnly (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlRootElementOnly (nav);
-		}
-
-		private void XmlRootElementOnly (XPathNavigator nav)
-		{
-			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, false, true);
-			Assert (!nav.MoveToFirstChild ());
-			Assert (!nav.MoveToNext ());
-			Assert (!nav.MoveToPrevious ());
-			nav.MoveToRoot ();
-			AssertNavigator ("#3", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-			Assert (!nav.MoveToNext ());
-		}
-
-		[Test]
-		public void XmlSimpleTextContent ()
-		{
-			string xml = "<foo>Test.</foo>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlSimpleTextContent (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlSimpleTextContent (nav);
-		}
-
-		private void XmlSimpleTextContent (XPathNavigator nav)
-		{
-			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "Test.", false, true, false);
-			Assert (!nav.MoveToNext ());
-			Assert (!nav.MoveToPrevious ());
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#3", nav, XPathNodeType.Text, "", "", "", "", "Test.", false, false, false);
-
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "foo", "", "foo", "Test.", false, true, false);
-
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#5", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
-
-			nav.MoveToFirstChild ();
-			nav.MoveToFirstChild ();
-			nav.MoveToRoot ();
-			AssertNavigator ("#6", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
-			Assert (!nav.MoveToNext ());
-		}
-
-		[Test]
-		public void XmlSimpleElementContent ()
-		{
-			string xml = "<foo><bar /></foo>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlSimpleElementContent (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlSimpleElementContent (nav);
-		}
-
-		private void XmlSimpleElementContent (XPathNavigator nav)
-		{
-			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
-			Assert (!nav.MoveToNext ());
-			Assert (!nav.MoveToPrevious ());
-
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#3", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
-
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
-
-			nav.MoveToRoot ();
-			AssertNavigator ("#5", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-			Assert (!nav.MoveToNext ());
-		}
-
-		[Test]
-		public void XmlTwoElementsContent ()
-		{
-			string xml = "<foo><bar /><baz /></foo>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlTwoElementsContent (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlTwoElementsContent (nav);
-		}
-
-		private void XmlTwoElementsContent (XPathNavigator nav)
-		{
-			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
-			Assert (!nav.MoveToNext ());
-			Assert (!nav.MoveToPrevious ());
-
-			Assert (nav.MoveToFirstChild ());
-			AssertNavigator ("#3", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
-			Assert (!nav.MoveToFirstChild ());
-
-			Assert (nav.MoveToNext ());
-			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "baz", "", "baz", "", false, false, true);
-			Assert (!nav.MoveToFirstChild ());
-
-			Assert (nav.MoveToPrevious ());
-			AssertNavigator ("#5", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
-
-			nav.MoveToRoot ();
-			AssertNavigator ("#6", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-			Assert (!nav.MoveToNext ());
-		}
-
-		[Test]
-		public void XmlElementWithAttributes ()
-		{
-			string xml = "<img src='foo.png' alt='image Fooooooo!' />";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlElementWithAttributes (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlElementWithAttributes (nav);
-		}
-
-		private void XmlElementWithAttributes (XPathNavigator nav)
-		{
-			nav.MoveToFirstChild ();
-			AssertNavigator ("#1", nav, XPathNodeType.Element, "", "img", "", "img", "", true, false, true);
-			Assert (!nav.MoveToNext ());
-			Assert (!nav.MoveToPrevious ());
-
-			Assert (nav.MoveToFirstAttribute ());
-			AssertNavigator ("#2", nav, XPathNodeType.Attribute, "", "src", "", "src", "foo.png", false, false, false);
-			Assert (!nav.MoveToFirstAttribute ());	// On attributes, it fails.
-
-			Assert (nav.MoveToNextAttribute ());
-			AssertNavigator ("#3", nav, XPathNodeType.Attribute, "", "alt", "", "alt", "image Fooooooo!", false, false, false);
-			Assert (!nav.MoveToNextAttribute ());
-
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "img", "", "img", "", true, false, true);
-
-			Assert (nav.MoveToAttribute ("alt", ""));
-			AssertNavigator ("#5", nav, XPathNodeType.Attribute, "", "alt", "", "alt", "image Fooooooo!", false, false, false);
-			Assert (!nav.MoveToAttribute ("src", ""));	// On attributes, it fails.
-			Assert (nav.MoveToParent ());
-			Assert (nav.MoveToAttribute ("src", ""));
-			AssertNavigator ("#6", nav, XPathNodeType.Attribute, "", "src", "", "src", "foo.png", false, false, false);
-
-			nav.MoveToRoot ();
-			AssertNavigator ("#7", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
-		}
-
-		[Test]
-		// seems like MS does not want to fix their long-time-known
-		// XPathNavigator bug, so just set it as NotDotNet.
-		// We are better.
-		[Category ("NotDotNet")]
-		public void XmlNamespaceNode ()
-		{
-			string xml = "<html xmlns='http://www.w3.org/1999/xhtml'><body>test.</body></html>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			XmlNamespaceNode (nav);
-			nav = GetXPathDocumentNavigator (document);
-			XmlNamespaceNode (nav);
-		}
-
-		private void XmlNamespaceNode (XPathNavigator nav)
-		{
-			string xhtml = "http://www.w3.org/1999/xhtml";
-			string xmlNS = "http://www.w3.org/XML/1998/namespace";
-			nav.MoveToFirstChild ();
-			AssertNavigator ("#1", nav, XPathNodeType.Element,
-				"", "html", xhtml, "html", "test.", false, true, false);
-			Assert (nav.MoveToFirstNamespace (XPathNamespaceScope.Local));
-			AssertNavigator ("#2", nav, XPathNodeType.Namespace,
-				"", "", "", "", xhtml, false, false, false);
-
-			// Test difference between Local, ExcludeXml and All.
-			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.Local));
-			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.ExcludeXml));
-			// LAMESPEC: MS.NET 1.0 XmlDocument seems to have some bugs around here.
-			// see http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316808
-#if true
-			Assert (nav.MoveToNextNamespace (XPathNamespaceScope.All));
-			AssertNavigator ("#3", nav, XPathNodeType.Namespace,
-				"", "xml", "", "xml", xmlNS, false, false, false);
-			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.All));
-#endif
-			// Test to check if MoveToRoot() resets Namespace node status.
-			nav.MoveToRoot ();
-			AssertNavigator ("#4", nav, XPathNodeType.Root, "", "", "", "", "test.", false, true, false);
-			nav.MoveToFirstChild ();
-
-			// Test without XPathNamespaceScope argument.
-			Assert (nav.MoveToFirstNamespace ());
-			Assert (nav.MoveToNextNamespace ());
-			AssertNavigator ("#5", nav, XPathNodeType.Namespace,
-				"", "xml", "", "xml", xmlNS, false, false, false);
-
-			// Test MoveToParent()
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#6", nav, XPathNodeType.Element,
-				"", "html", xhtml, "html", "test.", false, true, false);
-
-			nav.MoveToFirstChild ();	// body
-			// Test difference between Local and ExcludeXml
-			Assert ("Local should fail",
-				!nav.MoveToFirstNamespace (XPathNamespaceScope.Local));
-			Assert ("ExcludeXml should succeed",
-				nav.MoveToFirstNamespace (XPathNamespaceScope.ExcludeXml));
-			AssertNavigator ("#7", nav, XPathNodeType.Namespace,
-				"", "", "", "", xhtml, false, false, false);
-
-			Assert (nav.MoveToNextNamespace (XPathNamespaceScope.All));
-			AssertNavigator ("#8", nav, XPathNodeType.Namespace,
-				"", "xml", "", "xml", xmlNS, false, false, false);
-			Assert (nav.MoveToParent ());
-			AssertNavigator ("#9", nav, XPathNodeType.Element,
-				"", "body", xhtml, "body", "test.", false, true, false);
-
-			nav.MoveToRoot ();
-			AssertNavigator ("#10", nav, XPathNodeType.Root, "", "", "", "", "test.", false, true, false);
-		}
-
-		[Test]
-		public void MoveToNamespaces ()
-		{
-			string xml = "<a xmlns:x='urn:x'><b xmlns:y='urn:y'/><c/><d><e attr='a'/></d></a>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			MoveToNamespaces (nav);
-			nav = GetXPathDocumentNavigator (document);
-			MoveToNamespaces (nav);
-		}
-
-		private void MoveToNamespaces (XPathNavigator nav)
-		{
-			XPathNodeIterator iter = nav.Select ("//e");
-			iter.MoveNext ();
-			nav.MoveTo (iter.Current);
-			AssertEquals ("e", nav.Name);
-			nav.MoveToFirstNamespace ();
-			AssertEquals ("x", nav.Name);
-			nav.MoveToNextNamespace ();
-			AssertEquals ("xml", nav.Name);
-		}
-
-		[Test]
-		public void IsDescendant ()
-		{
-			string xml = "<a><b/><c/><d><e attr='a'/></d></a>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			IsDescendant (nav);
-			nav = GetXPathDocumentNavigator (document);
-			IsDescendant (nav);
-		}
-
-		private void IsDescendant (XPathNavigator nav)
-		{
-			XPathNavigator tmp = nav.Clone ();
-			XPathNodeIterator iter = nav.Select ("//e");
-			iter.MoveNext ();
-			Assert (nav.MoveTo (iter.Current));
-			Assert (nav.MoveToFirstAttribute ());
-			AssertEquals ("attr", nav.Name);
-			AssertEquals ("", tmp.Name);
-			Assert (tmp.IsDescendant (nav));
-			Assert (!nav.IsDescendant (tmp));
-			tmp.MoveToFirstChild ();
-			AssertEquals ("a", tmp.Name);
-			Assert (tmp.IsDescendant (nav));
-			Assert (!nav.IsDescendant (tmp));
-			tmp.MoveTo (iter.Current);
-			AssertEquals ("e", tmp.Name);
-			Assert (tmp.IsDescendant (nav));
-			Assert (!nav.IsDescendant (tmp));
-		}
-
-		[Test]
-		public void LiterallySplittedText ()
-		{
-			string xml = "<root><![CDATA[test]]> string</root>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			LiterallySplittedText (nav);
-			nav = GetXPathDocumentNavigator (document);
-			LiterallySplittedText (nav);
-		}
-
-		private void LiterallySplittedText (XPathNavigator nav)
-		{
-			nav.MoveToFirstChild ();
-			nav.MoveToFirstChild ();
-			AssertEquals (XPathNodeType.Text, nav.NodeType);
-			AssertEquals ("test string", nav.Value);
-		}
-
-		// bug #75609
-		[Test]
-		public void SelectChildren ()
-		{
-			string xml = "<root><foo xmlns='urn:foo' /><ns:foo xmlns:ns='urn:foo' /></root>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			SelectChildrenNS (nav);
-			nav = GetXPathDocumentNavigator (document);
-			SelectChildrenNS (nav);
-		}
-
-		private void SelectChildrenNS (XPathNavigator nav)
-		{
-			nav.MoveToFirstChild (); // root
-			XPathNodeIterator iter = nav.SelectChildren ("foo", "urn:foo");
-			AssertEquals (2, iter.Count);
-		}
-
-#if NET_2_0
-
-		[Test]
-		// bug #78067
-		public void OuterXml ()
-		{
-			string xml = @"<?xml version=""1.0""?>
-<one>
-        <two>Some data.</two>
-</one>";
-
-			nav = GetXmlDocumentNavigator (xml);
-			OuterXml (nav);
-			nav = GetXPathDocumentNavigator (document);
-			OuterXml (nav);
-		}
-
-		private void OuterXml (XPathNavigator nav)
-		{
-			string ret = @"<one>
-  <two>Some data.</two>
-</one>";
-			AssertEquals (ret, nav.OuterXml.Replace ("\r\n", "\n"));
-		}
-#endif
-	}
-}
+//
+// MonoTests.System.Xml.XPathNavigatorCommonTests
+//
+// Author:
+//	Atsushi Enomoto <[email protected]>
+//
+// (C) 2003 Atsushi Enomoto
+//
+
+using System;
+using System.IO;
+using System.Xml;
+using System.Xml.XPath;
+using NUnit.Framework;
+
+namespace MonoTests.System.Xml
+{
+	[TestFixture]
+	public class XPathNavigatorCommonTests : Assertion
+	{
+		XmlDocument document;
+		XPathNavigator nav;
+		XPathDocument xpathDocument;
+
+		[SetUp]
+		public void GetReady ()
+		{
+			document = new XmlDocument ();
+		}
+
+		private XPathNavigator GetXmlDocumentNavigator (string xml)
+		{
+			document.LoadXml (xml);
+			return document.CreateNavigator ();
+		}
+		
+		private XPathNavigator GetXPathDocumentNavigator (XmlNode node)
+		{
+			XmlNodeReader xr = new XmlNodeReader (node);
+			xpathDocument = new XPathDocument (xr);
+			return xpathDocument.CreateNavigator ();
+		}
+
+		private void AssertNavigator (string label, XPathNavigator nav, XPathNodeType type, string prefix, string localName, string ns, string name, string value, bool hasAttributes, bool hasChildren, bool isEmptyElement)
+		{
+			label += nav.GetType ();
+			AssertEquals (label + "NodeType", type, nav.NodeType);
+			AssertEquals (label + "Prefix", prefix, nav.Prefix);
+			AssertEquals (label + "LocalName", localName, nav.LocalName);
+			AssertEquals (label + "Namespace", ns, nav.NamespaceURI);
+			AssertEquals (label + "Name", name, nav.Name);
+			AssertEquals (label + "Value", value, nav.Value);
+			AssertEquals (label + "HasAttributes", hasAttributes, nav.HasAttributes);
+			AssertEquals (label + "HasChildren", hasChildren, nav.HasChildren);
+			AssertEquals (label + "IsEmptyElement", isEmptyElement, nav.IsEmptyElement);
+		}
+
+		[Test]
+		public void DocumentWithXmlDeclaration ()
+		{
+			string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><foo>bar</foo>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			DocumentWithXmlDeclaration (nav);
+			nav = GetXPathDocumentNavigator (document);
+			DocumentWithXmlDeclaration (nav);
+		}
+
+		public void DocumentWithXmlDeclaration (XPathNavigator nav)
+		{
+			nav.MoveToFirstChild ();
+			AssertNavigator ("#1", nav, XPathNodeType.Element, "", "foo", "", "foo", "bar", false, true, false);
+		}
+
+		[Test]
+		public void DocumentWithProcessingInstruction ()
+		{
+			string xml = "<?xml-stylesheet href='foo.xsl' type='text/xsl' ?><foo />";
+
+			nav = GetXmlDocumentNavigator (xml);
+			DocumentWithProcessingInstruction (nav);
+			nav = GetXPathDocumentNavigator (document);
+			DocumentWithProcessingInstruction (nav);
+		}
+
+		public void DocumentWithProcessingInstruction (XPathNavigator nav)
+		{
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#1", nav, XPathNodeType.ProcessingInstruction, "", "xml-stylesheet", "", "xml-stylesheet", "href='foo.xsl' type='text/xsl' ", false, false, false);
+			Assert (!nav.MoveToFirstChild ());
+		}
+
+		[Test]
+		public void XmlRootElementOnly ()
+		{
+			string xml = "<foo />";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlRootElementOnly (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlRootElementOnly (nav);
+		}
+
+		private void XmlRootElementOnly (XPathNavigator nav)
+		{
+			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, false, true);
+			Assert (!nav.MoveToFirstChild ());
+			Assert (!nav.MoveToNext ());
+			Assert (!nav.MoveToPrevious ());
+			nav.MoveToRoot ();
+			AssertNavigator ("#3", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+			Assert (!nav.MoveToNext ());
+		}
+
+		[Test]
+		public void XmlSimpleTextContent ()
+		{
+			string xml = "<foo>Test.</foo>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlSimpleTextContent (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlSimpleTextContent (nav);
+		}
+
+		private void XmlSimpleTextContent (XPathNavigator nav)
+		{
+			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "Test.", false, true, false);
+			Assert (!nav.MoveToNext ());
+			Assert (!nav.MoveToPrevious ());
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#3", nav, XPathNodeType.Text, "", "", "", "", "Test.", false, false, false);
+
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "foo", "", "foo", "Test.", false, true, false);
+
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#5", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
+
+			nav.MoveToFirstChild ();
+			nav.MoveToFirstChild ();
+			nav.MoveToRoot ();
+			AssertNavigator ("#6", nav, XPathNodeType.Root, "", "", "", "", "Test.", false, true, false);
+			Assert (!nav.MoveToNext ());
+		}
+
+		[Test]
+		public void XmlSimpleElementContent ()
+		{
+			string xml = "<foo><bar /></foo>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlSimpleElementContent (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlSimpleElementContent (nav);
+		}
+
+		private void XmlSimpleElementContent (XPathNavigator nav)
+		{
+			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
+			Assert (!nav.MoveToNext ());
+			Assert (!nav.MoveToPrevious ());
+
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#3", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
+
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
+
+			nav.MoveToRoot ();
+			AssertNavigator ("#5", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+			Assert (!nav.MoveToNext ());
+		}
+
+		[Test]
+		public void XmlTwoElementsContent ()
+		{
+			string xml = "<foo><bar /><baz /></foo>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlTwoElementsContent (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlTwoElementsContent (nav);
+		}
+
+		private void XmlTwoElementsContent (XPathNavigator nav)
+		{
+			AssertNavigator ("#1", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#2", nav, XPathNodeType.Element, "", "foo", "", "foo", "", false, true, false);
+			Assert (!nav.MoveToNext ());
+			Assert (!nav.MoveToPrevious ());
+
+			Assert (nav.MoveToFirstChild ());
+			AssertNavigator ("#3", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
+			Assert (!nav.MoveToFirstChild ());
+
+			Assert (nav.MoveToNext ());
+			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "baz", "", "baz", "", false, false, true);
+			Assert (!nav.MoveToFirstChild ());
+
+			Assert (nav.MoveToPrevious ());
+			AssertNavigator ("#5", nav, XPathNodeType.Element, "", "bar", "", "bar", "", false, false, true);
+
+			nav.MoveToRoot ();
+			AssertNavigator ("#6", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+			Assert (!nav.MoveToNext ());
+		}
+
+		[Test]
+		public void XmlElementWithAttributes ()
+		{
+			string xml = "<img src='foo.png' alt='image Fooooooo!' />";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlElementWithAttributes (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlElementWithAttributes (nav);
+		}
+
+		private void XmlElementWithAttributes (XPathNavigator nav)
+		{
+			nav.MoveToFirstChild ();
+			AssertNavigator ("#1", nav, XPathNodeType.Element, "", "img", "", "img", "", true, false, true);
+			Assert (!nav.MoveToNext ());
+			Assert (!nav.MoveToPrevious ());
+
+			Assert (nav.MoveToFirstAttribute ());
+			AssertNavigator ("#2", nav, XPathNodeType.Attribute, "", "src", "", "src", "foo.png", false, false, false);
+			Assert (!nav.MoveToFirstAttribute ());	// On attributes, it fails.
+
+			Assert (nav.MoveToNextAttribute ());
+			AssertNavigator ("#3", nav, XPathNodeType.Attribute, "", "alt", "", "alt", "image Fooooooo!", false, false, false);
+			Assert (!nav.MoveToNextAttribute ());
+
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#4", nav, XPathNodeType.Element, "", "img", "", "img", "", true, false, true);
+
+			Assert (nav.MoveToAttribute ("alt", ""));
+			AssertNavigator ("#5", nav, XPathNodeType.Attribute, "", "alt", "", "alt", "image Fooooooo!", false, false, false);
+			Assert (!nav.MoveToAttribute ("src", ""));	// On attributes, it fails.
+			Assert (nav.MoveToParent ());
+			Assert (nav.MoveToAttribute ("src", ""));
+			AssertNavigator ("#6", nav, XPathNodeType.Attribute, "", "src", "", "src", "foo.png", false, false, false);
+
+			nav.MoveToRoot ();
+			AssertNavigator ("#7", nav, XPathNodeType.Root, "", "", "", "", "", false, true, false);
+		}
+
+		[Test]
+		// seems like MS does not want to fix their long-time-known
+		// XPathNavigator bug, so just set it as NotDotNet.
+		// We are better.
+		[Category ("NotDotNet")]
+		public void XmlNamespaceNode ()
+		{
+			string xml = "<html xmlns='http://www.w3.org/1999/xhtml'><body>test.</body></html>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			XmlNamespaceNode (nav);
+			nav = GetXPathDocumentNavigator (document);
+			XmlNamespaceNode (nav);
+		}
+
+		private void XmlNamespaceNode (XPathNavigator nav)
+		{
+			string xhtml = "http://www.w3.org/1999/xhtml";
+			string xmlNS = "http://www.w3.org/XML/1998/namespace";
+			nav.MoveToFirstChild ();
+			AssertNavigator ("#1", nav, XPathNodeType.Element,
+				"", "html", xhtml, "html", "test.", false, true, false);
+			Assert (nav.MoveToFirstNamespace (XPathNamespaceScope.Local));
+			AssertNavigator ("#2", nav, XPathNodeType.Namespace,
+				"", "", "", "", xhtml, false, false, false);
+
+			// Test difference between Local, ExcludeXml and All.
+			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.Local));
+			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.ExcludeXml));
+			// LAMESPEC: MS.NET 1.0 XmlDocument seems to have some bugs around here.
+			// see http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316808
+#if true
+			Assert (nav.MoveToNextNamespace (XPathNamespaceScope.All));
+			AssertNavigator ("#3", nav, XPathNodeType.Namespace,
+				"", "xml", "", "xml", xmlNS, false, false, false);
+			Assert (!nav.MoveToNextNamespace (XPathNamespaceScope.All));
+#endif
+			// Test to check if MoveToRoot() resets Namespace node status.
+			nav.MoveToRoot ();
+			AssertNavigator ("#4", nav, XPathNodeType.Root, "", "", "", "", "test.", false, true, false);
+			nav.MoveToFirstChild ();
+
+			// Test without XPathNamespaceScope argument.
+			Assert (nav.MoveToFirstNamespace ());
+			Assert (nav.MoveToNextNamespace ());
+			AssertNavigator ("#5", nav, XPathNodeType.Namespace,
+				"", "xml", "", "xml", xmlNS, false, false, false);
+
+			// Test MoveToParent()
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#6", nav, XPathNodeType.Element,
+				"", "html", xhtml, "html", "test.", false, true, false);
+
+			nav.MoveToFirstChild ();	// body
+			// Test difference between Local and ExcludeXml
+			Assert ("Local should fail",
+				!nav.MoveToFirstNamespace (XPathNamespaceScope.Local));
+			Assert ("ExcludeXml should succeed",
+				nav.MoveToFirstNamespace (XPathNamespaceScope.ExcludeXml));
+			AssertNavigator ("#7", nav, XPathNodeType.Namespace,
+				"", "", "", "", xhtml, false, false, false);
+
+			Assert (nav.MoveToNextNamespace (XPathNamespaceScope.All));
+			AssertNavigator ("#8", nav, XPathNodeType.Namespace,
+				"", "xml", "", "xml", xmlNS, false, false, false);
+			Assert (nav.MoveToParent ());
+			AssertNavigator ("#9", nav, XPathNodeType.Element,
+				"", "body", xhtml, "body", "test.", false, true, false);
+
+			nav.MoveToRoot ();
+			AssertNavigator ("#10", nav, XPathNodeType.Root, "", "", "", "", "test.", false, true, false);
+		}
+
+		[Test]
+		public void MoveToNamespaces ()
+		{
+			string xml = "<a xmlns:x='urn:x'><b xmlns:y='urn:y'/><c/><d><e attr='a'/></d></a>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			MoveToNamespaces (nav);
+			nav = GetXPathDocumentNavigator (document);
+			MoveToNamespaces (nav);
+		}
+
+		private void MoveToNamespaces (XPathNavigator nav)
+		{
+			XPathNodeIterator iter = nav.Select ("//e");
+			iter.MoveNext ();
+			nav.MoveTo (iter.Current);
+			AssertEquals ("e", nav.Name);
+			nav.MoveToFirstNamespace ();
+			AssertEquals ("x", nav.Name);
+			nav.MoveToNextNamespace ();
+			AssertEquals ("xml", nav.Name);
+		}
+
+		[Test]
+		public void IsDescendant ()
+		{
+			string xml = "<a><b/><c/><d><e attr='a'/></d></a>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			IsDescendant (nav);
+			nav = GetXPathDocumentNavigator (document);
+			IsDescendant (nav);
+		}
+
+		private void IsDescendant (XPathNavigator nav)
+		{
+			XPathNavigator tmp = nav.Clone ();
+			XPathNodeIterator iter = nav.Select ("//e");
+			iter.MoveNext ();
+			Assert (nav.MoveTo (iter.Current));
+			Assert (nav.MoveToFirstAttribute ());
+			AssertEquals ("attr", nav.Name);
+			AssertEquals ("", tmp.Name);
+			Assert (tmp.IsDescendant (nav));
+			Assert (!nav.IsDescendant (tmp));
+			tmp.MoveToFirstChild ();
+			AssertEquals ("a", tmp.Name);
+			Assert (tmp.IsDescendant (nav));
+			Assert (!nav.IsDescendant (tmp));
+			tmp.MoveTo (iter.Current);
+			AssertEquals ("e", tmp.Name);
+			Assert (tmp.IsDescendant (nav));
+			Assert (!nav.IsDescendant (tmp));
+		}
+
+		[Test]
+		public void LiterallySplittedText ()
+		{
+			string xml = "<root><![CDATA[test]]> string</root>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			LiterallySplittedText (nav);
+			nav = GetXPathDocumentNavigator (document);
+			LiterallySplittedText (nav);
+		}
+
+		private void LiterallySplittedText (XPathNavigator nav)
+		{
+			nav.MoveToFirstChild ();
+			nav.MoveToFirstChild ();
+			AssertEquals (XPathNodeType.Text, nav.NodeType);
+			AssertEquals ("test string", nav.Value);
+		}
+
+		// bug #75609
+		[Test]
+		public void SelectChildren ()
+		{
+			string xml = "<root><foo xmlns='urn:foo' /><ns:foo xmlns:ns='urn:foo' /></root>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			SelectChildrenNS (nav);
+			nav = GetXPathDocumentNavigator (document);
+			SelectChildrenNS (nav);
+		}
+
+		private void SelectChildrenNS (XPathNavigator nav)
+		{
+			nav.MoveToFirstChild (); // root
+			XPathNodeIterator iter = nav.SelectChildren ("foo", "urn:foo");
+			AssertEquals (2, iter.Count);
+		}
+
+#if NET_2_0
+
+		[Test]
+		// bug #78067
+		public void OuterXml ()
+		{
+			string xml = @"<?xml version=""1.0""?>
+<one>
+        <two>Some data.</two>
+</one>";
+
+			nav = GetXmlDocumentNavigator (xml);
+			OuterXml (nav);
+			nav = GetXPathDocumentNavigator (document);
+			OuterXml (nav);
+		}
+
+		private void OuterXml (XPathNavigator nav)
+		{
+			string ret = @"<one>
+  <two>Some data.</two>
+</one>";
+			AssertEquals (ret, nav.OuterXml.Replace ("\r\n", "\n"));
+		}
+#endif
+	}
+}