Remove fixed testcases from fixme.lst and knownFailures.lst; ignore one testcase...
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlReaderCommonTests.cs
index 99fe7f89a61ada0c575ed2aa583209a3e9054195..dc7c4bc113f8e798b6462d0442503a4a80de18a8 100644 (file)
@@ -13,13 +13,15 @@ using System;
 using System.IO;\r
 using System.Text;\r
 using System.Xml;\r
+using System.Xml.Schema;\r
+using System.Xml.XPath;\r
 \r
 using NUnit.Framework;\r
 \r
 namespace MonoTests.System.Xml\r
 {\r
        [TestFixture]\r
-       public class XmlReaderTests\r
+       public class XmlReaderTests : Assertion\r
        {\r
                [SetUp]\r
                public void GetReady ()\r
@@ -39,10 +41,10 @@ namespace MonoTests.System.Xml
                // copy from XmlTextReaderTests\r
                private void AssertStartDocument (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.ReadState == ReadState.Initial);\r
-                       Assertion.Assert (xmlReader.NodeType == XmlNodeType.None);\r
-                       Assertion.Assert (xmlReader.Depth == 0);\r
-                       Assertion.Assert (!xmlReader.EOF);\r
+                       Assert (xmlReader.ReadState == ReadState.Initial);\r
+                       Assert (xmlReader.NodeType == XmlNodeType.None);\r
+                       Assert (xmlReader.Depth == 0);\r
+                       Assert (!xmlReader.EOF);\r
                }\r
 \r
                private void AssertNode (\r
@@ -57,13 +59,17 @@ namespace MonoTests.System.Xml
                        string value,\r
                        int attributeCount)\r
                {\r
-                       Assertion.Assert ("Read() return value", xmlReader.Read ());\r
-                       Assertion.Assert ("ReadState", xmlReader.ReadState == ReadState.Interactive);\r
-                       Assertion.Assert ("!EOF", !xmlReader.EOF);\r
-                       AssertNodeValues (xmlReader, nodeType, depth, isEmptyElement, name, prefix, localName, namespaceURI, value, attributeCount);\r
+                       Assert ("Read() return value", xmlReader.Read ());\r
+                       Assert ("ReadState", xmlReader.ReadState == ReadState.Interactive);\r
+                       Assert ("!EOF", !xmlReader.EOF);\r
+                       AssertNodeValues ("", xmlReader, nodeType, depth,\r
+                               isEmptyElement, name, prefix, localName,\r
+                               namespaceURI, value, value != String.Empty,\r
+                               attributeCount, attributeCount > 0);\r
                }\r
 \r
                private void AssertNodeValues (\r
+                       string label,\r
                        XmlReader xmlReader,\r
                        XmlNodeType nodeType,\r
                        int depth,\r
@@ -75,25 +81,48 @@ namespace MonoTests.System.Xml
                        string value,\r
                        int attributeCount)\r
                {\r
-                       Assertion.AssertEquals ("NodeType", nodeType, xmlReader.NodeType);\r
-                       Assertion.AssertEquals ("Depth", depth, xmlReader.Depth);\r
-                       Assertion.AssertEquals ("IsEmptyElement", isEmptyElement, xmlReader.IsEmptyElement);\r
+                       AssertNodeValues (label, xmlReader, nodeType, depth,\r
+                               isEmptyElement, name, prefix, localName,\r
+                               namespaceURI, value, value != String.Empty,\r
+                               attributeCount, attributeCount > 0);\r
+               }\r
+\r
+               private void AssertNodeValues (\r
+                       string label,\r
+                       XmlReader xmlReader,\r
+                       XmlNodeType nodeType,\r
+                       int depth,\r
+                       bool isEmptyElement,\r
+                       string name,\r
+                       string prefix,\r
+                       string localName,\r
+                       string namespaceURI,\r
+                       string value,\r
+                       bool hasValue,\r
+                       int attributeCount,\r
+                       bool hasAttributes)\r
+               {\r
+                       label = String.Concat (label, "(", xmlReader.GetType ().Name, ")");\r
+                       AssertEquals (label + ": NodeType", nodeType, xmlReader.NodeType);\r
+                       AssertEquals (label + ": IsEmptyElement", isEmptyElement, xmlReader.IsEmptyElement);\r
+\r
+                       AssertEquals (label + ": name", name, xmlReader.Name);\r
 \r
-                       Assertion.AssertEquals ("name", name, xmlReader.Name);\r
+                       AssertEquals (label + ": prefix", prefix, xmlReader.Prefix);\r
 \r
-                       Assertion.AssertEquals ("prefix", prefix, xmlReader.Prefix);\r
+                       AssertEquals (label + ": localName", localName, xmlReader.LocalName);\r
 \r
-                       Assertion.AssertEquals ("localName", localName, xmlReader.LocalName);\r
+                       AssertEquals (label + ": namespaceURI", namespaceURI, xmlReader.NamespaceURI);\r
 \r
-                       Assertion.AssertEquals ("namespaceURI", namespaceURI, xmlReader.NamespaceURI);\r
+                       AssertEquals (label + ": Depth", depth, xmlReader.Depth);\r
 \r
-                       Assertion.AssertEquals ("hasValue", (value != String.Empty), xmlReader.HasValue);\r
+                       AssertEquals (label + ": hasValue", hasValue, xmlReader.HasValue);\r
 \r
-                       Assertion.AssertEquals ("Value", value, xmlReader.Value);\r
+                       AssertEquals (label + ": Value", value, xmlReader.Value);\r
 \r
-                       Assertion.AssertEquals ("hasAttributes", attributeCount > 0, xmlReader.HasAttributes);\r
+                       AssertEquals (label + ": hasAttributes", hasAttributes, xmlReader.HasAttributes);\r
 \r
-                       Assertion.AssertEquals ("attributeCount", attributeCount, xmlReader.AttributeCount);\r
+                       AssertEquals (label + ": attributeCount", attributeCount, xmlReader.AttributeCount);\r
                }\r
 \r
                private void AssertAttribute (\r
@@ -104,26 +133,26 @@ namespace MonoTests.System.Xml
                        string namespaceURI,\r
                        string value)\r
                {\r
-                       Assertion.AssertEquals ("value", value, xmlReader [name]);\r
+                       AssertEquals ("value", value, xmlReader [name]);\r
 \r
-                       Assertion.Assert (xmlReader.GetAttribute (name) == value);\r
+                       Assert (xmlReader.GetAttribute (name) == value);\r
 \r
                        if (namespaceURI != String.Empty) {\r
-                               Assertion.Assert (xmlReader[localName, namespaceURI] == value);\r
-                               Assertion.Assert (xmlReader.GetAttribute (localName, namespaceURI) == value);\r
+                               Assert (xmlReader[localName, namespaceURI] == value);\r
+                               Assert (xmlReader.GetAttribute (localName, namespaceURI) == value);\r
                        }\r
                }\r
 \r
                private void AssertEndDocument (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert ("could read", !xmlReader.Read ());\r
-                       Assertion.AssertEquals ("NodeType is not XmlNodeType.None", XmlNodeType.None, xmlReader.NodeType);\r
-                       Assertion.AssertEquals ("Depth is not 0", 0, xmlReader.Depth);\r
-                       Assertion.AssertEquals ("ReadState is not ReadState.EndOfFile",  ReadState.EndOfFile, xmlReader.ReadState);\r
-                       Assertion.Assert ("not EOF", xmlReader.EOF);\r
+                       Assert ("could read", !xmlReader.Read ());\r
+                       AssertEquals ("NodeType is not XmlNodeType.None", XmlNodeType.None, xmlReader.NodeType);\r
+                       AssertEquals ("Depth is not 0", 0, xmlReader.Depth);\r
+                       AssertEquals ("ReadState is not ReadState.EndOfFile",  ReadState.EndOfFile, xmlReader.ReadState);\r
+                       Assert ("not EOF", xmlReader.EOF);\r
 \r
                        xmlReader.Close ();\r
-                       Assertion.AssertEquals ("ReadState is not ReadState.Cosed", ReadState.Closed, xmlReader.ReadState);\r
+                       AssertEquals ("ReadState is not ReadState.Cosed", ReadState.Closed, xmlReader.ReadState);\r
                }\r
 \r
                private delegate void TestMethod (XmlReader reader);\r
@@ -131,19 +160,33 @@ namespace MonoTests.System.Xml
                private void RunTest (string xml, TestMethod method)\r
                {\r
                        xtr = new XmlTextReader (new StringReader (xml));\r
-                       try {\r
-                               method (xtr);\r
-                       } catch (AssertionException ex) {\r
-                               throw new AssertionException ("XmlTextReader failed:  " + ex.Message, ex);\r
-                       }\r
+                       method (xtr);\r
+\r
+                       // DTD validation\r
+                       xtr = new XmlTextReader (new StringReader (xml));\r
+                       XmlValidatingReader xvr = new XmlValidatingReader (xtr);\r
+                       xvr.ValidationType = ValidationType.DTD;\r
+                       xvr.EntityHandling = EntityHandling.ExpandCharEntities;\r
+                       method (xvr);\r
 \r
+                       // XSD validation\r
+                       xtr = new XmlTextReader (new StringReader (xml));\r
+                       xvr = new XmlValidatingReader (xtr);\r
+                       xvr.EntityHandling = EntityHandling.ExpandCharEntities;\r
+                       method (xvr);\r
+\r
+                       document.XmlResolver = null;\r
                        document.LoadXml (xml);\r
                        xnr = new XmlNodeReader (document);\r
-                       try {\r
-                               method (xnr);\r
-                       } catch (AssertionException ex) {\r
-                               throw new AssertionException ("XmlNodeReader failed:  " + ex.Message, ex);\r
-                       }\r
+                       method (xnr);\r
+#if NET_2_0\r
+/*\r
+                       // XPathNavigatorReader tests\r
+                       System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument (new StringReader (xml));\r
+                       XmlReader xpr = doc.CreateNavigator ().ReadSubtree ();\r
+                       method (xpr);\r
+*/\r
+#endif\r
                }\r
 \r
 \r
@@ -158,13 +201,13 @@ namespace MonoTests.System.Xml
 \r
                private void InitialState (XmlReader reader)\r
                {\r
-                       Assertion.AssertEquals ("Depth", 0, reader.Depth);\r
-                       Assertion.AssertEquals ("EOF", false, reader.EOF);\r
-                       Assertion.AssertEquals ("HasValue", false, reader.HasValue);\r
-                       Assertion.AssertEquals ("IsEmptyElement", false, reader.IsEmptyElement);\r
-                       Assertion.AssertEquals ("LocalName", String.Empty, reader.LocalName);\r
-                       Assertion.AssertEquals ("NodeType", XmlNodeType.None, reader.NodeType);\r
-                       Assertion.AssertEquals ("ReadState", ReadState.Initial, reader.ReadState);\r
+                       AssertEquals ("Depth", 0, reader.Depth);\r
+                       AssertEquals ("EOF", false, reader.EOF);\r
+                       AssertEquals ("HasValue", false, reader.HasValue);\r
+                       AssertEquals ("IsEmptyElement", false, reader.IsEmptyElement);\r
+                       AssertEquals ("LocalName", String.Empty, reader.LocalName);\r
+                       AssertEquals ("NodeType", XmlNodeType.None, reader.NodeType);\r
+                       AssertEquals ("ReadState", ReadState.Initial, reader.ReadState);\r
                }\r
 \r
                [Test]\r
@@ -176,25 +219,53 @@ namespace MonoTests.System.Xml
                public void Read (XmlReader reader)\r
                {\r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("<root>.NodeType", XmlNodeType.Element, reader.NodeType);\r
-                       Assertion.AssertEquals ("<root>.Name", "root", reader.Name);\r
-                       Assertion.AssertEquals ("<root>.ReadState", ReadState.Interactive, reader.ReadState);\r
-                       Assertion.AssertEquals ("<root>.Depth", 0, reader.Depth);\r
+                       AssertEquals ("<root>.NodeType", XmlNodeType.Element, reader.NodeType);\r
+                       AssertEquals ("<root>.Name", "root", reader.Name);\r
+                       AssertEquals ("<root>.ReadState", ReadState.Interactive, reader.ReadState);\r
+                       AssertEquals ("<root>.Depth", 0, reader.Depth);\r
 \r
                        // move to 'child'\r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("<child/>.Depth", 1, reader.Depth);\r
-                       Assertion.AssertEquals ("<child/>.NodeType", XmlNodeType.Element, reader.NodeType);\r
-                       Assertion.AssertEquals ("<child/>.Name", "child", reader.Name);\r
+                       AssertEquals ("<child/>.Depth", 1, reader.Depth);\r
+                       AssertEquals ("<child/>.NodeType", XmlNodeType.Element, reader.NodeType);\r
+                       AssertEquals ("<child/>.Name", "child", reader.Name);\r
 \r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("</root>.Depth", 0, reader.Depth);\r
-                       Assertion.AssertEquals ("</root>.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
-                       Assertion.AssertEquals ("</root>.Name", "root", reader.Name);\r
+                       AssertEquals ("</root>.Depth", 0, reader.Depth);\r
+                       AssertEquals ("</root>.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
+                       AssertEquals ("</root>.Name", "root", reader.Name);\r
 \r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("end.EOF", true, reader.EOF);\r
-                       Assertion.AssertEquals ("end.NodeType", XmlNodeType.None, reader.NodeType);\r
+                       AssertEquals ("end.EOF", true, reader.EOF);\r
+                       AssertEquals ("end.NodeType", XmlNodeType.None, reader.NodeType);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotDotNet")]\r
+               public void ReadAttributeValue ()\r
+               {\r
+                       RunTest ("<root attr=''/>", new TestMethod (ReadAttributeValue));\r
+               }\r
+\r
+               public void ReadAttributeValue (XmlReader reader)\r
+               {\r
+                       reader.Read (); // root\r
+                       Assert (reader.MoveToFirstAttribute ());\r
+                       // It looks like that MS.NET shows AttributeCount and\r
+                       // HasAttributes as the same as element node!\r
+                       this.AssertNodeValues ("#1",\r
+                               reader, XmlNodeType.Attribute,\r
+                               1, false, "attr", "", "attr", "", "", true, 1, true);\r
+                       Assert (reader.ReadAttributeValue ());\r
+                       // MS.NET XmlTextReader fails. Its Prefix returns \r
+                       // null instead of "". It is fixed in MS.NET 2.0.\r
+                       this.AssertNodeValues ("#2",\r
+                               reader, XmlNodeType.Text,\r
+                               2, false, "", "", "", "", "", true, 1, true);\r
+                       Assert (reader.MoveToElement ());\r
+                       this.AssertNodeValues ("#3",\r
+                               reader, XmlNodeType.Element,\r
+                               0, true, "root", "", "root", "", "", false, 1, true);\r
                }\r
 \r
                [Test]\r
@@ -206,13 +277,13 @@ namespace MonoTests.System.Xml
                public void ReadEmptyElement (XmlReader reader)\r
                {\r
                        reader.Read (); // root\r
-                       Assertion.AssertEquals (false, reader.IsEmptyElement);\r
+                       AssertEquals (false, reader.IsEmptyElement);\r
                        reader.Read (); // foo\r
-                       Assertion.AssertEquals ("foo", reader.Name);\r
-                       Assertion.AssertEquals (true, reader.IsEmptyElement);\r
+                       AssertEquals ("foo", reader.Name);\r
+                       AssertEquals (true, reader.IsEmptyElement);\r
                        reader.Read (); // bar\r
-                       Assertion.AssertEquals ("bar", reader.Name);\r
-                       Assertion.AssertEquals (false, reader.IsEmptyElement);\r
+                       AssertEquals ("bar", reader.Name);\r
+                       AssertEquals (false, reader.IsEmptyElement);\r
                }\r
 \r
                [Test]\r
@@ -231,20 +302,20 @@ namespace MonoTests.System.Xml
 \r
                        reader.Read ();\r
                        string s = reader.ReadString ();\r
-                       Assertion.AssertEquals ("readString.1.ret_val", "  test of ", s);\r
-                       Assertion.AssertEquals ("readString.1.Name", "b", reader.Name);\r
+                       AssertEquals ("readString.1.ret_val", "  test of ", s);\r
+                       AssertEquals ("readString.1.Name", "b", reader.Name);\r
                        s = reader.ReadString ();\r
-                       Assertion.AssertEquals ("readString.2.ret_val", "mixed", s);\r
-                       Assertion.AssertEquals ("readString.2.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
+                       AssertEquals ("readString.2.ret_val", "mixed", s);\r
+                       AssertEquals ("readString.2.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
                        s = reader.ReadString ();       // never proceeds.\r
-                       Assertion.AssertEquals ("readString.3.ret_val", String.Empty, s);\r
-                       Assertion.AssertEquals ("readString.3.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
+                       AssertEquals ("readString.3.ret_val", String.Empty, s);\r
+                       AssertEquals ("readString.3.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("readString.4.NodeType", XmlNodeType.Text, reader.NodeType);\r
-                       Assertion.AssertEquals ("readString.4.Value", " string.", reader.Value);\r
+                       AssertEquals ("readString.4.NodeType", XmlNodeType.Text, reader.NodeType);\r
+                       AssertEquals ("readString.4.Value", " string.", reader.Value);\r
                        s = reader.ReadString ();       // reads the same Text node.\r
-                       Assertion.AssertEquals ("readString.5.ret_val", " string. cdata string.", s);\r
-                       Assertion.AssertEquals ("readString.5.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
+                       AssertEquals ("readString.5.ret_val", " string. cdata string.", s);\r
+                       AssertEquals ("readString.5.NodeType", XmlNodeType.EndElement, reader.NodeType);\r
                }\r
 \r
                [Test]\r
@@ -258,13 +329,13 @@ namespace MonoTests.System.Xml
                {\r
                        reader.Read ();\r
                        reader.Read ();\r
-                       Assertion.AssertEquals ("initial.ReadState", ReadState.Interactive, reader.ReadState);\r
-                       Assertion.AssertEquals ("initial.EOF", false, reader.EOF);\r
-                       Assertion.AssertEquals ("initial.NodeType", XmlNodeType.Element, reader.NodeType);\r
+                       AssertEquals ("initial.ReadState", ReadState.Interactive, reader.ReadState);\r
+                       AssertEquals ("initial.EOF", false, reader.EOF);\r
+                       AssertEquals ("initial.NodeType", XmlNodeType.Element, reader.NodeType);\r
                        string s = reader.ReadInnerXml ();\r
-                       Assertion.AssertEquals ("read_all", "test of <b>mixed</b> string.", s);\r
-                       Assertion.AssertEquals ("after.Name", "bar", reader.Name);\r
-                       Assertion.AssertEquals ("after.NodeType", XmlNodeType.Element, reader.NodeType);\r
+                       AssertEquals ("read_all", "test of <b>mixed</b> string.", s);\r
+                       AssertEquals ("after.Name", "bar", reader.Name);\r
+                       AssertEquals ("after.NodeType", XmlNodeType.Element, reader.NodeType);\r
                }\r
 \r
 \r
@@ -402,13 +473,13 @@ namespace MonoTests.System.Xml
                }\r
 \r
                [Test]\r
-               public void EmptyElementWithTwoAttributes ()\r
+               public void EmptyElementWithAttributes ()\r
                {\r
-                       string xml = @"<foo bar=""baz"" quux='quuux'/>";\r
-                       RunTest (xml, new TestMethod (EmptyElementWithTwoAttributes ));\r
+                       string xml = @"<foo bar=""baz"" quux='quuux' x:foo='x-foo' xmlns:x = 'urn:xfoo' />";\r
+                       RunTest (xml, new TestMethod (EmptyElementWithAttributes ));\r
                }\r
 \r
-               public void EmptyElementWithTwoAttributes (XmlReader xmlReader)\r
+               public void EmptyElementWithAttributes (XmlReader xmlReader)\r
                {\r
 \r
                        AssertStartDocument (xmlReader);\r
@@ -423,7 +494,7 @@ namespace MonoTests.System.Xml
                                "foo", // localName\r
                                String.Empty, // namespaceURI\r
                                String.Empty, // value\r
-                               2 // attributeCount\r
+                               4 // attributeCount\r
                        );\r
 \r
                        AssertAttribute (\r
@@ -444,6 +515,33 @@ namespace MonoTests.System.Xml
                                "quuux" // value\r
                        );\r
 \r
+                       AssertAttribute (\r
+                               xmlReader, // xmlReader\r
+                               "notexist", // name\r
+                               String.Empty, // prefix\r
+                               "notexist", // localName\r
+                               String.Empty, // namespaceURI\r
+                               null // value\r
+                       );\r
+\r
+                       AssertAttribute (\r
+                               xmlReader, // xmlReader\r
+                               "x:foo", // name\r
+                               "x", // prefix\r
+                               "foo", // localName\r
+                               "urn:xfoo", // namespaceURI\r
+                               "x-foo" // value\r
+                       );\r
+\r
+                       AssertAttribute (\r
+                               xmlReader, // xmlReader\r
+                               "x:bar", // name\r
+                               "x", // prefix\r
+                               "bar", // localName\r
+                               "urn:xfoo", // namespaceURI\r
+                               null // value\r
+                       );\r
+\r
                        AssertEndDocument (xmlReader);\r
                }\r
 \r
@@ -580,138 +678,6 @@ namespace MonoTests.System.Xml
                        AssertEndDocument (xmlReader);\r
                }\r
 \r
-               [Test]\r
-               public void EntityReference ()\r
-               {\r
-                       string xml = "<foo>&bar;</foo>";\r
-                       RunTest (xml, new TestMethod (EntityReference));\r
-               }\r
-\r
-               public void EntityReference (XmlReader xmlReader)\r
-               {\r
-                       AssertStartDocument (xmlReader);\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.Element, // nodeType\r
-                               0, //depth\r
-                               false, // isEmptyElement\r
-                               "foo", // name\r
-                               String.Empty, // prefix\r
-                               "foo", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.EntityReference, // nodeType\r
-                               1, //depth\r
-                               false, // isEmptyElement\r
-                               "bar", // name\r
-                               String.Empty, // prefix\r
-                               "bar", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.EndElement, // nodeType\r
-                               0, //depth\r
-                               false, // isEmptyElement\r
-                               "foo", // name\r
-                               String.Empty, // prefix\r
-                               "foo", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertEndDocument (xmlReader);\r
-               }\r
-\r
-               [Test]\r
-               public void EntityReferenceInsideText ()\r
-               {\r
-                       string xml = "<foo>bar&baz;quux</foo>";\r
-                       RunTest (xml, new TestMethod (EntityReferenceInsideText));\r
-               }\r
-\r
-               public void EntityReferenceInsideText (XmlReader xmlReader)\r
-               {\r
-                       AssertStartDocument (xmlReader);\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.Element, // nodeType\r
-                               0, //depth\r
-                               false, // isEmptyElement\r
-                               "foo", // name\r
-                               String.Empty, // prefix\r
-                               "foo", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.Text, // nodeType\r
-                               1, //depth\r
-                               false, // isEmptyElement\r
-                               String.Empty, // name\r
-                               String.Empty, // prefix\r
-                               String.Empty, // localName\r
-                               String.Empty, // namespaceURI\r
-                               "bar", // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.EntityReference, // nodeType\r
-                               1, //depth\r
-                               false, // isEmptyElement\r
-                               "baz", // name\r
-                               String.Empty, // prefix\r
-                               "baz", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.Text, // nodeType\r
-                               1, //depth\r
-                               false, // isEmptyElement\r
-                               String.Empty, // name\r
-                               String.Empty, // prefix\r
-                               String.Empty, // localName\r
-                               String.Empty, // namespaceURI\r
-                               "quux", // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertNode (\r
-                               xmlReader, // xmlReader\r
-                               XmlNodeType.EndElement, // nodeType\r
-                               0, //depth\r
-                               false, // isEmptyElement\r
-                               "foo", // name\r
-                               String.Empty, // prefix\r
-                               "foo", // localName\r
-                               String.Empty, // namespaceURI\r
-                               String.Empty, // value\r
-                               0 // attributeCount\r
-                       );\r
-\r
-                       AssertEndDocument (xmlReader);\r
-               }\r
-\r
                [Test]\r
                public void CharacterReferences ()\r
                {\r
@@ -923,7 +889,7 @@ namespace MonoTests.System.Xml
                                "http://foo/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace (String.Empty));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace (String.Empty));\r
 \r
                        AssertEndDocument (xmlReader);\r
                }\r
@@ -961,7 +927,7 @@ namespace MonoTests.System.Xml
                                "http://foo/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
 \r
                        AssertNode (\r
                                xmlReader, // xmlReader\r
@@ -985,8 +951,8 @@ namespace MonoTests.System.Xml
                                "http://baz/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
-                       Assertion.AssertEquals ("http://baz/", xmlReader.LookupNamespace ("baz"));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertEquals ("http://baz/", xmlReader.LookupNamespace ("baz"));\r
 \r
                        AssertNode (\r
                                xmlReader, // xmlReader\r
@@ -1001,8 +967,8 @@ namespace MonoTests.System.Xml
                                0 // attributeCount\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
-                       Assertion.AssertNull (xmlReader.LookupNamespace ("baz"));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertNull (xmlReader.LookupNamespace ("baz"));\r
 \r
                        AssertEndDocument (xmlReader);\r
                }\r
@@ -1040,7 +1006,7 @@ namespace MonoTests.System.Xml
                                "http://foo/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
 \r
                        AssertNode (\r
                                xmlReader, // xmlReader\r
@@ -1064,8 +1030,8 @@ namespace MonoTests.System.Xml
                                "http://baz/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
-                       Assertion.AssertEquals ("http://baz/", xmlReader.LookupNamespace (String.Empty));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertEquals ("http://baz/", xmlReader.LookupNamespace (String.Empty));\r
 \r
                        AssertNode (\r
                                xmlReader, // xmlReader\r
@@ -1080,7 +1046,7 @@ namespace MonoTests.System.Xml
                                0 // attributeCount\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
+                       AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));\r
 \r
                        AssertEndDocument (xmlReader);\r
                }\r
@@ -1127,7 +1093,7 @@ namespace MonoTests.System.Xml
                                "http://bar/" // value\r
                        );\r
 \r
-                       Assertion.AssertEquals ("http://bar/", xmlReader.LookupNamespace ("bar"));\r
+                       AssertEquals ("http://bar/", xmlReader.LookupNamespace ("bar"));\r
 \r
                        AssertEndDocument (xmlReader);\r
                }\r
@@ -1141,12 +1107,12 @@ namespace MonoTests.System.Xml
 \r
                public void MoveToElementFromAttribute (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.Read ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
-                       Assertion.Assert (xmlReader.MoveToFirstAttribute ());\r
-                       Assertion.AssertEquals (XmlNodeType.Attribute, xmlReader.NodeType);\r
-                       Assertion.Assert (xmlReader.MoveToElement ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.MoveToFirstAttribute ());\r
+                       AssertEquals (XmlNodeType.Attribute, xmlReader.NodeType);\r
+                       Assert (xmlReader.MoveToElement ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
                }\r
 \r
                [Test]\r
@@ -1158,10 +1124,10 @@ namespace MonoTests.System.Xml
 \r
                public void MoveToElementFromElement (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.Read ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
-                       Assertion.Assert (!xmlReader.MoveToElement ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (!xmlReader.MoveToElement ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
                }\r
 \r
                [Test]\r
@@ -1173,10 +1139,10 @@ namespace MonoTests.System.Xml
 \r
                public void MoveToFirstAttributeWithNoAttributes (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.Read ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
-                       Assertion.Assert (!xmlReader.MoveToFirstAttribute ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (!xmlReader.MoveToFirstAttribute ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
                }\r
 \r
                [Test]\r
@@ -1188,10 +1154,10 @@ namespace MonoTests.System.Xml
 \r
                public void MoveToNextAttributeWithNoAttributes (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.Read ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
-                       Assertion.Assert (!xmlReader.MoveToNextAttribute ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (!xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
                }\r
 \r
                [Test]\r
@@ -1236,19 +1202,20 @@ namespace MonoTests.System.Xml
                                "quuux" // value\r
                        );\r
 \r
-                       Assertion.Assert (xmlReader.MoveToNextAttribute ());\r
-                       Assertion.Assert ("bar" == xmlReader.Name || "quux" == xmlReader.Name);\r
-                       Assertion.Assert ("baz" == xmlReader.Value || "quuux" == xmlReader.Value);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("bar", xmlReader.Name);\r
+                       AssertEquals ("baz", xmlReader.Value);\r
 \r
-                       Assertion.Assert (xmlReader.MoveToNextAttribute ());\r
-                       Assertion.Assert ("bar" == xmlReader.Name || "quux" == xmlReader.Name);\r
-                       Assertion.Assert ("baz" == xmlReader.Value || "quuux" == xmlReader.Value);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("quux", xmlReader.Name);\r
+                       AssertEquals ("quuux", xmlReader.Value);\r
 \r
-                       Assertion.Assert (!xmlReader.MoveToNextAttribute ());\r
+                       Assert (!xmlReader.MoveToNextAttribute ());\r
 \r
-                       Assertion.Assert (xmlReader.MoveToElement ());\r
+                       Assert (xmlReader.MoveToElement ());\r
 \r
                        AssertNodeValues (\r
+                               "#1",\r
                                xmlReader, // xmlReader\r
                                XmlNodeType.Element, // nodeType\r
                                0, //depth\r
@@ -1264,6 +1231,75 @@ namespace MonoTests.System.Xml
                        AssertEndDocument (xmlReader);\r
                }\r
 \r
+               [Test]\r
+//             [Category ("NotDotNet")] // MS XmlNodeReader never moves to xml declaration.\r
+               [Ignore ("Too inconsistent reference implementations to determine which is correct behavior.")]\r
+               public void MoveToXmlDeclAttributes ()\r
+               {\r
+                       string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><root/>";\r
+                       RunTest (xml, new TestMethod (MoveToXmlDeclAttributes));\r
+               }\r
+\r
+               public void MoveToXmlDeclAttributes (XmlReader xmlReader)\r
+               {\r
+                       xmlReader.Read ();\r
+                       this.AssertNodeValues ("#1", xmlReader, \r
+                               XmlNodeType.XmlDeclaration,\r
+                               0,\r
+                               false,\r
+                               "xml",\r
+                               String.Empty,\r
+                               "xml",\r
+                               String.Empty,\r
+                               "version=\"1.0\" standalone=\"yes\"",\r
+                               2);\r
+                       Assert ("MoveToFirstAttribute",\r
+                               xmlReader.MoveToFirstAttribute ());\r
+                       this.AssertNodeValues ("#2", xmlReader, \r
+                               XmlNodeType.Attribute,\r
+                               0, // FIXME: might be 1\r
+                               false,\r
+                               "version",\r
+                               String.Empty,\r
+                               "version",\r
+                               String.Empty,\r
+                               "1.0",\r
+                               2);\r
+                       xmlReader.ReadAttributeValue ();\r
+                       this.AssertNodeValues ("#3", xmlReader, \r
+                               XmlNodeType.Text,\r
+                               1, // FIXME might be 2\r
+                               false,\r
+                               String.Empty,\r
+                               null, // FIXME: should be String.Empty,\r
+                               String.Empty,\r
+                               null, // FIXME: should be String.Empty,\r
+                               "1.0",\r
+                               2);\r
+                       xmlReader.MoveToNextAttribute ();\r
+                       this.AssertNodeValues ("#4", xmlReader, \r
+                               XmlNodeType.Attribute,\r
+                               0, // FIXME: might be 1\r
+                               false,\r
+                               "standalone",\r
+                               String.Empty,\r
+                               "standalone",\r
+                               String.Empty,\r
+                               "yes",\r
+                               2);\r
+                       xmlReader.ReadAttributeValue ();\r
+                       this.AssertNodeValues ("#5", xmlReader, \r
+                               XmlNodeType.Text,\r
+                               1, // FIXME: might be 2\r
+                               false,\r
+                               String.Empty,\r
+                               null, // FIXME: should be String.Empty,\r
+                               String.Empty,\r
+                               null, // FIXME: should be String.Empty,\r
+                               "yes",\r
+                               2);\r
+               }\r
+\r
                [Test]\r
                public void AttributeOrder ()\r
                {\r
@@ -1273,18 +1309,125 @@ namespace MonoTests.System.Xml
 \r
                public void AttributeOrder (XmlReader xmlReader)\r
                {\r
-                       Assertion.Assert (xmlReader.Read ());\r
-                       Assertion.AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
 \r
-                       Assertion.Assert (xmlReader.MoveToFirstAttribute ());\r
-                       Assertion.AssertEquals ("_1", xmlReader.Name);\r
-                       Assertion.Assert (xmlReader.MoveToNextAttribute ());\r
-                       Assertion.AssertEquals ("_2", xmlReader.Name);\r
-                       Assertion.Assert (xmlReader.MoveToNextAttribute ());\r
-                       Assertion.AssertEquals ("_3", xmlReader.Name);\r
+                       Assert (xmlReader.MoveToFirstAttribute ());\r
+                       AssertEquals ("_1", xmlReader.Name);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("_2", xmlReader.Name);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("_3", xmlReader.Name);\r
 \r
-                       Assertion.Assert (!xmlReader.MoveToNextAttribute ());\r
+                       Assert (!xmlReader.MoveToNextAttribute ());\r
                }\r
 \r
+               [Test]\r
+               [Category ("NotDotNet")]\r
+               public void IndexerAndAttributes ()\r
+               {\r
+                       string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";\r
+                       RunTest (xml, new TestMethod (IndexerAndAttributes));\r
+               }\r
+\r
+               public void IndexerAndAttributes (XmlReader xmlReader)\r
+               {\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals ("1.0", xmlReader ["version"]);\r
+                       AssertEquals ("1.0", xmlReader.GetAttribute ("version"));\r
+                       // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".\r
+                       AssertEquals (null, xmlReader ["encoding"]);\r
+                       AssertEquals (null, xmlReader.GetAttribute ("encoding"));\r
+                       AssertEquals ("no", xmlReader ["standalone"]);\r
+                       AssertEquals ("no", xmlReader.GetAttribute ("standalone"));\r
+                       AssertEquals ("1.0", xmlReader [0]);\r
+                       AssertEquals ("1.0", xmlReader.GetAttribute (0));\r
+                       AssertEquals ("no", xmlReader [1]);\r
+                       AssertEquals ("no", xmlReader.GetAttribute (1));\r
+\r
+                       Assert (xmlReader.Read ());\r
+                       AssertEquals (XmlNodeType.Element, xmlReader.NodeType);\r
+                       AssertEquals ("1", xmlReader ["_1"]);\r
+\r
+                       Assert (xmlReader.MoveToFirstAttribute ());\r
+                       AssertEquals ("_1", xmlReader.Name);\r
+                       AssertEquals ("1", xmlReader ["_1"]);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("_2", xmlReader.Name);\r
+                       AssertEquals ("1", xmlReader ["_1"]);\r
+                       Assert (xmlReader.MoveToNextAttribute ());\r
+                       AssertEquals ("_3", xmlReader.Name);\r
+                       AssertEquals ("1", xmlReader ["_1"]);\r
+\r
+                       Assert (!xmlReader.MoveToNextAttribute ());\r
+               }\r
+\r
+               [Test]\r
+               public void ProhibitedMultipleAttributes ()\r
+               {\r
+                       string xml = @"<foo _1='1' _1='1' />";\r
+                       try {\r
+                               RunTest (xml, new TestMethod (ReadAll));\r
+                       } catch (XmlException) {\r
+                       }\r
+                       xml = @"<foo _1='1' _1='2' />";\r
+                       try {\r
+                               RunTest (xml, new TestMethod (ReadAll));\r
+                       } catch (XmlException) {\r
+                       }\r
+               }\r
+\r
+               public void ReadAll (XmlReader xmlReader)\r
+               {\r
+                       while (!xmlReader.EOF)\r
+                               xmlReader.Read ();\r
+               }\r
+\r
+               [Test]\r
+               public void SurrogatePairContent ()\r
+               {\r
+                       string xml = "<root xmlns='&#x10100;'/>";\r
+                       RunTest (xml, new TestMethod (SurrogatePairContent));\r
+               }\r
+\r
+               public void SurrogatePairContent (XmlReader xmlReader)\r
+               {\r
+                       xmlReader.Read ();\r
+                       AssertEquals (true, xmlReader.MoveToAttribute ("xmlns"));\r
+                       AssertEquals ("xmlns", xmlReader.Name);\r
+                       AssertEquals (2, xmlReader.Value.Length);\r
+                       AssertEquals (0xD800, (int) xmlReader.Value [0]);\r
+                       AssertEquals (0xDD00, (int) xmlReader.Value [1]);\r
+               }\r
+\r
+               [Test]\r
+               public void ReadOuterXmlOnEndElement ()\r
+               {\r
+                       string xml = "<root><foo></foo></root>";\r
+                       RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));\r
+               }\r
+\r
+               public void ReadOuterXmlOnEndElement (XmlReader xmlReader)\r
+               {\r
+                       xmlReader.Read ();\r
+                       xmlReader.Read ();\r
+                       xmlReader.Read ();\r
+                       AssertEquals (String.Empty, xmlReader.ReadOuterXml ());\r
+               }\r
+\r
+               [Test]\r
+               public void ReadInnerXmlOnEndElement ()\r
+               {\r
+                       string xml = "<root><foo></foo></root>";\r
+                       RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));\r
+               }\r
+\r
+               private void ReadInnerXmlOnEndElement (XmlReader xmlReader)\r
+               {\r
+                       xmlReader.Read ();\r
+                       xmlReader.Read ();\r
+                       xmlReader.Read ();\r
+                       AssertEquals (String.Empty, xmlReader.ReadInnerXml ());\r
+               }\r
        }\r
 }\r