2009-06-05 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.Runtime.Serialization / Test / System.Xml / XmlBinaryDictionaryReaderTest.cs
index 2eb95dbf6d841e410b832f8038f93bfb169ecb8d..b5960fe96a21f11b18c984e4477a47877042b927 100644 (file)
@@ -41,8 +41,23 @@ namespace MonoTests.System.Xml
                void Read (byte [] buf)
                {
                        XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (buf), new XmlDictionaryReaderQuotas ());
+
                        while (!reader.EOF)
                                reader.Read ();
+                       // FIXME: use this instead; right now some tests are broken.
+                       //XmlDocument doc = new XmlDocument ();
+                       //doc.AppendChild (doc.CreateElement ("root"));
+                       //while (!reader.EOF)
+                       //      doc.DocumentElement.AppendChild (doc.ReadNode (reader));
+               }
+
+               void AssertNode (XmlNodeType nodeType, string localName, string ns, string value, int depth, XmlReader reader, string label)
+               {
+                       Assert.AreEqual (nodeType, reader.NodeType, label + ".Node");
+                       Assert.AreEqual (localName, reader.LocalName, label + ".LocalName");
+                       Assert.AreEqual (ns, reader.NamespaceURI, label + ".NS");
+                       Assert.AreEqual (value, reader.Value, label + ".Value");
+                       Assert.AreEqual (depth, reader.Depth, label + ".Depth");
                }
 
                [Test]
@@ -301,9 +316,18 @@ namespace MonoTests.System.Xml
                                0x08, 7, 0x75, 0x72, 0x6E, 0x3A, 0x62, 0x61, 0x72, 1
                                };
 
-                       XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (bytes), dic, new XmlDictionaryReaderQuotas ());
-                       while (!reader.EOF)
-                               reader.Read ();
+                       Read (bytes);
+
+                       XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (bytes), new XmlDictionaryReaderQuotas ());
+                       Assert.IsTrue (reader.Read (), "#1-1");
+                       AssertNode (XmlNodeType.Element, "root", "urn:bar", "", 0, reader, "#1");
+                       reader.MoveToAttribute (0);
+                       if (reader.LocalName != "a")
+                               reader.MoveToAttribute (1);
+                       AssertNode (XmlNodeType.Attribute, "a", "", "", 1, reader, "#2");
+                       Assert.IsTrue (reader.ReadAttributeValue (), "#3");
+                       AssertNode (XmlNodeType.Text, "a", "", "", 2, reader, "#4");
+                       Assert.IsFalse (reader.ReadAttributeValue (), "#5");
                }
 
                [Test]
@@ -336,5 +360,86 @@ namespace MonoTests.System.Xml
                        0x09, 1, 0x70, 7, 0x75, 0x72, 0x6E, 0x3A, 0x66, 0x6F, 0x6F,
                        0x99, 4, 0x74, 0x65, 0x73, 0x74,
                        };
+
+               [Test]
+               public void ReadInt16Array ()
+               {
+                       Read (array_int32);
+
+                       XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (array_int16), new XmlDictionaryReaderQuotas ());
+                       Assert.IsTrue (reader.Read (), "#1-1");
+                       AssertNode (XmlNodeType.Element, "el", "", "", 0, reader, "#1-2");
+                       Assert.IsTrue (reader.Read (), "#2-1");
+                       AssertNode (XmlNodeType.Text, "", "", "4", 1, reader, "#2-2");
+                       Assert.IsTrue (reader.Read (), "#3-1");
+                       AssertNode (XmlNodeType.EndElement, "el", "", "", 0, reader, "#3-2");
+                       Assert.IsTrue (reader.Read (), "#4-1");
+                       AssertNode (XmlNodeType.Element, "el", "", "", 0, reader, "#4-2");
+                       Assert.IsTrue (reader.Read (), "#5-1");
+                       AssertNode (XmlNodeType.Text, "", "", "6", 1, reader, "#5-2");
+                       Assert.IsTrue (reader.Read (), "#6-1");
+                       AssertNode (XmlNodeType.EndElement, "el", "", "", 0, reader, "#6-2");
+                       for (int i = 0; i < 3; i++) // 6, 8, 10
+                               for (int j = 0; j < 3; j++) // el / text / endel
+                                       Assert.IsTrue (reader.Read (), "#x-" + i + j);
+                       Assert.IsFalse (reader.Read (), "End");
+               }
+
+               static readonly byte [] array_int16 = {
+                       0x03, 0x40, 2, 0x65, 0x6C, 0x01,
+                       0x8B, 5, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0,
+                       };
+
+               [Test]
+               public void ReadInt32Array ()
+               {
+                       Read (array_int32);
+               }
+
+               // make sure that 0 is not written in shortened format.
+               static readonly byte [] array_int32 = {
+                       0x03, 0x40, 2, 0x65, 0x6C, 0x01,
+                       0x8D, 3, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0,
+                       };
+
+               [Test]
+               public void ReadUtf16Array ()
+               {
+                       // example of SOAP fault returned by .NET.
+                       var buffer = new byte [] {
+0x56,0x02,0x0B,0x01,0x73,0x04,0x0B,0x01,0x61,0x06,0x56,0x08,0x44,0x0A,0x1E,0x00,
+0x82,0x99,0x2F,0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x77,0x77,0x77,0x2E,0x77,0x33,
+0x2E,0x6F,0x72,0x67,0x2F,0x32,0x30,0x30,0x35,0x2F,0x30,0x38,0x2F,0x61,0x64,0x64,
+0x72,0x65,0x73,0x73,0x69,0x6E,0x67,0x2F,0x73,0x6F,0x61,0x70,0x2F,0x66,0x61,0x75,
+0x6C,0x74,0x44,0x0C,0x1E,0x00,0x82,0xAB,0x14,0x01,0x56,0x0E,0x56,0x86,0x01,0x56,
+0x8E,0x01,0x56,0x9A,0x01,0x98,0x01,0x73,0x98,0x01,0x3A,0x99,0x06,0x53,0x65,0x6E,
+0x64,0x65,0x72,0x56,0x9C,0x01,0x56,0x9A,0x01,0x98,0x01,0x61,0x98,0x01,0x3A,0x99,
+0x16,0x44,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x55,0x6E,0x72,0x65,
+0x61,0x63,0x68,0x61,0x62,0x6C,0x65,0x01,0x01,0x56,0x90,0x01,0x56,0x92,0x01,0x05,
+0x03,0x78,0x6D,0x6C,0x04,0x6C,0x61,0x6E,0x67,0x98,0x05,0x6A,0x61,0x2D,0x4A,0x50,
+0xB7,0xEA,0x45,0x00,0x6E,0x00,0x64,0x00,0x70,0x00,0x6F,0x00,0x69,0x00,0x6E,0x00,
+0x74,0x00,0x44,0x00,0x69,0x00,0x73,0x00,0x70,0x00,0x61,0x00,0x74,0x00,0x63,0x00,
+0x68,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x67,0x30,0x20,0x00,0x41,0x00,0x64,0x00,
+0x64,0x00,0x72,0x00,0x65,0x00,0x73,0x00,0x73,0x00,0x46,0x00,0x69,0x00,0x6C,0x00,
+0x74,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x4C,0x30,0x00,0x4E,0xF4,0x81,0x57,0x30,
+0x66,0x30,0x44,0x30,0x6A,0x30,0x44,0x30,0x5F,0x30,0x81,0x30,0x01,0x30,0x54,0x00,
+0x6F,0x00,0x20,0x00,0x27,0x00,0x27,0x00,0x20,0x00,0x92,0x30,0x2B,0x54,0x80,0x30,
+0xE1,0x30,0xC3,0x30,0xBB,0x30,0xFC,0x30,0xB8,0x30,0x92,0x30,0xD7,0x53,0xE1,0x4F,
+0x74,0x50,0x67,0x30,0xE6,0x51,0x06,0x74,0x67,0x30,0x4D,0x30,0x7E,0x30,0x5B,0x30,
+0x93,0x30,0x02,0x30,0x01,0x90,0xE1,0x4F,0x74,0x50,0x68,0x30,0xD7,0x53,0xE1,0x4F,
+0x74,0x50,0x6E,0x30,0x20,0x00,0x45,0x00,0x6E,0x00,0x64,0x00,0x70,0x00,0x6F,0x00,
+0x69,0x00,0x6E,0x00,0x74,0x00,0x41,0x00,0x64,0x00,0x64,0x00,0x72,0x00,0x65,0x00,
+0x73,0x00,0x73,0x00,0x20,0x00,0x4C,0x30,0x00,0x4E,0xF4,0x81,0x57,0x30,0x66,0x30,
+0x44,0x30,0x8B,0x30,0x53,0x30,0x68,0x30,0x92,0x30,0xBA,0x78,0x8D,0x8A,0x57,0x30,
+0x66,0x30,0x4F,0x30,0x60,0x30,0x55,0x30,0x44,0x30,0x02,0x30,0x01,0x01,0x01,0x01};
+                       var dic = new XmlDictionary ();
+                       for (int i = 0; i < 128; i++) dic.Add ("s" + i);
+                       var xr = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (buffer), dic, new XmlDictionaryReaderQuotas ());
+                       while (!xr.EOF) {
+                               xr.Read ();
+                               if (xr.NodeType == XmlNodeType.EndElement && xr.LocalName == String.Empty)
+                                       Assert.Fail ("EndElement has empty name");
+                       }
+               }
        }
 }