#if !NOSERIALIZABLE using System; using System.Collections.Generic; using System.IO; using System.Runtime.Hosting; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using Google.ProtocolBuffers.TestProtos; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Google.ProtocolBuffers { [TestClass] public class SerializableTest { /// /// Just keep it from even compiling if we these objects don't implement the expected interface. /// public static readonly ISerializable CompileTimeCheckSerializableMessage = TestXmlMessage.DefaultInstance; public static readonly ISerializable CompileTimeCheckSerializableBuilder = new TestXmlMessage.Builder(); [TestMethod] [Ignore] // Serialization hasn't been reimplemented yet public void TestPlainMessage() { 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(); MemoryStream ms = new MemoryStream(); new BinaryFormatter().Serialize(ms, message); ms.Position = 0; TestXmlMessage copy = (TestXmlMessage)new BinaryFormatter().Deserialize(ms); Assert.AreEqual(message, copy); } [TestMethod] [Ignore] // Serialization hasn't been reimplemented yet public void TestMessageWithExtensions() { 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]))) .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ") .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build()) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102) .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE) .Build(); ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); UnittestExtrasXmltest.RegisterAllExtensions(registry); MemoryStream ms = new MemoryStream(); new BinaryFormatter().Serialize(ms, message); ms.Position = 0; //you need to provide the extension registry as context to the serializer BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry)); TestXmlMessage copy = (TestXmlMessage)bff.Deserialize(ms); // And all extensions will be defined. Assert.AreEqual(message, copy); } [TestMethod] [Ignore] // Serialization hasn't been reimplemented yet public void TestPlainBuilder() { TestXmlMessage.Builder builder = 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]))) ; MemoryStream ms = new MemoryStream(); new BinaryFormatter().Serialize(ms, builder); ms.Position = 0; TestXmlMessage.Builder copy = (TestXmlMessage.Builder)new BinaryFormatter().Deserialize(ms); Assert.AreEqual(builder.Build(), copy.Build()); } [TestMethod] [Ignore] // Serialization hasn't been reimplemented yet public void TestBuilderWithExtensions() { TestXmlMessage.Builder builder = 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]))) .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ") .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build()) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102) .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE) ; ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); UnittestExtrasXmltest.RegisterAllExtensions(registry); MemoryStream ms = new MemoryStream(); new BinaryFormatter().Serialize(ms, builder); ms.Position = 0; //you need to provide the extension registry as context to the serializer BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry)); TestXmlMessage.Builder copy = (TestXmlMessage.Builder)bff.Deserialize(ms); // And all extensions will be defined. Assert.AreEqual(builder.Build(), copy.Build()); } } } #endif