blob: 701cfc6b0f4651144da3097b4dd4d30a526ff9f3 [file] [log] [blame]
csharptest3c6e9322011-09-09 18:14:40 -05001using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Runtime.Serialization;
5using System.Runtime.Serialization.Formatters.Binary;
6using System.Text;
7using Google.ProtocolBuffers.TestProtos;
8using NUnit.Framework;
9
10namespace Google.ProtocolBuffers
11{
12 [TestFixture]
13 public class SerializableTest
14 {
15 /// <summary>
16 /// Just keep it from even compiling if we these objects don't implement the expected interface.
17 /// </summary>
18 public static readonly ISerializable CompileTimeCheckSerializableMessage = TestXmlMessage.DefaultInstance;
19 public static readonly ISerializable CompileTimeCheckSerializableBuilder = new TestXmlMessage.Builder();
20
21 [Test]
22 public void TestPlainMessage()
23 {
24 TestXmlMessage message = TestXmlMessage.CreateBuilder()
25 .SetValid(true)
26 .SetText("text")
27 .AddTextlines("a")
28 .AddTextlines("b")
29 .AddTextlines("c")
30 .SetNumber(0x1010101010)
31 .AddNumbers(1)
32 .AddNumbers(2)
33 .AddNumbers(3)
34 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
35 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
36 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
37 .Build();
38
39 MemoryStream ms = new MemoryStream();
40 new BinaryFormatter().Serialize(ms, message);
41
42 ms.Position = 0;
43 TestXmlMessage copy = (TestXmlMessage)new BinaryFormatter().Deserialize(ms);
44
45 Assert.AreEqual(message, copy);
46 }
47
48 [Test]
49 public void TestMessageWithExtensions()
50 {
51 TestXmlMessage message = TestXmlMessage.CreateBuilder()
52 .SetValid(true)
53 .SetText("text")
54 .AddTextlines("a")
55 .AddTextlines("b")
56 .AddTextlines("c")
57 .SetNumber(0x1010101010)
58 .AddNumbers(1)
59 .AddNumbers(2)
60 .AddNumbers(3)
61 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
62 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
63 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
64 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
65 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
66 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
67 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
68 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
69 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
70 .Build();
71
72 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
73 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
74
75 MemoryStream ms = new MemoryStream();
76 new BinaryFormatter().Serialize(ms, message);
77
78 ms.Position = 0;
79 //you need to provide the extension registry as context to the serializer
80 BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));
81 TestXmlMessage copy = (TestXmlMessage)bff.Deserialize(ms);
82
83 // And all extensions will be defined.
84 Assert.AreEqual(message, copy);
85 }
86
87 [Test]
88 public void TestPlainBuilder()
89 {
90 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()
91 .SetValid(true)
92 .SetText("text")
93 .AddTextlines("a")
94 .AddTextlines("b")
95 .AddTextlines("c")
96 .SetNumber(0x1010101010)
97 .AddNumbers(1)
98 .AddNumbers(2)
99 .AddNumbers(3)
100 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
101 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
102 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
103 ;
104
105 MemoryStream ms = new MemoryStream();
106 new BinaryFormatter().Serialize(ms, builder);
107
108 ms.Position = 0;
109 TestXmlMessage.Builder copy = (TestXmlMessage.Builder)new BinaryFormatter().Deserialize(ms);
110
111 Assert.AreEqual(builder.Build(), copy.Build());
112 }
113
114 [Test]
115 public void TestBuilderWithExtensions()
116 {
117 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()
118 .SetValid(true)
119 .SetText("text")
120 .AddTextlines("a")
121 .AddTextlines("b")
122 .AddTextlines("c")
123 .SetNumber(0x1010101010)
124 .AddNumbers(1)
125 .AddNumbers(2)
126 .AddNumbers(3)
127 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
128 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
129 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
130 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
131 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
132 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
133 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
134 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
135 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
136 ;
137
138 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
139 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
140
141 MemoryStream ms = new MemoryStream();
142 new BinaryFormatter().Serialize(ms, builder);
143
144 ms.Position = 0;
145 //you need to provide the extension registry as context to the serializer
146 BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));
147 TestXmlMessage.Builder copy = (TestXmlMessage.Builder)bff.Deserialize(ms);
148
149 // And all extensions will be defined.
150 Assert.AreEqual(builder.Build(), copy.Build());
151 }
152 }
153}