* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlValidatingReaderTests.cs
index fccca0a9bbb19015defb10e0c440a6b55b9c8835..ac89106fed82da0178a82e1d686d64fa478a5c0a 100644 (file)
@@ -7,6 +7,7 @@
 // (C)2003 Atsushi Enomoto\r
 //\r
 using System;\r
+using System.IO;\r
 using System.Xml;\r
 using System.Xml.Schema;\r
 using NUnit.Framework;\r
@@ -374,7 +375,7 @@ namespace MonoTests.System.Xml
                        AssertEquals ("foo-def", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("foo-def", dvr.Value);\r
                        // bar\r
                        Assert (dvr.MoveToNextAttribute ());\r
@@ -384,7 +385,7 @@ namespace MonoTests.System.Xml
                        AssertEquals ("bar-def", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("bar-def", dvr.Value);\r
                }\r
 \r
@@ -447,7 +448,7 @@ namespace MonoTests.System.Xml
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (!dvr.ReadAttributeValue ());\r
 \r
                        // bar\r
@@ -456,15 +457,15 @@ namespace MonoTests.System.Xml
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("internal ", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals (" value", dvr.Value);\r
 \r
                        // ValidationType = None\r
@@ -484,7 +485,7 @@ namespace MonoTests.System.Xml
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (!dvr.ReadAttributeValue ());\r
 \r
                        // bar\r
@@ -493,20 +494,20 @@ namespace MonoTests.System.Xml
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("internal ", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals (" value", dvr.Value);\r
                }\r
 \r
                [Test]\r
-               [Category("NotDotNet")]\r
+               // it used to be regarded as MS bug but it was not really.\r
                public void TestPreserveEntityNotOnDotNet ()\r
                {\r
                        string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'><!ENTITY ent 'entity string'>";\r
@@ -520,31 +521,30 @@ namespace MonoTests.System.Xml
                        AssertEquals ("root", dvr.Name);\r
                        Assert (dvr.MoveToFirstAttribute ());\r
                        AssertEquals ("foo", dvr.Name);\r
-                       // MS BUG: it returns "entity string", however, entity should not be exanded.\r
-                       AssertEquals ("&ent;", dvr.Value);\r
+                       AssertEquals ("entity string", dvr.Value);\r
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (!dvr.ReadAttributeValue ());\r
 \r
                        // bar\r
                        Assert (dvr.MoveToNextAttribute ());\r
                        AssertEquals ("bar", dvr.Name);\r
-                       AssertEquals ("internal &ent; value", dvr.Value);\r
+                       AssertEquals ("internal entity string value", dvr.Value);\r
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("internal ", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals (" value", dvr.Value);\r
 \r
                        // ValidationType = None\r
@@ -560,30 +560,30 @@ namespace MonoTests.System.Xml
                        // foo\r
                        Assert (dvr.MoveToFirstAttribute ());\r
                        AssertEquals ("foo", dvr.Name);\r
-                       AssertEquals ("&ent;", dvr.Value);\r
+                       AssertEquals ("entity string", dvr.Value);\r
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (!dvr.ReadAttributeValue ());\r
 \r
                        // bar\r
                        Assert (dvr.MoveToNextAttribute ());\r
                        AssertEquals ("bar", dvr.Name);\r
-                       AssertEquals ("internal &ent; value", dvr.Value);\r
+                       AssertEquals ("internal entity string value", dvr.Value);\r
                        //  ReadAttributeValue()\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals ("internal ", dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
                        AssertEquals ("ent", dvr.Name);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
                        Assert (dvr.ReadAttributeValue ());\r
                        AssertEquals (XmlNodeType.Text, dvr.NodeType);\r
-                       AssertEquals ("", dvr.Name);\r
+                       AssertEquals (String.Empty, dvr.Name);\r
                        AssertEquals (" value", dvr.Value);\r
                }\r
 \r
@@ -724,7 +724,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();\r
                        AssertEquals (XmlNodeType.EndEntity, dvr.NodeType);\r
                        AssertEquals (1, dvr.Depth);\r
-                       AssertEquals ("", dvr.Value);\r
+                       AssertEquals (String.Empty, dvr.Value);\r
 \r
                        dvr.Read ();    // &ent2;\r
                        AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);\r
@@ -815,5 +815,110 @@ namespace MonoTests.System.Xml
                        r.Read ();\r
                        AssertEquals (refOut, r.ReadOuterXml ());\r
                }\r
+\r
+               [Test]\r
+               // imported testcase from sys.security which had regression.\r
+               public void ResolveEntityAndBaseURI ()\r
+               {\r
+                       try {\r
+                               using (TextWriter w = File.CreateText ("world.txt")) {\r
+                                       w.WriteLine ("world");\r
+                               }\r
+                               using (TextWriter w = File.CreateText ("doc.dtd")) {\r
+                                       w.WriteLine ("<!-- dummy -->");\r
+                               }\r
+\r
+                               string xml =  "<!DOCTYPE doc SYSTEM \"doc.dtd\" [\n" +\r
+                                       "<!ATTLIST doc attrExtEnt ENTITY #IMPLIED>\n" +\r
+                                       "<!ENTITY ent1 \"Hello\">\n" +\r
+                                       "<!ENTITY ent2 SYSTEM \"world.txt\">\n" +\r
+                                       "<!ENTITY entExt SYSTEM \"earth.gif\" NDATA gif>\n" +\r
+                                       "<!NOTATION gif SYSTEM \"viewgif.exe\">\n" +\r
+                                       "]>\n" +\r
+                                       "<doc attrExtEnt=\"entExt\">\n" +\r
+                                       "   &ent1;, &ent2;!\n" +\r
+                                       "</doc>\n" +\r
+                                       "\n" +\r
+                                       "<!-- Let world.txt contain \"world\" (excluding the quotes) -->\n";\r
+\r
+                               XmlValidatingReader xvr =\r
+                                       new XmlValidatingReader (\r
+                                       xml, XmlNodeType.Document, null);\r
+                               xvr.ValidationType = ValidationType.None;\r
+                               xvr.EntityHandling =\r
+                                       EntityHandling.ExpandCharEntities;\r
+                               XmlDocument doc = new XmlDocument ();\r
+                               doc.Load (xvr);\r
+\r
+                       } finally {\r
+                               if (File.Exists ("world.txt"))\r
+                                       File.Delete ("world.txt");\r
+                               if (File.Exists ("doc.dtd"))\r
+                                       File.Delete ("doc.dtd");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+               //[NotWorking ("default namespace seems null, not String.Empty")]\r
+#if NET_2_0\r
+#else\r
+               // MS.NET 1.x does not consider cases that xmlns* attributes\r
+               // could be declared as default.\r
+               [Category ("NotDotNet")]\r
+#endif\r
+               public void DefaultXmlnsAttributeLookup ()\r
+               {\r
+                       string xml = @"<!DOCTYPE X [\r
+                       <!ELEMENT X (Y)+>\r
+                       <!ENTITY baz 'urn:baz'>\r
+                       <!ATTLIST X\r
+                               xmlns CDATA 'urn:foo'\r
+                               xmlns:bar CDATA 'urn:bar'\r
+                               xmlns:baz CDATA #IMPLIED\r
+                               dummy CDATA 'dummy'\r
+                               baz:dummy CDATA 'dummy'>\r
+                       <!ELEMENT Y (#PCDATA)*>\r
+                       <!ATTLIST Y\r
+                               xmlns CDATA #IMPLIED\r
+                               xmlns:bar CDATA #IMPLIED>\r
+                       ]>\r
+                       <X xmlns:baz='&baz;'><Y/><Y>text.</Y><Y xmlns='' xmlns:bar='urn:hoge'>text.</Y></X>";\r
+                       XmlValidatingReader xvr = new XmlValidatingReader (\r
+                               xml, XmlNodeType.Document, null);\r
+                       xvr.Read (); // DTD\r
+                       xvr.Read (); // whitespace\r
+                       xvr.Read ();\r
+                       AssertEquals ("#1-1", "urn:foo", xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#1-2", "urn:bar", xvr.LookupNamespace ("bar"));\r
+\r
+                       AssertEquals ("#1-a", "urn:baz", xvr.LookupNamespace ("baz"));\r
+                       Assert ("#1-b", xvr.MoveToAttribute ("baz:dummy"));\r
+                       AssertEquals ("#1-c", "urn:baz", xvr.NamespaceURI);\r
+\r
+                       Assert ("#1-d", xvr.MoveToAttribute ("dummy"));\r
+                       AssertEquals ("#1-e", String.Empty, xvr.NamespaceURI);\r
+\r
+                       xvr.Read (); // first Y, empty element\r
+                       AssertEquals ("#2-1", "urn:foo", xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#2-2", "urn:bar", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // second Y, start element\r
+                       AssertEquals ("#3-1", "urn:foo", xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#3-2", "urn:bar", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // inside normal Y. Check inheritance\r
+                       AssertEquals ("#4-1", "urn:foo", xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#4-2", "urn:bar", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // second Y, end element\r
+                       AssertEquals ("#5-1", "urn:foo", xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#5-2", "urn:bar", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // third Y, suppresses default namespaces\r
+                       AssertEquals ("#6-1", null, xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#6-2", "urn:hoge", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // inside suppressing Y. Check inheritance\r
+                       AssertEquals ("#7-1", null, xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#7-2", "urn:hoge", xvr.LookupNamespace ("bar"));\r
+                       xvr.Read (); // end of suppressing element\r
+                       AssertEquals ("#8-1", null, xvr.LookupNamespace (String.Empty));\r
+                       AssertEquals ("#8-2", "urn:hoge", xvr.LookupNamespace ("bar"));\r
+               }\r
        }\r
 }\r