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]
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]
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");
+ }
+ }
}
}