blob: aa4db87520e6c31612b1a3b28addc08f9e4d5573 [file] [log] [blame]
csharptest2b868842011-06-10 14:41:47 -05001using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Text;
5using System.Xml;
6using Google.ProtocolBuffers.Serialization;
7using NUnit.Framework;
8using Google.ProtocolBuffers.TestProtos;
9
10namespace Google.ProtocolBuffers
11{
12 [TestFixture]
13 public class TestWriterFormatXml
14 {
15 [Test]
csharptestc2d2c1a2011-09-08 20:02:11 -050016 public void Example_FromXml()
17 {
18 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
19
20 XmlReader rdr = XmlReader.Create(new StringReader(@"<root><valid>true</valid></root>"));
csharptestb5a7ed22011-10-01 15:10:05 -050021 //3.5: builder.MergeFromXml(rdr);
22 Extensions.MergeFromXml(builder, rdr);
csharptestc2d2c1a2011-09-08 20:02:11 -050023
24 TestXmlMessage message = builder.Build();
25 Assert.AreEqual(true, message.Valid);
26 }
27
28 [Test]
29 public void Example_ToXml()
30 {
31 TestXmlMessage message =
32 TestXmlMessage.CreateBuilder()
33 .SetValid(true)
34 .Build();
35
csharptestb5a7ed22011-10-01 15:10:05 -050036 //3.5: string Xml = message.ToXml();
37 string Xml = Extensions.ToXml(message);
csharptestc2d2c1a2011-09-08 20:02:11 -050038
39 Assert.AreEqual(@"<root><valid>true</valid></root>", Xml);
40 }
41
42 [Test]
43 public void Example_WriteXmlUsingICodedOutputStream()
44 {
45 TestXmlMessage message =
46 TestXmlMessage.CreateBuilder()
47 .SetValid(true)
48 .Build();
49
50 using (TextWriter output = new StringWriter())
csharptestc2d2c1a2011-09-08 20:02:11 -050051 {
csharptest353b0fa2011-09-29 16:33:31 -050052 ICodedOutputStream writer = XmlFormatWriter.CreateInstance(output);
csharptest60fd7732011-09-09 12:18:16 -050053 writer.WriteMessageStart(); //manually begin the message, output is '{'
csharptestc2d2c1a2011-09-08 20:02:11 -050054
55 ICodedOutputStream stream = writer;
csharptest60fd7732011-09-09 12:18:16 -050056 message.WriteTo(stream); //write the message normally
csharptestc2d2c1a2011-09-08 20:02:11 -050057
csharptest60fd7732011-09-09 12:18:16 -050058 writer.WriteMessageEnd(); //manually write the end message '}'
csharptestc2d2c1a2011-09-08 20:02:11 -050059 Assert.AreEqual(@"<root><valid>true</valid></root>", output.ToString());
60 }
61 }
62
63 [Test]
64 public void Example_ReadXmlUsingICodedInputStream()
65 {
66 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
csharptest60fd7732011-09-09 12:18:16 -050067 ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><valid>true</valid></root>");
csharptestc2d2c1a2011-09-08 20:02:11 -050068
csharptest60fd7732011-09-09 12:18:16 -050069 reader.ReadMessageStart(); //manually read the begin the message '{'
csharptestc2d2c1a2011-09-08 20:02:11 -050070
csharptest60fd7732011-09-09 12:18:16 -050071 builder.MergeFrom(reader); //read the message normally
csharptestc2d2c1a2011-09-08 20:02:11 -050072
csharptest60fd7732011-09-09 12:18:16 -050073 reader.ReadMessageEnd(); //manually read the end message '}'
csharptestc2d2c1a2011-09-08 20:02:11 -050074 }
75
76 [Test]
csharptestf2925232011-06-11 10:41:57 -050077 public void TestToXmlParseFromXml()
78 {
79 TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
csharptestb5a7ed22011-10-01 15:10:05 -050080 string xml = Extensions.ToXml(msg);
csharptestf2925232011-06-11 10:41:57 -050081 Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml);
csharptestb5a7ed22011-10-01 15:10:05 -050082 TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), XmlReader.Create(new StringReader(xml))).Build();
csharptestf2925232011-06-11 10:41:57 -050083 Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
84 Assert.AreEqual(msg, copy);
85 }
86
87 [Test]
88 public void TestToXmlParseFromXmlWithRootName()
89 {
90 TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
csharptestb5a7ed22011-10-01 15:10:05 -050091 string xml = Extensions.ToXml(msg, "message");
csharptestf2925232011-06-11 10:41:57 -050092 Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml);
csharptestb5a7ed22011-10-01 15:10:05 -050093 TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), "message", XmlReader.Create(new StringReader(xml))).Build();
csharptestf2925232011-06-11 10:41:57 -050094 Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
95 Assert.AreEqual(msg, copy);
96 }
97
98 [Test]
csharptest2b868842011-06-10 14:41:47 -050099 public void TestEmptyMessage()
100 {
101 TestXmlChild message = TestXmlChild.CreateBuilder()
102 .Build();
103
104 StringWriter sw = new StringWriter();
105 XmlTextWriter xw = new XmlTextWriter(sw);
106
107 //When we call message.WriteTo, we are responsible for the root element
108 xw.WriteStartElement("root");
csharptest7fc785c2011-06-10 23:54:53 -0500109 message.WriteTo(XmlFormatWriter.CreateInstance(xw));
csharptest2b868842011-06-10 14:41:47 -0500110 xw.WriteEndElement();
111 xw.Flush();
112
113 string xml = sw.ToString();
csharptest7fc785c2011-06-10 23:54:53 -0500114 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500115 TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
116 Assert.AreEqual(message, copy);
117 }
118 [Test]
119 public void TestRepeatedField()
120 {
121 TestXmlChild message = TestXmlChild.CreateBuilder()
122 .AddOptions(EnumOptions.ONE)
123 .AddOptions(EnumOptions.TWO)
124 .Build();
125
126 //Allow the writer to write the root element
127 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500128 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500129
130 string xml = sw.ToString();
csharptest7fc785c2011-06-10 23:54:53 -0500131 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500132 TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
133 Assert.AreEqual(message, copy);
134 }
135 [Test]
136 public void TestNestedEmptyMessage()
137 {
138 TestXmlMessage message = TestXmlMessage.CreateBuilder()
139 .SetChild(TestXmlChild.CreateBuilder().Build())
140 .Build();
141
142 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500143 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500144
145 string xml = sw.ToString();
csharptest7fc785c2011-06-10 23:54:53 -0500146 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500147 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
148 Assert.AreEqual(message, copy);
149 }
150 [Test]
151 public void TestNestedMessage()
152 {
153 TestXmlMessage message = TestXmlMessage.CreateBuilder()
154 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())
155 .Build();
156
157 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500158 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500159
160 string xml = sw.ToString();
csharptest7fc785c2011-06-10 23:54:53 -0500161 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500162 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
163 Assert.AreEqual(message, copy);
164 }
165 [Test]
166 public void TestBooleanTypes()
167 {
168 TestXmlMessage message = TestXmlMessage.CreateBuilder()
169 .SetValid(true)
170 .Build();
171
172 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500173 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500174
175 string xml = sw.ToString();
csharptest7fc785c2011-06-10 23:54:53 -0500176 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500177 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
178 Assert.AreEqual(message, copy);
179 }
180 [Test]
181 public void TestFullMessage()
182 {
183 TestXmlMessage message = TestXmlMessage.CreateBuilder()
184 .SetValid(true)
185 .SetText("text")
186 .AddTextlines("a")
187 .AddTextlines("b")
188 .AddTextlines("c")
189 .SetNumber(0x1010101010)
190 .AddNumbers(1)
191 .AddNumbers(2)
192 .AddNumbers(3)
193 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
194 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
195 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
196 .Build();
197
198 StringWriter sw = new StringWriter();
csharptest4b75bbe2011-09-29 19:09:32 -0500199 XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings {Indent = true, IndentChars = " "});
200
201 XmlFormatWriter.CreateInstance(xwtr).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500202
203 string xml = sw.ToString();
204
csharptest7fc785c2011-06-10 23:54:53 -0500205 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500206 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
207 Assert.AreEqual(message, copy);
208 }
209 [Test]
210 public void TestFullMessageWithRichTypes()
211 {
212 TestXmlMessage message = TestXmlMessage.CreateBuilder()
213 .SetValid(true)
214 .SetText("text")
215 .AddTextlines("a")
216 .AddTextlines("b")
217 .AddTextlines("c")
218 .SetNumber(0x1010101010)
219 .AddNumbers(1)
220 .AddNumbers(2)
221 .AddNumbers(3)
222 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
223 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
224 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
225 .Build();
226
227 StringWriter sw = new StringWriter();
csharptest4b75bbe2011-09-29 19:09:32 -0500228 XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true, IndentChars = " " });
229
230 XmlFormatWriter.CreateInstance(xwtr)
csharptest7fc785c2011-06-10 23:54:53 -0500231 .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
232 .WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500233
234 string xml = sw.ToString();
235
csharptest7fc785c2011-06-10 23:54:53 -0500236 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500237 rdr.Options = XmlReaderOptions.ReadNestedArrays;
238 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
239 Assert.AreEqual(message, copy);
240 }
241 [Test]
242 public void TestFullMessageWithUnknownFields()
243 {
244 TestXmlMessage origial = TestXmlMessage.CreateBuilder()
245 .SetValid(true)
246 .SetText("text")
247 .AddTextlines("a")
248 .AddTextlines("b")
249 .AddTextlines("c")
250 .SetNumber(0x1010101010)
251 .AddNumbers(1)
252 .AddNumbers(2)
253 .AddNumbers(3)
254 .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
255 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
256 .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
257 .Build();
258 TestXmlNoFields message = TestXmlNoFields.CreateBuilder().MergeFrom(origial.ToByteArray()).Build();
259
260 Assert.AreEqual(0, message.AllFields.Count);
261
262 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500263 XmlFormatWriter.CreateInstance(sw)
264 .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
265 .WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500266
267 string xml = sw.ToString();
268
269 using (XmlReader x = XmlReader.Create(new StringReader(xml)))
270 {
271 x.MoveToContent();
272 Assert.AreEqual(XmlNodeType.Element, x.NodeType);
273 //should always be empty
274 Assert.IsTrue(x.IsEmptyElement ||
275 (x.Read() && x.NodeType == XmlNodeType.EndElement)
276 );
277 }
278
csharptest7fc785c2011-06-10 23:54:53 -0500279 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500280 rdr.Options = XmlReaderOptions.ReadNestedArrays;
281 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
282 Assert.AreEqual(TestXmlMessage.DefaultInstance, copy);
283 }
284 [Test]
285 public void TestMessageWithXmlText()
286 {
287 TestXmlMessage message = TestXmlMessage.CreateBuilder()
288 .SetText("<text>").Build();
289
290 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500291 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500292
293 string xml = sw.ToString();
294
csharptest7fc785c2011-06-10 23:54:53 -0500295 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500296 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
297 Assert.AreEqual(message, copy);
298 }
299 [Test]
300 public void TestXmlWithWhitespace()
301 {
302 TestXmlMessage message = TestXmlMessage.CreateBuilder()
303 .SetText(" \t <- leading space and trailing -> \r\n\t").Build();
304
305 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500306 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500307
308 string xml = sw.ToString();
309
csharptest7fc785c2011-06-10 23:54:53 -0500310 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500311 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
312 Assert.AreEqual(message, copy);
313 }
314 [Test]
315 public void TestXmlWithExtensionText()
316 {
317 TestXmlMessage message = TestXmlMessage.CreateBuilder()
318 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")
319 .Build();
320
321 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500322 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500323
324 string xml = sw.ToString();
325
326 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
327 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
328
csharptest7fc785c2011-06-10 23:54:53 -0500329 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500330 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
331 Assert.AreEqual(message, copy);
332 }
333 [Test]
334 public void TestXmlWithExtensionMessage()
335 {
336 TestXmlMessage message = TestXmlMessage.CreateBuilder()
337 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage,
338 new TestXmlExtension.Builder().SetNumber(42).Build()).Build();
339
340 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500341 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500342
343 string xml = sw.ToString();
344
345 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
346 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
347
csharptest7fc785c2011-06-10 23:54:53 -0500348 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500349 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
350 Assert.AreEqual(message, copy);
351 }
352 [Test]
353 public void TestXmlWithExtensionArray()
354 {
355 TestXmlMessage message = TestXmlMessage.CreateBuilder()
356 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)
357 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)
358 .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)
359 .Build();
360
361 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500362 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500363
364 string xml = sw.ToString();
365
366 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
367 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
368
csharptest7fc785c2011-06-10 23:54:53 -0500369 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500370 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
371 Assert.AreEqual(message, copy);
372 }
373 [Test]
374 public void TestXmlWithExtensionEnum()
375 {
376 TestXmlMessage message = TestXmlMessage.CreateBuilder()
377 .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)
378 .Build();
379
380 StringWriter sw = new StringWriter();
csharptest7fc785c2011-06-10 23:54:53 -0500381 XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
csharptest2b868842011-06-10 14:41:47 -0500382
383 string xml = sw.ToString();
384
385 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
386 UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);
387
csharptest7fc785c2011-06-10 23:54:53 -0500388 XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
csharptest2b868842011-06-10 14:41:47 -0500389 TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
390 Assert.AreEqual(message, copy);
391 }
csharptestc2d2c1a2011-09-08 20:02:11 -0500392 [Test]
393 public void TestXmlReadEmptyRoot()
394 {
395 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
csharptest60fd7732011-09-09 12:18:16 -0500396 ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root/>");
csharptestc2d2c1a2011-09-08 20:02:11 -0500397
csharptest60fd7732011-09-09 12:18:16 -0500398 reader.ReadMessageStart(); //manually read the begin the message '{'
csharptestc2d2c1a2011-09-08 20:02:11 -0500399
csharptest60fd7732011-09-09 12:18:16 -0500400 builder.MergeFrom(reader); //write the message normally
csharptestc2d2c1a2011-09-08 20:02:11 -0500401
csharptest60fd7732011-09-09 12:18:16 -0500402 reader.ReadMessageEnd(); //manually read the end message '}'
403 }
404
405 [Test]
406 public void TestXmlReadEmptyChild()
407 {
408 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
409 ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><text /></root>");
410
411 reader.ReadMessageStart(); //manually read the begin the message '{'
412
413 builder.MergeFrom(reader); //write the message normally
414 Assert.IsTrue(builder.HasText);
415 Assert.AreEqual(String.Empty, builder.Text);
416 }
417
418 [Test]
419 public void TestXmlReadWriteWithoutRoot()
420 {
421 TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
422 TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();
423
424 string xml;
425 using (StringWriter sw = new StringWriter())
426 {
427 ICodedOutputStream output = XmlFormatWriter.CreateInstance(
428 XmlWriter.Create(sw, new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment }));
429
430 message.WriteTo(output);
431 output.Flush();
432 xml = sw.ToString();
433 }
434 Assert.AreEqual("<text>abc</text><number>123</number>", xml);
435
436 TestXmlMessage copy;
437 using (XmlReader xr = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
438 {
439 ICodedInputStream input = XmlFormatReader.CreateInstance(xr);
440 copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();
441 }
442
443 Assert.AreEqual(message, copy);
csharptestc2d2c1a2011-09-08 20:02:11 -0500444 }
445
csharptest0f3540e2011-08-05 20:40:14 -0500446 [Test, ExpectedException(typeof(RecursionLimitExceededException))]
csharptest3b70dd72011-06-11 12:22:17 -0500447 public void TestRecursiveLimit()
448 {
449 StringBuilder sb = new StringBuilder(8192);
450 for (int i = 0; i < 80; i++)
451 sb.Append("<child>");
csharptestb5a7ed22011-10-01 15:10:05 -0500452 TestXmlRescursive msg = Extensions.MergeFromXml(new TestXmlRescursive.Builder(), "child", XmlReader.Create(new StringReader(sb.ToString()))).Build();
csharptest3b70dd72011-06-11 12:22:17 -0500453 }
csharptest2b868842011-06-10 14:41:47 -0500454 }
455}