csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 1 | using System;
|
| 2 | using System.IO;
|
csharptest | 3b70dd7 | 2011-06-11 12:22:17 -0500 | [diff] [blame] | 3 | using System.Text;
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 4 | using Google.ProtocolBuffers.Serialization;
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 5 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 6 | using Google.ProtocolBuffers.TestProtos;
|
| 7 |
|
| 8 | namespace Google.ProtocolBuffers
|
| 9 | {
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 10 | [TestClass]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 11 | public class TestWriterFormatJson
|
| 12 | {
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 13 | [TestMethod]
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 14 | public void Example_FromJson()
|
| 15 | {
|
| 16 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
| 17 |
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 18 | //3.5: builder.MergeFromJson(@"{""valid"":true}");
|
| 19 | Extensions.MergeFromJson(builder, @"{""valid"":true}");
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 20 |
|
| 21 | TestXmlMessage message = builder.Build();
|
| 22 | Assert.AreEqual(true, message.Valid);
|
| 23 | }
|
| 24 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 25 | [TestMethod]
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 26 | public void Example_ToJson()
|
| 27 | {
|
| 28 | TestXmlMessage message =
|
| 29 | TestXmlMessage.CreateBuilder()
|
| 30 | .SetValid(true)
|
| 31 | .Build();
|
| 32 |
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 33 | //3.5: string json = message.ToJson();
|
| 34 | string json = Extensions.ToJson(message);
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 35 |
|
| 36 | Assert.AreEqual(@"{""valid"":true}", json);
|
| 37 | }
|
| 38 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 39 | [TestMethod]
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 40 | public void Example_WriteJsonUsingICodedOutputStream()
|
| 41 | {
|
| 42 | TestXmlMessage message =
|
| 43 | TestXmlMessage.CreateBuilder()
|
| 44 | .SetValid(true)
|
| 45 | .Build();
|
| 46 |
|
| 47 | using (TextWriter output = new StringWriter())
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 48 | {
|
csharptest | 353b0fa | 2011-09-29 16:33:31 -0500 | [diff] [blame] | 49 | ICodedOutputStream writer = JsonFormatWriter.CreateInstance(output);
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 50 | writer.WriteMessageStart(); //manually begin the message, output is '{'
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 51 |
|
| 52 | writer.Flush();
|
| 53 | Assert.AreEqual("{", output.ToString());
|
| 54 |
|
| 55 | ICodedOutputStream stream = writer;
|
| 56 | message.WriteTo(stream); //write the message normally
|
| 57 |
|
| 58 | writer.Flush();
|
| 59 | Assert.AreEqual(@"{""valid"":true", output.ToString());
|
| 60 |
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 61 | writer.WriteMessageEnd(); //manually write the end message '}'
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 62 | Assert.AreEqual(@"{""valid"":true}", output.ToString());
|
| 63 | }
|
| 64 | }
|
| 65 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 66 | [TestMethod]
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 67 | public void Example_ReadJsonUsingICodedInputStream()
|
| 68 | {
|
| 69 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 70 | ICodedInputStream reader = JsonFormatReader.CreateInstance(@"{""valid"":true}");
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 71 |
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 72 | reader.ReadMessageStart(); //manually read the begin the message '{'
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 73 |
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 74 | builder.MergeFrom(reader); //write the message normally
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 75 |
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 76 | reader.ReadMessageEnd(); //manually read the end message '}'
|
csharptest | c2d2c1a | 2011-09-08 20:02:11 -0500 | [diff] [blame] | 77 | }
|
| 78 |
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 79 | protected string Content;
|
| 80 | [System.Diagnostics.DebuggerNonUserCode]
|
| 81 | protected void FormatterAssert<TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite
|
| 82 | {
|
| 83 | StringWriter sw = new StringWriter();
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 84 | JsonFormatWriter.CreateInstance(sw).WriteMessage(message);
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 85 |
|
| 86 | Content = sw.ToString();
|
| 87 |
|
| 88 | ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
|
| 89 | UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
|
| 90 |
|
| 91 | IMessageLite copy =
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 92 | JsonFormatReader.CreateInstance(Content)
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 93 | .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild();
|
| 94 |
|
| 95 | Assert.AreEqual(typeof(TMessage), copy.GetType());
|
| 96 | Assert.AreEqual(message, copy);
|
| 97 | foreach (string expect in expecting)
|
| 98 | Assert.IsTrue(Content.IndexOf(expect) >= 0, "Expected to find content '{0}' in: \r\n{1}", expect, Content);
|
| 99 | }
|
| 100 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 101 | [TestMethod]
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 102 | public void TestToJsonParseFromJson()
|
| 103 | {
|
| 104 | TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 105 | string json = Extensions.ToJson(msg);
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 106 | Assert.AreEqual("{\"default_bool\":true}", json);
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 107 | TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), json).Build();
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 108 | Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
|
| 109 | Assert.AreEqual(msg, copy);
|
| 110 | }
|
| 111 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 112 | [TestMethod]
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 113 | public void TestToJsonParseFromJsonReader()
|
| 114 | {
|
| 115 | TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 116 | string json = Extensions.ToJson(msg);
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 117 | Assert.AreEqual("{\"default_bool\":true}", json);
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 118 | TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), new StringReader(json)).Build();
|
csharptest | f292523 | 2011-06-11 10:41:57 -0500 | [diff] [blame] | 119 | Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
|
| 120 | Assert.AreEqual(msg, copy);
|
| 121 | }
|
| 122 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 123 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 124 | public void TestJsonFormatted()
|
| 125 | {
|
| 126 | TestXmlMessage message = TestXmlMessage.CreateBuilder()
|
| 127 | .SetValid(true)
|
| 128 | .SetNumber(0x1010)
|
| 129 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder())
|
| 130 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE))
|
| 131 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE).AddOptions(EnumOptions.TWO))
|
| 132 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().SetBinary(ByteString.CopyFromUtf8("abc")))
|
| 133 | .Build();
|
| 134 |
|
| 135 | StringWriter sw = new StringWriter();
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 136 | JsonFormatWriter.CreateInstance(sw).Formatted()
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 137 | .WriteMessage(message);
|
| 138 |
|
| 139 | string json = sw.ToString();
|
| 140 |
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 141 | TestXmlMessage copy = JsonFormatReader.CreateInstance(json)
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 142 | .Merge(TestXmlMessage.CreateBuilder()).Build();
|
| 143 | Assert.AreEqual(message, copy);
|
| 144 | }
|
| 145 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 146 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 147 | public void TestEmptyMessage()
|
| 148 | {
|
| 149 | FormatterAssert(
|
| 150 | TestXmlChild.CreateBuilder()
|
| 151 | .Build(),
|
| 152 | @"{}"
|
| 153 | );
|
| 154 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 155 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 156 | public void TestRepeatedField()
|
| 157 | {
|
| 158 | FormatterAssert(
|
| 159 | TestXmlChild.CreateBuilder()
|
| 160 | .AddOptions(EnumOptions.ONE)
|
| 161 | .AddOptions(EnumOptions.TWO)
|
| 162 | .Build(),
|
| 163 | @"{""options"":[""ONE"",""TWO""]}"
|
| 164 | );
|
| 165 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 166 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 167 | public void TestNestedEmptyMessage()
|
| 168 | {
|
| 169 | FormatterAssert(
|
| 170 | TestXmlMessage.CreateBuilder()
|
| 171 | .SetChild(TestXmlChild.CreateBuilder().Build())
|
| 172 | .Build(),
|
| 173 | @"{""child"":{}}"
|
| 174 | );
|
| 175 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 176 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 177 | public void TestNestedMessage()
|
| 178 | {
|
| 179 | FormatterAssert(
|
| 180 | TestXmlMessage.CreateBuilder()
|
| 181 | .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())
|
| 182 | .Build(),
|
| 183 | @"{""child"":{""options"":[""TWO""]}}"
|
| 184 | );
|
| 185 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 186 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 187 | public void TestBooleanTypes()
|
| 188 | {
|
| 189 | FormatterAssert(
|
| 190 | TestXmlMessage.CreateBuilder()
|
| 191 | .SetValid(true)
|
| 192 | .Build(),
|
| 193 | @"{""valid"":true}"
|
| 194 | );
|
| 195 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 196 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 197 | public void TestFullMessage()
|
| 198 | {
|
| 199 | FormatterAssert(
|
| 200 | TestXmlMessage.CreateBuilder()
|
| 201 | .SetValid(true)
|
| 202 | .SetText("text")
|
| 203 | .AddTextlines("a")
|
| 204 | .AddTextlines("b")
|
| 205 | .AddTextlines("c")
|
| 206 | .SetNumber(0x1010101010)
|
| 207 | .AddNumbers(1)
|
| 208 | .AddNumbers(2)
|
| 209 | .AddNumbers(3)
|
| 210 | .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
|
| 211 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
|
| 212 | .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
|
| 213 | .Build(),
|
| 214 | @"""text"":""text""",
|
| 215 | @"[""a"",""b"",""c""]",
|
| 216 | @"[1,2,3]",
|
| 217 | @"""child"":{",
|
| 218 | @"""children"":[{",
|
| 219 | @"AA==",
|
| 220 | @"AAA=",
|
| 221 | @"AAAA",
|
| 222 | 0x1010101010L.ToString()
|
| 223 | );
|
| 224 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 225 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 226 | public void TestMessageWithXmlText()
|
| 227 | {
|
| 228 | FormatterAssert(
|
| 229 | TestXmlMessage.CreateBuilder()
|
| 230 | .SetText("<text></text>")
|
| 231 | .Build(),
|
| 232 | @"{""text"":""<text><\/text>""}"
|
| 233 | );
|
| 234 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 235 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 236 | public void TestWithEscapeChars()
|
| 237 | {
|
| 238 | FormatterAssert(
|
| 239 | TestXmlMessage.CreateBuilder()
|
| 240 | .SetText(" \t <- \"leading space and trailing\" -> \\ \xef54 \x0000 \xFF \xFFFF \b \f \r \n \t ")
|
| 241 | .Build(),
|
| 242 | "{\"text\":\" \\t <- \\\"leading space and trailing\\\" -> \\\\ \\uef54 \\u0000 \\u00ff \\uffff \\b \\f \\r \\n \\t \"}"
|
| 243 | );
|
| 244 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 245 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 246 | public void TestWithExtensionText()
|
| 247 | {
|
| 248 | FormatterAssert(
|
| 249 | TestXmlMessage.CreateBuilder()
|
| 250 | .SetValid(false)
|
| 251 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
|
| 252 | .Build(),
|
| 253 | @"{""valid"":false,""extension_text"":"" extension text value ! ""}"
|
| 254 | );
|
| 255 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 256 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 257 | public void TestWithExtensionNumber()
|
| 258 | {
|
| 259 | FormatterAssert(
|
| 260 | TestXmlMessage.CreateBuilder()
|
| 261 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage,
|
| 262 | new TestXmlExtension.Builder().SetNumber(42).Build())
|
| 263 | .Build(),
|
| 264 | @"{""number"":42}"
|
| 265 | );
|
| 266 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 267 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 268 | public void TestWithExtensionArray()
|
| 269 | {
|
| 270 | FormatterAssert(
|
| 271 | TestXmlMessage.CreateBuilder()
|
| 272 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
|
| 273 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
|
| 274 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
|
| 275 | .Build(),
|
| 276 | @"{""extension_number"":[100,101,102]}"
|
| 277 | );
|
| 278 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 279 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 280 | public void TestWithExtensionEnum()
|
| 281 | {
|
| 282 | FormatterAssert(
|
| 283 | TestXmlMessage.CreateBuilder()
|
| 284 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
|
| 285 | .Build(),
|
| 286 | @"{""extension_enum"":""ONE""}"
|
| 287 | );
|
| 288 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 289 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 290 | public void TestMessageWithExtensions()
|
| 291 | {
|
| 292 | FormatterAssert(
|
| 293 | TestXmlMessage.CreateBuilder()
|
| 294 | .SetValid(true)
|
| 295 | .SetText("text")
|
| 296 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, "extension text")
|
| 297 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
|
| 298 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
|
| 299 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
|
| 300 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
|
| 301 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
|
| 302 | .Build(),
|
| 303 | @"""text"":""text""",
|
| 304 | @"""valid"":true",
|
| 305 | @"""extension_enum"":""ONE""",
|
| 306 | @"""extension_text"":""extension text""",
|
| 307 | @"""extension_number"":[100,101,102]",
|
| 308 | @"""extension_message"":{""number"":42}"
|
| 309 | );
|
| 310 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 311 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 312 | public void TestMessageMissingExtensions()
|
| 313 | {
|
| 314 | TestXmlMessage original = TestXmlMessage.CreateBuilder()
|
| 315 | .SetValid(true)
|
| 316 | .SetText("text")
|
| 317 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
|
| 318 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
|
| 319 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
|
| 320 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
|
| 321 | .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
|
| 322 | .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
|
| 323 | .Build();
|
| 324 |
|
| 325 | TestXmlMessage message = original.ToBuilder()
|
| 326 | .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText)
|
| 327 | .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage)
|
| 328 | .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber)
|
| 329 | .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum)
|
| 330 | .Build();
|
| 331 |
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 332 | JsonFormatWriter writer = JsonFormatWriter.CreateInstance();
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 333 | writer.WriteMessage(original);
|
| 334 | Content = writer.ToString();
|
| 335 |
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 336 | IMessageLite copy = JsonFormatReader.CreateInstance(Content)
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 337 | .Merge(message.CreateBuilderForType()).Build();
|
| 338 |
|
| 339 | Assert.AreNotEqual(original, message);
|
| 340 | Assert.AreNotEqual(original, copy);
|
| 341 | Assert.AreEqual(message, copy);
|
| 342 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 343 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 344 | public void TestMergeFields()
|
| 345 | {
|
| 346 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 347 | builder.MergeFrom(JsonFormatReader.CreateInstance("\"valid\": true"));
|
| 348 | builder.MergeFrom(JsonFormatReader.CreateInstance("\"text\": \"text\", \"number\": \"411\""));
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 349 | Assert.AreEqual(true, builder.Valid);
|
| 350 | Assert.AreEqual("text", builder.Text);
|
| 351 | Assert.AreEqual(411, builder.Number);
|
| 352 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 353 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 354 | public void TestMessageArray()
|
| 355 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 356 | JsonFormatWriter writer = JsonFormatWriter.CreateInstance().Formatted();
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 357 | using (writer.StartArray())
|
| 358 | {
|
| 359 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());
|
| 360 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());
|
| 361 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());
|
| 362 | }
|
| 363 | string json = writer.ToString();
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 364 | JsonFormatReader reader = JsonFormatReader.CreateInstance(json);
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 365 |
|
| 366 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
| 367 | int ordinal = 0;
|
| 368 |
|
| 369 | foreach (JsonFormatReader r in reader.EnumerateArray())
|
| 370 | {
|
| 371 | r.Merge(builder);
|
| 372 | Assert.AreEqual(++ordinal, builder.Number);
|
| 373 | }
|
| 374 | Assert.AreEqual(3, ordinal);
|
| 375 | Assert.AreEqual(3, builder.TextlinesCount);
|
| 376 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 377 | [TestMethod]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 378 | public void TestNestedMessageArray()
|
| 379 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 380 | JsonFormatWriter writer = JsonFormatWriter.CreateInstance();
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 381 | using (writer.StartArray())
|
| 382 | {
|
| 383 | using (writer.StartArray())
|
| 384 | {
|
| 385 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());
|
| 386 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());
|
| 387 | }
|
| 388 | using (writer.StartArray())
|
| 389 | writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());
|
| 390 | }
|
| 391 | string json = writer.ToString();
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 392 | JsonFormatReader reader = JsonFormatReader.CreateInstance(json);
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 393 |
|
| 394 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
| 395 | int ordinal = 0;
|
| 396 |
|
| 397 | foreach (JsonFormatReader r in reader.EnumerateArray())
|
| 398 | foreach (JsonFormatReader r2 in r.EnumerateArray())
|
| 399 | {
|
| 400 | r2.Merge(builder);
|
| 401 | Assert.AreEqual(++ordinal, builder.Number);
|
| 402 | }
|
| 403 | Assert.AreEqual(3, ordinal);
|
| 404 | Assert.AreEqual(3, builder.TextlinesCount);
|
| 405 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 406 | [TestMethod]
|
csharptest | 60fd773 | 2011-09-09 12:18:16 -0500 | [diff] [blame] | 407 | public void TestReadWriteJsonWithoutRoot()
|
| 408 | {
|
| 409 | TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
|
| 410 | TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();
|
| 411 |
|
| 412 | string Json;
|
| 413 | using (StringWriter sw = new StringWriter())
|
| 414 | {
|
| 415 | ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);
|
| 416 |
|
| 417 | message.WriteTo(output);
|
| 418 | output.Flush();
|
| 419 | Json = sw.ToString();
|
| 420 | }
|
| 421 | Assert.AreEqual(@"""text"":""abc"",""number"":123", Json);
|
| 422 |
|
| 423 | ICodedInputStream input = JsonFormatReader.CreateInstance(Json);
|
| 424 | TestXmlMessage copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();
|
| 425 |
|
| 426 | Assert.AreEqual(message, copy);
|
| 427 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 428 | [TestMethod,ExpectedException(typeof(RecursionLimitExceededException))]
|
csharptest | 3b70dd7 | 2011-06-11 12:22:17 -0500 | [diff] [blame] | 429 | public void TestRecursiveLimit()
|
| 430 | {
|
| 431 | StringBuilder sb = new StringBuilder(8192);
|
| 432 | for (int i = 0; i < 80; i++)
|
| 433 | sb.Append("{\"child\":");
|
csharptest | b5a7ed2 | 2011-10-01 15:10:05 -0500 | [diff] [blame] | 434 | TestXmlRescursive msg = Extensions.MergeFromJson(new TestXmlRescursive.Builder(), sb.ToString()).Build();
|
csharptest | 3b70dd7 | 2011-06-11 12:22:17 -0500 | [diff] [blame] | 435 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 436 | [TestMethod, ExpectedException(typeof(FormatException))]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 437 | public void FailWithEmptyText()
|
| 438 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 439 | JsonFormatReader.CreateInstance("")
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 440 | .Merge(TestXmlMessage.CreateBuilder());
|
| 441 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 442 | [TestMethod, ExpectedException(typeof(FormatException))]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 443 | public void FailWithUnexpectedValue()
|
| 444 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 445 | JsonFormatReader.CreateInstance("{{}}")
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 446 | .Merge(TestXmlMessage.CreateBuilder());
|
| 447 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 448 | [TestMethod, ExpectedException(typeof(FormatException))]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 449 | public void FailWithUnQuotedName()
|
| 450 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 451 | JsonFormatReader.CreateInstance("{name:{}}")
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 452 | .Merge(TestXmlMessage.CreateBuilder());
|
| 453 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 454 | [TestMethod, ExpectedException(typeof(FormatException))]
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 455 | public void FailWithUnexpectedType()
|
| 456 | {
|
csharptest | 7fc785c | 2011-06-10 23:54:53 -0500 | [diff] [blame] | 457 | JsonFormatReader.CreateInstance("{\"valid\":{}}")
|
csharptest | afe844b | 2011-06-10 16:03:22 -0500 | [diff] [blame] | 458 | .Merge(TestXmlMessage.CreateBuilder());
|
| 459 | }
|
| 460 | }
|
| 461 | }
|