blob: edf6ce491d1d4c60aed8e15e056d793d52691eb0 [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;
csharptesteac64a52011-10-04 13:43:26 -05008using Microsoft.VisualStudio.TestTools.UnitTesting;
csharptest3c6e9322011-09-09 18:14:40 -05009
10namespace Google.ProtocolBuffers
11{
csharptesteac64a52011-10-04 13:43:26 -050012 [TestClass]
csharptest3c6e9322011-09-09 18:14:40 -050013 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
csharptesteac64a52011-10-04 13:43:26 -050021 [TestMethod]
csharptest3c6e9322011-09-09 18:14:40 -050022 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)
csharptestaeb30d82011-09-20 13:17:03 -050034 .SetChild(TestXmlChild.CreateBuilder()
35 .AddOptions(EnumOptions.ONE)
36 .SetBinary(ByteString.CopyFrom(new byte[1])))
37 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
38 .AddOptions(EnumOptions.TWO)
39 .SetBinary(ByteString.CopyFrom(new byte[2])))
40 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
41 .AddOptions(EnumOptions.THREE)
42 .SetBinary(ByteString.CopyFrom(new byte[3])))
csharptest3c6e9322011-09-09 18:14:40 -050043 .Build();
44
45 MemoryStream ms = new MemoryStream();
46 new BinaryFormatter().Serialize(ms, message);
47
48 ms.Position = 0;
49 TestXmlMessage copy = (TestXmlMessage)new BinaryFormatter().Deserialize(ms);
50
51 Assert.AreEqual(message, copy);
52 }
53
csharptesteac64a52011-10-04 13:43:26 -050054 [TestMethod]
csharptest3c6e9322011-09-09 18:14:40 -050055 public void TestMessageWithExtensions()
56 {
57 TestXmlMessage message = TestXmlMessage.CreateBuilder()
58 .SetValid(true)
59 .SetText("text")
60 .AddTextlines("a")
61 .AddTextlines("b")
62 .AddTextlines("c")
63 .SetNumber(0x1010101010)
64 .AddNumbers(1)
65 .AddNumbers(2)
66 .AddNumbers(3)
csharptestaeb30d82011-09-20 13:17:03 -050067 .SetChild(TestXmlChild.CreateBuilder()
68 .AddOptions(EnumOptions.ONE)
69 .SetBinary(ByteString.CopyFrom(new byte[1])))
70 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
71 .AddOptions(EnumOptions.TWO)
72 .SetBinary(ByteString.CopyFrom(new byte[2])))
73 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
74 .AddOptions(EnumOptions.THREE)
75 .SetBinary(ByteString.CopyFrom(new byte[3])))
csharptest3c6e9322011-09-09 18:14:40 -050076 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
77 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
78 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
79 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
80 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
81 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
82 .Build();
83
84 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
85 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
86
87 MemoryStream ms = new MemoryStream();
88 new BinaryFormatter().Serialize(ms, message);
89
90 ms.Position = 0;
91 //you need to provide the extension registry as context to the serializer
92 BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));
93 TestXmlMessage copy = (TestXmlMessage)bff.Deserialize(ms);
94
95 // And all extensions will be defined.
96 Assert.AreEqual(message, copy);
97 }
98
csharptesteac64a52011-10-04 13:43:26 -050099 [TestMethod]
csharptest3c6e9322011-09-09 18:14:40 -0500100 public void TestPlainBuilder()
101 {
102 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()
103 .SetValid(true)
104 .SetText("text")
105 .AddTextlines("a")
106 .AddTextlines("b")
107 .AddTextlines("c")
108 .SetNumber(0x1010101010)
109 .AddNumbers(1)
110 .AddNumbers(2)
111 .AddNumbers(3)
csharptestaeb30d82011-09-20 13:17:03 -0500112 .SetChild(TestXmlChild.CreateBuilder()
113 .AddOptions(EnumOptions.ONE)
114 .SetBinary(ByteString.CopyFrom(new byte[1])))
115 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
116 .AddOptions(EnumOptions.TWO)
117 .SetBinary(ByteString.CopyFrom(new byte[2])))
118 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
119 .AddOptions(EnumOptions.THREE)
120 .SetBinary(ByteString.CopyFrom(new byte[3])))
csharptest3c6e9322011-09-09 18:14:40 -0500121 ;
122
123 MemoryStream ms = new MemoryStream();
124 new BinaryFormatter().Serialize(ms, builder);
125
126 ms.Position = 0;
127 TestXmlMessage.Builder copy = (TestXmlMessage.Builder)new BinaryFormatter().Deserialize(ms);
128
129 Assert.AreEqual(builder.Build(), copy.Build());
130 }
131
csharptesteac64a52011-10-04 13:43:26 -0500132 [TestMethod]
csharptest3c6e9322011-09-09 18:14:40 -0500133 public void TestBuilderWithExtensions()
134 {
135 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()
136 .SetValid(true)
137 .SetText("text")
138 .AddTextlines("a")
139 .AddTextlines("b")
140 .AddTextlines("c")
141 .SetNumber(0x1010101010)
142 .AddNumbers(1)
143 .AddNumbers(2)
144 .AddNumbers(3)
csharptestaeb30d82011-09-20 13:17:03 -0500145 .SetChild(TestXmlChild.CreateBuilder()
146 .AddOptions(EnumOptions.ONE)
147 .SetBinary(ByteString.CopyFrom(new byte[1])))
148 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
149 .AddOptions(EnumOptions.TWO)
150 .SetBinary(ByteString.CopyFrom(new byte[2])))
151 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()
152 .AddOptions(EnumOptions.THREE)
153 .SetBinary(ByteString.CopyFrom(new byte[3])))
csharptest3c6e9322011-09-09 18:14:40 -0500154 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
155 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
156 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
157 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
158 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
159 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
160 ;
161
162 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
163 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
164
165 MemoryStream ms = new MemoryStream();
166 new BinaryFormatter().Serialize(ms, builder);
167
168 ms.Position = 0;
169 //you need to provide the extension registry as context to the serializer
170 BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));
171 TestXmlMessage.Builder copy = (TestXmlMessage.Builder)bff.Deserialize(ms);
172
173 // And all extensions will be defined.
174 Assert.AreEqual(builder.Build(), copy.Build());
175 }
176 }
177}