blob: 451698402a42078c292b280f07a644fbe1232e26 [file] [log] [blame]
csharptest71f662c2011-05-20 15:15:34 -05001#region Copyright notice and license
2
3// Protocol Buffers - Google's data interchange format
4// Copyright 2008 Google Inc. All rights reserved.
5// http://github.com/jskeet/dotnet-protobufs/
6// Original C++/Java/Python code:
7// http://code.google.com/p/protobuf/
8//
9// Redistribution and use in source and binary forms, with or without
10// modification, are permitted provided that the following conditions are
11// met:
12//
13// * Redistributions of source code must retain the above copyright
14// notice, this list of conditions and the following disclaimer.
15// * Redistributions in binary form must reproduce the above
16// copyright notice, this list of conditions and the following disclaimer
17// in the documentation and/or other materials provided with the
18// distribution.
19// * Neither the name of Google Inc. nor the names of its
20// contributors may be used to endorse or promote products derived from
21// this software without specific prior written permission.
22//
23// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
35#endregion
36
37using System;
38using System.Collections.Generic;
39using System.Globalization;
40using System.IO;
41using System.Text;
42using System.Threading;
43using Google.ProtocolBuffers.TestProtos;
44using NUnit.Framework;
45
46namespace Google.ProtocolBuffers
47{
48 internal static class TestUtil
49 {
50 private static string testDataDirectory;
51 private static ByteString goldenMessage = null;
52
53 internal static string TestDataDirectory
54 {
55 get
56 {
57 if (testDataDirectory != null)
58 {
59 return testDataDirectory;
60 }
61
62 DirectoryInfo ancestor = new DirectoryInfo(".");
63 // Search each parent directory looking for "testdata".
64 while (ancestor != null)
65 {
66 string candidate = Path.Combine(ancestor.FullName, "testdata");
67 if (Directory.Exists(candidate))
68 {
69 testDataDirectory = candidate;
70 return candidate;
71 }
72 ancestor = ancestor.Parent;
73 }
74 // TODO(jonskeet): Come up with a better exception to throw
75 throw new Exception("Unable to find directory containing test files");
76 }
77 }
78
79 internal static ByteString GoldenMessage
80 {
81 get
82 {
83 if (goldenMessage == null)
84 {
85 goldenMessage = ReadBytesFromFile("golden_message");
86 }
87 return goldenMessage;
88 }
89 }
90
91 /// <summary>
92 /// Creates an unmodifiable ExtensionRegistry containing all the extensions
93 /// of TestAllExtensions.
94 /// </summary>
95 /// <returns></returns>
96 internal static ExtensionRegistry CreateExtensionRegistry()
97 {
98 ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
99 RegisterAllExtensions(registry);
100 return registry.AsReadOnly();
101 }
102
103 /// <summary>
104 /// Registers all of the extensions in TestAllExtensions with the given
105 /// ExtensionRegistry.
106 /// </summary>
107 internal static void RegisterAllExtensions(ExtensionRegistry registry)
108 {
109 registry.Add(UnitTestProtoFile.OptionalInt32Extension);
110 registry.Add(UnitTestProtoFile.OptionalInt64Extension);
111 registry.Add(UnitTestProtoFile.OptionalUint32Extension);
112 registry.Add(UnitTestProtoFile.OptionalUint64Extension);
113 registry.Add(UnitTestProtoFile.OptionalSint32Extension);
114 registry.Add(UnitTestProtoFile.OptionalSint64Extension);
115 registry.Add(UnitTestProtoFile.OptionalFixed32Extension);
116 registry.Add(UnitTestProtoFile.OptionalFixed64Extension);
117 registry.Add(UnitTestProtoFile.OptionalSfixed32Extension);
118 registry.Add(UnitTestProtoFile.OptionalSfixed64Extension);
119 registry.Add(UnitTestProtoFile.OptionalFloatExtension);
120 registry.Add(UnitTestProtoFile.OptionalDoubleExtension);
121 registry.Add(UnitTestProtoFile.OptionalBoolExtension);
122 registry.Add(UnitTestProtoFile.OptionalStringExtension);
123 registry.Add(UnitTestProtoFile.OptionalBytesExtension);
124 registry.Add(UnitTestProtoFile.OptionalGroupExtension);
125 registry.Add(UnitTestProtoFile.OptionalNestedMessageExtension);
126 registry.Add(UnitTestProtoFile.OptionalForeignMessageExtension);
127 registry.Add(UnitTestProtoFile.OptionalImportMessageExtension);
128 registry.Add(UnitTestProtoFile.OptionalNestedEnumExtension);
129 registry.Add(UnitTestProtoFile.OptionalForeignEnumExtension);
130 registry.Add(UnitTestProtoFile.OptionalImportEnumExtension);
131 registry.Add(UnitTestProtoFile.OptionalStringPieceExtension);
132 registry.Add(UnitTestProtoFile.OptionalCordExtension);
133
134 registry.Add(UnitTestProtoFile.RepeatedInt32Extension);
135 registry.Add(UnitTestProtoFile.RepeatedInt64Extension);
136 registry.Add(UnitTestProtoFile.RepeatedUint32Extension);
137 registry.Add(UnitTestProtoFile.RepeatedUint64Extension);
138 registry.Add(UnitTestProtoFile.RepeatedSint32Extension);
139 registry.Add(UnitTestProtoFile.RepeatedSint64Extension);
140 registry.Add(UnitTestProtoFile.RepeatedFixed32Extension);
141 registry.Add(UnitTestProtoFile.RepeatedFixed64Extension);
142 registry.Add(UnitTestProtoFile.RepeatedSfixed32Extension);
143 registry.Add(UnitTestProtoFile.RepeatedSfixed64Extension);
144 registry.Add(UnitTestProtoFile.RepeatedFloatExtension);
145 registry.Add(UnitTestProtoFile.RepeatedDoubleExtension);
146 registry.Add(UnitTestProtoFile.RepeatedBoolExtension);
147 registry.Add(UnitTestProtoFile.RepeatedStringExtension);
148 registry.Add(UnitTestProtoFile.RepeatedBytesExtension);
149 registry.Add(UnitTestProtoFile.RepeatedGroupExtension);
150 registry.Add(UnitTestProtoFile.RepeatedNestedMessageExtension);
151 registry.Add(UnitTestProtoFile.RepeatedForeignMessageExtension);
152 registry.Add(UnitTestProtoFile.RepeatedImportMessageExtension);
153 registry.Add(UnitTestProtoFile.RepeatedNestedEnumExtension);
154 registry.Add(UnitTestProtoFile.RepeatedForeignEnumExtension);
155 registry.Add(UnitTestProtoFile.RepeatedImportEnumExtension);
156 registry.Add(UnitTestProtoFile.RepeatedStringPieceExtension);
157 registry.Add(UnitTestProtoFile.RepeatedCordExtension);
158
159 registry.Add(UnitTestProtoFile.DefaultInt32Extension);
160 registry.Add(UnitTestProtoFile.DefaultInt64Extension);
161 registry.Add(UnitTestProtoFile.DefaultUint32Extension);
162 registry.Add(UnitTestProtoFile.DefaultUint64Extension);
163 registry.Add(UnitTestProtoFile.DefaultSint32Extension);
164 registry.Add(UnitTestProtoFile.DefaultSint64Extension);
165 registry.Add(UnitTestProtoFile.DefaultFixed32Extension);
166 registry.Add(UnitTestProtoFile.DefaultFixed64Extension);
167 registry.Add(UnitTestProtoFile.DefaultSfixed32Extension);
168 registry.Add(UnitTestProtoFile.DefaultSfixed64Extension);
169 registry.Add(UnitTestProtoFile.DefaultFloatExtension);
170 registry.Add(UnitTestProtoFile.DefaultDoubleExtension);
171 registry.Add(UnitTestProtoFile.DefaultBoolExtension);
172 registry.Add(UnitTestProtoFile.DefaultStringExtension);
173 registry.Add(UnitTestProtoFile.DefaultBytesExtension);
174 registry.Add(UnitTestProtoFile.DefaultNestedEnumExtension);
175 registry.Add(UnitTestProtoFile.DefaultForeignEnumExtension);
176 registry.Add(UnitTestProtoFile.DefaultImportEnumExtension);
177 registry.Add(UnitTestProtoFile.DefaultStringPieceExtension);
178 registry.Add(UnitTestProtoFile.DefaultCordExtension);
179
180 registry.Add(UnitTestProtoFile.PackedInt32Extension);
181 registry.Add(UnitTestProtoFile.PackedInt64Extension);
182 registry.Add(UnitTestProtoFile.PackedUint32Extension);
183 registry.Add(UnitTestProtoFile.PackedUint64Extension);
184 registry.Add(UnitTestProtoFile.PackedSint32Extension);
185 registry.Add(UnitTestProtoFile.PackedSint64Extension);
186 registry.Add(UnitTestProtoFile.PackedFixed32Extension);
187 registry.Add(UnitTestProtoFile.PackedFixed64Extension);
188 registry.Add(UnitTestProtoFile.PackedSfixed32Extension);
189 registry.Add(UnitTestProtoFile.PackedSfixed64Extension);
190 registry.Add(UnitTestProtoFile.PackedFloatExtension);
191 registry.Add(UnitTestProtoFile.PackedDoubleExtension);
192 registry.Add(UnitTestProtoFile.PackedBoolExtension);
193 registry.Add(UnitTestProtoFile.PackedEnumExtension);
194 }
195
196 internal static string ReadTextFromFile(string filePath)
197 {
198 return ReadBytesFromFile(filePath).ToStringUtf8();
199 }
200
201 internal static ByteString ReadBytesFromFile(String filename)
202 {
203 byte[] data = File.ReadAllBytes(Path.Combine(TestDataDirectory, filename));
204 return ByteString.CopyFrom(data);
205 }
206
207 /// <summary>
208 /// Helper to convert a String to ByteString.
209 /// </summary>
210 internal static ByteString ToBytes(String str)
211 {
212 return ByteString.CopyFrom(Encoding.UTF8.GetBytes(str));
213 }
214
215 internal static TestAllTypes GetAllSet()
216 {
217 TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
218 SetAllFields(builder);
219 return builder.Build();
220 }
221
222 /// <summary>
223 /// Sets every field of the specified message to the values expected by
224 /// AssertAllFieldsSet.
225 /// </summary>
226 internal static void SetAllFields(TestAllTypes.Builder message)
227 {
228 message.SetOptionalInt32(101);
229 message.SetOptionalInt64(102);
230 message.SetOptionalUint32(103);
231 message.SetOptionalUint64(104);
232 message.SetOptionalSint32(105);
233 message.SetOptionalSint64(106);
234 message.SetOptionalFixed32(107);
235 message.SetOptionalFixed64(108);
236 message.SetOptionalSfixed32(109);
237 message.SetOptionalSfixed64(110);
238 message.SetOptionalFloat(111);
239 message.SetOptionalDouble(112);
240 message.SetOptionalBool(true);
241 message.SetOptionalString("115");
242 message.SetOptionalBytes(ToBytes("116"));
243
244 message.SetOptionalGroup(TestAllTypes.Types.OptionalGroup.CreateBuilder().SetA(117).Build());
245 message.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
246 message.SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(119).Build());
247 message.SetOptionalImportMessage(ImportMessage.CreateBuilder().SetD(120).Build());
248
249 message.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
250 message.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);
251 message.SetOptionalImportEnum(ImportEnum.IMPORT_BAZ);
252
253 message.SetOptionalStringPiece("124");
254 message.SetOptionalCord("125");
255
256 // -----------------------------------------------------------------
257
258 message.AddRepeatedInt32(201);
259 message.AddRepeatedInt64(202);
260 message.AddRepeatedUint32(203);
261 message.AddRepeatedUint64(204);
262 message.AddRepeatedSint32(205);
263 message.AddRepeatedSint64(206);
264 message.AddRepeatedFixed32(207);
265 message.AddRepeatedFixed64(208);
266 message.AddRepeatedSfixed32(209);
267 message.AddRepeatedSfixed64(210);
268 message.AddRepeatedFloat(211);
269 message.AddRepeatedDouble(212);
270 message.AddRepeatedBool(true);
271 message.AddRepeatedString("215");
272 message.AddRepeatedBytes(ToBytes("216"));
273
274 message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(217).Build());
275 message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
276 message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(219).Build());
277 message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(220).Build());
278
279 message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAR);
280 message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);
281 message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAR);
282
283 message.AddRepeatedStringPiece("224");
284 message.AddRepeatedCord("225");
285
286 // Add a second one of each field.
287 message.AddRepeatedInt32(301);
288 message.AddRepeatedInt64(302);
289 message.AddRepeatedUint32(303);
290 message.AddRepeatedUint64(304);
291 message.AddRepeatedSint32(305);
292 message.AddRepeatedSint64(306);
293 message.AddRepeatedFixed32(307);
294 message.AddRepeatedFixed64(308);
295 message.AddRepeatedSfixed32(309);
296 message.AddRepeatedSfixed64(310);
297 message.AddRepeatedFloat(311);
298 message.AddRepeatedDouble(312);
299 message.AddRepeatedBool(false);
300 message.AddRepeatedString("315");
301 message.AddRepeatedBytes(ToBytes("316"));
302
303 message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(317).Build());
304 message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
305 message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(319).Build());
306 message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(320).Build());
307
308 message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
309 message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);
310 message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAZ);
311
312 message.AddRepeatedStringPiece("324");
313 message.AddRepeatedCord("325");
314
315 // -----------------------------------------------------------------
316
317 message.SetDefaultInt32(401);
318 message.SetDefaultInt64(402);
319 message.SetDefaultUint32(403);
320 message.SetDefaultUint64(404);
321 message.SetDefaultSint32(405);
322 message.SetDefaultSint64(406);
323 message.SetDefaultFixed32(407);
324 message.SetDefaultFixed64(408);
325 message.SetDefaultSfixed32(409);
326 message.SetDefaultSfixed64(410);
327 message.SetDefaultFloat(411);
328 message.SetDefaultDouble(412);
329 message.SetDefaultBool(false);
330 message.SetDefaultString("415");
331 message.SetDefaultBytes(ToBytes("416"));
332
333 message.SetDefaultNestedEnum(TestAllTypes.Types.NestedEnum.FOO);
334 message.SetDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);
335 message.SetDefaultImportEnum(ImportEnum.IMPORT_FOO);
336
337 message.SetDefaultStringPiece("424");
338 message.SetDefaultCord("425");
339 }
340
341 /// <summary>
342 /// Asserts that all fields of the specified message are set to the values
343 /// assigned by SetAllFields.
344 /// </summary>
345 internal static void AssertAllFieldsSet(TestAllTypes message)
346 {
347 Assert.IsTrue(message.HasOptionalInt32);
348 Assert.IsTrue(message.HasOptionalInt64);
349 Assert.IsTrue(message.HasOptionalUint32);
350 Assert.IsTrue(message.HasOptionalUint64);
351 Assert.IsTrue(message.HasOptionalSint32);
352 Assert.IsTrue(message.HasOptionalSint64);
353 Assert.IsTrue(message.HasOptionalFixed32);
354 Assert.IsTrue(message.HasOptionalFixed64);
355 Assert.IsTrue(message.HasOptionalSfixed32);
356 Assert.IsTrue(message.HasOptionalSfixed64);
357 Assert.IsTrue(message.HasOptionalFloat);
358 Assert.IsTrue(message.HasOptionalDouble);
359 Assert.IsTrue(message.HasOptionalBool);
360 Assert.IsTrue(message.HasOptionalString);
361 Assert.IsTrue(message.HasOptionalBytes);
362
363 Assert.IsTrue(message.HasOptionalGroup);
364 Assert.IsTrue(message.HasOptionalNestedMessage);
365 Assert.IsTrue(message.HasOptionalForeignMessage);
366 Assert.IsTrue(message.HasOptionalImportMessage);
367
368 Assert.IsTrue(message.OptionalGroup.HasA);
369 Assert.IsTrue(message.OptionalNestedMessage.HasBb);
370 Assert.IsTrue(message.OptionalForeignMessage.HasC);
371 Assert.IsTrue(message.OptionalImportMessage.HasD);
372
373 Assert.IsTrue(message.HasOptionalNestedEnum);
374 Assert.IsTrue(message.HasOptionalForeignEnum);
375 Assert.IsTrue(message.HasOptionalImportEnum);
376
377 Assert.IsTrue(message.HasOptionalStringPiece);
378 Assert.IsTrue(message.HasOptionalCord);
379
380 Assert.AreEqual(101, message.OptionalInt32);
381 Assert.AreEqual(102, message.OptionalInt64);
382 Assert.AreEqual(103, message.OptionalUint32);
383 Assert.AreEqual(104, message.OptionalUint64);
384 Assert.AreEqual(105, message.OptionalSint32);
385 Assert.AreEqual(106, message.OptionalSint64);
386 Assert.AreEqual(107, message.OptionalFixed32);
387 Assert.AreEqual(108, message.OptionalFixed64);
388 Assert.AreEqual(109, message.OptionalSfixed32);
389 Assert.AreEqual(110, message.OptionalSfixed64);
390 Assert.AreEqual(111, message.OptionalFloat);
391 Assert.AreEqual(112, message.OptionalDouble);
392 Assert.AreEqual(true, message.OptionalBool);
393 Assert.AreEqual("115", message.OptionalString);
394 Assert.AreEqual(ToBytes("116"), message.OptionalBytes);
395
396 Assert.AreEqual(117, message.OptionalGroup.A);
397 Assert.AreEqual(118, message.OptionalNestedMessage.Bb);
398 Assert.AreEqual(119, message.OptionalForeignMessage.C);
399 Assert.AreEqual(120, message.OptionalImportMessage.D);
400
401 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.OptionalNestedEnum);
402 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.OptionalForeignEnum);
403 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.OptionalImportEnum);
404
405 Assert.AreEqual("124", message.OptionalStringPiece);
406 Assert.AreEqual("125", message.OptionalCord);
407
408 // -----------------------------------------------------------------
409
410 Assert.AreEqual(2, message.RepeatedInt32Count);
411 Assert.AreEqual(2, message.RepeatedInt64Count);
412 Assert.AreEqual(2, message.RepeatedUint32Count);
413 Assert.AreEqual(2, message.RepeatedUint64Count);
414 Assert.AreEqual(2, message.RepeatedSint32Count);
415 Assert.AreEqual(2, message.RepeatedSint64Count);
416 Assert.AreEqual(2, message.RepeatedFixed32Count);
417 Assert.AreEqual(2, message.RepeatedFixed64Count);
418 Assert.AreEqual(2, message.RepeatedSfixed32Count);
419 Assert.AreEqual(2, message.RepeatedSfixed64Count);
420 Assert.AreEqual(2, message.RepeatedFloatCount);
421 Assert.AreEqual(2, message.RepeatedDoubleCount);
422 Assert.AreEqual(2, message.RepeatedBoolCount);
423 Assert.AreEqual(2, message.RepeatedStringCount);
424 Assert.AreEqual(2, message.RepeatedBytesCount);
425
426 Assert.AreEqual(2, message.RepeatedGroupCount);
427 Assert.AreEqual(2, message.RepeatedNestedMessageCount);
428 Assert.AreEqual(2, message.RepeatedForeignMessageCount);
429 Assert.AreEqual(2, message.RepeatedImportMessageCount);
430 Assert.AreEqual(2, message.RepeatedNestedEnumCount);
431 Assert.AreEqual(2, message.RepeatedForeignEnumCount);
432 Assert.AreEqual(2, message.RepeatedImportEnumCount);
433
434 Assert.AreEqual(2, message.RepeatedStringPieceCount);
435 Assert.AreEqual(2, message.RepeatedCordCount);
436
437 Assert.AreEqual(201, message.GetRepeatedInt32(0));
438 Assert.AreEqual(202, message.GetRepeatedInt64(0));
439 Assert.AreEqual(203, message.GetRepeatedUint32(0));
440 Assert.AreEqual(204, message.GetRepeatedUint64(0));
441 Assert.AreEqual(205, message.GetRepeatedSint32(0));
442 Assert.AreEqual(206, message.GetRepeatedSint64(0));
443 Assert.AreEqual(207, message.GetRepeatedFixed32(0));
444 Assert.AreEqual(208, message.GetRepeatedFixed64(0));
445 Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
446 Assert.AreEqual(210, message.GetRepeatedSfixed64(0));
447 Assert.AreEqual(211, message.GetRepeatedFloat(0));
448 Assert.AreEqual(212, message.GetRepeatedDouble(0));
449 Assert.AreEqual(true, message.GetRepeatedBool(0));
450 Assert.AreEqual("215", message.GetRepeatedString(0));
451 Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
452
453 Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
454 Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);
455 Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
456 Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);
457
458 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));
459 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
460 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
461
462 Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
463 Assert.AreEqual("225", message.GetRepeatedCord(0));
464
465 Assert.AreEqual(301, message.GetRepeatedInt32(1));
466 Assert.AreEqual(302, message.GetRepeatedInt64(1));
467 Assert.AreEqual(303, message.GetRepeatedUint32(1));
468 Assert.AreEqual(304, message.GetRepeatedUint64(1));
469 Assert.AreEqual(305, message.GetRepeatedSint32(1));
470 Assert.AreEqual(306, message.GetRepeatedSint64(1));
471 Assert.AreEqual(307, message.GetRepeatedFixed32(1));
472 Assert.AreEqual(308, message.GetRepeatedFixed64(1));
473 Assert.AreEqual(309, message.GetRepeatedSfixed32(1));
474 Assert.AreEqual(310, message.GetRepeatedSfixed64(1));
475 Assert.AreEqual(311, message.GetRepeatedFloat(1), 0.0);
476 Assert.AreEqual(312, message.GetRepeatedDouble(1), 0.0);
477 Assert.AreEqual(false, message.GetRepeatedBool(1));
478 Assert.AreEqual("315", message.GetRepeatedString(1));
479 Assert.AreEqual(ToBytes("316"), message.GetRepeatedBytes(1));
480
481 Assert.AreEqual(317, message.GetRepeatedGroup(1).A);
482 Assert.AreEqual(318, message.GetRepeatedNestedMessage(1).Bb);
483 Assert.AreEqual(319, message.GetRepeatedForeignMessage(1).C);
484 Assert.AreEqual(320, message.GetRepeatedImportMessage(1).D);
485
486 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetRepeatedNestedEnum(1));
487 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetRepeatedForeignEnum(1));
488 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetRepeatedImportEnum(1));
489
490 Assert.AreEqual("324", message.GetRepeatedStringPiece(1));
491 Assert.AreEqual("325", message.GetRepeatedCord(1));
492
493 // -----------------------------------------------------------------
494
495 Assert.IsTrue(message.HasDefaultInt32);
496 Assert.IsTrue(message.HasDefaultInt64);
497 Assert.IsTrue(message.HasDefaultUint32);
498 Assert.IsTrue(message.HasDefaultUint64);
499 Assert.IsTrue(message.HasDefaultSint32);
500 Assert.IsTrue(message.HasDefaultSint64);
501 Assert.IsTrue(message.HasDefaultFixed32);
502 Assert.IsTrue(message.HasDefaultFixed64);
503 Assert.IsTrue(message.HasDefaultSfixed32);
504 Assert.IsTrue(message.HasDefaultSfixed64);
505 Assert.IsTrue(message.HasDefaultFloat);
506 Assert.IsTrue(message.HasDefaultDouble);
507 Assert.IsTrue(message.HasDefaultBool);
508 Assert.IsTrue(message.HasDefaultString);
509 Assert.IsTrue(message.HasDefaultBytes);
510
511 Assert.IsTrue(message.HasDefaultNestedEnum);
512 Assert.IsTrue(message.HasDefaultForeignEnum);
513 Assert.IsTrue(message.HasDefaultImportEnum);
514
515 Assert.IsTrue(message.HasDefaultStringPiece);
516 Assert.IsTrue(message.HasDefaultCord);
517
518 Assert.AreEqual(401, message.DefaultInt32);
519 Assert.AreEqual(402, message.DefaultInt64);
520 Assert.AreEqual(403, message.DefaultUint32);
521 Assert.AreEqual(404, message.DefaultUint64);
522 Assert.AreEqual(405, message.DefaultSint32);
523 Assert.AreEqual(406, message.DefaultSint64);
524 Assert.AreEqual(407, message.DefaultFixed32);
525 Assert.AreEqual(408, message.DefaultFixed64);
526 Assert.AreEqual(409, message.DefaultSfixed32);
527 Assert.AreEqual(410, message.DefaultSfixed64);
528 Assert.AreEqual(411, message.DefaultFloat);
529 Assert.AreEqual(412, message.DefaultDouble);
530 Assert.AreEqual(false, message.DefaultBool);
531 Assert.AreEqual("415", message.DefaultString);
532 Assert.AreEqual(ToBytes("416"), message.DefaultBytes);
533
534 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.DefaultNestedEnum);
535 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.DefaultForeignEnum);
536 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.DefaultImportEnum);
537
538 Assert.AreEqual("424", message.DefaultStringPiece);
539 Assert.AreEqual("425", message.DefaultCord);
540 }
541
542 internal static void AssertClear(TestAllTypes message)
543 {
544 // HasBlah() should initially be false for all optional fields.
545 Assert.IsFalse(message.HasOptionalInt32);
546 Assert.IsFalse(message.HasOptionalInt64);
547 Assert.IsFalse(message.HasOptionalUint32);
548 Assert.IsFalse(message.HasOptionalUint64);
549 Assert.IsFalse(message.HasOptionalSint32);
550 Assert.IsFalse(message.HasOptionalSint64);
551 Assert.IsFalse(message.HasOptionalFixed32);
552 Assert.IsFalse(message.HasOptionalFixed64);
553 Assert.IsFalse(message.HasOptionalSfixed32);
554 Assert.IsFalse(message.HasOptionalSfixed64);
555 Assert.IsFalse(message.HasOptionalFloat);
556 Assert.IsFalse(message.HasOptionalDouble);
557 Assert.IsFalse(message.HasOptionalBool);
558 Assert.IsFalse(message.HasOptionalString);
559 Assert.IsFalse(message.HasOptionalBytes);
560
561 Assert.IsFalse(message.HasOptionalGroup);
562 Assert.IsFalse(message.HasOptionalNestedMessage);
563 Assert.IsFalse(message.HasOptionalForeignMessage);
564 Assert.IsFalse(message.HasOptionalImportMessage);
565
566 Assert.IsFalse(message.HasOptionalNestedEnum);
567 Assert.IsFalse(message.HasOptionalForeignEnum);
568 Assert.IsFalse(message.HasOptionalImportEnum);
569
570 Assert.IsFalse(message.HasOptionalStringPiece);
571 Assert.IsFalse(message.HasOptionalCord);
572
573 // Optional fields without defaults are set to zero or something like it.
574 Assert.AreEqual(0, message.OptionalInt32);
575 Assert.AreEqual(0, message.OptionalInt64);
576 Assert.AreEqual(0, message.OptionalUint32);
577 Assert.AreEqual(0, message.OptionalUint64);
578 Assert.AreEqual(0, message.OptionalSint32);
579 Assert.AreEqual(0, message.OptionalSint64);
580 Assert.AreEqual(0, message.OptionalFixed32);
581 Assert.AreEqual(0, message.OptionalFixed64);
582 Assert.AreEqual(0, message.OptionalSfixed32);
583 Assert.AreEqual(0, message.OptionalSfixed64);
584 Assert.AreEqual(0, message.OptionalFloat);
585 Assert.AreEqual(0, message.OptionalDouble);
586 Assert.AreEqual(false, message.OptionalBool);
587 Assert.AreEqual("", message.OptionalString);
588 Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
589
590 // Embedded messages should also be clear.
591 Assert.IsFalse(message.OptionalGroup.HasA);
592 Assert.IsFalse(message.OptionalNestedMessage.HasBb);
593 Assert.IsFalse(message.OptionalForeignMessage.HasC);
594 Assert.IsFalse(message.OptionalImportMessage.HasD);
595
596 Assert.AreEqual(0, message.OptionalGroup.A);
597 Assert.AreEqual(0, message.OptionalNestedMessage.Bb);
598 Assert.AreEqual(0, message.OptionalForeignMessage.C);
599 Assert.AreEqual(0, message.OptionalImportMessage.D);
600
601 // Enums without defaults are set to the first value in the enum.
602 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.OptionalNestedEnum);
603 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.OptionalForeignEnum);
604 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.OptionalImportEnum);
605
606 Assert.AreEqual("", message.OptionalStringPiece);
607 Assert.AreEqual("", message.OptionalCord);
608
609 // Repeated fields are empty.
610 Assert.AreEqual(0, message.RepeatedInt32Count);
611 Assert.AreEqual(0, message.RepeatedInt64Count);
612 Assert.AreEqual(0, message.RepeatedUint32Count);
613 Assert.AreEqual(0, message.RepeatedUint64Count);
614 Assert.AreEqual(0, message.RepeatedSint32Count);
615 Assert.AreEqual(0, message.RepeatedSint64Count);
616 Assert.AreEqual(0, message.RepeatedFixed32Count);
617 Assert.AreEqual(0, message.RepeatedFixed64Count);
618 Assert.AreEqual(0, message.RepeatedSfixed32Count);
619 Assert.AreEqual(0, message.RepeatedSfixed64Count);
620 Assert.AreEqual(0, message.RepeatedFloatCount);
621 Assert.AreEqual(0, message.RepeatedDoubleCount);
622 Assert.AreEqual(0, message.RepeatedBoolCount);
623 Assert.AreEqual(0, message.RepeatedStringCount);
624 Assert.AreEqual(0, message.RepeatedBytesCount);
625
626 Assert.AreEqual(0, message.RepeatedGroupCount);
627 Assert.AreEqual(0, message.RepeatedNestedMessageCount);
628 Assert.AreEqual(0, message.RepeatedForeignMessageCount);
629 Assert.AreEqual(0, message.RepeatedImportMessageCount);
630 Assert.AreEqual(0, message.RepeatedNestedEnumCount);
631 Assert.AreEqual(0, message.RepeatedForeignEnumCount);
632 Assert.AreEqual(0, message.RepeatedImportEnumCount);
633
634 Assert.AreEqual(0, message.RepeatedStringPieceCount);
635 Assert.AreEqual(0, message.RepeatedCordCount);
636
637 // HasBlah() should also be false for all default fields.
638 Assert.IsFalse(message.HasDefaultInt32);
639 Assert.IsFalse(message.HasDefaultInt64);
640 Assert.IsFalse(message.HasDefaultUint32);
641 Assert.IsFalse(message.HasDefaultUint64);
642 Assert.IsFalse(message.HasDefaultSint32);
643 Assert.IsFalse(message.HasDefaultSint64);
644 Assert.IsFalse(message.HasDefaultFixed32);
645 Assert.IsFalse(message.HasDefaultFixed64);
646 Assert.IsFalse(message.HasDefaultSfixed32);
647 Assert.IsFalse(message.HasDefaultSfixed64);
648 Assert.IsFalse(message.HasDefaultFloat);
649 Assert.IsFalse(message.HasDefaultDouble);
650 Assert.IsFalse(message.HasDefaultBool);
651 Assert.IsFalse(message.HasDefaultString);
652 Assert.IsFalse(message.HasDefaultBytes);
653
654 Assert.IsFalse(message.HasDefaultNestedEnum);
655 Assert.IsFalse(message.HasDefaultForeignEnum);
656 Assert.IsFalse(message.HasDefaultImportEnum);
657
658 Assert.IsFalse(message.HasDefaultStringPiece);
659 Assert.IsFalse(message.HasDefaultCord);
660
661 // Fields with defaults have their default values (duh).
662 Assert.AreEqual(41, message.DefaultInt32);
663 Assert.AreEqual(42, message.DefaultInt64);
664 Assert.AreEqual(43, message.DefaultUint32);
665 Assert.AreEqual(44, message.DefaultUint64);
666 Assert.AreEqual(-45, message.DefaultSint32);
667 Assert.AreEqual(46, message.DefaultSint64);
668 Assert.AreEqual(47, message.DefaultFixed32);
669 Assert.AreEqual(48, message.DefaultFixed64);
670 Assert.AreEqual(49, message.DefaultSfixed32);
671 Assert.AreEqual(-50, message.DefaultSfixed64);
672 Assert.AreEqual(51.5, message.DefaultFloat, 0.0);
673 Assert.AreEqual(52e3, message.DefaultDouble, 0.0);
674 Assert.AreEqual(true, message.DefaultBool);
675 Assert.AreEqual("hello", message.DefaultString);
676 Assert.AreEqual(ToBytes("world"), message.DefaultBytes);
677
678 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.DefaultNestedEnum);
679 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.DefaultForeignEnum);
680 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.DefaultImportEnum);
681
682 Assert.AreEqual("abc", message.DefaultStringPiece);
683 Assert.AreEqual("123", message.DefaultCord);
684 }
685
686 /// <summary>
687 /// Get a TestAllExtensions with all fields set as they would be by
688 /// SetAllExtensions(TestAllExtensions.Builder).
689 /// </summary>
690 internal static TestAllExtensions GetAllExtensionsSet()
691 {
692 TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
693 SetAllExtensions(builder);
694 return builder.Build();
695 }
696
697 public static TestPackedTypes GetPackedSet()
698 {
699 TestPackedTypes.Builder builder = TestPackedTypes.CreateBuilder();
700 SetPackedFields(builder);
701 return builder.Build();
702 }
703
704 public static TestPackedExtensions GetPackedExtensionsSet()
705 {
706 TestPackedExtensions.Builder builder = TestPackedExtensions.CreateBuilder();
707 SetPackedExtensions(builder);
708 return builder.Build();
709 }
710
711 /// <summary>
712 /// Sets every field of the specified builder to the values expected by
713 /// AssertAllExtensionsSet.
714 /// </summary>
715 internal static void SetAllExtensions(TestAllExtensions.Builder message)
716 {
717 message.SetExtension(UnitTestProtoFile.OptionalInt32Extension, 101);
718 message.SetExtension(UnitTestProtoFile.OptionalInt64Extension, 102L);
719 message.SetExtension(UnitTestProtoFile.OptionalUint32Extension, 103U);
720 message.SetExtension(UnitTestProtoFile.OptionalUint64Extension, 104UL);
721 message.SetExtension(UnitTestProtoFile.OptionalSint32Extension, 105);
722 message.SetExtension(UnitTestProtoFile.OptionalSint64Extension, 106L);
723 message.SetExtension(UnitTestProtoFile.OptionalFixed32Extension, 107U);
724 message.SetExtension(UnitTestProtoFile.OptionalFixed64Extension, 108UL);
725 message.SetExtension(UnitTestProtoFile.OptionalSfixed32Extension, 109);
726 message.SetExtension(UnitTestProtoFile.OptionalSfixed64Extension, 110L);
727 message.SetExtension(UnitTestProtoFile.OptionalFloatExtension, 111F);
728 message.SetExtension(UnitTestProtoFile.OptionalDoubleExtension, 112D);
729 message.SetExtension(UnitTestProtoFile.OptionalBoolExtension, true);
730 message.SetExtension(UnitTestProtoFile.OptionalStringExtension, "115");
731 message.SetExtension(UnitTestProtoFile.OptionalBytesExtension, ToBytes("116"));
732
733 message.SetExtension(UnitTestProtoFile.OptionalGroupExtension,
734 OptionalGroup_extension.CreateBuilder().SetA(117).Build());
735 message.SetExtension(UnitTestProtoFile.OptionalNestedMessageExtension,
736 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
737 message.SetExtension(UnitTestProtoFile.OptionalForeignMessageExtension,
738 ForeignMessage.CreateBuilder().SetC(119).Build());
739 message.SetExtension(UnitTestProtoFile.OptionalImportMessageExtension,
740 ImportMessage.CreateBuilder().SetD(120).Build());
741
742 message.SetExtension(UnitTestProtoFile.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
743 message.SetExtension(UnitTestProtoFile.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
744 message.SetExtension(UnitTestProtoFile.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ);
745
746 message.SetExtension(UnitTestProtoFile.OptionalStringPieceExtension, "124");
747 message.SetExtension(UnitTestProtoFile.OptionalCordExtension, "125");
748
749 // -----------------------------------------------------------------
750
751 message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 201);
752 message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 202L);
753 message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 203U);
754 message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 204UL);
755 message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 205);
756 message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 206L);
757 message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 207U);
758 message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 208UL);
759 message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 209);
760 message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 210L);
761 message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 211F);
762 message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 212D);
763 message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, true);
764 message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "215");
765 message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("216"));
766
767 message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension,
768 RepeatedGroup_extension.CreateBuilder().SetA(217).Build());
769 message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension,
770 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
771 message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension,
772 ForeignMessage.CreateBuilder().SetC(219).Build());
773 message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension,
774 ImportMessage.CreateBuilder().SetD(220).Build());
775
776 message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAR);
777 message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);
778 message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAR);
779
780 message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "224");
781 message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "225");
782
783 // Add a second one of each field.
784 message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 301);
785 message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 302L);
786 message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 303U);
787 message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 304UL);
788 message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 305);
789 message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 306L);
790 message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 307U);
791 message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 308UL);
792 message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 309);
793 message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 310L);
794 message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 311F);
795 message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 312D);
796 message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, false);
797 message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "315");
798 message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("316"));
799
800 message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension,
801 RepeatedGroup_extension.CreateBuilder().SetA(317).Build());
802 message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension,
803 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
804 message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension,
805 ForeignMessage.CreateBuilder().SetC(319).Build());
806 message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension,
807 ImportMessage.CreateBuilder().SetD(320).Build());
808
809 message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
810 message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
811 message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);
812
813 message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "324");
814 message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "325");
815
816 // -----------------------------------------------------------------
817
818 message.SetExtension(UnitTestProtoFile.DefaultInt32Extension, 401);
819 message.SetExtension(UnitTestProtoFile.DefaultInt64Extension, 402L);
820 message.SetExtension(UnitTestProtoFile.DefaultUint32Extension, 403U);
821 message.SetExtension(UnitTestProtoFile.DefaultUint64Extension, 404UL);
822 message.SetExtension(UnitTestProtoFile.DefaultSint32Extension, 405);
823 message.SetExtension(UnitTestProtoFile.DefaultSint64Extension, 406L);
824 message.SetExtension(UnitTestProtoFile.DefaultFixed32Extension, 407U);
825 message.SetExtension(UnitTestProtoFile.DefaultFixed64Extension, 408UL);
826 message.SetExtension(UnitTestProtoFile.DefaultSfixed32Extension, 409);
827 message.SetExtension(UnitTestProtoFile.DefaultSfixed64Extension, 410L);
828 message.SetExtension(UnitTestProtoFile.DefaultFloatExtension, 411F);
829 message.SetExtension(UnitTestProtoFile.DefaultDoubleExtension, 412D);
830 message.SetExtension(UnitTestProtoFile.DefaultBoolExtension, false);
831 message.SetExtension(UnitTestProtoFile.DefaultStringExtension, "415");
832 message.SetExtension(UnitTestProtoFile.DefaultBytesExtension, ToBytes("416"));
833
834 message.SetExtension(UnitTestProtoFile.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO);
835 message.SetExtension(UnitTestProtoFile.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);
836 message.SetExtension(UnitTestProtoFile.DefaultImportEnumExtension, ImportEnum.IMPORT_FOO);
837
838 message.SetExtension(UnitTestProtoFile.DefaultStringPieceExtension, "424");
839 message.SetExtension(UnitTestProtoFile.DefaultCordExtension, "425");
840 }
841
842 internal static void ModifyRepeatedFields(TestAllTypes.Builder message)
843 {
844 message.SetRepeatedInt32(1, 501);
845 message.SetRepeatedInt64(1, 502);
846 message.SetRepeatedUint32(1, 503);
847 message.SetRepeatedUint64(1, 504);
848 message.SetRepeatedSint32(1, 505);
849 message.SetRepeatedSint64(1, 506);
850 message.SetRepeatedFixed32(1, 507);
851 message.SetRepeatedFixed64(1, 508);
852 message.SetRepeatedSfixed32(1, 509);
853 message.SetRepeatedSfixed64(1, 510);
854 message.SetRepeatedFloat(1, 511);
855 message.SetRepeatedDouble(1, 512);
856 message.SetRepeatedBool(1, true);
857 message.SetRepeatedString(1, "515");
858 message.SetRepeatedBytes(1, ToBytes("516"));
859
860 message.SetRepeatedGroup(1, TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(517).Build());
861 message.SetRepeatedNestedMessage(1, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
862 message.SetRepeatedForeignMessage(1, ForeignMessage.CreateBuilder().SetC(519).Build());
863 message.SetRepeatedImportMessage(1, ImportMessage.CreateBuilder().SetD(520).Build());
864
865 message.SetRepeatedNestedEnum(1, TestAllTypes.Types.NestedEnum.FOO);
866 message.SetRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO);
867 message.SetRepeatedImportEnum(1, ImportEnum.IMPORT_FOO);
868
869 message.SetRepeatedStringPiece(1, "524");
870 message.SetRepeatedCord(1, "525");
871 }
872
873 internal static void AssertRepeatedFieldsModified(TestAllTypes message)
874 {
875 // ModifyRepeatedFields only sets the second repeated element of each
876 // field. In addition to verifying this, we also verify that the first
877 // element and size were *not* modified.
878 Assert.AreEqual(2, message.RepeatedInt32Count);
879 Assert.AreEqual(2, message.RepeatedInt64Count);
880 Assert.AreEqual(2, message.RepeatedUint32Count);
881 Assert.AreEqual(2, message.RepeatedUint64Count);
882 Assert.AreEqual(2, message.RepeatedSint32Count);
883 Assert.AreEqual(2, message.RepeatedSint64Count);
884 Assert.AreEqual(2, message.RepeatedFixed32Count);
885 Assert.AreEqual(2, message.RepeatedFixed64Count);
886 Assert.AreEqual(2, message.RepeatedSfixed32Count);
887 Assert.AreEqual(2, message.RepeatedSfixed64Count);
888 Assert.AreEqual(2, message.RepeatedFloatCount);
889 Assert.AreEqual(2, message.RepeatedDoubleCount);
890 Assert.AreEqual(2, message.RepeatedBoolCount);
891 Assert.AreEqual(2, message.RepeatedStringCount);
892 Assert.AreEqual(2, message.RepeatedBytesCount);
893
894 Assert.AreEqual(2, message.RepeatedGroupCount);
895 Assert.AreEqual(2, message.RepeatedNestedMessageCount);
896 Assert.AreEqual(2, message.RepeatedForeignMessageCount);
897 Assert.AreEqual(2, message.RepeatedImportMessageCount);
898 Assert.AreEqual(2, message.RepeatedNestedEnumCount);
899 Assert.AreEqual(2, message.RepeatedForeignEnumCount);
900 Assert.AreEqual(2, message.RepeatedImportEnumCount);
901
902 Assert.AreEqual(2, message.RepeatedStringPieceCount);
903 Assert.AreEqual(2, message.RepeatedCordCount);
904
905 Assert.AreEqual(201, message.GetRepeatedInt32(0));
906 Assert.AreEqual(202L, message.GetRepeatedInt64(0));
907 Assert.AreEqual(203U, message.GetRepeatedUint32(0));
908 Assert.AreEqual(204UL, message.GetRepeatedUint64(0));
909 Assert.AreEqual(205, message.GetRepeatedSint32(0));
910 Assert.AreEqual(206L, message.GetRepeatedSint64(0));
911 Assert.AreEqual(207U, message.GetRepeatedFixed32(0));
912 Assert.AreEqual(208UL, message.GetRepeatedFixed64(0));
913 Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
914 Assert.AreEqual(210L, message.GetRepeatedSfixed64(0));
915 Assert.AreEqual(211F, message.GetRepeatedFloat(0));
916 Assert.AreEqual(212D, message.GetRepeatedDouble(0));
917 Assert.AreEqual(true, message.GetRepeatedBool(0));
918 Assert.AreEqual("215", message.GetRepeatedString(0));
919 Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
920
921 Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
922 Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);
923 Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
924 Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);
925
926 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));
927 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
928 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
929
930 Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
931 Assert.AreEqual("225", message.GetRepeatedCord(0));
932
933 // Actually verify the second (modified) elements now.
934 Assert.AreEqual(501, message.GetRepeatedInt32(1));
935 Assert.AreEqual(502L, message.GetRepeatedInt64(1));
936 Assert.AreEqual(503U, message.GetRepeatedUint32(1));
937 Assert.AreEqual(504UL, message.GetRepeatedUint64(1));
938 Assert.AreEqual(505, message.GetRepeatedSint32(1));
939 Assert.AreEqual(506L, message.GetRepeatedSint64(1));
940 Assert.AreEqual(507U, message.GetRepeatedFixed32(1));
941 Assert.AreEqual(508UL, message.GetRepeatedFixed64(1));
942 Assert.AreEqual(509, message.GetRepeatedSfixed32(1));
943 Assert.AreEqual(510L, message.GetRepeatedSfixed64(1));
944 Assert.AreEqual(511F, message.GetRepeatedFloat(1));
945 Assert.AreEqual(512D, message.GetRepeatedDouble(1));
946 Assert.AreEqual(true, message.GetRepeatedBool(1));
947 Assert.AreEqual("515", message.GetRepeatedString(1));
948 Assert.AreEqual(ToBytes("516"), message.GetRepeatedBytes(1));
949
950 Assert.AreEqual(517, message.GetRepeatedGroup(1).A);
951 Assert.AreEqual(518, message.GetRepeatedNestedMessage(1).Bb);
952 Assert.AreEqual(519, message.GetRepeatedForeignMessage(1).C);
953 Assert.AreEqual(520, message.GetRepeatedImportMessage(1).D);
954
955 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetRepeatedNestedEnum(1));
956 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetRepeatedForeignEnum(1));
957 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetRepeatedImportEnum(1));
958
959 Assert.AreEqual("524", message.GetRepeatedStringPiece(1));
960 Assert.AreEqual("525", message.GetRepeatedCord(1));
961 }
962
963 /// <summary>
964 /// Helper to assert that sequences are equal.
965 /// </summary>
966 internal static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second)
967 {
968 using (IEnumerator<T> firstEnumerator = first.GetEnumerator())
969 {
970 foreach (T secondElement in second)
971 {
972 Assert.IsTrue(firstEnumerator.MoveNext(), "First enumerator ran out of elements too early.");
973 Assert.AreEqual(firstEnumerator.Current, secondElement);
974 }
975 Assert.IsFalse(firstEnumerator.MoveNext(), "Second enumerator ran out of elements too early.");
976 }
977 }
978
979 internal static void AssertEqualBytes(byte[] expected, byte[] actual)
980 {
981 Assert.AreEqual(ByteString.CopyFrom(expected), ByteString.CopyFrom(actual));
982 }
983
984 internal static void AssertAllExtensionsSet(TestAllExtensions message)
985 {
986 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension));
987 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension));
988 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension));
989 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension));
990 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension));
991 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension));
992 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension));
993 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension));
994 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));
995 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));
996 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension));
997 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension));
998 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension));
999 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringExtension));
1000 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension));
1001
1002 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension));
1003 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension));
1004 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));
1005 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension));
1006
1007 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).HasA);
1008 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).HasBb);
1009 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);
1010 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).HasD);
1011
1012 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1013 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1014 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1015
1016 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1017 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));
1018
1019 Assert.AreEqual(101, message.GetExtension(UnitTestProtoFile.OptionalInt32Extension));
1020 Assert.AreEqual(102L, message.GetExtension(UnitTestProtoFile.OptionalInt64Extension));
1021 Assert.AreEqual(103U, message.GetExtension(UnitTestProtoFile.OptionalUint32Extension));
1022 Assert.AreEqual(104UL, message.GetExtension(UnitTestProtoFile.OptionalUint64Extension));
1023 Assert.AreEqual(105, message.GetExtension(UnitTestProtoFile.OptionalSint32Extension));
1024 Assert.AreEqual(106L, message.GetExtension(UnitTestProtoFile.OptionalSint64Extension));
1025 Assert.AreEqual(107U, message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));
1026 Assert.AreEqual(108UL, message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));
1027 Assert.AreEqual(109, message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));
1028 Assert.AreEqual(110L, message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));
1029 Assert.AreEqual(111F, message.GetExtension(UnitTestProtoFile.OptionalFloatExtension));
1030 Assert.AreEqual(112D, message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));
1031 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.OptionalBoolExtension));
1032 Assert.AreEqual("115", message.GetExtension(UnitTestProtoFile.OptionalStringExtension));
1033 Assert.AreEqual(ToBytes("116"), message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));
1034
1035 Assert.AreEqual(117, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).A);
1036 Assert.AreEqual(118, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).Bb);
1037 Assert.AreEqual(119, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);
1038 Assert.AreEqual(120, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).D);
1039
1040 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,
1041 message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1042 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,
1043 message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1044 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1045
1046 Assert.AreEqual("124", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1047 Assert.AreEqual("125", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));
1048
1049 // -----------------------------------------------------------------
1050
1051 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
1052 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));
1053 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));
1054 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));
1055 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));
1056 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));
1057 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));
1058 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));
1059 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
1060 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
1061 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));
1062 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));
1063 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));
1064 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));
1065 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));
1066
1067 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));
1068 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));
1069 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
1070 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));
1071 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));
1072 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));
1073 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));
1074
1075 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
1076 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1077
1078 Assert.AreEqual(201, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));
1079 Assert.AreEqual(202L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));
1080 Assert.AreEqual(203U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));
1081 Assert.AreEqual(204UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));
1082 Assert.AreEqual(205, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));
1083 Assert.AreEqual(206L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));
1084 Assert.AreEqual(207U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));
1085 Assert.AreEqual(208UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));
1086 Assert.AreEqual(209, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));
1087 Assert.AreEqual(210L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));
1088 Assert.AreEqual(211F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));
1089 Assert.AreEqual(212D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));
1090 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));
1091 Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));
1092 Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));
1093
1094 Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 0).A);
1095 Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 0).Bb);
1096 Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);
1097 Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 0).D);
1098
1099 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
1100 message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));
1101 Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
1102 message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));
1103 Assert.AreEqual(ImportEnum.IMPORT_BAR,
1104 message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));
1105
1106 Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));
1107 Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));
1108
1109 Assert.AreEqual(301, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1));
1110 Assert.AreEqual(302L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1));
1111 Assert.AreEqual(303U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1));
1112 Assert.AreEqual(304UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1));
1113 Assert.AreEqual(305, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1));
1114 Assert.AreEqual(306L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1));
1115 Assert.AreEqual(307U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1));
1116 Assert.AreEqual(308UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1));
1117 Assert.AreEqual(309, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));
1118 Assert.AreEqual(310L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));
1119 Assert.AreEqual(311F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1));
1120 Assert.AreEqual(312D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1));
1121 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1));
1122 Assert.AreEqual("315", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 1));
1123 Assert.AreEqual(ToBytes("316"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));
1124
1125 Assert.AreEqual(317, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1).A);
1126 Assert.AreEqual(318, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1).Bb);
1127 Assert.AreEqual(319, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);
1128 Assert.AreEqual(320, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1).D);
1129
1130 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,
1131 message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));
1132 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,
1133 message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));
1134 Assert.AreEqual(ImportEnum.IMPORT_BAZ,
1135 message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));
1136
1137 Assert.AreEqual("324", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));
1138 Assert.AreEqual("325", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));
1139
1140 // -----------------------------------------------------------------
1141
1142 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension));
1143 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension));
1144 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension));
1145 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension));
1146 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension));
1147 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension));
1148 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension));
1149 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension));
1150 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1151 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1152 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension));
1153 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension));
1154 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension));
1155 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringExtension));
1156 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension));
1157
1158 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1159 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1160 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1161
1162 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1163 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));
1164
1165 Assert.AreEqual(401, message.GetExtension(UnitTestProtoFile.DefaultInt32Extension));
1166 Assert.AreEqual(402L, message.GetExtension(UnitTestProtoFile.DefaultInt64Extension));
1167 Assert.AreEqual(403U, message.GetExtension(UnitTestProtoFile.DefaultUint32Extension));
1168 Assert.AreEqual(404UL, message.GetExtension(UnitTestProtoFile.DefaultUint64Extension));
1169 Assert.AreEqual(405, message.GetExtension(UnitTestProtoFile.DefaultSint32Extension));
1170 Assert.AreEqual(406L, message.GetExtension(UnitTestProtoFile.DefaultSint64Extension));
1171 Assert.AreEqual(407U, message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));
1172 Assert.AreEqual(408UL, message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));
1173 Assert.AreEqual(409, message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1174 Assert.AreEqual(410L, message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1175 Assert.AreEqual(411F, message.GetExtension(UnitTestProtoFile.DefaultFloatExtension));
1176 Assert.AreEqual(412D, message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));
1177 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension));
1178 Assert.AreEqual("415", message.GetExtension(UnitTestProtoFile.DefaultStringExtension));
1179 Assert.AreEqual(ToBytes("416"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));
1180
1181 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
1182 message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1183 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1184 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1185
1186 Assert.AreEqual("424", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1187 Assert.AreEqual("425", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));
1188 }
1189
1190 /// <summary>
1191 /// Modifies the repeated extensions of the given message to contain the values
1192 /// expected by AssertRepeatedExtensionsModified.
1193 /// </summary>
1194 internal static void ModifyRepeatedExtensions(TestAllExtensions.Builder message)
1195 {
1196 message.SetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1, 501);
1197 message.SetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1, 502L);
1198 message.SetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1, 503U);
1199 message.SetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1, 504UL);
1200 message.SetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1, 505);
1201 message.SetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1, 506L);
1202 message.SetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1, 507U);
1203 message.SetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1, 508UL);
1204 message.SetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1, 509);
1205 message.SetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1, 510L);
1206 message.SetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1, 511F);
1207 message.SetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1, 512D);
1208 message.SetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1, true);
1209 message.SetExtension(UnitTestProtoFile.RepeatedStringExtension, 1, "515");
1210 message.SetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1, ToBytes("516"));
1211
1212 message.SetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1,
1213 RepeatedGroup_extension.CreateBuilder().SetA(517).Build());
1214 message.SetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1,
1215 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
1216 message.SetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1,
1217 ForeignMessage.CreateBuilder().SetC(519).Build());
1218 message.SetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1,
1219 ImportMessage.CreateBuilder().SetD(520).Build());
1220
1221 message.SetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1, TestAllTypes.Types.NestedEnum.FOO);
1222 message.SetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO);
1223 message.SetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1, ImportEnum.IMPORT_FOO);
1224
1225 message.SetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1, "524");
1226 message.SetExtension(UnitTestProtoFile.RepeatedCordExtension, 1, "525");
1227 }
1228
1229 /// <summary>
1230 /// Asserts that all repeated extensions are set to the values assigned by
1231 /// SetAllExtensions follwed by ModifyRepeatedExtensions.
1232 /// </summary>
1233 internal static void AssertRepeatedExtensionsModified(TestAllExtensions message)
1234 {
1235 // ModifyRepeatedFields only sets the second repeated element of each
1236 // field. In addition to verifying this, we also verify that the first
1237 // element and size were *not* modified.
1238 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
1239 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));
1240 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));
1241 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));
1242 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));
1243 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));
1244 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));
1245 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));
1246 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
1247 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
1248 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));
1249 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));
1250 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));
1251 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));
1252 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));
1253
1254 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));
1255 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));
1256 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
1257 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));
1258 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));
1259 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));
1260 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));
1261
1262 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
1263 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1264
1265 Assert.AreEqual(201, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));
1266 Assert.AreEqual(202L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));
1267 Assert.AreEqual(203U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));
1268 Assert.AreEqual(204UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));
1269 Assert.AreEqual(205, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));
1270 Assert.AreEqual(206L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));
1271 Assert.AreEqual(207U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));
1272 Assert.AreEqual(208UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));
1273 Assert.AreEqual(209, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));
1274 Assert.AreEqual(210L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));
1275 Assert.AreEqual(211F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));
1276 Assert.AreEqual(212D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));
1277 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));
1278 Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));
1279 Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));
1280
1281 Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 0).A);
1282 Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 0).Bb);
1283 Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);
1284 Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 0).D);
1285
1286 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
1287 message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));
1288 Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
1289 message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));
1290 Assert.AreEqual(ImportEnum.IMPORT_BAR,
1291 message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));
1292
1293 Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));
1294 Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));
1295
1296 // Actually verify the second (modified) elements now.
1297 Assert.AreEqual(501, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1));
1298 Assert.AreEqual(502L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1));
1299 Assert.AreEqual(503U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1));
1300 Assert.AreEqual(504UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1));
1301 Assert.AreEqual(505, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1));
1302 Assert.AreEqual(506L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1));
1303 Assert.AreEqual(507U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1));
1304 Assert.AreEqual(508UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1));
1305 Assert.AreEqual(509, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));
1306 Assert.AreEqual(510L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));
1307 Assert.AreEqual(511F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1));
1308 Assert.AreEqual(512D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1));
1309 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1));
1310 Assert.AreEqual("515", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 1));
1311 Assert.AreEqual(ToBytes("516"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));
1312
1313 Assert.AreEqual(517, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1).A);
1314 Assert.AreEqual(518, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1).Bb);
1315 Assert.AreEqual(519, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);
1316 Assert.AreEqual(520, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1).D);
1317
1318 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
1319 message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));
1320 Assert.AreEqual(ForeignEnum.FOREIGN_FOO,
1321 message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));
1322 Assert.AreEqual(ImportEnum.IMPORT_FOO,
1323 message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));
1324
1325 Assert.AreEqual("524", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));
1326 Assert.AreEqual("525", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));
1327 }
1328
1329 internal static void AssertExtensionsClear(TestAllExtensions message)
1330 {
1331 // HasBlah() should initially be false for all optional fields.
1332 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension));
1333 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension));
1334 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension));
1335 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension));
1336 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension));
1337 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension));
1338 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension));
1339 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension));
1340 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));
1341 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));
1342 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension));
1343 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension));
1344 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension));
1345 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringExtension));
1346 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension));
1347
1348 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension));
1349 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension));
1350 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));
1351 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension));
1352
1353 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1354 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1355 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1356
1357 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1358 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));
1359
1360 // Optional fields without defaults are set to zero or something like it.
1361 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalInt32Extension));
1362 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalInt64Extension));
1363 Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalUint32Extension));
1364 Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalUint64Extension));
1365 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSint32Extension));
1366 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSint64Extension));
1367 Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));
1368 Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));
1369 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));
1370 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));
1371 Assert.AreEqual(0F, message.GetExtension(UnitTestProtoFile.OptionalFloatExtension));
1372 Assert.AreEqual(0D, message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));
1373 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.OptionalBoolExtension));
1374 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringExtension));
1375 Assert.AreEqual(ByteString.Empty, message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));
1376
1377 // Embedded messages should also be clear.
1378 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).HasA);
1379 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).HasBb);
1380 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);
1381 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).HasD);
1382
1383 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).A);
1384 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).Bb);
1385 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);
1386 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).D);
1387
1388 // Enums without defaults are set to the first value in the enum.
1389 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
1390 message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1391 Assert.AreEqual(ForeignEnum.FOREIGN_FOO,
1392 message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1393 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1394
1395 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1396 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));
1397
1398 // Repeated fields are empty.
1399 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
1400 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));
1401 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));
1402 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));
1403 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));
1404 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));
1405 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));
1406 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));
1407 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
1408 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
1409 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));
1410 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));
1411 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));
1412 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));
1413 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));
1414
1415 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));
1416 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));
1417 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
1418 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));
1419 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));
1420 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));
1421 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));
1422
1423 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
1424 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1425
1426 // HasBlah() should also be false for all default fields.
1427 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension));
1428 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension));
1429 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension));
1430 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension));
1431 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension));
1432 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension));
1433 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension));
1434 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension));
1435 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1436 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1437 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension));
1438 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension));
1439 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension));
1440 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringExtension));
1441 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension));
1442
1443 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1444 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1445 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1446
1447 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1448 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));
1449
1450 // Fields with defaults have their default values (duh).
1451 Assert.AreEqual(41, message.GetExtension(UnitTestProtoFile.DefaultInt32Extension));
1452 Assert.AreEqual(42L, message.GetExtension(UnitTestProtoFile.DefaultInt64Extension));
1453 Assert.AreEqual(43U, message.GetExtension(UnitTestProtoFile.DefaultUint32Extension));
1454 Assert.AreEqual(44UL, message.GetExtension(UnitTestProtoFile.DefaultUint64Extension));
1455 Assert.AreEqual(-45, message.GetExtension(UnitTestProtoFile.DefaultSint32Extension));
1456 Assert.AreEqual(46L, message.GetExtension(UnitTestProtoFile.DefaultSint64Extension));
1457 Assert.AreEqual(47U, message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));
1458 Assert.AreEqual(48UL, message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));
1459 Assert.AreEqual(49, message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1460 Assert.AreEqual(-50L, message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1461 Assert.AreEqual(51.5F, message.GetExtension(UnitTestProtoFile.DefaultFloatExtension));
1462 Assert.AreEqual(52e3D, message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));
1463 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension));
1464 Assert.AreEqual("hello", message.GetExtension(UnitTestProtoFile.DefaultStringExtension));
1465 Assert.AreEqual(ToBytes("world"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));
1466
1467 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
1468 message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1469 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1470 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1471
1472 Assert.AreEqual("abc", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1473 Assert.AreEqual("123", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));
1474 }
1475
1476 /// <summary>
1477 /// Set every field of the specified message to a unique value.
1478 /// </summary>
1479 public static void SetPackedFields(TestPackedTypes.Builder message)
1480 {
1481 message.AddPackedInt32(601);
1482 message.AddPackedInt64(602);
1483 message.AddPackedUint32(603);
1484 message.AddPackedUint64(604);
1485 message.AddPackedSint32(605);
1486 message.AddPackedSint64(606);
1487 message.AddPackedFixed32(607);
1488 message.AddPackedFixed64(608);
1489 message.AddPackedSfixed32(609);
1490 message.AddPackedSfixed64(610);
1491 message.AddPackedFloat(611);
1492 message.AddPackedDouble(612);
1493 message.AddPackedBool(true);
1494 message.AddPackedEnum(ForeignEnum.FOREIGN_BAR);
1495 // Add a second one of each field.
1496 message.AddPackedInt32(701);
1497 message.AddPackedInt64(702);
1498 message.AddPackedUint32(703);
1499 message.AddPackedUint64(704);
1500 message.AddPackedSint32(705);
1501 message.AddPackedSint64(706);
1502 message.AddPackedFixed32(707);
1503 message.AddPackedFixed64(708);
1504 message.AddPackedSfixed32(709);
1505 message.AddPackedSfixed64(710);
1506 message.AddPackedFloat(711);
1507 message.AddPackedDouble(712);
1508 message.AddPackedBool(false);
1509 message.AddPackedEnum(ForeignEnum.FOREIGN_BAZ);
1510 }
1511
1512 /// <summary>
1513 /// Asserts that all the fields of the specified message are set to the values assigned
1514 /// in SetPackedFields.
1515 /// </summary>
1516 public static void AssertPackedFieldsSet(TestPackedTypes message)
1517 {
1518 Assert.AreEqual(2, message.PackedInt32Count);
1519 Assert.AreEqual(2, message.PackedInt64Count);
1520 Assert.AreEqual(2, message.PackedUint32Count);
1521 Assert.AreEqual(2, message.PackedUint64Count);
1522 Assert.AreEqual(2, message.PackedSint32Count);
1523 Assert.AreEqual(2, message.PackedSint64Count);
1524 Assert.AreEqual(2, message.PackedFixed32Count);
1525 Assert.AreEqual(2, message.PackedFixed64Count);
1526 Assert.AreEqual(2, message.PackedSfixed32Count);
1527 Assert.AreEqual(2, message.PackedSfixed64Count);
1528 Assert.AreEqual(2, message.PackedFloatCount);
1529 Assert.AreEqual(2, message.PackedDoubleCount);
1530 Assert.AreEqual(2, message.PackedBoolCount);
1531 Assert.AreEqual(2, message.PackedEnumCount);
1532 Assert.AreEqual(601, message.GetPackedInt32(0));
1533 Assert.AreEqual(602, message.GetPackedInt64(0));
1534 Assert.AreEqual(603, message.GetPackedUint32(0));
1535 Assert.AreEqual(604, message.GetPackedUint64(0));
1536 Assert.AreEqual(605, message.GetPackedSint32(0));
1537 Assert.AreEqual(606, message.GetPackedSint64(0));
1538 Assert.AreEqual(607, message.GetPackedFixed32(0));
1539 Assert.AreEqual(608, message.GetPackedFixed64(0));
1540 Assert.AreEqual(609, message.GetPackedSfixed32(0));
1541 Assert.AreEqual(610, message.GetPackedSfixed64(0));
1542 Assert.AreEqual(611, message.GetPackedFloat(0), 0.0);
1543 Assert.AreEqual(612, message.GetPackedDouble(0), 0.0);
1544 Assert.AreEqual(true, message.GetPackedBool(0));
1545 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetPackedEnum(0));
1546 Assert.AreEqual(701, message.GetPackedInt32(1));
1547 Assert.AreEqual(702, message.GetPackedInt64(1));
1548 Assert.AreEqual(703, message.GetPackedUint32(1));
1549 Assert.AreEqual(704, message.GetPackedUint64(1));
1550 Assert.AreEqual(705, message.GetPackedSint32(1));
1551 Assert.AreEqual(706, message.GetPackedSint64(1));
1552 Assert.AreEqual(707, message.GetPackedFixed32(1));
1553 Assert.AreEqual(708, message.GetPackedFixed64(1));
1554 Assert.AreEqual(709, message.GetPackedSfixed32(1));
1555 Assert.AreEqual(710, message.GetPackedSfixed64(1));
1556 Assert.AreEqual(711, message.GetPackedFloat(1), 0.0);
1557 Assert.AreEqual(712, message.GetPackedDouble(1), 0.0);
1558 Assert.AreEqual(false, message.GetPackedBool(1));
1559 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetPackedEnum(1));
1560 }
1561
1562 public static void SetPackedExtensions(TestPackedExtensions.Builder message)
1563 {
1564 message.AddExtension(UnitTestProtoFile.PackedInt32Extension, 601);
1565 message.AddExtension(UnitTestProtoFile.PackedInt64Extension, 602L);
1566 message.AddExtension(UnitTestProtoFile.PackedUint32Extension, 603U);
1567 message.AddExtension(UnitTestProtoFile.PackedUint64Extension, 604UL);
1568 message.AddExtension(UnitTestProtoFile.PackedSint32Extension, 605);
1569 message.AddExtension(UnitTestProtoFile.PackedSint64Extension, 606L);
1570 message.AddExtension(UnitTestProtoFile.PackedFixed32Extension, 607U);
1571 message.AddExtension(UnitTestProtoFile.PackedFixed64Extension, 608UL);
1572 message.AddExtension(UnitTestProtoFile.PackedSfixed32Extension, 609);
1573 message.AddExtension(UnitTestProtoFile.PackedSfixed64Extension, 610L);
1574 message.AddExtension(UnitTestProtoFile.PackedFloatExtension, 611F);
1575 message.AddExtension(UnitTestProtoFile.PackedDoubleExtension, 612D);
1576 message.AddExtension(UnitTestProtoFile.PackedBoolExtension, true);
1577 message.AddExtension(UnitTestProtoFile.PackedEnumExtension, ForeignEnum.FOREIGN_BAR);
1578 // Add a second one of each field.
1579 message.AddExtension(UnitTestProtoFile.PackedInt32Extension, 701);
1580 message.AddExtension(UnitTestProtoFile.PackedInt64Extension, 702L);
1581 message.AddExtension(UnitTestProtoFile.PackedUint32Extension, 703U);
1582 message.AddExtension(UnitTestProtoFile.PackedUint64Extension, 704UL);
1583 message.AddExtension(UnitTestProtoFile.PackedSint32Extension, 705);
1584 message.AddExtension(UnitTestProtoFile.PackedSint64Extension, 706L);
1585 message.AddExtension(UnitTestProtoFile.PackedFixed32Extension, 707U);
1586 message.AddExtension(UnitTestProtoFile.PackedFixed64Extension, 708UL);
1587 message.AddExtension(UnitTestProtoFile.PackedSfixed32Extension, 709);
1588 message.AddExtension(UnitTestProtoFile.PackedSfixed64Extension, 710L);
1589 message.AddExtension(UnitTestProtoFile.PackedFloatExtension, 711F);
1590 message.AddExtension(UnitTestProtoFile.PackedDoubleExtension, 712D);
1591 message.AddExtension(UnitTestProtoFile.PackedBoolExtension, false);
1592 message.AddExtension(UnitTestProtoFile.PackedEnumExtension, ForeignEnum.FOREIGN_BAZ);
1593 }
1594
1595 public static void AssertPackedExtensionsSet(TestPackedExtensions message)
1596 {
1597 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedInt32Extension));
1598 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedInt64Extension));
1599 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedUint32Extension));
1600 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedUint64Extension));
1601 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSint32Extension));
1602 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSint64Extension));
1603 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFixed32Extension));
1604 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFixed64Extension));
1605 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSfixed32Extension));
1606 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSfixed64Extension));
1607 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFloatExtension));
1608 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedDoubleExtension));
1609 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedBoolExtension));
1610 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedEnumExtension));
1611 Assert.AreEqual(601, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 0));
1612 Assert.AreEqual(602L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 0));
1613 Assert.AreEqual(603, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 0));
1614 Assert.AreEqual(604L, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 0));
1615 Assert.AreEqual(605, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 0));
1616 Assert.AreEqual(606L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 0));
1617 Assert.AreEqual(607, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 0));
1618 Assert.AreEqual(608L, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 0));
1619 Assert.AreEqual(609, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 0));
1620 Assert.AreEqual(610L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 0));
1621 Assert.AreEqual(611F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 0));
1622 Assert.AreEqual(612D, message.GetExtension(UnitTestProtoFile.PackedDoubleExtension, 0));
1623 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.PackedBoolExtension, 0));
1624 Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
1625 message.GetExtension(UnitTestProtoFile.PackedEnumExtension, 0));
1626 Assert.AreEqual(701, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 1));
1627 Assert.AreEqual(702L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 1));
1628 Assert.AreEqual(703, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 1));
1629 Assert.AreEqual(704L, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 1));
1630 Assert.AreEqual(705, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 1));
1631 Assert.AreEqual(706L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 1));
1632 Assert.AreEqual(707, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 1));
1633 Assert.AreEqual(708L, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 1));
1634 Assert.AreEqual(709, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 1));
1635 Assert.AreEqual(710L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 1));
1636 Assert.AreEqual(711F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 1));
1637 Assert.AreEqual(712D, message.GetExtension(UnitTestProtoFile.PackedDoubleExtension, 1));
1638 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.PackedBoolExtension, 1));
1639 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.PackedEnumExtension, 1));
1640 }
1641
1642 private static ByteString goldenPackedFieldsMessage = null;
1643
1644 /// <summary>
1645 /// Get the bytes of the "golden packed fields message". This is a serialized
1646 /// TestPackedTypes with all fields set as they would be by SetPackedFields,
1647 /// but it is loaded from a file on disk rather than generated dynamically.
1648 /// The file is actually generated by C++ code, so testing against it verifies compatibility
1649 /// with C++.
1650 /// </summary>
1651 public static ByteString GetGoldenPackedFieldsMessage()
1652 {
1653 if (goldenPackedFieldsMessage == null)
1654 {
1655 goldenPackedFieldsMessage = ReadBytesFromFile("golden_packed_fields_message");
1656 }
1657 return goldenPackedFieldsMessage;
1658 }
1659
1660 private static readonly string[] TestCultures = {"en-US", "en-GB", "fr-FR", "de-DE"};
1661
1662 public static void TestInMultipleCultures(Action test)
1663 {
1664 CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
1665 foreach (string culture in TestCultures)
1666 {
1667 try
1668 {
1669 Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
1670 test();
1671 }
1672 finally
1673 {
1674 Thread.CurrentThread.CurrentCulture = originalCulture;
1675 }
1676 }
1677 }
1678
1679 /// <summary>
1680 /// Helper to construct a byte array from a bunch of bytes.
1681 /// </summary>
1682 internal static byte[] Bytes(params byte[] bytesAsInts)
1683 {
1684 byte[] bytes = new byte[bytesAsInts.Length];
1685 for (int i = 0; i < bytesAsInts.Length; i++)
1686 {
1687 bytes[i] = (byte) bytesAsInts[i];
1688 }
1689 return bytes;
1690 }
1691
1692 internal static void AssertArgumentNullException(Action action)
1693 {
1694 try
1695 {
1696 action();
1697 Assert.Fail("Exception was not thrown");
1698 }
1699 catch (ArgumentNullException)
1700 {
1701 // We expect this exception.
1702 }
1703 }
1704 }
1705}