2009-03-31 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.Runtime.Serialization / Test / System.Xml / XmlBinaryDictionaryReaderTest.cs
index f10ad5cc3a67eb75ccd4ce7dcbec664a43f52ca8..9a2f763d0c68c1fae3b16739ebdb199a32feb4a4 100644 (file)
@@ -38,6 +38,28 @@ namespace MonoTests.System.Xml
        [TestFixture]
        public class XmlBinaryDictionaryReaderTest
        {
+               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]
                [ExpectedException (typeof (ArgumentNullException))]
                public void NullQuotas ()
@@ -191,7 +213,6 @@ namespace MonoTests.System.Xml
                }
 
                [Test]
-//             [Category ("NotWorking")]
                public void Beyond128DictionaryEntries ()
                {
                        XmlDictionaryString ds;
@@ -295,17 +316,24 @@ 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]
                public void ReadTypedValues ()
                {
-                       XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader (new MemoryStream (typed_values), new XmlDictionaryReaderQuotas ());
-                       while (!reader.EOF)
-                               reader.Read ();
+                       Read (typed_values);
                }
 
                byte [] typed_values = new byte [] {
@@ -320,5 +348,58 @@ namespace MonoTests.System.Xml
                        0x94, 0, 0, 6, 0, 0, 0, 0, 0, 0xD8, 0xEF, 0x2F, 0, 0, 0, 0, 0,
                        0x97, 0x80, 0x40, 0xA3, 0x29, 0xE5, 0x22, 0xC1, 8
                        };
+
+               [Test]
+               public void ReadShortPrefixedElement ()
+               {
+                       Read (short_prefixed_elem_value);
+               }
+
+               static readonly byte [] short_prefixed_elem_value = {
+                       0x6D, 4, 0x72, 0x6F, 0x6F, 0x74,
+                       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,
+                       };
        }
 }