blob: 47262ff9b9a3c3607197639460a018ce9dcefd49 [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);
161 }
162
163 internal static string ReadTextFromFile(string filePath) {
164 return ReadBytesFromFile(filePath).ToStringUtf8();
165 }
166
167 internal static ByteString ReadBytesFromFile(String filename) {
168 byte[] data = File.ReadAllBytes(Path.Combine(TestDataDirectory, filename));
169 return ByteString.CopyFrom(data);
170 }
171
172 /// <summary>
173 /// Helper to convert a String to ByteString.
174 /// </summary>
175 internal static ByteString ToBytes(String str) {
176 return ByteString.CopyFrom(Encoding.UTF8.GetBytes(str));
177 }
178
179 internal static TestAllTypes GetAllSet() {
180 TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
181 SetAllFields(builder);
182 return builder.Build();
183 }
184
185 /// <summary>
186 /// Sets every field of the specified message to the values expected by
187 /// AssertAllFieldsSet.
188 /// </summary>
189 internal static void SetAllFields(TestAllTypes.Builder message) {
190 message.SetOptionalInt32(101);
191 message.SetOptionalInt64(102);
192 message.SetOptionalUint32(103);
193 message.SetOptionalUint64(104);
194 message.SetOptionalSint32(105);
195 message.SetOptionalSint64(106);
196 message.SetOptionalFixed32(107);
197 message.SetOptionalFixed64(108);
198 message.SetOptionalSfixed32(109);
199 message.SetOptionalSfixed64(110);
200 message.SetOptionalFloat(111);
201 message.SetOptionalDouble(112);
202 message.SetOptionalBool(true);
203 message.SetOptionalString("115");
204 message.SetOptionalBytes(ToBytes("116"));
205
206 message.SetOptionalGroup(TestAllTypes.Types.OptionalGroup.CreateBuilder().SetA(117).Build());
207 message.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
208 message.SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(119).Build());
209 message.SetOptionalImportMessage(ImportMessage.CreateBuilder().SetD(120).Build());
210
211 message.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
212 message.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);
213 message.SetOptionalImportEnum(ImportEnum.IMPORT_BAZ);
214
215 message.SetOptionalStringPiece("124");
216 message.SetOptionalCord("125");
217
218 // -----------------------------------------------------------------
219
220 message.AddRepeatedInt32(201);
221 message.AddRepeatedInt64(202);
222 message.AddRepeatedUint32(203);
223 message.AddRepeatedUint64(204);
224 message.AddRepeatedSint32(205);
225 message.AddRepeatedSint64(206);
226 message.AddRepeatedFixed32(207);
227 message.AddRepeatedFixed64(208);
228 message.AddRepeatedSfixed32(209);
229 message.AddRepeatedSfixed64(210);
230 message.AddRepeatedFloat(211);
231 message.AddRepeatedDouble(212);
232 message.AddRepeatedBool(true);
233 message.AddRepeatedString("215");
234 message.AddRepeatedBytes(ToBytes("216"));
235
236 message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(217).Build());
237 message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
238 message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(219).Build());
239 message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(220).Build());
240
241 message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAR);
242 message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);
243 message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAR);
244
245 message.AddRepeatedStringPiece("224");
246 message.AddRepeatedCord("225");
247
248 // Add a second one of each field.
249 message.AddRepeatedInt32(301);
250 message.AddRepeatedInt64(302);
251 message.AddRepeatedUint32(303);
252 message.AddRepeatedUint64(304);
253 message.AddRepeatedSint32(305);
254 message.AddRepeatedSint64(306);
255 message.AddRepeatedFixed32(307);
256 message.AddRepeatedFixed64(308);
257 message.AddRepeatedSfixed32(309);
258 message.AddRepeatedSfixed64(310);
259 message.AddRepeatedFloat(311);
260 message.AddRepeatedDouble(312);
261 message.AddRepeatedBool(false);
262 message.AddRepeatedString("315");
263 message.AddRepeatedBytes(ToBytes("316"));
264
265 message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(317).Build());
266 message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
267 message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(319).Build());
268 message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(320).Build());
269
270 message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
271 message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);
272 message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAZ);
273
274 message.AddRepeatedStringPiece("324");
275 message.AddRepeatedCord("325");
276
277 // -----------------------------------------------------------------
278
279 message.SetDefaultInt32(401);
280 message.SetDefaultInt64(402);
281 message.SetDefaultUint32(403);
282 message.SetDefaultUint64(404);
283 message.SetDefaultSint32(405);
284 message.SetDefaultSint64(406);
285 message.SetDefaultFixed32(407);
286 message.SetDefaultFixed64(408);
287 message.SetDefaultSfixed32(409);
288 message.SetDefaultSfixed64(410);
289 message.SetDefaultFloat(411);
290 message.SetDefaultDouble(412);
291 message.SetDefaultBool(false);
292 message.SetDefaultString("415");
293 message.SetDefaultBytes(ToBytes("416"));
294
295 message.SetDefaultNestedEnum(TestAllTypes.Types.NestedEnum.FOO);
296 message.SetDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);
297 message.SetDefaultImportEnum(ImportEnum.IMPORT_FOO);
298
299 message.SetDefaultStringPiece("424");
300 message.SetDefaultCord("425");
301 }
302
303 /// <summary>
304 /// Asserts that all fields of the specified message are set to the values
305 /// assigned by SetAllFields.
306 /// </summary>
307 internal static void AssertAllFieldsSet(TestAllTypes message) {
308 Assert.IsTrue(message.HasOptionalInt32);
309 Assert.IsTrue(message.HasOptionalInt64);
310 Assert.IsTrue(message.HasOptionalUint32);
311 Assert.IsTrue(message.HasOptionalUint64);
312 Assert.IsTrue(message.HasOptionalSint32);
313 Assert.IsTrue(message.HasOptionalSint64);
314 Assert.IsTrue(message.HasOptionalFixed32);
315 Assert.IsTrue(message.HasOptionalFixed64);
316 Assert.IsTrue(message.HasOptionalSfixed32);
317 Assert.IsTrue(message.HasOptionalSfixed64);
318 Assert.IsTrue(message.HasOptionalFloat);
319 Assert.IsTrue(message.HasOptionalDouble);
320 Assert.IsTrue(message.HasOptionalBool);
321 Assert.IsTrue(message.HasOptionalString);
322 Assert.IsTrue(message.HasOptionalBytes);
323
324 Assert.IsTrue(message.HasOptionalGroup);
325 Assert.IsTrue(message.HasOptionalNestedMessage);
326 Assert.IsTrue(message.HasOptionalForeignMessage);
327 Assert.IsTrue(message.HasOptionalImportMessage);
328
329 Assert.IsTrue(message.OptionalGroup.HasA);
330 Assert.IsTrue(message.OptionalNestedMessage.HasBb);
331 Assert.IsTrue(message.OptionalForeignMessage.HasC);
332 Assert.IsTrue(message.OptionalImportMessage.HasD);
333
334 Assert.IsTrue(message.HasOptionalNestedEnum);
335 Assert.IsTrue(message.HasOptionalForeignEnum);
336 Assert.IsTrue(message.HasOptionalImportEnum);
337
338 Assert.IsTrue(message.HasOptionalStringPiece);
339 Assert.IsTrue(message.HasOptionalCord);
340
341 Assert.AreEqual(101, message.OptionalInt32);
342 Assert.AreEqual(102, message.OptionalInt64);
343 Assert.AreEqual(103, message.OptionalUint32);
344 Assert.AreEqual(104, message.OptionalUint64);
345 Assert.AreEqual(105, message.OptionalSint32);
346 Assert.AreEqual(106, message.OptionalSint64);
347 Assert.AreEqual(107, message.OptionalFixed32);
348 Assert.AreEqual(108, message.OptionalFixed64);
349 Assert.AreEqual(109, message.OptionalSfixed32);
350 Assert.AreEqual(110, message.OptionalSfixed64);
351 Assert.AreEqual(111, message.OptionalFloat);
352 Assert.AreEqual(112, message.OptionalDouble);
353 Assert.AreEqual(true, message.OptionalBool);
354 Assert.AreEqual("115", message.OptionalString);
355 Assert.AreEqual(ToBytes("116"), message.OptionalBytes);
356
357 Assert.AreEqual(117, message.OptionalGroup.A);
358 Assert.AreEqual(118, message.OptionalNestedMessage.Bb);
359 Assert.AreEqual(119, message.OptionalForeignMessage.C);
360 Assert.AreEqual(120, message.OptionalImportMessage.D);
361
362 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.OptionalNestedEnum);
363 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.OptionalForeignEnum);
364 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.OptionalImportEnum);
365
366 Assert.AreEqual("124", message.OptionalStringPiece);
367 Assert.AreEqual("125", message.OptionalCord);
368
369 // -----------------------------------------------------------------
370
371 Assert.AreEqual(2, message.RepeatedInt32Count);
372 Assert.AreEqual(2, message.RepeatedInt64Count);
373 Assert.AreEqual(2, message.RepeatedUint32Count);
374 Assert.AreEqual(2, message.RepeatedUint64Count);
375 Assert.AreEqual(2, message.RepeatedSint32Count);
376 Assert.AreEqual(2, message.RepeatedSint64Count);
377 Assert.AreEqual(2, message.RepeatedFixed32Count);
378 Assert.AreEqual(2, message.RepeatedFixed64Count);
379 Assert.AreEqual(2, message.RepeatedSfixed32Count);
380 Assert.AreEqual(2, message.RepeatedSfixed64Count);
381 Assert.AreEqual(2, message.RepeatedFloatCount);
382 Assert.AreEqual(2, message.RepeatedDoubleCount);
383 Assert.AreEqual(2, message.RepeatedBoolCount);
384 Assert.AreEqual(2, message.RepeatedStringCount);
385 Assert.AreEqual(2, message.RepeatedBytesCount);
386
387 Assert.AreEqual(2, message.RepeatedGroupCount );
388 Assert.AreEqual(2, message.RepeatedNestedMessageCount );
389 Assert.AreEqual(2, message.RepeatedForeignMessageCount);
390 Assert.AreEqual(2, message.RepeatedImportMessageCount );
391 Assert.AreEqual(2, message.RepeatedNestedEnumCount );
392 Assert.AreEqual(2, message.RepeatedForeignEnumCount );
393 Assert.AreEqual(2, message.RepeatedImportEnumCount );
394
395 Assert.AreEqual(2, message.RepeatedStringPieceCount);
396 Assert.AreEqual(2, message.RepeatedCordCount);
397
398 Assert.AreEqual(201, message.GetRepeatedInt32(0));
399 Assert.AreEqual(202, message.GetRepeatedInt64(0));
400 Assert.AreEqual(203, message.GetRepeatedUint32(0));
401 Assert.AreEqual(204, message.GetRepeatedUint64(0));
402 Assert.AreEqual(205, message.GetRepeatedSint32(0));
403 Assert.AreEqual(206, message.GetRepeatedSint64(0));
404 Assert.AreEqual(207, message.GetRepeatedFixed32(0));
405 Assert.AreEqual(208, message.GetRepeatedFixed64(0));
406 Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
407 Assert.AreEqual(210, message.GetRepeatedSfixed64(0));
408 Assert.AreEqual(211, message.GetRepeatedFloat(0));
409 Assert.AreEqual(212, message.GetRepeatedDouble(0));
410 Assert.AreEqual(true , message.GetRepeatedBool(0));
411 Assert.AreEqual("215", message.GetRepeatedString(0));
412 Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
413
414 Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
415 Assert.AreEqual(218, message.GetRepeatedNestedMessage (0).Bb);
416 Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
417 Assert.AreEqual(220, message.GetRepeatedImportMessage (0).D);
418
419 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum (0));
420 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
421 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
422
423 Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
424 Assert.AreEqual("225", message.GetRepeatedCord(0));
425
426 Assert.AreEqual(301, message.GetRepeatedInt32 (1));
427 Assert.AreEqual(302, message.GetRepeatedInt64 (1));
428 Assert.AreEqual(303, message.GetRepeatedUint32 (1));
429 Assert.AreEqual(304, message.GetRepeatedUint64 (1));
430 Assert.AreEqual(305, message.GetRepeatedSint32 (1));
431 Assert.AreEqual(306, message.GetRepeatedSint64 (1));
432 Assert.AreEqual(307, message.GetRepeatedFixed32 (1));
433 Assert.AreEqual(308, message.GetRepeatedFixed64 (1));
434 Assert.AreEqual(309, message.GetRepeatedSfixed32(1));
435 Assert.AreEqual(310, message.GetRepeatedSfixed64(1));
436 Assert.AreEqual(311, message.GetRepeatedFloat (1), 0.0);
437 Assert.AreEqual(312, message.GetRepeatedDouble (1), 0.0);
438 Assert.AreEqual(false, message.GetRepeatedBool (1));
439 Assert.AreEqual("315", message.GetRepeatedString (1));
440 Assert.AreEqual(ToBytes("316"), message.GetRepeatedBytes(1));
441
442 Assert.AreEqual(317, message.GetRepeatedGroup (1).A);
443 Assert.AreEqual(318, message.GetRepeatedNestedMessage (1).Bb);
444 Assert.AreEqual(319, message.GetRepeatedForeignMessage(1).C);
445 Assert.AreEqual(320, message.GetRepeatedImportMessage (1).D);
446
447 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetRepeatedNestedEnum (1));
448 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetRepeatedForeignEnum(1));
449 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetRepeatedImportEnum(1));
450
451 Assert.AreEqual("324", message.GetRepeatedStringPiece(1));
452 Assert.AreEqual("325", message.GetRepeatedCord(1));
453
454 // -----------------------------------------------------------------
455
456 Assert.IsTrue(message.HasDefaultInt32 );
457 Assert.IsTrue(message.HasDefaultInt64 );
458 Assert.IsTrue(message.HasDefaultUint32 );
459 Assert.IsTrue(message.HasDefaultUint64 );
460 Assert.IsTrue(message.HasDefaultSint32 );
461 Assert.IsTrue(message.HasDefaultSint64 );
462 Assert.IsTrue(message.HasDefaultFixed32 );
463 Assert.IsTrue(message.HasDefaultFixed64 );
464 Assert.IsTrue(message.HasDefaultSfixed32);
465 Assert.IsTrue(message.HasDefaultSfixed64);
466 Assert.IsTrue(message.HasDefaultFloat );
467 Assert.IsTrue(message.HasDefaultDouble );
468 Assert.IsTrue(message.HasDefaultBool );
469 Assert.IsTrue(message.HasDefaultString );
470 Assert.IsTrue(message.HasDefaultBytes );
471
472 Assert.IsTrue(message.HasDefaultNestedEnum );
473 Assert.IsTrue(message.HasDefaultForeignEnum);
474 Assert.IsTrue(message.HasDefaultImportEnum );
475
476 Assert.IsTrue(message.HasDefaultStringPiece);
477 Assert.IsTrue(message.HasDefaultCord);
478
479 Assert.AreEqual(401, message.DefaultInt32);
480 Assert.AreEqual(402, message.DefaultInt64);
481 Assert.AreEqual(403, message.DefaultUint32);
482 Assert.AreEqual(404, message.DefaultUint64);
483 Assert.AreEqual(405, message.DefaultSint32);
484 Assert.AreEqual(406, message.DefaultSint64);
485 Assert.AreEqual(407, message.DefaultFixed32);
486 Assert.AreEqual(408, message.DefaultFixed64);
487 Assert.AreEqual(409, message.DefaultSfixed32);
488 Assert.AreEqual(410, message.DefaultSfixed64);
489 Assert.AreEqual(411, message.DefaultFloat);
490 Assert.AreEqual(412, message.DefaultDouble);
491 Assert.AreEqual(false, message.DefaultBool );
492 Assert.AreEqual("415", message.DefaultString );
493 Assert.AreEqual(ToBytes("416"), message.DefaultBytes);
494
495 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.DefaultNestedEnum);
496 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.DefaultForeignEnum);
497 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.DefaultImportEnum);
498
499 Assert.AreEqual("424", message.DefaultStringPiece);
500 Assert.AreEqual("425", message.DefaultCord);
501 }
502
503 internal static void AssertClear(TestAllTypes message) {
504 // HasBlah() should initially be false for all optional fields.
505 Assert.IsFalse(message.HasOptionalInt32);
506 Assert.IsFalse(message.HasOptionalInt64);
507 Assert.IsFalse(message.HasOptionalUint32);
508 Assert.IsFalse(message.HasOptionalUint64);
509 Assert.IsFalse(message.HasOptionalSint32);
510 Assert.IsFalse(message.HasOptionalSint64);
511 Assert.IsFalse(message.HasOptionalFixed32);
512 Assert.IsFalse(message.HasOptionalFixed64);
513 Assert.IsFalse(message.HasOptionalSfixed32);
514 Assert.IsFalse(message.HasOptionalSfixed64);
515 Assert.IsFalse(message.HasOptionalFloat);
516 Assert.IsFalse(message.HasOptionalDouble);
517 Assert.IsFalse(message.HasOptionalBool);
518 Assert.IsFalse(message.HasOptionalString);
519 Assert.IsFalse(message.HasOptionalBytes);
520
521 Assert.IsFalse(message.HasOptionalGroup);
522 Assert.IsFalse(message.HasOptionalNestedMessage);
523 Assert.IsFalse(message.HasOptionalForeignMessage);
524 Assert.IsFalse(message.HasOptionalImportMessage);
525
526 Assert.IsFalse(message.HasOptionalNestedEnum);
527 Assert.IsFalse(message.HasOptionalForeignEnum);
528 Assert.IsFalse(message.HasOptionalImportEnum);
529
530 Assert.IsFalse(message.HasOptionalStringPiece);
531 Assert.IsFalse(message.HasOptionalCord);
532
533 // Optional fields without defaults are set to zero or something like it.
534 Assert.AreEqual(0, message.OptionalInt32);
535 Assert.AreEqual(0, message.OptionalInt64);
536 Assert.AreEqual(0, message.OptionalUint32);
537 Assert.AreEqual(0, message.OptionalUint64);
538 Assert.AreEqual(0, message.OptionalSint32);
539 Assert.AreEqual(0, message.OptionalSint64);
540 Assert.AreEqual(0, message.OptionalFixed32);
541 Assert.AreEqual(0, message.OptionalFixed64);
542 Assert.AreEqual(0, message.OptionalSfixed32);
543 Assert.AreEqual(0, message.OptionalSfixed64);
544 Assert.AreEqual(0, message.OptionalFloat);
545 Assert.AreEqual(0, message.OptionalDouble);
546 Assert.AreEqual(false, message.OptionalBool);
547 Assert.AreEqual("", message.OptionalString);
548 Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
549
550 // Embedded messages should also be clear.
551 Assert.IsFalse(message.OptionalGroup.HasA);
552 Assert.IsFalse(message.OptionalNestedMessage.HasBb);
553 Assert.IsFalse(message.OptionalForeignMessage.HasC);
554 Assert.IsFalse(message.OptionalImportMessage.HasD);
555
556 Assert.AreEqual(0, message.OptionalGroup.A);
557 Assert.AreEqual(0, message.OptionalNestedMessage.Bb);
558 Assert.AreEqual(0, message.OptionalForeignMessage.C);
559 Assert.AreEqual(0, message.OptionalImportMessage.D);
560
561 // Enums without defaults are set to the first value in the enum.
562 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.OptionalNestedEnum);
563 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.OptionalForeignEnum);
564 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.OptionalImportEnum);
565
566 Assert.AreEqual("", message.OptionalStringPiece);
567 Assert.AreEqual("", message.OptionalCord);
568
569 // Repeated fields are empty.
570 Assert.AreEqual(0, message.RepeatedInt32Count);
571 Assert.AreEqual(0, message.RepeatedInt64Count);
572 Assert.AreEqual(0, message.RepeatedUint32Count);
573 Assert.AreEqual(0, message.RepeatedUint64Count);
574 Assert.AreEqual(0, message.RepeatedSint32Count);
575 Assert.AreEqual(0, message.RepeatedSint64Count);
576 Assert.AreEqual(0, message.RepeatedFixed32Count);
577 Assert.AreEqual(0, message.RepeatedFixed64Count);
578 Assert.AreEqual(0, message.RepeatedSfixed32Count);
579 Assert.AreEqual(0, message.RepeatedSfixed64Count);
580 Assert.AreEqual(0, message.RepeatedFloatCount);
581 Assert.AreEqual(0, message.RepeatedDoubleCount);
582 Assert.AreEqual(0, message.RepeatedBoolCount);
583 Assert.AreEqual(0, message.RepeatedStringCount);
584 Assert.AreEqual(0, message.RepeatedBytesCount);
585
586 Assert.AreEqual(0, message.RepeatedGroupCount);
587 Assert.AreEqual(0, message.RepeatedNestedMessageCount);
588 Assert.AreEqual(0, message.RepeatedForeignMessageCount);
589 Assert.AreEqual(0, message.RepeatedImportMessageCount);
590 Assert.AreEqual(0, message.RepeatedNestedEnumCount);
591 Assert.AreEqual(0, message.RepeatedForeignEnumCount);
592 Assert.AreEqual(0, message.RepeatedImportEnumCount);
593
594 Assert.AreEqual(0, message.RepeatedStringPieceCount);
595 Assert.AreEqual(0, message.RepeatedCordCount);
596
597 // HasBlah() should also be false for all default fields.
598 Assert.IsFalse(message.HasDefaultInt32);
599 Assert.IsFalse(message.HasDefaultInt64);
600 Assert.IsFalse(message.HasDefaultUint32);
601 Assert.IsFalse(message.HasDefaultUint64);
602 Assert.IsFalse(message.HasDefaultSint32);
603 Assert.IsFalse(message.HasDefaultSint64);
604 Assert.IsFalse(message.HasDefaultFixed32);
605 Assert.IsFalse(message.HasDefaultFixed64);
606 Assert.IsFalse(message.HasDefaultSfixed32);
607 Assert.IsFalse(message.HasDefaultSfixed64);
608 Assert.IsFalse(message.HasDefaultFloat);
609 Assert.IsFalse(message.HasDefaultDouble);
610 Assert.IsFalse(message.HasDefaultBool);
611 Assert.IsFalse(message.HasDefaultString);
612 Assert.IsFalse(message.HasDefaultBytes);
613
614 Assert.IsFalse(message.HasDefaultNestedEnum);
615 Assert.IsFalse(message.HasDefaultForeignEnum);
616 Assert.IsFalse(message.HasDefaultImportEnum);
617
618 Assert.IsFalse(message.HasDefaultStringPiece);
619 Assert.IsFalse(message.HasDefaultCord);
620
621 // Fields with defaults have their default values (duh).
622 Assert.AreEqual(41, message.DefaultInt32);
623 Assert.AreEqual(42, message.DefaultInt64);
624 Assert.AreEqual(43, message.DefaultUint32);
625 Assert.AreEqual(44, message.DefaultUint64);
626 Assert.AreEqual(-45, message.DefaultSint32);
627 Assert.AreEqual(46, message.DefaultSint64);
628 Assert.AreEqual(47, message.DefaultFixed32);
629 Assert.AreEqual(48, message.DefaultFixed64);
630 Assert.AreEqual(49, message.DefaultSfixed32);
631 Assert.AreEqual(-50, message.DefaultSfixed64);
632 Assert.AreEqual(51.5, message.DefaultFloat, 0.0);
633 Assert.AreEqual(52e3, message.DefaultDouble, 0.0);
634 Assert.AreEqual(true, message.DefaultBool);
635 Assert.AreEqual("hello", message.DefaultString);
636 Assert.AreEqual(ToBytes("world"), message.DefaultBytes);
637
638 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.DefaultNestedEnum);
639 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.DefaultForeignEnum);
640 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.DefaultImportEnum);
641
642 Assert.AreEqual("abc", message.DefaultStringPiece);
643 Assert.AreEqual("123", message.DefaultCord);
644 }
645
646 /// <summary>
647 /// Get a TestAllExtensions with all fields set as they would be by
648 /// SetAllExtensions(TestAllExtensions.Builder).
649 /// </summary>
650 internal static TestAllExtensions GetAllExtensionsSet() {
651 TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
652 SetAllExtensions(builder);
653 return builder.Build();
654 }
655
656 /// <summary>
657 /// Sets every field of the specified builder to the values expected by
658 /// AssertAllExtensionsSet.
659 /// </summary>
660 internal static void SetAllExtensions(TestAllExtensions.Builder message) {
661 message.SetExtension(UnitTestProtoFile.OptionalInt32Extension, 101);
662 message.SetExtension(UnitTestProtoFile.OptionalInt64Extension, 102L);
663 message.SetExtension(UnitTestProtoFile.OptionalUint32Extension, 103U);
664 message.SetExtension(UnitTestProtoFile.OptionalUint64Extension, 104UL);
665 message.SetExtension(UnitTestProtoFile.OptionalSint32Extension, 105);
666 message.SetExtension(UnitTestProtoFile.OptionalSint64Extension, 106L);
667 message.SetExtension(UnitTestProtoFile.OptionalFixed32Extension, 107U);
668 message.SetExtension(UnitTestProtoFile.OptionalFixed64Extension, 108UL);
669 message.SetExtension(UnitTestProtoFile.OptionalSfixed32Extension, 109);
670 message.SetExtension(UnitTestProtoFile.OptionalSfixed64Extension, 110L);
671 message.SetExtension(UnitTestProtoFile.OptionalFloatExtension, 111F);
672 message.SetExtension(UnitTestProtoFile.OptionalDoubleExtension, 112D);
673 message.SetExtension(UnitTestProtoFile.OptionalBoolExtension, true);
674 message.SetExtension(UnitTestProtoFile.OptionalStringExtension, "115");
675 message.SetExtension(UnitTestProtoFile.OptionalBytesExtension, ToBytes("116"));
676
677 message.SetExtension(UnitTestProtoFile.OptionalGroupExtension, OptionalGroup_extension.CreateBuilder().SetA(117).Build());
678 message.SetExtension(UnitTestProtoFile.OptionalNestedMessageExtension, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
679 message.SetExtension(UnitTestProtoFile.OptionalForeignMessageExtension, ForeignMessage.CreateBuilder().SetC(119).Build());
680 message.SetExtension(UnitTestProtoFile.OptionalImportMessageExtension, ImportMessage.CreateBuilder().SetD(120).Build());
681
682 message.SetExtension(UnitTestProtoFile.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
683 message.SetExtension(UnitTestProtoFile.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
684 message.SetExtension(UnitTestProtoFile.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ);
685
686 message.SetExtension(UnitTestProtoFile.OptionalStringPieceExtension, "124");
687 message.SetExtension(UnitTestProtoFile.OptionalCordExtension, "125");
688
689 // -----------------------------------------------------------------
690
691 message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 201);
692 message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 202L);
693 message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 203U);
694 message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 204UL);
695 message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 205);
696 message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 206L);
697 message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 207U);
698 message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 208UL);
699 message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 209);
700 message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 210L);
701 message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 211F);
702 message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 212D);
703 message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, true);
704 message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "215");
705 message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("216"));
706
707 message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension, RepeatedGroup_extension.CreateBuilder().SetA(217).Build());
708 message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
709 message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, ForeignMessage.CreateBuilder().SetC(219).Build());
710 message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension, ImportMessage.CreateBuilder().SetD(220).Build());
711
712 message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAR);
713 message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);
714 message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAR);
715
716 message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "224");
717 message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "225");
718
719 // Add a second one of each field.
720 message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 301);
721 message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 302L);
722 message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 303U);
723 message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 304UL);
724 message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 305);
725 message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 306L);
726 message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 307U);
727 message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 308UL);
728 message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 309);
729 message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 310L);
730 message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 311F);
731 message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 312D);
732 message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, false);
733 message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "315");
734 message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("316"));
735
736 message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension, RepeatedGroup_extension.CreateBuilder().SetA(317).Build());
737 message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
738 message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, ForeignMessage.CreateBuilder().SetC(319).Build());
739 message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension, ImportMessage.CreateBuilder().SetD(320).Build());
740
741 message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
742 message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
743 message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);
744
745 message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "324");
746 message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "325");
747
748 // -----------------------------------------------------------------
749
750 message.SetExtension(UnitTestProtoFile.DefaultInt32Extension, 401);
751 message.SetExtension(UnitTestProtoFile.DefaultInt64Extension, 402L);
752 message.SetExtension(UnitTestProtoFile.DefaultUint32Extension, 403U);
753 message.SetExtension(UnitTestProtoFile.DefaultUint64Extension, 404UL);
754 message.SetExtension(UnitTestProtoFile.DefaultSint32Extension, 405);
755 message.SetExtension(UnitTestProtoFile.DefaultSint64Extension, 406L);
756 message.SetExtension(UnitTestProtoFile.DefaultFixed32Extension, 407U);
757 message.SetExtension(UnitTestProtoFile.DefaultFixed64Extension, 408UL);
758 message.SetExtension(UnitTestProtoFile.DefaultSfixed32Extension, 409);
759 message.SetExtension(UnitTestProtoFile.DefaultSfixed64Extension, 410L);
760 message.SetExtension(UnitTestProtoFile.DefaultFloatExtension, 411F);
761 message.SetExtension(UnitTestProtoFile.DefaultDoubleExtension, 412D);
762 message.SetExtension(UnitTestProtoFile.DefaultBoolExtension, false);
763 message.SetExtension(UnitTestProtoFile.DefaultStringExtension, "415");
764 message.SetExtension(UnitTestProtoFile.DefaultBytesExtension, ToBytes("416"));
765
766 message.SetExtension(UnitTestProtoFile.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO);
767 message.SetExtension(UnitTestProtoFile.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);
768 message.SetExtension(UnitTestProtoFile.DefaultImportEnumExtension, ImportEnum.IMPORT_FOO);
769
770 message.SetExtension(UnitTestProtoFile.DefaultStringPieceExtension, "424");
771 message.SetExtension(UnitTestProtoFile.DefaultCordExtension, "425");
772 }
773
774 internal static void ModifyRepeatedFields(TestAllTypes.Builder message) {
775 message.SetRepeatedInt32(1, 501);
776 message.SetRepeatedInt64(1, 502);
777 message.SetRepeatedUint32(1, 503);
778 message.SetRepeatedUint64(1, 504);
779 message.SetRepeatedSint32(1, 505);
780 message.SetRepeatedSint64(1, 506);
781 message.SetRepeatedFixed32(1, 507);
782 message.SetRepeatedFixed64(1, 508);
783 message.SetRepeatedSfixed32(1, 509);
784 message.SetRepeatedSfixed64(1, 510);
785 message.SetRepeatedFloat(1, 511);
786 message.SetRepeatedDouble(1, 512);
787 message.SetRepeatedBool(1, true);
788 message.SetRepeatedString(1, "515");
789 message.SetRepeatedBytes(1, ToBytes("516"));
790
791 message.SetRepeatedGroup(1, TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(517).Build());
792 message.SetRepeatedNestedMessage(1, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
793 message.SetRepeatedForeignMessage(1, ForeignMessage.CreateBuilder().SetC(519).Build());
794 message.SetRepeatedImportMessage(1, ImportMessage.CreateBuilder().SetD(520).Build());
795
796 message.SetRepeatedNestedEnum(1, TestAllTypes.Types.NestedEnum.FOO);
797 message.SetRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO);
798 message.SetRepeatedImportEnum(1, ImportEnum.IMPORT_FOO);
799
800 message.SetRepeatedStringPiece(1, "524");
801 message.SetRepeatedCord(1, "525");
802 }
803
804 internal static void AssertRepeatedFieldsModified(TestAllTypes message) {
805 // ModifyRepeatedFields only sets the second repeated element of each
806 // field. In addition to verifying this, we also verify that the first
807 // element and size were *not* modified.
808 Assert.AreEqual(2, message.RepeatedInt32Count);
809 Assert.AreEqual(2, message.RepeatedInt64Count);
810 Assert.AreEqual(2, message.RepeatedUint32Count);
811 Assert.AreEqual(2, message.RepeatedUint64Count);
812 Assert.AreEqual(2, message.RepeatedSint32Count);
813 Assert.AreEqual(2, message.RepeatedSint64Count);
814 Assert.AreEqual(2, message.RepeatedFixed32Count);
815 Assert.AreEqual(2, message.RepeatedFixed64Count);
816 Assert.AreEqual(2, message.RepeatedSfixed32Count);
817 Assert.AreEqual(2, message.RepeatedSfixed64Count);
818 Assert.AreEqual(2, message.RepeatedFloatCount);
819 Assert.AreEqual(2, message.RepeatedDoubleCount);
820 Assert.AreEqual(2, message.RepeatedBoolCount);
821 Assert.AreEqual(2, message.RepeatedStringCount);
822 Assert.AreEqual(2, message.RepeatedBytesCount);
823
824 Assert.AreEqual(2, message.RepeatedGroupCount);
825 Assert.AreEqual(2, message.RepeatedNestedMessageCount);
826 Assert.AreEqual(2, message.RepeatedForeignMessageCount);
827 Assert.AreEqual(2, message.RepeatedImportMessageCount);
828 Assert.AreEqual(2, message.RepeatedNestedEnumCount);
829 Assert.AreEqual(2, message.RepeatedForeignEnumCount);
830 Assert.AreEqual(2, message.RepeatedImportEnumCount);
831
832 Assert.AreEqual(2, message.RepeatedStringPieceCount);
833 Assert.AreEqual(2, message.RepeatedCordCount);
834
835 Assert.AreEqual(201, message.GetRepeatedInt32(0));
836 Assert.AreEqual(202L, message.GetRepeatedInt64(0));
837 Assert.AreEqual(203U, message.GetRepeatedUint32(0));
838 Assert.AreEqual(204UL, message.GetRepeatedUint64(0));
839 Assert.AreEqual(205, message.GetRepeatedSint32(0));
840 Assert.AreEqual(206L, message.GetRepeatedSint64(0));
841 Assert.AreEqual(207U, message.GetRepeatedFixed32(0));
842 Assert.AreEqual(208UL, message.GetRepeatedFixed64(0));
843 Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
844 Assert.AreEqual(210L, message.GetRepeatedSfixed64(0));
845 Assert.AreEqual(211F, message.GetRepeatedFloat(0));
846 Assert.AreEqual(212D, message.GetRepeatedDouble(0));
847 Assert.AreEqual(true, message.GetRepeatedBool(0));
848 Assert.AreEqual("215", message.GetRepeatedString(0));
849 Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
850
851 Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
852 Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);
853 Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
854 Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);
855
856 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));
857 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
858 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
859
860 Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
861 Assert.AreEqual("225", message.GetRepeatedCord(0));
862
863 // Actually verify the second (modified) elements now.
864 Assert.AreEqual(501, message.GetRepeatedInt32(1));
865 Assert.AreEqual(502L, message.GetRepeatedInt64(1));
866 Assert.AreEqual(503U, message.GetRepeatedUint32(1));
867 Assert.AreEqual(504UL, message.GetRepeatedUint64(1));
868 Assert.AreEqual(505, message.GetRepeatedSint32(1));
869 Assert.AreEqual(506L, message.GetRepeatedSint64(1));
870 Assert.AreEqual(507U, message.GetRepeatedFixed32(1));
871 Assert.AreEqual(508UL, message.GetRepeatedFixed64(1));
872 Assert.AreEqual(509, message.GetRepeatedSfixed32(1));
873 Assert.AreEqual(510L, message.GetRepeatedSfixed64(1));
874 Assert.AreEqual(511F, message.GetRepeatedFloat(1));
875 Assert.AreEqual(512D, message.GetRepeatedDouble(1));
876 Assert.AreEqual(true, message.GetRepeatedBool(1));
877 Assert.AreEqual("515", message.GetRepeatedString(1));
878 Assert.AreEqual(ToBytes("516"), message.GetRepeatedBytes(1));
879
880 Assert.AreEqual(517, message.GetRepeatedGroup(1).A);
881 Assert.AreEqual(518, message.GetRepeatedNestedMessage(1).Bb);
882 Assert.AreEqual(519, message.GetRepeatedForeignMessage(1).C);
883 Assert.AreEqual(520, message.GetRepeatedImportMessage(1).D);
884
885 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetRepeatedNestedEnum(1));
886 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetRepeatedForeignEnum(1));
887 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetRepeatedImportEnum(1));
888
889 Assert.AreEqual("524", message.GetRepeatedStringPiece(1));
890 Assert.AreEqual("525", message.GetRepeatedCord(1));
891 }
892
893 /// <summary>
894 /// Helper to assert that sequences are equal.
895 /// </summary>
896 internal static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second) {
897 using (IEnumerator<T> firstEnumerator = first.GetEnumerator()) {
898 foreach (T secondElement in second) {
899 Assert.IsTrue(firstEnumerator.MoveNext(), "First enumerator ran out of elements too early.");
900 Assert.AreEqual(firstEnumerator.Current, secondElement);
901 }
902 Assert.IsFalse(firstEnumerator.MoveNext(), "Second enumerator ran out of elements too early.");
903 }
904 }
905
906 internal static void AssertEqualBytes(byte[] expected, byte[] actual) {
907 Assert.AreEqual(ByteString.CopyFrom(expected), ByteString.CopyFrom(actual));
908 }
909
910 internal static void AssertAllExtensionsSet(TestAllExtensions message) {
911 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension ));
912 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension ));
913 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension ));
914 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension ));
915 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension ));
916 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension ));
917 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension ));
918 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension ));
919 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));
920 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));
921 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension ));
922 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension ));
923 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension ));
924 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringExtension ));
925 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension ));
926
927 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension ));
928 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension ));
929 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));
930 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension ));
931
932 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).HasA);
933 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).HasBb);
934 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);
935 Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).HasD);
936
937 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension ));
938 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
939 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension ));
940
941 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));
942 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));
943
944 Assert.AreEqual(101 , message.GetExtension(UnitTestProtoFile.OptionalInt32Extension ));
945 Assert.AreEqual(102L , message.GetExtension(UnitTestProtoFile.OptionalInt64Extension ));
946 Assert.AreEqual(103U , message.GetExtension(UnitTestProtoFile.OptionalUint32Extension ));
947 Assert.AreEqual(104UL , message.GetExtension(UnitTestProtoFile.OptionalUint64Extension ));
948 Assert.AreEqual(105 , message.GetExtension(UnitTestProtoFile.OptionalSint32Extension ));
949 Assert.AreEqual(106L , message.GetExtension(UnitTestProtoFile.OptionalSint64Extension ));
950 Assert.AreEqual(107U , message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension ));
951 Assert.AreEqual(108UL , message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension ));
952 Assert.AreEqual(109 , message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));
953 Assert.AreEqual(110L , message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));
954 Assert.AreEqual(111F , message.GetExtension(UnitTestProtoFile.OptionalFloatExtension ));
955 Assert.AreEqual(112D , message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension ));
956 Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.OptionalBoolExtension ));
957 Assert.AreEqual("115", message.GetExtension(UnitTestProtoFile.OptionalStringExtension ));
958 Assert.AreEqual(ToBytes("116"), message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));
959
960 Assert.AreEqual(117, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).A);
961 Assert.AreEqual(118, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).Bb);
962 Assert.AreEqual(119, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);
963 Assert.AreEqual(120, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).D);
964
965 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
966 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
967 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));
968
969 Assert.AreEqual("124", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));
970 Assert.AreEqual("125", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));
971
972 // -----------------------------------------------------------------
973
974 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension ));
975 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension ));
976 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension ));
977 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension ));
978 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension ));
979 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension ));
980 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension ));
981 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension ));
982 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
983 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
984 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension ));
985 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension ));
986 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension ));
987 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension ));
988 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension ));
989
990 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension ));
991 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension ));
992 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
993 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension ));
994 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension ));
995 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension ));
996 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension ));
997
998 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
999 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1000
1001 Assert.AreEqual(201 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 0));
1002 Assert.AreEqual(202L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 0));
1003 Assert.AreEqual(203U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 0));
1004 Assert.AreEqual(204UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 0));
1005 Assert.AreEqual(205 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 0));
1006 Assert.AreEqual(206L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 0));
1007 Assert.AreEqual(207U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 0));
1008 Assert.AreEqual(208UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 0));
1009 Assert.AreEqual(209 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));
1010 Assert.AreEqual(210L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));
1011 Assert.AreEqual(211F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 0));
1012 Assert.AreEqual(212D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 0));
1013 Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 0));
1014 Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 0));
1015 Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));
1016
1017 Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 0).A);
1018 Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 0).Bb);
1019 Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);
1020 Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 0).D);
1021
1022 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));
1023 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));
1024 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));
1025
1026 Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));
1027 Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));
1028
1029 Assert.AreEqual(301 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 1));
1030 Assert.AreEqual(302L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 1));
1031 Assert.AreEqual(303U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 1));
1032 Assert.AreEqual(304UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 1));
1033 Assert.AreEqual(305 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 1));
1034 Assert.AreEqual(306L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 1));
1035 Assert.AreEqual(307U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 1));
1036 Assert.AreEqual(308UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 1));
1037 Assert.AreEqual(309 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));
1038 Assert.AreEqual(310L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));
1039 Assert.AreEqual(311F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 1));
1040 Assert.AreEqual(312D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 1));
1041 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 1));
1042 Assert.AreEqual("315", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 1));
1043 Assert.AreEqual(ToBytes("316"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));
1044
1045 Assert.AreEqual(317, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 1).A);
1046 Assert.AreEqual(318, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 1).Bb);
1047 Assert.AreEqual(319, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);
1048 Assert.AreEqual(320, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 1).D);
1049
1050 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));
1051 Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));
1052 Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));
1053
1054 Assert.AreEqual("324", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));
1055 Assert.AreEqual("325", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));
1056
1057 // -----------------------------------------------------------------
1058
1059 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension ));
1060 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension ));
1061 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension ));
1062 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension ));
1063 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension ));
1064 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension ));
1065 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension ));
1066 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension ));
1067 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1068 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1069 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension ));
1070 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension ));
1071 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension ));
1072 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringExtension ));
1073 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension ));
1074
1075 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension ));
1076 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1077 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension ));
1078
1079 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1080 Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));
1081
1082 Assert.AreEqual(401 , message.GetExtension(UnitTestProtoFile.DefaultInt32Extension ));
1083 Assert.AreEqual(402L , message.GetExtension(UnitTestProtoFile.DefaultInt64Extension ));
1084 Assert.AreEqual(403U , message.GetExtension(UnitTestProtoFile.DefaultUint32Extension ));
1085 Assert.AreEqual(404UL , message.GetExtension(UnitTestProtoFile.DefaultUint64Extension ));
1086 Assert.AreEqual(405 , message.GetExtension(UnitTestProtoFile.DefaultSint32Extension ));
1087 Assert.AreEqual(406L , message.GetExtension(UnitTestProtoFile.DefaultSint64Extension ));
1088 Assert.AreEqual(407U , message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension ));
1089 Assert.AreEqual(408UL , message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension ));
1090 Assert.AreEqual(409 , message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1091 Assert.AreEqual(410L , message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1092 Assert.AreEqual(411F , message.GetExtension(UnitTestProtoFile.DefaultFloatExtension ));
1093 Assert.AreEqual(412D , message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension ));
1094 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension ));
1095 Assert.AreEqual("415", message.GetExtension(UnitTestProtoFile.DefaultStringExtension ));
1096 Assert.AreEqual(ToBytes("416"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));
1097
1098 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension ));
1099 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1100 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1101
1102 Assert.AreEqual("424", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1103 Assert.AreEqual("425", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));
1104 }
1105
1106 /// <summary>
1107 /// Modifies the repeated extensions of the given message to contain the values
1108 /// expected by AssertRepeatedExtensionsModified.
1109 /// </summary>
1110 internal static void ModifyRepeatedExtensions(TestAllExtensions.Builder message) {
1111 message.SetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1, 501);
1112 message.SetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1, 502L);
1113 message.SetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1, 503U);
1114 message.SetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1, 504UL);
1115 message.SetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1, 505);
1116 message.SetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1, 506L);
1117 message.SetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1, 507U);
1118 message.SetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1, 508UL);
1119 message.SetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1, 509);
1120 message.SetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1, 510L);
1121 message.SetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1, 511F);
1122 message.SetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1, 512D);
1123 message.SetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1, true);
1124 message.SetExtension(UnitTestProtoFile.RepeatedStringExtension, 1, "515");
1125 message.SetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1, ToBytes("516"));
1126
1127 message.SetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1, RepeatedGroup_extension.CreateBuilder().SetA(517).Build());
1128 message.SetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
1129 message.SetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1, ForeignMessage.CreateBuilder().SetC(519).Build());
1130 message.SetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1, ImportMessage.CreateBuilder().SetD(520).Build());
1131
1132 message.SetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1, TestAllTypes.Types.NestedEnum.FOO);
1133 message.SetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO);
1134 message.SetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1, ImportEnum.IMPORT_FOO);
1135
1136 message.SetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1, "524");
1137 message.SetExtension(UnitTestProtoFile.RepeatedCordExtension, 1, "525");
1138 }
1139
1140 /// <summary>
1141 /// Asserts that all repeated extensions are set to the values assigned by
1142 /// SetAllExtensions follwed by ModifyRepeatedExtensions.
1143 /// </summary>
1144 internal static void AssertRepeatedExtensionsModified(TestAllExtensions message) {
1145 // ModifyRepeatedFields only sets the second repeated element of each
1146 // field. In addition to verifying this, we also verify that the first
1147 // element and size were *not* modified.
1148 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
1149 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));
1150 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));
1151 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));
1152 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));
1153 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));
1154 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));
1155 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));
1156 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
1157 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
1158 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));
1159 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));
1160 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));
1161 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));
1162 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));
1163
1164 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));
1165 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));
1166 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
1167 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));
1168 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));
1169 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));
1170 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));
1171
1172 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
1173 Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1174
1175 Assert.AreEqual(201, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));
1176 Assert.AreEqual(202L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));
1177 Assert.AreEqual(203U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));
1178 Assert.AreEqual(204UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));
1179 Assert.AreEqual(205, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));
1180 Assert.AreEqual(206L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));
1181 Assert.AreEqual(207U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));
1182 Assert.AreEqual(208UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));
1183 Assert.AreEqual(209, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));
1184 Assert.AreEqual(210L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));
1185 Assert.AreEqual(211F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));
1186 Assert.AreEqual(212D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));
1187 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));
1188 Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));
1189 Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));
1190
1191 Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 0).A);
1192 Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 0).Bb);
1193 Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);
1194 Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 0).D);
1195
1196 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));
1197 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));
1198 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));
1199
1200 Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));
1201 Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));
1202
1203 // Actually verify the second (modified) elements now.
1204 Assert.AreEqual(501, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1));
1205 Assert.AreEqual(502L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1));
1206 Assert.AreEqual(503U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1));
1207 Assert.AreEqual(504UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1));
1208 Assert.AreEqual(505, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1));
1209 Assert.AreEqual(506L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1));
1210 Assert.AreEqual(507U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1));
1211 Assert.AreEqual(508UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1));
1212 Assert.AreEqual(509, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));
1213 Assert.AreEqual(510L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));
1214 Assert.AreEqual(511F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1));
1215 Assert.AreEqual(512D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1));
1216 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1));
1217 Assert.AreEqual("515", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 1));
1218 Assert.AreEqual(ToBytes("516"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));
1219
1220 Assert.AreEqual(517, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1).A);
1221 Assert.AreEqual(518, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1).Bb);
1222 Assert.AreEqual(519, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);
1223 Assert.AreEqual(520, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1).D);
1224
1225 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));
1226 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));
1227 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));
1228
1229 Assert.AreEqual("524", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));
1230 Assert.AreEqual("525", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));
1231 }
1232
1233 internal static void AssertExtensionsClear(TestAllExtensions message) {
1234 // HasBlah() should initially be false for all optional fields.
1235 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension));
1236 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension));
1237 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension));
1238 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension));
1239 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension));
1240 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension));
1241 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension));
1242 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension));
1243 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));
1244 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));
1245 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension));
1246 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension));
1247 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension));
1248 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringExtension));
1249 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension));
1250
1251 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension));
1252 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension));
1253 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));
1254 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension));
1255
1256 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1257 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1258 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1259
1260 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1261 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));
1262
1263 // Optional fields without defaults are set to zero or something like it.
1264 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalInt32Extension));
1265 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalInt64Extension));
1266 Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalUint32Extension));
1267 Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalUint64Extension));
1268 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSint32Extension));
1269 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSint64Extension));
1270 Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));
1271 Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));
1272 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));
1273 Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));
1274 Assert.AreEqual(0F, message.GetExtension(UnitTestProtoFile.OptionalFloatExtension));
1275 Assert.AreEqual(0D, message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));
1276 Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.OptionalBoolExtension));
1277 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringExtension));
1278 Assert.AreEqual(ByteString.Empty, message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));
1279
1280 // Embedded messages should also be clear.
1281 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).HasA);
1282 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).HasBb);
1283 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);
1284 Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).HasD);
1285
1286 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).A);
1287 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).Bb);
1288 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);
1289 Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).D);
1290
1291 // Enums without defaults are set to the first value in the enum.
1292 Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));
1293 Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));
1294 Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));
1295
1296 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));
1297 Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));
1298
1299 // Repeated fields are empty.
1300 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
1301 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));
1302 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));
1303 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));
1304 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));
1305 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));
1306 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));
1307 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));
1308 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));
1309 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));
1310 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));
1311 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));
1312 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));
1313 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));
1314 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));
1315
1316 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));
1317 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));
1318 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));
1319 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));
1320 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));
1321 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));
1322 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));
1323
1324 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));
1325 Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));
1326
1327 // HasBlah() should also be false for all default fields.
1328 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension));
1329 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension));
1330 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension));
1331 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension));
1332 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension));
1333 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension));
1334 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension));
1335 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension));
1336 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1337 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1338 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension));
1339 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension));
1340 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension));
1341 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringExtension));
1342 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension));
1343
1344 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1345 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1346 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1347
1348 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1349 Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));
1350
1351 // Fields with defaults have their default values (duh).
1352 Assert.AreEqual(41, message.GetExtension(UnitTestProtoFile.DefaultInt32Extension));
1353 Assert.AreEqual(42L, message.GetExtension(UnitTestProtoFile.DefaultInt64Extension));
1354 Assert.AreEqual(43U, message.GetExtension(UnitTestProtoFile.DefaultUint32Extension));
1355 Assert.AreEqual(44UL, message.GetExtension(UnitTestProtoFile.DefaultUint64Extension));
1356 Assert.AreEqual(-45, message.GetExtension(UnitTestProtoFile.DefaultSint32Extension));
1357 Assert.AreEqual(46L, message.GetExtension(UnitTestProtoFile.DefaultSint64Extension));
1358 Assert.AreEqual(47U, message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));
1359 Assert.AreEqual(48UL, message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));
1360 Assert.AreEqual(49, message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));
1361 Assert.AreEqual(-50L, message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));
1362 Assert.AreEqual(51.5F, message.GetExtension(UnitTestProtoFile.DefaultFloatExtension));
1363 Assert.AreEqual(52e3D, message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));
1364 Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension));
1365 Assert.AreEqual("hello", message.GetExtension(UnitTestProtoFile.DefaultStringExtension));
1366 Assert.AreEqual(ToBytes("world"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));
1367
1368 Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));
1369 Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));
1370 Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));
1371
1372 Assert.AreEqual("abc", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));
1373 Assert.AreEqual("123", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));
1374 }
1375
1376 /// <summary>
1377 /// Helper to construct a byte array from a bunch of bytes.
1378 /// </summary>
1379 internal static byte[] Bytes(params byte[] bytesAsInts) {
1380 byte[] bytes = new byte[bytesAsInts.Length];
1381 for (int i = 0; i < bytesAsInts.Length; i++) {
1382 bytes[i] = (byte)bytesAsInts[i];
1383 }
1384 return bytes;
1385 }
Jon Skeet642a8142009-01-27 12:25:21 +00001386
1387 internal static void AssertArgumentNullException(Action action) {
1388 try {
1389 action();
1390 Assert.Fail("Exception was not thrown");
1391 } catch (ArgumentNullException) {
1392 // We expect this exception.
1393 }
1394 }
Jon Skeet68036862008-10-22 13:30:34 +01001395 }
1396}