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