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