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