123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using System.Xml;
- using Google.ProtocolBuffers.Serialization;
- using NUnit.Framework;
- using Google.ProtocolBuffers.TestProtos;
- namespace Google.ProtocolBuffers
- {
- [TestFixture]
- public class TestWriterFormatXml
- {
- [Test]
- public void TestToXmlParseFromXml()
- {
- TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
- string xml = msg.ToXml();
- Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml);
- TestAllTypes copy = TestAllTypes.ParseFromXml(XmlReader.Create(new StringReader(xml)));
- Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
- Assert.AreEqual(msg, copy);
- }
- [Test]
- public void TestToXmlParseFromXmlWithRootName()
- {
- TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
- string xml = msg.ToXml("message");
- Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml);
- TestAllTypes copy = TestAllTypes.ParseFromXml("message", XmlReader.Create(new StringReader(xml)));
- Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
- Assert.AreEqual(msg, copy);
- }
- [Test]
- public void TestEmptyMessage()
- {
- TestXmlChild message = TestXmlChild.CreateBuilder()
- .Build();
- StringWriter sw = new StringWriter();
- XmlTextWriter xw = new XmlTextWriter(sw);
- //When we call message.WriteTo, we are responsible for the root element
- xw.WriteStartElement("root");
- message.WriteTo(XmlFormatWriter.CreateInstance(xw));
- xw.WriteEndElement();
- xw.Flush();
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestRepeatedField()
- {
- TestXmlChild message = TestXmlChild.CreateBuilder()
- .AddOptions(EnumOptions.ONE)
- .AddOptions(EnumOptions.TWO)
- .Build();
- //Allow the writer to write the root element
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestNestedEmptyMessage()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetChild(TestXmlChild.CreateBuilder().Build())
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestNestedMessage()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestBooleanTypes()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetValid(true)
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestFullMessage()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetValid(true)
- .SetText("text")
- .AddTextlines("a")
- .AddTextlines("b")
- .AddTextlines("c")
- .SetNumber(0x1010101010)
- .AddNumbers(1)
- .AddNumbers(2)
- .AddNumbers(3)
- .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestFullMessageWithRichTypes()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetValid(true)
- .SetText("text")
- .AddTextlines("a")
- .AddTextlines("b")
- .AddTextlines("c")
- .SetNumber(0x1010101010)
- .AddNumbers(1)
- .AddNumbers(2)
- .AddNumbers(3)
- .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw)
- .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
- .WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- rdr.Options = XmlReaderOptions.ReadNestedArrays;
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestFullMessageWithUnknownFields()
- {
- TestXmlMessage origial = TestXmlMessage.CreateBuilder()
- .SetValid(true)
- .SetText("text")
- .AddTextlines("a")
- .AddTextlines("b")
- .AddTextlines("c")
- .SetNumber(0x1010101010)
- .AddNumbers(1)
- .AddNumbers(2)
- .AddNumbers(3)
- .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
- .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
- .Build();
- TestXmlNoFields message = TestXmlNoFields.CreateBuilder().MergeFrom(origial.ToByteArray()).Build();
- Assert.AreEqual(0, message.AllFields.Count);
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw)
- .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
- .WriteMessage("root", message);
- string xml = sw.ToString();
- using (XmlReader x = XmlReader.Create(new StringReader(xml)))
- {
- x.MoveToContent();
- Assert.AreEqual(XmlNodeType.Element, x.NodeType);
- //should always be empty
- Assert.IsTrue(x.IsEmptyElement ||
- (x.Read() && x.NodeType == XmlNodeType.EndElement)
- );
- }
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- rdr.Options = XmlReaderOptions.ReadNestedArrays;
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(TestXmlMessage.DefaultInstance, copy);
- }
- [Test]
- public void TestMessageWithXmlText()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetText("<text>").Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestXmlWithWhitespace()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetText(" \t <- leading space and trailing -> \r\n\t").Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestXmlWithExtensionText()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
- UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestXmlWithExtensionMessage()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage,
- new TestXmlExtension.Builder().SetNumber(42).Build()).Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
- UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestXmlWithExtensionArray()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
- .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
- .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
- UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
- Assert.AreEqual(message, copy);
- }
- [Test]
- public void TestXmlWithExtensionEnum()
- {
- TestXmlMessage message = TestXmlMessage.CreateBuilder()
- .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
- .Build();
- StringWriter sw = new StringWriter();
- XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
- string xml = sw.ToString();
- ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
- UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
- XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
- TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
- Assert.AreEqual(message, copy);
- }
- }
- }
|