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(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ") .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build()) .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100) .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101) .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102) .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE) ; ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); UnitTestXmlSerializerTestProtoFile.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()); }
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); }
protected void FormatterAssert <TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite { StringWriter sw = new StringWriter(); JsonFormatWriter.CreateInstance(sw).WriteMessage(message); Content = sw.ToString(); ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry); IMessageLite copy = JsonFormatReader.CreateInstance(Content) .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild(); Assert.AreEqual(typeof(TMessage), copy.GetType()); Assert.AreEqual(message, copy); foreach (string expect in expecting) { Assert.IsTrue(Content.IndexOf(expect) >= 0, "Expected to find content '{0}' in: \r\n{1}", expect, Content); } }