tizen 2.3.1 release
[external/protobuf.git] / java / src / test / java / com / google / protobuf / TestUtil.java
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 //     * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 //     * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 package com.google.protobuf;
32
33 import protobuf_unittest.UnittestProto;
34 import com.google.protobuf.UnittestLite;
35
36 // The static imports are to avoid 100+ char lines.  The following is roughly equivalent to
37 // import static protobuf_unittest.UnittestProto.*;
38 import static protobuf_unittest.UnittestProto.defaultInt32Extension;
39 import static protobuf_unittest.UnittestProto.defaultInt64Extension;
40 import static protobuf_unittest.UnittestProto.defaultUint32Extension;
41 import static protobuf_unittest.UnittestProto.defaultUint64Extension;
42 import static protobuf_unittest.UnittestProto.defaultSint32Extension;
43 import static protobuf_unittest.UnittestProto.defaultSint64Extension;
44 import static protobuf_unittest.UnittestProto.defaultFixed32Extension;
45 import static protobuf_unittest.UnittestProto.defaultFixed64Extension;
46 import static protobuf_unittest.UnittestProto.defaultSfixed32Extension;
47 import static protobuf_unittest.UnittestProto.defaultSfixed64Extension;
48 import static protobuf_unittest.UnittestProto.defaultFloatExtension;
49 import static protobuf_unittest.UnittestProto.defaultDoubleExtension;
50 import static protobuf_unittest.UnittestProto.defaultBoolExtension;
51 import static protobuf_unittest.UnittestProto.defaultStringExtension;
52 import static protobuf_unittest.UnittestProto.defaultBytesExtension;
53 import static protobuf_unittest.UnittestProto.defaultNestedEnumExtension;
54 import static protobuf_unittest.UnittestProto.defaultForeignEnumExtension;
55 import static protobuf_unittest.UnittestProto.defaultImportEnumExtension;
56 import static protobuf_unittest.UnittestProto.defaultStringPieceExtension;
57 import static protobuf_unittest.UnittestProto.defaultCordExtension;
58
59 import static protobuf_unittest.UnittestProto.oneofUint32Extension;
60 import static protobuf_unittest.UnittestProto.oneofNestedMessageExtension;
61 import static protobuf_unittest.UnittestProto.oneofStringExtension;
62 import static protobuf_unittest.UnittestProto.oneofBytesExtension;
63
64 import static protobuf_unittest.UnittestProto.optionalInt32Extension;
65 import static protobuf_unittest.UnittestProto.optionalInt64Extension;
66 import static protobuf_unittest.UnittestProto.optionalUint32Extension;
67 import static protobuf_unittest.UnittestProto.optionalUint64Extension;
68 import static protobuf_unittest.UnittestProto.optionalSint32Extension;
69 import static protobuf_unittest.UnittestProto.optionalSint64Extension;
70 import static protobuf_unittest.UnittestProto.optionalFixed32Extension;
71 import static protobuf_unittest.UnittestProto.optionalFixed64Extension;
72 import static protobuf_unittest.UnittestProto.optionalSfixed32Extension;
73 import static protobuf_unittest.UnittestProto.optionalSfixed64Extension;
74 import static protobuf_unittest.UnittestProto.optionalFloatExtension;
75 import static protobuf_unittest.UnittestProto.optionalDoubleExtension;
76 import static protobuf_unittest.UnittestProto.optionalBoolExtension;
77 import static protobuf_unittest.UnittestProto.optionalStringExtension;
78 import static protobuf_unittest.UnittestProto.optionalBytesExtension;
79 import static protobuf_unittest.UnittestProto.optionalGroupExtension;
80 import static protobuf_unittest.UnittestProto.optionalCordExtension;
81 import static protobuf_unittest.UnittestProto.optionalForeignEnumExtension;
82 import static protobuf_unittest.UnittestProto.optionalForeignMessageExtension;
83 import static protobuf_unittest.UnittestProto.optionalImportEnumExtension;
84 import static protobuf_unittest.UnittestProto.optionalImportMessageExtension;
85 import static protobuf_unittest.UnittestProto.optionalNestedEnumExtension;
86 import static protobuf_unittest.UnittestProto.optionalNestedMessageExtension;
87 import static protobuf_unittest.UnittestProto.optionalPublicImportMessageExtension;
88 import static protobuf_unittest.UnittestProto.optionalLazyMessageExtension;
89 import static protobuf_unittest.UnittestProto.optionalStringPieceExtension;
90
91 import static protobuf_unittest.UnittestProto.repeatedInt32Extension;
92 import static protobuf_unittest.UnittestProto.repeatedInt64Extension;
93 import static protobuf_unittest.UnittestProto.repeatedUint32Extension;
94 import static protobuf_unittest.UnittestProto.repeatedUint64Extension;
95 import static protobuf_unittest.UnittestProto.repeatedSint32Extension;
96 import static protobuf_unittest.UnittestProto.repeatedSint64Extension;
97 import static protobuf_unittest.UnittestProto.repeatedFixed32Extension;
98 import static protobuf_unittest.UnittestProto.repeatedFixed64Extension;
99 import static protobuf_unittest.UnittestProto.repeatedSfixed32Extension;
100 import static protobuf_unittest.UnittestProto.repeatedSfixed64Extension;
101 import static protobuf_unittest.UnittestProto.repeatedFloatExtension;
102 import static protobuf_unittest.UnittestProto.repeatedDoubleExtension;
103 import static protobuf_unittest.UnittestProto.repeatedBoolExtension;
104 import static protobuf_unittest.UnittestProto.repeatedStringExtension;
105 import static protobuf_unittest.UnittestProto.repeatedBytesExtension;
106 import static protobuf_unittest.UnittestProto.repeatedGroupExtension;
107 import static protobuf_unittest.UnittestProto.repeatedNestedMessageExtension;
108 import static protobuf_unittest.UnittestProto.repeatedForeignMessageExtension;
109 import static protobuf_unittest.UnittestProto.repeatedImportMessageExtension;
110 import static protobuf_unittest.UnittestProto.repeatedLazyMessageExtension;
111 import static protobuf_unittest.UnittestProto.repeatedNestedEnumExtension;
112 import static protobuf_unittest.UnittestProto.repeatedForeignEnumExtension;
113 import static protobuf_unittest.UnittestProto.repeatedImportEnumExtension;
114 import static protobuf_unittest.UnittestProto.repeatedStringPieceExtension;
115 import static protobuf_unittest.UnittestProto.repeatedCordExtension;
116
117 import static protobuf_unittest.UnittestProto.OptionalGroup_extension;
118 import static protobuf_unittest.UnittestProto.RepeatedGroup_extension;
119
120 import static protobuf_unittest.UnittestProto.packedInt32Extension;
121 import static protobuf_unittest.UnittestProto.packedInt64Extension;
122 import static protobuf_unittest.UnittestProto.packedUint32Extension;
123 import static protobuf_unittest.UnittestProto.packedUint64Extension;
124 import static protobuf_unittest.UnittestProto.packedSint32Extension;
125 import static protobuf_unittest.UnittestProto.packedSint64Extension;
126 import static protobuf_unittest.UnittestProto.packedFixed32Extension;
127 import static protobuf_unittest.UnittestProto.packedFixed64Extension;
128 import static protobuf_unittest.UnittestProto.packedSfixed32Extension;
129 import static protobuf_unittest.UnittestProto.packedSfixed64Extension;
130 import static protobuf_unittest.UnittestProto.packedFloatExtension;
131 import static protobuf_unittest.UnittestProto.packedDoubleExtension;
132 import static protobuf_unittest.UnittestProto.packedBoolExtension;
133 import static protobuf_unittest.UnittestProto.packedEnumExtension;
134
135 import static com.google.protobuf.UnittestLite.defaultInt32ExtensionLite;
136 import static com.google.protobuf.UnittestLite.defaultInt64ExtensionLite;
137 import static com.google.protobuf.UnittestLite.defaultUint32ExtensionLite;
138 import static com.google.protobuf.UnittestLite.defaultUint64ExtensionLite;
139 import static com.google.protobuf.UnittestLite.defaultSint32ExtensionLite;
140 import static com.google.protobuf.UnittestLite.defaultSint64ExtensionLite;
141 import static com.google.protobuf.UnittestLite.defaultFixed32ExtensionLite;
142 import static com.google.protobuf.UnittestLite.defaultFixed64ExtensionLite;
143 import static com.google.protobuf.UnittestLite.defaultSfixed32ExtensionLite;
144 import static com.google.protobuf.UnittestLite.defaultSfixed64ExtensionLite;
145 import static com.google.protobuf.UnittestLite.defaultFloatExtensionLite;
146 import static com.google.protobuf.UnittestLite.defaultDoubleExtensionLite;
147 import static com.google.protobuf.UnittestLite.defaultBoolExtensionLite;
148 import static com.google.protobuf.UnittestLite.defaultStringExtensionLite;
149 import static com.google.protobuf.UnittestLite.defaultBytesExtensionLite;
150 import static com.google.protobuf.UnittestLite.defaultNestedEnumExtensionLite;
151 import static com.google.protobuf.UnittestLite.defaultForeignEnumExtensionLite;
152 import static com.google.protobuf.UnittestLite.defaultImportEnumExtensionLite;
153 import static com.google.protobuf.UnittestLite.defaultStringPieceExtensionLite;
154 import static com.google.protobuf.UnittestLite.defaultCordExtensionLite;
155
156 import static com.google.protobuf.UnittestLite.oneofUint32ExtensionLite;
157 import static com.google.protobuf.UnittestLite.oneofNestedMessageExtensionLite;
158 import static com.google.protobuf.UnittestLite.oneofStringExtensionLite;
159 import static com.google.protobuf.UnittestLite.oneofBytesExtensionLite;
160
161 import static com.google.protobuf.UnittestLite.optionalInt32ExtensionLite;
162 import static com.google.protobuf.UnittestLite.optionalInt64ExtensionLite;
163 import static com.google.protobuf.UnittestLite.optionalUint32ExtensionLite;
164 import static com.google.protobuf.UnittestLite.optionalUint64ExtensionLite;
165 import static com.google.protobuf.UnittestLite.optionalSint32ExtensionLite;
166 import static com.google.protobuf.UnittestLite.optionalSint64ExtensionLite;
167 import static com.google.protobuf.UnittestLite.optionalFixed32ExtensionLite;
168 import static com.google.protobuf.UnittestLite.optionalFixed64ExtensionLite;
169 import static com.google.protobuf.UnittestLite.optionalSfixed32ExtensionLite;
170 import static com.google.protobuf.UnittestLite.optionalSfixed64ExtensionLite;
171 import static com.google.protobuf.UnittestLite.optionalFloatExtensionLite;
172 import static com.google.protobuf.UnittestLite.optionalDoubleExtensionLite;
173 import static com.google.protobuf.UnittestLite.optionalBoolExtensionLite;
174 import static com.google.protobuf.UnittestLite.optionalStringExtensionLite;
175 import static com.google.protobuf.UnittestLite.optionalBytesExtensionLite;
176 import static com.google.protobuf.UnittestLite.optionalGroupExtensionLite;
177 import static com.google.protobuf.UnittestLite.optionalNestedMessageExtensionLite;
178 import static com.google.protobuf.UnittestLite.optionalForeignEnumExtensionLite;
179 import static com.google.protobuf.UnittestLite.optionalForeignMessageExtensionLite;
180 import static com.google.protobuf.UnittestLite.optionalImportEnumExtensionLite;
181 import static com.google.protobuf.UnittestLite.optionalImportMessageExtensionLite;
182 import static com.google.protobuf.UnittestLite.optionalNestedEnumExtensionLite;
183 import static com.google.protobuf.UnittestLite.optionalPublicImportMessageExtensionLite;
184 import static com.google.protobuf.UnittestLite.optionalLazyMessageExtensionLite;
185 import static com.google.protobuf.UnittestLite.optionalStringPieceExtensionLite;
186 import static com.google.protobuf.UnittestLite.optionalCordExtensionLite;
187
188 import static com.google.protobuf.UnittestLite.repeatedInt32ExtensionLite;
189 import static com.google.protobuf.UnittestLite.repeatedInt64ExtensionLite;
190 import static com.google.protobuf.UnittestLite.repeatedUint32ExtensionLite;
191 import static com.google.protobuf.UnittestLite.repeatedUint64ExtensionLite;
192 import static com.google.protobuf.UnittestLite.repeatedSint32ExtensionLite;
193 import static com.google.protobuf.UnittestLite.repeatedSint64ExtensionLite;
194 import static com.google.protobuf.UnittestLite.repeatedFixed32ExtensionLite;
195 import static com.google.protobuf.UnittestLite.repeatedFixed64ExtensionLite;
196 import static com.google.protobuf.UnittestLite.repeatedSfixed32ExtensionLite;
197 import static com.google.protobuf.UnittestLite.repeatedSfixed64ExtensionLite;
198 import static com.google.protobuf.UnittestLite.repeatedFloatExtensionLite;
199 import static com.google.protobuf.UnittestLite.repeatedDoubleExtensionLite;
200 import static com.google.protobuf.UnittestLite.repeatedBoolExtensionLite;
201 import static com.google.protobuf.UnittestLite.repeatedStringExtensionLite;
202 import static com.google.protobuf.UnittestLite.repeatedBytesExtensionLite;
203 import static com.google.protobuf.UnittestLite.repeatedGroupExtensionLite;
204 import static com.google.protobuf.UnittestLite.repeatedNestedMessageExtensionLite;
205 import static com.google.protobuf.UnittestLite.repeatedForeignMessageExtensionLite;
206 import static com.google.protobuf.UnittestLite.repeatedImportMessageExtensionLite;
207 import static com.google.protobuf.UnittestLite.repeatedLazyMessageExtensionLite;
208 import static com.google.protobuf.UnittestLite.repeatedNestedEnumExtensionLite;
209 import static com.google.protobuf.UnittestLite.repeatedForeignEnumExtensionLite;
210 import static com.google.protobuf.UnittestLite.repeatedImportEnumExtensionLite;
211 import static com.google.protobuf.UnittestLite.repeatedStringPieceExtensionLite;
212 import static com.google.protobuf.UnittestLite.repeatedCordExtensionLite;
213
214 import static com.google.protobuf.UnittestLite.OptionalGroup_extension_lite;
215 import static com.google.protobuf.UnittestLite.RepeatedGroup_extension_lite;
216
217 import static com.google.protobuf.UnittestLite.packedInt32ExtensionLite;
218 import static com.google.protobuf.UnittestLite.packedInt64ExtensionLite;
219 import static com.google.protobuf.UnittestLite.packedUint32ExtensionLite;
220 import static com.google.protobuf.UnittestLite.packedUint64ExtensionLite;
221 import static com.google.protobuf.UnittestLite.packedSint32ExtensionLite;
222 import static com.google.protobuf.UnittestLite.packedSint64ExtensionLite;
223 import static com.google.protobuf.UnittestLite.packedFixed32ExtensionLite;
224 import static com.google.protobuf.UnittestLite.packedFixed64ExtensionLite;
225 import static com.google.protobuf.UnittestLite.packedSfixed32ExtensionLite;
226 import static com.google.protobuf.UnittestLite.packedSfixed64ExtensionLite;
227 import static com.google.protobuf.UnittestLite.packedFloatExtensionLite;
228 import static com.google.protobuf.UnittestLite.packedDoubleExtensionLite;
229 import static com.google.protobuf.UnittestLite.packedBoolExtensionLite;
230 import static com.google.protobuf.UnittestLite.packedEnumExtensionLite;
231
232 import protobuf_unittest.UnittestProto.TestAllExtensions;
233 import protobuf_unittest.UnittestProto.TestAllExtensionsOrBuilder;
234 import protobuf_unittest.UnittestProto.TestAllTypes;
235 import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
236 import protobuf_unittest.UnittestProto.TestOneof2;
237 import protobuf_unittest.UnittestProto.TestPackedExtensions;
238 import protobuf_unittest.UnittestProto.TestPackedTypes;
239 import protobuf_unittest.UnittestProto.TestUnpackedTypes;
240 import protobuf_unittest.UnittestProto.ForeignMessage;
241 import protobuf_unittest.UnittestProto.ForeignEnum;
242 import com.google.protobuf.test.UnittestImport.ImportEnum;
243 import com.google.protobuf.test.UnittestImport.ImportMessage;
244 import com.google.protobuf.test.UnittestImportPublic.PublicImportMessage;
245
246 import com.google.protobuf.UnittestLite.TestAllTypesLite;
247 import com.google.protobuf.UnittestLite.TestAllExtensionsLite;
248 import com.google.protobuf.UnittestLite.TestAllExtensionsLiteOrBuilder;
249 import com.google.protobuf.UnittestLite.TestPackedExtensionsLite;
250 import com.google.protobuf.UnittestLite.ForeignMessageLite;
251 import com.google.protobuf.UnittestLite.ForeignEnumLite;
252 import com.google.protobuf.UnittestImportLite.ImportEnumLite;
253 import com.google.protobuf.UnittestImportLite.ImportMessageLite;
254 import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite;
255
256 import junit.framework.Assert;
257
258 import java.io.File;
259 import java.io.IOException;
260 import java.io.RandomAccessFile;
261
262 /**
263  * Contains methods for setting all fields of {@code TestAllTypes} to
264  * some values as well as checking that all the fields are set to those values.
265  * These are useful for testing various protocol message features, e.g.
266  * set all fields of a message, serialize it, parse it, and check that all
267  * fields are set.
268  *
269  * <p>This code is not to be used outside of {@code com.google.protobuf} and
270  * subpackages.
271  *
272  * @author kenton@google.com Kenton Varda
273  */
274 public final class TestUtil {
275   private TestUtil() {}
276
277   /** Helper to convert a String to ByteString. */
278   static ByteString toBytes(String str) {
279     try {
280       return ByteString.copyFrom(str.getBytes("UTF-8"));
281     } catch(java.io.UnsupportedEncodingException e) {
282       throw new RuntimeException("UTF-8 not supported.", e);
283     }
284   }
285
286   /**
287    * Get a {@code TestAllTypes} with all fields set as they would be by
288    * {@link #setAllFields(TestAllTypes.Builder)}.
289    */
290   public static TestAllTypes getAllSet() {
291     TestAllTypes.Builder builder = TestAllTypes.newBuilder();
292     setAllFields(builder);
293     return builder.build();
294   }
295
296   /**
297    * Get a {@code TestAllTypes.Builder} with all fields set as they would be by
298    * {@link #setAllFields(TestAllTypes.Builder)}.
299    */
300   public static TestAllTypes.Builder getAllSetBuilder() {
301     TestAllTypes.Builder builder = TestAllTypes.newBuilder();
302     setAllFields(builder);
303     return builder;
304   }
305
306   /**
307    * Get a {@code TestAllExtensions} with all fields set as they would be by
308    * {@link #setAllExtensions(TestAllExtensions.Builder)}.
309    */
310   public static TestAllExtensions getAllExtensionsSet() {
311     TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
312     setAllExtensions(builder);
313     return builder.build();
314   }
315
316   public static TestAllExtensionsLite getAllLiteExtensionsSet() {
317     TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.newBuilder();
318     setAllExtensions(builder);
319     return builder.build();
320   }
321
322   public static TestPackedTypes getPackedSet() {
323     TestPackedTypes.Builder builder = TestPackedTypes.newBuilder();
324     setPackedFields(builder);
325     return builder.build();
326   }
327
328   public static TestUnpackedTypes getUnpackedSet() {
329     TestUnpackedTypes.Builder builder = TestUnpackedTypes.newBuilder();
330     setUnpackedFields(builder);
331     return builder.build();
332   }
333
334   public static TestPackedExtensions getPackedExtensionsSet() {
335     TestPackedExtensions.Builder builder = TestPackedExtensions.newBuilder();
336     setPackedExtensions(builder);
337     return builder.build();
338   }
339
340   public static TestPackedExtensionsLite getLitePackedExtensionsSet() {
341     TestPackedExtensionsLite.Builder builder =
342         TestPackedExtensionsLite.newBuilder();
343     setPackedExtensions(builder);
344     return builder.build();
345   }
346
347   /**
348    * Set every field of {@code message} to the values expected by
349    * {@code assertAllFieldsSet()}.
350    */
351   public static void setAllFields(TestAllTypes.Builder message) {
352     message.setOptionalInt32   (101);
353     message.setOptionalInt64   (102);
354     message.setOptionalUint32  (103);
355     message.setOptionalUint64  (104);
356     message.setOptionalSint32  (105);
357     message.setOptionalSint64  (106);
358     message.setOptionalFixed32 (107);
359     message.setOptionalFixed64 (108);
360     message.setOptionalSfixed32(109);
361     message.setOptionalSfixed64(110);
362     message.setOptionalFloat   (111);
363     message.setOptionalDouble  (112);
364     message.setOptionalBool    (true);
365     message.setOptionalString  ("115");
366     message.setOptionalBytes   (toBytes("116"));
367
368     message.setOptionalGroup(
369       TestAllTypes.OptionalGroup.newBuilder().setA(117).build());
370     message.setOptionalNestedMessage(
371       TestAllTypes.NestedMessage.newBuilder().setBb(118).build());
372     message.setOptionalForeignMessage(
373       ForeignMessage.newBuilder().setC(119).build());
374     message.setOptionalImportMessage(
375       ImportMessage.newBuilder().setD(120).build());
376     message.setOptionalPublicImportMessage(
377       PublicImportMessage.newBuilder().setE(126).build());
378     message.setOptionalLazyMessage(
379       TestAllTypes.NestedMessage.newBuilder().setBb(127).build());
380
381     message.setOptionalNestedEnum (TestAllTypes.NestedEnum.BAZ);
382     message.setOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);
383     message.setOptionalImportEnum (ImportEnum.IMPORT_BAZ);
384
385     message.setOptionalStringPiece("124");
386     message.setOptionalCord("125");
387
388     // -----------------------------------------------------------------
389
390     message.addRepeatedInt32   (201);
391     message.addRepeatedInt64   (202);
392     message.addRepeatedUint32  (203);
393     message.addRepeatedUint64  (204);
394     message.addRepeatedSint32  (205);
395     message.addRepeatedSint64  (206);
396     message.addRepeatedFixed32 (207);
397     message.addRepeatedFixed64 (208);
398     message.addRepeatedSfixed32(209);
399     message.addRepeatedSfixed64(210);
400     message.addRepeatedFloat   (211);
401     message.addRepeatedDouble  (212);
402     message.addRepeatedBool    (true);
403     message.addRepeatedString  ("215");
404     message.addRepeatedBytes   (toBytes("216"));
405
406     message.addRepeatedGroup(
407       TestAllTypes.RepeatedGroup.newBuilder().setA(217).build());
408     message.addRepeatedNestedMessage(
409       TestAllTypes.NestedMessage.newBuilder().setBb(218).build());
410     message.addRepeatedForeignMessage(
411       ForeignMessage.newBuilder().setC(219).build());
412     message.addRepeatedImportMessage(
413       ImportMessage.newBuilder().setD(220).build());
414     message.addRepeatedLazyMessage(
415       TestAllTypes.NestedMessage.newBuilder().setBb(227).build());
416
417     message.addRepeatedNestedEnum (TestAllTypes.NestedEnum.BAR);
418     message.addRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);
419     message.addRepeatedImportEnum (ImportEnum.IMPORT_BAR);
420
421     message.addRepeatedStringPiece("224");
422     message.addRepeatedCord("225");
423
424     // Add a second one of each field.
425     message.addRepeatedInt32   (301);
426     message.addRepeatedInt64   (302);
427     message.addRepeatedUint32  (303);
428     message.addRepeatedUint64  (304);
429     message.addRepeatedSint32  (305);
430     message.addRepeatedSint64  (306);
431     message.addRepeatedFixed32 (307);
432     message.addRepeatedFixed64 (308);
433     message.addRepeatedSfixed32(309);
434     message.addRepeatedSfixed64(310);
435     message.addRepeatedFloat   (311);
436     message.addRepeatedDouble  (312);
437     message.addRepeatedBool    (false);
438     message.addRepeatedString  ("315");
439     message.addRepeatedBytes   (toBytes("316"));
440
441     message.addRepeatedGroup(
442       TestAllTypes.RepeatedGroup.newBuilder().setA(317).build());
443     message.addRepeatedNestedMessage(
444       TestAllTypes.NestedMessage.newBuilder().setBb(318).build());
445     message.addRepeatedForeignMessage(
446       ForeignMessage.newBuilder().setC(319).build());
447     message.addRepeatedImportMessage(
448       ImportMessage.newBuilder().setD(320).build());
449     message.addRepeatedLazyMessage(
450       TestAllTypes.NestedMessage.newBuilder().setBb(327).build());
451
452     message.addRepeatedNestedEnum (TestAllTypes.NestedEnum.BAZ);
453     message.addRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);
454     message.addRepeatedImportEnum (ImportEnum.IMPORT_BAZ);
455
456     message.addRepeatedStringPiece("324");
457     message.addRepeatedCord("325");
458
459     // -----------------------------------------------------------------
460
461     message.setDefaultInt32   (401);
462     message.setDefaultInt64   (402);
463     message.setDefaultUint32  (403);
464     message.setDefaultUint64  (404);
465     message.setDefaultSint32  (405);
466     message.setDefaultSint64  (406);
467     message.setDefaultFixed32 (407);
468     message.setDefaultFixed64 (408);
469     message.setDefaultSfixed32(409);
470     message.setDefaultSfixed64(410);
471     message.setDefaultFloat   (411);
472     message.setDefaultDouble  (412);
473     message.setDefaultBool    (false);
474     message.setDefaultString  ("415");
475     message.setDefaultBytes   (toBytes("416"));
476
477     message.setDefaultNestedEnum (TestAllTypes.NestedEnum.FOO);
478     message.setDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);
479     message.setDefaultImportEnum (ImportEnum.IMPORT_FOO);
480
481     message.setDefaultStringPiece("424");
482     message.setDefaultCord("425");
483
484     message.setOneofUint32(601);
485     message.setOneofNestedMessage(
486       TestAllTypes.NestedMessage.newBuilder().setBb(602).build());
487     message.setOneofString("603");
488     message.setOneofBytes(toBytes("604"));
489   }
490
491   // -------------------------------------------------------------------
492
493   /**
494    * Modify the repeated fields of {@code message} to contain the values
495    * expected by {@code assertRepeatedFieldsModified()}.
496    */
497   public static void modifyRepeatedFields(TestAllTypes.Builder message) {
498     message.setRepeatedInt32   (1, 501);
499     message.setRepeatedInt64   (1, 502);
500     message.setRepeatedUint32  (1, 503);
501     message.setRepeatedUint64  (1, 504);
502     message.setRepeatedSint32  (1, 505);
503     message.setRepeatedSint64  (1, 506);
504     message.setRepeatedFixed32 (1, 507);
505     message.setRepeatedFixed64 (1, 508);
506     message.setRepeatedSfixed32(1, 509);
507     message.setRepeatedSfixed64(1, 510);
508     message.setRepeatedFloat   (1, 511);
509     message.setRepeatedDouble  (1, 512);
510     message.setRepeatedBool    (1, true);
511     message.setRepeatedString  (1, "515");
512     message.setRepeatedBytes   (1, toBytes("516"));
513
514     message.setRepeatedGroup(1,
515       TestAllTypes.RepeatedGroup.newBuilder().setA(517).build());
516     message.setRepeatedNestedMessage(1,
517       TestAllTypes.NestedMessage.newBuilder().setBb(518).build());
518     message.setRepeatedForeignMessage(1,
519       ForeignMessage.newBuilder().setC(519).build());
520     message.setRepeatedImportMessage(1,
521       ImportMessage.newBuilder().setD(520).build());
522     message.setRepeatedLazyMessage(1,
523       TestAllTypes.NestedMessage.newBuilder().setBb(527).build());
524
525     message.setRepeatedNestedEnum (1, TestAllTypes.NestedEnum.FOO);
526     message.setRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO);
527     message.setRepeatedImportEnum (1, ImportEnum.IMPORT_FOO);
528
529     message.setRepeatedStringPiece(1, "524");
530     message.setRepeatedCord(1, "525");
531   }
532
533   // -------------------------------------------------------------------
534
535   /**
536    * Assert (using {@code junit.framework.Assert}} that all fields of
537    * {@code message} are set to the values assigned by {@code setAllFields}.
538    */
539   public static void assertAllFieldsSet(TestAllTypesOrBuilder message) {
540     Assert.assertTrue(message.hasOptionalInt32   ());
541     Assert.assertTrue(message.hasOptionalInt64   ());
542     Assert.assertTrue(message.hasOptionalUint32  ());
543     Assert.assertTrue(message.hasOptionalUint64  ());
544     Assert.assertTrue(message.hasOptionalSint32  ());
545     Assert.assertTrue(message.hasOptionalSint64  ());
546     Assert.assertTrue(message.hasOptionalFixed32 ());
547     Assert.assertTrue(message.hasOptionalFixed64 ());
548     Assert.assertTrue(message.hasOptionalSfixed32());
549     Assert.assertTrue(message.hasOptionalSfixed64());
550     Assert.assertTrue(message.hasOptionalFloat   ());
551     Assert.assertTrue(message.hasOptionalDouble  ());
552     Assert.assertTrue(message.hasOptionalBool    ());
553     Assert.assertTrue(message.hasOptionalString  ());
554     Assert.assertTrue(message.hasOptionalBytes   ());
555
556     Assert.assertTrue(message.hasOptionalGroup         ());
557     Assert.assertTrue(message.hasOptionalNestedMessage ());
558     Assert.assertTrue(message.hasOptionalForeignMessage());
559     Assert.assertTrue(message.hasOptionalImportMessage ());
560
561     Assert.assertTrue(message.getOptionalGroup         ().hasA());
562     Assert.assertTrue(message.getOptionalNestedMessage ().hasBb());
563     Assert.assertTrue(message.getOptionalForeignMessage().hasC());
564     Assert.assertTrue(message.getOptionalImportMessage ().hasD());
565
566     Assert.assertTrue(message.hasOptionalNestedEnum ());
567     Assert.assertTrue(message.hasOptionalForeignEnum());
568     Assert.assertTrue(message.hasOptionalImportEnum ());
569
570     Assert.assertTrue(message.hasOptionalStringPiece());
571     Assert.assertTrue(message.hasOptionalCord());
572
573     Assert.assertEquals(101  , message.getOptionalInt32   ());
574     Assert.assertEquals(102  , message.getOptionalInt64   ());
575     Assert.assertEquals(103  , message.getOptionalUint32  ());
576     Assert.assertEquals(104  , message.getOptionalUint64  ());
577     Assert.assertEquals(105  , message.getOptionalSint32  ());
578     Assert.assertEquals(106  , message.getOptionalSint64  ());
579     Assert.assertEquals(107  , message.getOptionalFixed32 ());
580     Assert.assertEquals(108  , message.getOptionalFixed64 ());
581     Assert.assertEquals(109  , message.getOptionalSfixed32());
582     Assert.assertEquals(110  , message.getOptionalSfixed64());
583     Assert.assertEquals(111  , message.getOptionalFloat   (), 0.0);
584     Assert.assertEquals(112  , message.getOptionalDouble  (), 0.0);
585     Assert.assertEquals(true , message.getOptionalBool    ());
586     Assert.assertEquals("115", message.getOptionalString  ());
587     Assert.assertEquals(toBytes("116"), message.getOptionalBytes());
588
589     Assert.assertEquals(117, message.getOptionalGroup              ().getA());
590     Assert.assertEquals(118, message.getOptionalNestedMessage      ().getBb());
591     Assert.assertEquals(119, message.getOptionalForeignMessage     ().getC());
592     Assert.assertEquals(120, message.getOptionalImportMessage      ().getD());
593     Assert.assertEquals(126, message.getOptionalPublicImportMessage().getE());
594     Assert.assertEquals(127, message.getOptionalLazyMessage        ().getBb());
595
596     Assert.assertEquals(TestAllTypes.NestedEnum.BAZ, message.getOptionalNestedEnum());
597     Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getOptionalForeignEnum());
598     Assert.assertEquals(ImportEnum.IMPORT_BAZ, message.getOptionalImportEnum());
599
600     Assert.assertEquals("124", message.getOptionalStringPiece());
601     Assert.assertEquals("125", message.getOptionalCord());
602
603     // -----------------------------------------------------------------
604
605     Assert.assertEquals(2, message.getRepeatedInt32Count   ());
606     Assert.assertEquals(2, message.getRepeatedInt64Count   ());
607     Assert.assertEquals(2, message.getRepeatedUint32Count  ());
608     Assert.assertEquals(2, message.getRepeatedUint64Count  ());
609     Assert.assertEquals(2, message.getRepeatedSint32Count  ());
610     Assert.assertEquals(2, message.getRepeatedSint64Count  ());
611     Assert.assertEquals(2, message.getRepeatedFixed32Count ());
612     Assert.assertEquals(2, message.getRepeatedFixed64Count ());
613     Assert.assertEquals(2, message.getRepeatedSfixed32Count());
614     Assert.assertEquals(2, message.getRepeatedSfixed64Count());
615     Assert.assertEquals(2, message.getRepeatedFloatCount   ());
616     Assert.assertEquals(2, message.getRepeatedDoubleCount  ());
617     Assert.assertEquals(2, message.getRepeatedBoolCount    ());
618     Assert.assertEquals(2, message.getRepeatedStringCount  ());
619     Assert.assertEquals(2, message.getRepeatedBytesCount   ());
620
621     Assert.assertEquals(2, message.getRepeatedGroupCount         ());
622     Assert.assertEquals(2, message.getRepeatedNestedMessageCount ());
623     Assert.assertEquals(2, message.getRepeatedForeignMessageCount());
624     Assert.assertEquals(2, message.getRepeatedImportMessageCount ());
625     Assert.assertEquals(2, message.getRepeatedLazyMessageCount   ());
626     Assert.assertEquals(2, message.getRepeatedNestedEnumCount    ());
627     Assert.assertEquals(2, message.getRepeatedForeignEnumCount   ());
628     Assert.assertEquals(2, message.getRepeatedImportEnumCount    ());
629
630     Assert.assertEquals(2, message.getRepeatedStringPieceCount());
631     Assert.assertEquals(2, message.getRepeatedCordCount());
632
633     Assert.assertEquals(201  , message.getRepeatedInt32   (0));
634     Assert.assertEquals(202  , message.getRepeatedInt64   (0));
635     Assert.assertEquals(203  , message.getRepeatedUint32  (0));
636     Assert.assertEquals(204  , message.getRepeatedUint64  (0));
637     Assert.assertEquals(205  , message.getRepeatedSint32  (0));
638     Assert.assertEquals(206  , message.getRepeatedSint64  (0));
639     Assert.assertEquals(207  , message.getRepeatedFixed32 (0));
640     Assert.assertEquals(208  , message.getRepeatedFixed64 (0));
641     Assert.assertEquals(209  , message.getRepeatedSfixed32(0));
642     Assert.assertEquals(210  , message.getRepeatedSfixed64(0));
643     Assert.assertEquals(211  , message.getRepeatedFloat   (0), 0.0);
644     Assert.assertEquals(212  , message.getRepeatedDouble  (0), 0.0);
645     Assert.assertEquals(true , message.getRepeatedBool    (0));
646     Assert.assertEquals("215", message.getRepeatedString  (0));
647     Assert.assertEquals(toBytes("216"), message.getRepeatedBytes(0));
648
649     Assert.assertEquals(217, message.getRepeatedGroup         (0).getA());
650     Assert.assertEquals(218, message.getRepeatedNestedMessage (0).getBb());
651     Assert.assertEquals(219, message.getRepeatedForeignMessage(0).getC());
652     Assert.assertEquals(220, message.getRepeatedImportMessage (0).getD());
653     Assert.assertEquals(227, message.getRepeatedLazyMessage   (0).getBb());
654
655     Assert.assertEquals(TestAllTypes.NestedEnum.BAR, message.getRepeatedNestedEnum (0));
656     Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getRepeatedForeignEnum(0));
657     Assert.assertEquals(ImportEnum.IMPORT_BAR, message.getRepeatedImportEnum(0));
658
659     Assert.assertEquals("224", message.getRepeatedStringPiece(0));
660     Assert.assertEquals("225", message.getRepeatedCord(0));
661
662     Assert.assertEquals(301  , message.getRepeatedInt32   (1));
663     Assert.assertEquals(302  , message.getRepeatedInt64   (1));
664     Assert.assertEquals(303  , message.getRepeatedUint32  (1));
665     Assert.assertEquals(304  , message.getRepeatedUint64  (1));
666     Assert.assertEquals(305  , message.getRepeatedSint32  (1));
667     Assert.assertEquals(306  , message.getRepeatedSint64  (1));
668     Assert.assertEquals(307  , message.getRepeatedFixed32 (1));
669     Assert.assertEquals(308  , message.getRepeatedFixed64 (1));
670     Assert.assertEquals(309  , message.getRepeatedSfixed32(1));
671     Assert.assertEquals(310  , message.getRepeatedSfixed64(1));
672     Assert.assertEquals(311  , message.getRepeatedFloat   (1), 0.0);
673     Assert.assertEquals(312  , message.getRepeatedDouble  (1), 0.0);
674     Assert.assertEquals(false, message.getRepeatedBool    (1));
675     Assert.assertEquals("315", message.getRepeatedString  (1));
676     Assert.assertEquals(toBytes("316"), message.getRepeatedBytes(1));
677
678     Assert.assertEquals(317, message.getRepeatedGroup         (1).getA());
679     Assert.assertEquals(318, message.getRepeatedNestedMessage (1).getBb());
680     Assert.assertEquals(319, message.getRepeatedForeignMessage(1).getC());
681     Assert.assertEquals(320, message.getRepeatedImportMessage (1).getD());
682     Assert.assertEquals(327, message.getRepeatedLazyMessage   (1).getBb());
683
684     Assert.assertEquals(TestAllTypes.NestedEnum.BAZ, message.getRepeatedNestedEnum (1));
685     Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getRepeatedForeignEnum(1));
686     Assert.assertEquals(ImportEnum.IMPORT_BAZ, message.getRepeatedImportEnum(1));
687
688     Assert.assertEquals("324", message.getRepeatedStringPiece(1));
689     Assert.assertEquals("325", message.getRepeatedCord(1));
690
691     // -----------------------------------------------------------------
692
693     Assert.assertTrue(message.hasDefaultInt32   ());
694     Assert.assertTrue(message.hasDefaultInt64   ());
695     Assert.assertTrue(message.hasDefaultUint32  ());
696     Assert.assertTrue(message.hasDefaultUint64  ());
697     Assert.assertTrue(message.hasDefaultSint32  ());
698     Assert.assertTrue(message.hasDefaultSint64  ());
699     Assert.assertTrue(message.hasDefaultFixed32 ());
700     Assert.assertTrue(message.hasDefaultFixed64 ());
701     Assert.assertTrue(message.hasDefaultSfixed32());
702     Assert.assertTrue(message.hasDefaultSfixed64());
703     Assert.assertTrue(message.hasDefaultFloat   ());
704     Assert.assertTrue(message.hasDefaultDouble  ());
705     Assert.assertTrue(message.hasDefaultBool    ());
706     Assert.assertTrue(message.hasDefaultString  ());
707     Assert.assertTrue(message.hasDefaultBytes   ());
708
709     Assert.assertTrue(message.hasDefaultNestedEnum ());
710     Assert.assertTrue(message.hasDefaultForeignEnum());
711     Assert.assertTrue(message.hasDefaultImportEnum ());
712
713     Assert.assertTrue(message.hasDefaultStringPiece());
714     Assert.assertTrue(message.hasDefaultCord());
715
716     Assert.assertEquals(401  , message.getDefaultInt32   ());
717     Assert.assertEquals(402  , message.getDefaultInt64   ());
718     Assert.assertEquals(403  , message.getDefaultUint32  ());
719     Assert.assertEquals(404  , message.getDefaultUint64  ());
720     Assert.assertEquals(405  , message.getDefaultSint32  ());
721     Assert.assertEquals(406  , message.getDefaultSint64  ());
722     Assert.assertEquals(407  , message.getDefaultFixed32 ());
723     Assert.assertEquals(408  , message.getDefaultFixed64 ());
724     Assert.assertEquals(409  , message.getDefaultSfixed32());
725     Assert.assertEquals(410  , message.getDefaultSfixed64());
726     Assert.assertEquals(411  , message.getDefaultFloat   (), 0.0);
727     Assert.assertEquals(412  , message.getDefaultDouble  (), 0.0);
728     Assert.assertEquals(false, message.getDefaultBool    ());
729     Assert.assertEquals("415", message.getDefaultString  ());
730     Assert.assertEquals(toBytes("416"), message.getDefaultBytes());
731
732     Assert.assertEquals(TestAllTypes.NestedEnum.FOO, message.getDefaultNestedEnum ());
733     Assert.assertEquals(ForeignEnum.FOREIGN_FOO, message.getDefaultForeignEnum());
734     Assert.assertEquals(ImportEnum.IMPORT_FOO, message.getDefaultImportEnum());
735
736     Assert.assertEquals("424", message.getDefaultStringPiece());
737     Assert.assertEquals("425", message.getDefaultCord());
738
739     Assert.assertFalse(message.hasOneofUint32());
740     Assert.assertFalse(message.hasOneofNestedMessage());
741     Assert.assertFalse(message.hasOneofString());
742     Assert.assertTrue(message.hasOneofBytes());
743
744     Assert.assertEquals(toBytes("604"), message.getOneofBytes());
745   }
746
747   // -------------------------------------------------------------------
748   /**
749    * Assert (using {@code junit.framework.Assert}} that all fields of
750    * {@code message} are cleared, and that getting the fields returns their
751    * default values.
752    */
753   public static void assertClear(TestAllTypesOrBuilder message) {
754     // hasBlah() should initially be false for all optional fields.
755     Assert.assertFalse(message.hasOptionalInt32   ());
756     Assert.assertFalse(message.hasOptionalInt64   ());
757     Assert.assertFalse(message.hasOptionalUint32  ());
758     Assert.assertFalse(message.hasOptionalUint64  ());
759     Assert.assertFalse(message.hasOptionalSint32  ());
760     Assert.assertFalse(message.hasOptionalSint64  ());
761     Assert.assertFalse(message.hasOptionalFixed32 ());
762     Assert.assertFalse(message.hasOptionalFixed64 ());
763     Assert.assertFalse(message.hasOptionalSfixed32());
764     Assert.assertFalse(message.hasOptionalSfixed64());
765     Assert.assertFalse(message.hasOptionalFloat   ());
766     Assert.assertFalse(message.hasOptionalDouble  ());
767     Assert.assertFalse(message.hasOptionalBool    ());
768     Assert.assertFalse(message.hasOptionalString  ());
769     Assert.assertFalse(message.hasOptionalBytes   ());
770
771     Assert.assertFalse(message.hasOptionalGroup         ());
772     Assert.assertFalse(message.hasOptionalNestedMessage ());
773     Assert.assertFalse(message.hasOptionalForeignMessage());
774     Assert.assertFalse(message.hasOptionalImportMessage ());
775
776     Assert.assertFalse(message.hasOptionalNestedEnum ());
777     Assert.assertFalse(message.hasOptionalForeignEnum());
778     Assert.assertFalse(message.hasOptionalImportEnum ());
779
780     Assert.assertFalse(message.hasOptionalStringPiece());
781     Assert.assertFalse(message.hasOptionalCord());
782
783     // Optional fields without defaults are set to zero or something like it.
784     Assert.assertEquals(0    , message.getOptionalInt32   ());
785     Assert.assertEquals(0    , message.getOptionalInt64   ());
786     Assert.assertEquals(0    , message.getOptionalUint32  ());
787     Assert.assertEquals(0    , message.getOptionalUint64  ());
788     Assert.assertEquals(0    , message.getOptionalSint32  ());
789     Assert.assertEquals(0    , message.getOptionalSint64  ());
790     Assert.assertEquals(0    , message.getOptionalFixed32 ());
791     Assert.assertEquals(0    , message.getOptionalFixed64 ());
792     Assert.assertEquals(0    , message.getOptionalSfixed32());
793     Assert.assertEquals(0    , message.getOptionalSfixed64());
794     Assert.assertEquals(0    , message.getOptionalFloat   (), 0.0);
795     Assert.assertEquals(0    , message.getOptionalDouble  (), 0.0);
796     Assert.assertEquals(false, message.getOptionalBool    ());
797     Assert.assertEquals(""   , message.getOptionalString  ());
798     Assert.assertEquals(ByteString.EMPTY, message.getOptionalBytes());
799
800     // Embedded messages should also be clear.
801     Assert.assertFalse(message.getOptionalGroup              ().hasA());
802     Assert.assertFalse(message.getOptionalNestedMessage      ().hasBb());
803     Assert.assertFalse(message.getOptionalForeignMessage     ().hasC());
804     Assert.assertFalse(message.getOptionalImportMessage      ().hasD());
805     Assert.assertFalse(message.getOptionalPublicImportMessage().hasE());
806     Assert.assertFalse(message.getOptionalLazyMessage        ().hasBb());
807
808     Assert.assertEquals(0, message.getOptionalGroup              ().getA());
809     Assert.assertEquals(0, message.getOptionalNestedMessage      ().getBb());
810     Assert.assertEquals(0, message.getOptionalForeignMessage     ().getC());
811     Assert.assertEquals(0, message.getOptionalImportMessage      ().getD());
812     Assert.assertEquals(0, message.getOptionalPublicImportMessage().getE());
813     Assert.assertEquals(0, message.getOptionalLazyMessage        ().getBb());
814
815     // Enums without defaults are set to the first value in the enum.
816     Assert.assertEquals(TestAllTypes.NestedEnum.FOO, message.getOptionalNestedEnum ());
817     Assert.assertEquals(ForeignEnum.FOREIGN_FOO, message.getOptionalForeignEnum());
818     Assert.assertEquals(ImportEnum.IMPORT_FOO, message.getOptionalImportEnum());
819
820     Assert.assertEquals("", message.getOptionalStringPiece());
821     Assert.assertEquals("", message.getOptionalCord());
822
823     // Repeated fields are empty.
824     Assert.assertEquals(0, message.getRepeatedInt32Count   ());
825     Assert.assertEquals(0, message.getRepeatedInt64Count   ());
826     Assert.assertEquals(0, message.getRepeatedUint32Count  ());
827     Assert.assertEquals(0, message.getRepeatedUint64Count  ());
828     Assert.assertEquals(0, message.getRepeatedSint32Count  ());
829     Assert.assertEquals(0, message.getRepeatedSint64Count  ());
830     Assert.assertEquals(0, message.getRepeatedFixed32Count ());
831     Assert.assertEquals(0, message.getRepeatedFixed64Count ());
832     Assert.assertEquals(0, message.getRepeatedSfixed32Count());
833     Assert.assertEquals(0, message.getRepeatedSfixed64Count());
834     Assert.assertEquals(0, message.getRepeatedFloatCount   ());
835     Assert.assertEquals(0, message.getRepeatedDoubleCount  ());
836     Assert.assertEquals(0, message.getRepeatedBoolCount    ());
837     Assert.assertEquals(0, message.getRepeatedStringCount  ());
838     Assert.assertEquals(0, message.getRepeatedBytesCount   ());
839
840     Assert.assertEquals(0, message.getRepeatedGroupCount         ());
841     Assert.assertEquals(0, message.getRepeatedNestedMessageCount ());
842     Assert.assertEquals(0, message.getRepeatedForeignMessageCount());
843     Assert.assertEquals(0, message.getRepeatedImportMessageCount ());
844     Assert.assertEquals(0, message.getRepeatedLazyMessageCount   ());
845     Assert.assertEquals(0, message.getRepeatedNestedEnumCount    ());
846     Assert.assertEquals(0, message.getRepeatedForeignEnumCount   ());
847     Assert.assertEquals(0, message.getRepeatedImportEnumCount    ());
848
849     Assert.assertEquals(0, message.getRepeatedStringPieceCount());
850     Assert.assertEquals(0, message.getRepeatedCordCount());
851
852     // hasBlah() should also be false for all default fields.
853     Assert.assertFalse(message.hasDefaultInt32   ());
854     Assert.assertFalse(message.hasDefaultInt64   ());
855     Assert.assertFalse(message.hasDefaultUint32  ());
856     Assert.assertFalse(message.hasDefaultUint64  ());
857     Assert.assertFalse(message.hasDefaultSint32  ());
858     Assert.assertFalse(message.hasDefaultSint64  ());
859     Assert.assertFalse(message.hasDefaultFixed32 ());
860     Assert.assertFalse(message.hasDefaultFixed64 ());
861     Assert.assertFalse(message.hasDefaultSfixed32());
862     Assert.assertFalse(message.hasDefaultSfixed64());
863     Assert.assertFalse(message.hasDefaultFloat   ());
864     Assert.assertFalse(message.hasDefaultDouble  ());
865     Assert.assertFalse(message.hasDefaultBool    ());
866     Assert.assertFalse(message.hasDefaultString  ());
867     Assert.assertFalse(message.hasDefaultBytes   ());
868
869     Assert.assertFalse(message.hasDefaultNestedEnum ());
870     Assert.assertFalse(message.hasDefaultForeignEnum());
871     Assert.assertFalse(message.hasDefaultImportEnum ());
872
873     Assert.assertFalse(message.hasDefaultStringPiece());
874     Assert.assertFalse(message.hasDefaultCord());
875
876     // Fields with defaults have their default values (duh).
877     Assert.assertEquals( 41    , message.getDefaultInt32   ());
878     Assert.assertEquals( 42    , message.getDefaultInt64   ());
879     Assert.assertEquals( 43    , message.getDefaultUint32  ());
880     Assert.assertEquals( 44    , message.getDefaultUint64  ());
881     Assert.assertEquals(-45    , message.getDefaultSint32  ());
882     Assert.assertEquals( 46    , message.getDefaultSint64  ());
883     Assert.assertEquals( 47    , message.getDefaultFixed32 ());
884     Assert.assertEquals( 48    , message.getDefaultFixed64 ());
885     Assert.assertEquals( 49    , message.getDefaultSfixed32());
886     Assert.assertEquals(-50    , message.getDefaultSfixed64());
887     Assert.assertEquals( 51.5  , message.getDefaultFloat   (), 0.0);
888     Assert.assertEquals( 52e3  , message.getDefaultDouble  (), 0.0);
889     Assert.assertEquals(true   , message.getDefaultBool    ());
890     Assert.assertEquals("hello", message.getDefaultString  ());
891     Assert.assertEquals(toBytes("world"), message.getDefaultBytes());
892
893     Assert.assertEquals(TestAllTypes.NestedEnum.BAR, message.getDefaultNestedEnum ());
894     Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getDefaultForeignEnum());
895     Assert.assertEquals(ImportEnum.IMPORT_BAR, message.getDefaultImportEnum());
896
897     Assert.assertEquals("abc", message.getDefaultStringPiece());
898     Assert.assertEquals("123", message.getDefaultCord());
899
900     Assert.assertFalse(message.hasOneofUint32());
901     Assert.assertFalse(message.hasOneofNestedMessage());
902     Assert.assertFalse(message.hasOneofString());
903     Assert.assertFalse(message.hasOneofBytes());
904   }
905
906   // -------------------------------------------------------------------
907
908   /**
909    * Assert (using {@code junit.framework.Assert}} that all fields of
910    * {@code message} are set to the values assigned by {@code setAllFields}
911    * followed by {@code modifyRepeatedFields}.
912    */
913   public static void assertRepeatedFieldsModified(
914       TestAllTypesOrBuilder message) {
915     // ModifyRepeatedFields only sets the second repeated element of each
916     // field.  In addition to verifying this, we also verify that the first
917     // element and size were *not* modified.
918     Assert.assertEquals(2, message.getRepeatedInt32Count   ());
919     Assert.assertEquals(2, message.getRepeatedInt64Count   ());
920     Assert.assertEquals(2, message.getRepeatedUint32Count  ());
921     Assert.assertEquals(2, message.getRepeatedUint64Count  ());
922     Assert.assertEquals(2, message.getRepeatedSint32Count  ());
923     Assert.assertEquals(2, message.getRepeatedSint64Count  ());
924     Assert.assertEquals(2, message.getRepeatedFixed32Count ());
925     Assert.assertEquals(2, message.getRepeatedFixed64Count ());
926     Assert.assertEquals(2, message.getRepeatedSfixed32Count());
927     Assert.assertEquals(2, message.getRepeatedSfixed64Count());
928     Assert.assertEquals(2, message.getRepeatedFloatCount   ());
929     Assert.assertEquals(2, message.getRepeatedDoubleCount  ());
930     Assert.assertEquals(2, message.getRepeatedBoolCount    ());
931     Assert.assertEquals(2, message.getRepeatedStringCount  ());
932     Assert.assertEquals(2, message.getRepeatedBytesCount   ());
933
934     Assert.assertEquals(2, message.getRepeatedGroupCount         ());
935     Assert.assertEquals(2, message.getRepeatedNestedMessageCount ());
936     Assert.assertEquals(2, message.getRepeatedForeignMessageCount());
937     Assert.assertEquals(2, message.getRepeatedImportMessageCount ());
938     Assert.assertEquals(2, message.getRepeatedLazyMessageCount   ());
939     Assert.assertEquals(2, message.getRepeatedNestedEnumCount    ());
940     Assert.assertEquals(2, message.getRepeatedForeignEnumCount   ());
941     Assert.assertEquals(2, message.getRepeatedImportEnumCount    ());
942
943     Assert.assertEquals(2, message.getRepeatedStringPieceCount());
944     Assert.assertEquals(2, message.getRepeatedCordCount());
945
946     Assert.assertEquals(201  , message.getRepeatedInt32   (0));
947     Assert.assertEquals(202L , message.getRepeatedInt64   (0));
948     Assert.assertEquals(203  , message.getRepeatedUint32  (0));
949     Assert.assertEquals(204L , message.getRepeatedUint64  (0));
950     Assert.assertEquals(205  , message.getRepeatedSint32  (0));
951     Assert.assertEquals(206L , message.getRepeatedSint64  (0));
952     Assert.assertEquals(207  , message.getRepeatedFixed32 (0));
953     Assert.assertEquals(208L , message.getRepeatedFixed64 (0));
954     Assert.assertEquals(209  , message.getRepeatedSfixed32(0));
955     Assert.assertEquals(210L , message.getRepeatedSfixed64(0));
956     Assert.assertEquals(211F , message.getRepeatedFloat   (0));
957     Assert.assertEquals(212D , message.getRepeatedDouble  (0));
958     Assert.assertEquals(true , message.getRepeatedBool    (0));
959     Assert.assertEquals("215", message.getRepeatedString  (0));
960     Assert.assertEquals(toBytes("216"), message.getRepeatedBytes(0));
961
962     Assert.assertEquals(217, message.getRepeatedGroup         (0).getA());
963     Assert.assertEquals(218, message.getRepeatedNestedMessage (0).getBb());
964     Assert.assertEquals(219, message.getRepeatedForeignMessage(0).getC());
965     Assert.assertEquals(220, message.getRepeatedImportMessage (0).getD());
966     Assert.assertEquals(227, message.getRepeatedLazyMessage   (0).getBb());
967
968     Assert.assertEquals(TestAllTypes.NestedEnum.BAR, message.getRepeatedNestedEnum (0));
969     Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getRepeatedForeignEnum(0));
970     Assert.assertEquals(ImportEnum.IMPORT_BAR, message.getRepeatedImportEnum(0));
971
972     Assert.assertEquals("224", message.getRepeatedStringPiece(0));
973     Assert.assertEquals("225", message.getRepeatedCord(0));
974
975     // Actually verify the second (modified) elements now.
976     Assert.assertEquals(501  , message.getRepeatedInt32   (1));
977     Assert.assertEquals(502L , message.getRepeatedInt64   (1));
978     Assert.assertEquals(503  , message.getRepeatedUint32  (1));
979     Assert.assertEquals(504L , message.getRepeatedUint64  (1));
980     Assert.assertEquals(505  , message.getRepeatedSint32  (1));
981     Assert.assertEquals(506L , message.getRepeatedSint64  (1));
982     Assert.assertEquals(507  , message.getRepeatedFixed32 (1));
983     Assert.assertEquals(508L , message.getRepeatedFixed64 (1));
984     Assert.assertEquals(509  , message.getRepeatedSfixed32(1));
985     Assert.assertEquals(510L , message.getRepeatedSfixed64(1));
986     Assert.assertEquals(511F , message.getRepeatedFloat   (1));
987     Assert.assertEquals(512D , message.getRepeatedDouble  (1));
988     Assert.assertEquals(true , message.getRepeatedBool    (1));
989     Assert.assertEquals("515", message.getRepeatedString  (1));
990     Assert.assertEquals(toBytes("516"), message.getRepeatedBytes(1));
991
992     Assert.assertEquals(517, message.getRepeatedGroup         (1).getA());
993     Assert.assertEquals(518, message.getRepeatedNestedMessage (1).getBb());
994     Assert.assertEquals(519, message.getRepeatedForeignMessage(1).getC());
995     Assert.assertEquals(520, message.getRepeatedImportMessage (1).getD());
996     Assert.assertEquals(527, message.getRepeatedLazyMessage   (1).getBb());
997
998     Assert.assertEquals(TestAllTypes.NestedEnum.FOO, message.getRepeatedNestedEnum (1));
999     Assert.assertEquals(ForeignEnum.FOREIGN_FOO, message.getRepeatedForeignEnum(1));
1000     Assert.assertEquals(ImportEnum.IMPORT_FOO, message.getRepeatedImportEnum(1));
1001
1002     Assert.assertEquals("524", message.getRepeatedStringPiece(1));
1003     Assert.assertEquals("525", message.getRepeatedCord(1));
1004   }
1005
1006   /**
1007    * Set every field of {@code message} to a unique value.
1008    */
1009   public static void setPackedFields(TestPackedTypes.Builder message) {
1010     message.addPackedInt32   (601);
1011     message.addPackedInt64   (602);
1012     message.addPackedUint32  (603);
1013     message.addPackedUint64  (604);
1014     message.addPackedSint32  (605);
1015     message.addPackedSint64  (606);
1016     message.addPackedFixed32 (607);
1017     message.addPackedFixed64 (608);
1018     message.addPackedSfixed32(609);
1019     message.addPackedSfixed64(610);
1020     message.addPackedFloat   (611);
1021     message.addPackedDouble  (612);
1022     message.addPackedBool    (true);
1023     message.addPackedEnum    (ForeignEnum.FOREIGN_BAR);
1024     // Add a second one of each field.
1025     message.addPackedInt32   (701);
1026     message.addPackedInt64   (702);
1027     message.addPackedUint32  (703);
1028     message.addPackedUint64  (704);
1029     message.addPackedSint32  (705);
1030     message.addPackedSint64  (706);
1031     message.addPackedFixed32 (707);
1032     message.addPackedFixed64 (708);
1033     message.addPackedSfixed32(709);
1034     message.addPackedSfixed64(710);
1035     message.addPackedFloat   (711);
1036     message.addPackedDouble  (712);
1037     message.addPackedBool    (false);
1038     message.addPackedEnum    (ForeignEnum.FOREIGN_BAZ);
1039   }
1040
1041   /**
1042    * Set every field of {@code message} to a unique value. Must correspond with
1043    * the values applied by {@code setPackedFields}.
1044    */
1045   public static void setUnpackedFields(TestUnpackedTypes.Builder message) {
1046     message.addUnpackedInt32   (601);
1047     message.addUnpackedInt64   (602);
1048     message.addUnpackedUint32  (603);
1049     message.addUnpackedUint64  (604);
1050     message.addUnpackedSint32  (605);
1051     message.addUnpackedSint64  (606);
1052     message.addUnpackedFixed32 (607);
1053     message.addUnpackedFixed64 (608);
1054     message.addUnpackedSfixed32(609);
1055     message.addUnpackedSfixed64(610);
1056     message.addUnpackedFloat   (611);
1057     message.addUnpackedDouble  (612);
1058     message.addUnpackedBool    (true);
1059     message.addUnpackedEnum    (ForeignEnum.FOREIGN_BAR);
1060     // Add a second one of each field.
1061     message.addUnpackedInt32   (701);
1062     message.addUnpackedInt64   (702);
1063     message.addUnpackedUint32  (703);
1064     message.addUnpackedUint64  (704);
1065     message.addUnpackedSint32  (705);
1066     message.addUnpackedSint64  (706);
1067     message.addUnpackedFixed32 (707);
1068     message.addUnpackedFixed64 (708);
1069     message.addUnpackedSfixed32(709);
1070     message.addUnpackedSfixed64(710);
1071     message.addUnpackedFloat   (711);
1072     message.addUnpackedDouble  (712);
1073     message.addUnpackedBool    (false);
1074     message.addUnpackedEnum    (ForeignEnum.FOREIGN_BAZ);
1075   }
1076
1077   /**
1078    * Assert (using {@code junit.framework.Assert}} that all fields of
1079    * {@code message} are set to the values assigned by {@code setPackedFields}.
1080    */
1081   public static void assertPackedFieldsSet(TestPackedTypes message) {
1082     Assert.assertEquals(2, message.getPackedInt32Count   ());
1083     Assert.assertEquals(2, message.getPackedInt64Count   ());
1084     Assert.assertEquals(2, message.getPackedUint32Count  ());
1085     Assert.assertEquals(2, message.getPackedUint64Count  ());
1086     Assert.assertEquals(2, message.getPackedSint32Count  ());
1087     Assert.assertEquals(2, message.getPackedSint64Count  ());
1088     Assert.assertEquals(2, message.getPackedFixed32Count ());
1089     Assert.assertEquals(2, message.getPackedFixed64Count ());
1090     Assert.assertEquals(2, message.getPackedSfixed32Count());
1091     Assert.assertEquals(2, message.getPackedSfixed64Count());
1092     Assert.assertEquals(2, message.getPackedFloatCount   ());
1093     Assert.assertEquals(2, message.getPackedDoubleCount  ());
1094     Assert.assertEquals(2, message.getPackedBoolCount    ());
1095     Assert.assertEquals(2, message.getPackedEnumCount   ());
1096     Assert.assertEquals(601  , message.getPackedInt32   (0));
1097     Assert.assertEquals(602  , message.getPackedInt64   (0));
1098     Assert.assertEquals(603  , message.getPackedUint32  (0));
1099     Assert.assertEquals(604  , message.getPackedUint64  (0));
1100     Assert.assertEquals(605  , message.getPackedSint32  (0));
1101     Assert.assertEquals(606  , message.getPackedSint64  (0));
1102     Assert.assertEquals(607  , message.getPackedFixed32 (0));
1103     Assert.assertEquals(608  , message.getPackedFixed64 (0));
1104     Assert.assertEquals(609  , message.getPackedSfixed32(0));
1105     Assert.assertEquals(610  , message.getPackedSfixed64(0));
1106     Assert.assertEquals(611  , message.getPackedFloat   (0), 0.0);
1107     Assert.assertEquals(612  , message.getPackedDouble  (0), 0.0);
1108     Assert.assertEquals(true , message.getPackedBool    (0));
1109     Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getPackedEnum(0));
1110     Assert.assertEquals(701  , message.getPackedInt32   (1));
1111     Assert.assertEquals(702  , message.getPackedInt64   (1));
1112     Assert.assertEquals(703  , message.getPackedUint32  (1));
1113     Assert.assertEquals(704  , message.getPackedUint64  (1));
1114     Assert.assertEquals(705  , message.getPackedSint32  (1));
1115     Assert.assertEquals(706  , message.getPackedSint64  (1));
1116     Assert.assertEquals(707  , message.getPackedFixed32 (1));
1117     Assert.assertEquals(708  , message.getPackedFixed64 (1));
1118     Assert.assertEquals(709  , message.getPackedSfixed32(1));
1119     Assert.assertEquals(710  , message.getPackedSfixed64(1));
1120     Assert.assertEquals(711  , message.getPackedFloat   (1), 0.0);
1121     Assert.assertEquals(712  , message.getPackedDouble  (1), 0.0);
1122     Assert.assertEquals(false, message.getPackedBool    (1));
1123     Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getPackedEnum(1));
1124   }
1125
1126   /**
1127    * Assert (using {@code junit.framework.Assert}} that all fields of
1128    * {@code message} are set to the values assigned by {@code setUnpackedFields}.
1129    */
1130   public static void assertUnpackedFieldsSet(TestUnpackedTypes message) {
1131     Assert.assertEquals(2, message.getUnpackedInt32Count   ());
1132     Assert.assertEquals(2, message.getUnpackedInt64Count   ());
1133     Assert.assertEquals(2, message.getUnpackedUint32Count  ());
1134     Assert.assertEquals(2, message.getUnpackedUint64Count  ());
1135     Assert.assertEquals(2, message.getUnpackedSint32Count  ());
1136     Assert.assertEquals(2, message.getUnpackedSint64Count  ());
1137     Assert.assertEquals(2, message.getUnpackedFixed32Count ());
1138     Assert.assertEquals(2, message.getUnpackedFixed64Count ());
1139     Assert.assertEquals(2, message.getUnpackedSfixed32Count());
1140     Assert.assertEquals(2, message.getUnpackedSfixed64Count());
1141     Assert.assertEquals(2, message.getUnpackedFloatCount   ());
1142     Assert.assertEquals(2, message.getUnpackedDoubleCount  ());
1143     Assert.assertEquals(2, message.getUnpackedBoolCount    ());
1144     Assert.assertEquals(2, message.getUnpackedEnumCount   ());
1145     Assert.assertEquals(601  , message.getUnpackedInt32   (0));
1146     Assert.assertEquals(602  , message.getUnpackedInt64   (0));
1147     Assert.assertEquals(603  , message.getUnpackedUint32  (0));
1148     Assert.assertEquals(604  , message.getUnpackedUint64  (0));
1149     Assert.assertEquals(605  , message.getUnpackedSint32  (0));
1150     Assert.assertEquals(606  , message.getUnpackedSint64  (0));
1151     Assert.assertEquals(607  , message.getUnpackedFixed32 (0));
1152     Assert.assertEquals(608  , message.getUnpackedFixed64 (0));
1153     Assert.assertEquals(609  , message.getUnpackedSfixed32(0));
1154     Assert.assertEquals(610  , message.getUnpackedSfixed64(0));
1155     Assert.assertEquals(611  , message.getUnpackedFloat   (0), 0.0);
1156     Assert.assertEquals(612  , message.getUnpackedDouble  (0), 0.0);
1157     Assert.assertEquals(true , message.getUnpackedBool    (0));
1158     Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getUnpackedEnum(0));
1159     Assert.assertEquals(701  , message.getUnpackedInt32   (1));
1160     Assert.assertEquals(702  , message.getUnpackedInt64   (1));
1161     Assert.assertEquals(703  , message.getUnpackedUint32  (1));
1162     Assert.assertEquals(704  , message.getUnpackedUint64  (1));
1163     Assert.assertEquals(705  , message.getUnpackedSint32  (1));
1164     Assert.assertEquals(706  , message.getUnpackedSint64  (1));
1165     Assert.assertEquals(707  , message.getUnpackedFixed32 (1));
1166     Assert.assertEquals(708  , message.getUnpackedFixed64 (1));
1167     Assert.assertEquals(709  , message.getUnpackedSfixed32(1));
1168     Assert.assertEquals(710  , message.getUnpackedSfixed64(1));
1169     Assert.assertEquals(711  , message.getUnpackedFloat   (1), 0.0);
1170     Assert.assertEquals(712  , message.getUnpackedDouble  (1), 0.0);
1171     Assert.assertEquals(false, message.getUnpackedBool    (1));
1172     Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getUnpackedEnum(1));
1173   }
1174
1175   // ===================================================================
1176   // Like above, but for extensions
1177
1178   // Java gets confused with things like assertEquals(int, Integer):  it can't
1179   // decide whether to call assertEquals(int, int) or assertEquals(Object,
1180   // Object).  So we define these methods to help it.
1181   private static void assertEqualsExactType(int a, int b) {
1182     Assert.assertEquals(a, b);
1183   }
1184   private static void assertEqualsExactType(long a, long b) {
1185     Assert.assertEquals(a, b);
1186   }
1187   private static void assertEqualsExactType(float a, float b) {
1188     Assert.assertEquals(a, b, 0.0);
1189   }
1190   private static void assertEqualsExactType(double a, double b) {
1191     Assert.assertEquals(a, b, 0.0);
1192   }
1193   private static void assertEqualsExactType(boolean a, boolean b) {
1194     Assert.assertEquals(a, b);
1195   }
1196   private static void assertEqualsExactType(String a, String b) {
1197     Assert.assertEquals(a, b);
1198   }
1199   private static void assertEqualsExactType(ByteString a, ByteString b) {
1200     Assert.assertEquals(a, b);
1201   }
1202   private static void assertEqualsExactType(TestAllTypes.NestedEnum a,
1203                                             TestAllTypes.NestedEnum b) {
1204     Assert.assertEquals(a, b);
1205   }
1206   private static void assertEqualsExactType(ForeignEnum a, ForeignEnum b) {
1207     Assert.assertEquals(a, b);
1208   }
1209   private static void assertEqualsExactType(ImportEnum a, ImportEnum b) {
1210     Assert.assertEquals(a, b);
1211   }
1212   private static void assertEqualsExactType(TestAllTypesLite.NestedEnum a,
1213                                             TestAllTypesLite.NestedEnum b) {
1214     Assert.assertEquals(a, b);
1215   }
1216   private static void assertEqualsExactType(ForeignEnumLite a,
1217                                             ForeignEnumLite b) {
1218     Assert.assertEquals(a, b);
1219   }
1220   private static void assertEqualsExactType(ImportEnumLite a,
1221                                             ImportEnumLite b) {
1222     Assert.assertEquals(a, b);
1223   }
1224
1225   /**
1226    * Get an unmodifiable {@link ExtensionRegistry} containing all the
1227    * extensions of {@code TestAllExtensions}.
1228    */
1229   public static ExtensionRegistry getExtensionRegistry() {
1230     ExtensionRegistry registry = ExtensionRegistry.newInstance();
1231     registerAllExtensions(registry);
1232     return registry.getUnmodifiable();
1233   }
1234
1235   public static ExtensionRegistryLite getExtensionRegistryLite() {
1236     ExtensionRegistryLite registry = ExtensionRegistryLite.newInstance();
1237     registerAllExtensionsLite(registry);
1238     return registry.getUnmodifiable();
1239   }
1240
1241   /**
1242    * Register all of {@code TestAllExtensions}'s extensions with the
1243    * given {@link ExtensionRegistry}.
1244    */
1245   public static void registerAllExtensions(ExtensionRegistry registry) {
1246     UnittestProto.registerAllExtensions(registry);
1247     registerAllExtensionsLite(registry);
1248   }
1249
1250   public static void registerAllExtensionsLite(ExtensionRegistryLite registry) {
1251     UnittestLite.registerAllExtensions(registry);
1252   }
1253
1254   /**
1255    * Set every field of {@code message} to the values expected by
1256    * {@code assertAllExtensionsSet()}.
1257    */
1258   public static void setAllExtensions(TestAllExtensions.Builder message) {
1259     message.setExtension(optionalInt32Extension   , 101);
1260     message.setExtension(optionalInt64Extension   , 102L);
1261     message.setExtension(optionalUint32Extension  , 103);
1262     message.setExtension(optionalUint64Extension  , 104L);
1263     message.setExtension(optionalSint32Extension  , 105);
1264     message.setExtension(optionalSint64Extension  , 106L);
1265     message.setExtension(optionalFixed32Extension , 107);
1266     message.setExtension(optionalFixed64Extension , 108L);
1267     message.setExtension(optionalSfixed32Extension, 109);
1268     message.setExtension(optionalSfixed64Extension, 110L);
1269     message.setExtension(optionalFloatExtension   , 111F);
1270     message.setExtension(optionalDoubleExtension  , 112D);
1271     message.setExtension(optionalBoolExtension    , true);
1272     message.setExtension(optionalStringExtension  , "115");
1273     message.setExtension(optionalBytesExtension   , toBytes("116"));
1274
1275     message.setExtension(optionalGroupExtension,
1276       OptionalGroup_extension.newBuilder().setA(117).build());
1277     message.setExtension(optionalNestedMessageExtension,
1278       TestAllTypes.NestedMessage.newBuilder().setBb(118).build());
1279     message.setExtension(optionalForeignMessageExtension,
1280       ForeignMessage.newBuilder().setC(119).build());
1281     message.setExtension(optionalImportMessageExtension,
1282       ImportMessage.newBuilder().setD(120).build());
1283     message.setExtension(optionalPublicImportMessageExtension,
1284       PublicImportMessage.newBuilder().setE(126).build());
1285     message.setExtension(optionalLazyMessageExtension,
1286       TestAllTypes.NestedMessage.newBuilder().setBb(127).build());
1287
1288     message.setExtension(optionalNestedEnumExtension, TestAllTypes.NestedEnum.BAZ);
1289     message.setExtension(optionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
1290     message.setExtension(optionalImportEnumExtension, ImportEnum.IMPORT_BAZ);
1291
1292     message.setExtension(optionalStringPieceExtension, "124");
1293     message.setExtension(optionalCordExtension, "125");
1294
1295     // -----------------------------------------------------------------
1296
1297     message.addExtension(repeatedInt32Extension   , 201);
1298     message.addExtension(repeatedInt64Extension   , 202L);
1299     message.addExtension(repeatedUint32Extension  , 203);
1300     message.addExtension(repeatedUint64Extension  , 204L);
1301     message.addExtension(repeatedSint32Extension  , 205);
1302     message.addExtension(repeatedSint64Extension  , 206L);
1303     message.addExtension(repeatedFixed32Extension , 207);
1304     message.addExtension(repeatedFixed64Extension , 208L);
1305     message.addExtension(repeatedSfixed32Extension, 209);
1306     message.addExtension(repeatedSfixed64Extension, 210L);
1307     message.addExtension(repeatedFloatExtension   , 211F);
1308     message.addExtension(repeatedDoubleExtension  , 212D);
1309     message.addExtension(repeatedBoolExtension    , true);
1310     message.addExtension(repeatedStringExtension  , "215");
1311     message.addExtension(repeatedBytesExtension   , toBytes("216"));
1312
1313     message.addExtension(repeatedGroupExtension,
1314       RepeatedGroup_extension.newBuilder().setA(217).build());
1315     message.addExtension(repeatedNestedMessageExtension,
1316       TestAllTypes.NestedMessage.newBuilder().setBb(218).build());
1317     message.addExtension(repeatedForeignMessageExtension,
1318       ForeignMessage.newBuilder().setC(219).build());
1319     message.addExtension(repeatedImportMessageExtension,
1320       ImportMessage.newBuilder().setD(220).build());
1321     message.addExtension(repeatedLazyMessageExtension,
1322       TestAllTypes.NestedMessage.newBuilder().setBb(227).build());
1323
1324     message.addExtension(repeatedNestedEnumExtension, TestAllTypes.NestedEnum.BAR);
1325     message.addExtension(repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);
1326     message.addExtension(repeatedImportEnumExtension, ImportEnum.IMPORT_BAR);
1327
1328     message.addExtension(repeatedStringPieceExtension, "224");
1329     message.addExtension(repeatedCordExtension, "225");
1330
1331     // Add a second one of each field.
1332     message.addExtension(repeatedInt32Extension   , 301);
1333     message.addExtension(repeatedInt64Extension   , 302L);
1334     message.addExtension(repeatedUint32Extension  , 303);
1335     message.addExtension(repeatedUint64Extension  , 304L);
1336     message.addExtension(repeatedSint32Extension  , 305);
1337     message.addExtension(repeatedSint64Extension  , 306L);
1338     message.addExtension(repeatedFixed32Extension , 307);
1339     message.addExtension(repeatedFixed64Extension , 308L);
1340     message.addExtension(repeatedSfixed32Extension, 309);
1341     message.addExtension(repeatedSfixed64Extension, 310L);
1342     message.addExtension(repeatedFloatExtension   , 311F);
1343     message.addExtension(repeatedDoubleExtension  , 312D);
1344     message.addExtension(repeatedBoolExtension    , false);
1345     message.addExtension(repeatedStringExtension  , "315");
1346     message.addExtension(repeatedBytesExtension   , toBytes("316"));
1347
1348     message.addExtension(repeatedGroupExtension,
1349       RepeatedGroup_extension.newBuilder().setA(317).build());
1350     message.addExtension(repeatedNestedMessageExtension,
1351       TestAllTypes.NestedMessage.newBuilder().setBb(318).build());
1352     message.addExtension(repeatedForeignMessageExtension,
1353       ForeignMessage.newBuilder().setC(319).build());
1354     message.addExtension(repeatedImportMessageExtension,
1355       ImportMessage.newBuilder().setD(320).build());
1356     message.addExtension(repeatedLazyMessageExtension,
1357       TestAllTypes.NestedMessage.newBuilder().setBb(327).build());
1358
1359     message.addExtension(repeatedNestedEnumExtension, TestAllTypes.NestedEnum.BAZ);
1360     message.addExtension(repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
1361     message.addExtension(repeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);
1362
1363     message.addExtension(repeatedStringPieceExtension, "324");
1364     message.addExtension(repeatedCordExtension, "325");
1365
1366     // -----------------------------------------------------------------
1367
1368     message.setExtension(defaultInt32Extension   , 401);
1369     message.setExtension(defaultInt64Extension   , 402L);
1370     message.setExtension(defaultUint32Extension  , 403);
1371     message.setExtension(defaultUint64Extension  , 404L);
1372     message.setExtension(defaultSint32Extension  , 405);
1373     message.setExtension(defaultSint64Extension  , 406L);
1374     message.setExtension(defaultFixed32Extension , 407);
1375     message.setExtension(defaultFixed64Extension , 408L);
1376     message.setExtension(defaultSfixed32Extension, 409);
1377     message.setExtension(defaultSfixed64Extension, 410L);
1378     message.setExtension(defaultFloatExtension   , 411F);
1379     message.setExtension(defaultDoubleExtension  , 412D);
1380     message.setExtension(defaultBoolExtension    , false);
1381     message.setExtension(defaultStringExtension  , "415");
1382     message.setExtension(defaultBytesExtension   , toBytes("416"));
1383
1384     message.setExtension(defaultNestedEnumExtension, TestAllTypes.NestedEnum.FOO);
1385     message.setExtension(defaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);
1386     message.setExtension(defaultImportEnumExtension, ImportEnum.IMPORT_FOO);
1387
1388     message.setExtension(defaultStringPieceExtension, "424");
1389     message.setExtension(defaultCordExtension, "425");
1390
1391     message.setExtension(oneofUint32Extension, 601);
1392     message.setExtension(oneofNestedMessageExtension,
1393       TestAllTypes.NestedMessage.newBuilder().setBb(602).build());
1394     message.setExtension(oneofStringExtension, "603");
1395     message.setExtension(oneofBytesExtension, toBytes("604"));
1396   }
1397
1398   // -------------------------------------------------------------------
1399
1400   /**
1401    * Modify the repeated extensions of {@code message} to contain the values
1402    * expected by {@code assertRepeatedExtensionsModified()}.
1403    */
1404   public static void modifyRepeatedExtensions(
1405       TestAllExtensions.Builder message) {
1406     message.setExtension(repeatedInt32Extension   , 1, 501);
1407     message.setExtension(repeatedInt64Extension   , 1, 502L);
1408     message.setExtension(repeatedUint32Extension  , 1, 503);
1409     message.setExtension(repeatedUint64Extension  , 1, 504L);
1410     message.setExtension(repeatedSint32Extension  , 1, 505);
1411     message.setExtension(repeatedSint64Extension  , 1, 506L);
1412     message.setExtension(repeatedFixed32Extension , 1, 507);
1413     message.setExtension(repeatedFixed64Extension , 1, 508L);
1414     message.setExtension(repeatedSfixed32Extension, 1, 509);
1415     message.setExtension(repeatedSfixed64Extension, 1, 510L);
1416     message.setExtension(repeatedFloatExtension   , 1, 511F);
1417     message.setExtension(repeatedDoubleExtension  , 1, 512D);
1418     message.setExtension(repeatedBoolExtension    , 1, true);
1419     message.setExtension(repeatedStringExtension  , 1, "515");
1420     message.setExtension(repeatedBytesExtension   , 1, toBytes("516"));
1421
1422     message.setExtension(repeatedGroupExtension, 1,
1423       RepeatedGroup_extension.newBuilder().setA(517).build());
1424     message.setExtension(repeatedNestedMessageExtension, 1,
1425       TestAllTypes.NestedMessage.newBuilder().setBb(518).build());
1426     message.setExtension(repeatedForeignMessageExtension, 1,
1427       ForeignMessage.newBuilder().setC(519).build());
1428     message.setExtension(repeatedImportMessageExtension, 1,
1429       ImportMessage.newBuilder().setD(520).build());
1430     message.setExtension(repeatedLazyMessageExtension, 1,
1431       TestAllTypes.NestedMessage.newBuilder().setBb(527).build());
1432
1433     message.setExtension(repeatedNestedEnumExtension , 1, TestAllTypes.NestedEnum.FOO);
1434     message.setExtension(repeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO);
1435     message.setExtension(repeatedImportEnumExtension , 1, ImportEnum.IMPORT_FOO);
1436
1437     message.setExtension(repeatedStringPieceExtension, 1, "524");
1438     message.setExtension(repeatedCordExtension, 1, "525");
1439   }
1440
1441   // -------------------------------------------------------------------
1442
1443   /**
1444    * Assert (using {@code junit.framework.Assert}} that all extensions of
1445    * {@code message} are set to the values assigned by {@code setAllExtensions}.
1446    */
1447   public static void assertAllExtensionsSet(
1448       TestAllExtensionsOrBuilder message) {
1449     Assert.assertTrue(message.hasExtension(optionalInt32Extension   ));
1450     Assert.assertTrue(message.hasExtension(optionalInt64Extension   ));
1451     Assert.assertTrue(message.hasExtension(optionalUint32Extension  ));
1452     Assert.assertTrue(message.hasExtension(optionalUint64Extension  ));
1453     Assert.assertTrue(message.hasExtension(optionalSint32Extension  ));
1454     Assert.assertTrue(message.hasExtension(optionalSint64Extension  ));
1455     Assert.assertTrue(message.hasExtension(optionalFixed32Extension ));
1456     Assert.assertTrue(message.hasExtension(optionalFixed64Extension ));
1457     Assert.assertTrue(message.hasExtension(optionalSfixed32Extension));
1458     Assert.assertTrue(message.hasExtension(optionalSfixed64Extension));
1459     Assert.assertTrue(message.hasExtension(optionalFloatExtension   ));
1460     Assert.assertTrue(message.hasExtension(optionalDoubleExtension  ));
1461     Assert.assertTrue(message.hasExtension(optionalBoolExtension    ));
1462     Assert.assertTrue(message.hasExtension(optionalStringExtension  ));
1463     Assert.assertTrue(message.hasExtension(optionalBytesExtension   ));
1464
1465     Assert.assertTrue(message.hasExtension(optionalGroupExtension         ));
1466     Assert.assertTrue(message.hasExtension(optionalNestedMessageExtension ));
1467     Assert.assertTrue(message.hasExtension(optionalForeignMessageExtension));
1468     Assert.assertTrue(message.hasExtension(optionalImportMessageExtension ));
1469
1470     Assert.assertTrue(message.getExtension(optionalGroupExtension         ).hasA());
1471     Assert.assertTrue(message.getExtension(optionalNestedMessageExtension ).hasBb());
1472     Assert.assertTrue(message.getExtension(optionalForeignMessageExtension).hasC());
1473     Assert.assertTrue(message.getExtension(optionalImportMessageExtension ).hasD());
1474
1475     Assert.assertTrue(message.hasExtension(optionalNestedEnumExtension ));
1476     Assert.assertTrue(message.hasExtension(optionalForeignEnumExtension));
1477     Assert.assertTrue(message.hasExtension(optionalImportEnumExtension ));
1478
1479     Assert.assertTrue(message.hasExtension(optionalStringPieceExtension));
1480     Assert.assertTrue(message.hasExtension(optionalCordExtension));
1481
1482     assertEqualsExactType(101  , message.getExtension(optionalInt32Extension   ));
1483     assertEqualsExactType(102L , message.getExtension(optionalInt64Extension   ));
1484     assertEqualsExactType(103  , message.getExtension(optionalUint32Extension  ));
1485     assertEqualsExactType(104L , message.getExtension(optionalUint64Extension  ));
1486     assertEqualsExactType(105  , message.getExtension(optionalSint32Extension  ));
1487     assertEqualsExactType(106L , message.getExtension(optionalSint64Extension  ));
1488     assertEqualsExactType(107  , message.getExtension(optionalFixed32Extension ));
1489     assertEqualsExactType(108L , message.getExtension(optionalFixed64Extension ));
1490     assertEqualsExactType(109  , message.getExtension(optionalSfixed32Extension));
1491     assertEqualsExactType(110L , message.getExtension(optionalSfixed64Extension));
1492     assertEqualsExactType(111F , message.getExtension(optionalFloatExtension   ));
1493     assertEqualsExactType(112D , message.getExtension(optionalDoubleExtension  ));
1494     assertEqualsExactType(true , message.getExtension(optionalBoolExtension    ));
1495     assertEqualsExactType("115", message.getExtension(optionalStringExtension  ));
1496     assertEqualsExactType(toBytes("116"), message.getExtension(optionalBytesExtension));
1497
1498     assertEqualsExactType(117, message.getExtension(optionalGroupExtension              ).getA());
1499     assertEqualsExactType(118, message.getExtension(optionalNestedMessageExtension      ).getBb());
1500     assertEqualsExactType(119, message.getExtension(optionalForeignMessageExtension     ).getC());
1501     assertEqualsExactType(120, message.getExtension(optionalImportMessageExtension      ).getD());
1502     assertEqualsExactType(126, message.getExtension(optionalPublicImportMessageExtension).getE());
1503     assertEqualsExactType(127, message.getExtension(optionalLazyMessageExtension        ).getBb());
1504
1505     assertEqualsExactType(TestAllTypes.NestedEnum.BAZ,
1506       message.getExtension(optionalNestedEnumExtension));
1507     assertEqualsExactType(ForeignEnum.FOREIGN_BAZ,
1508       message.getExtension(optionalForeignEnumExtension));
1509     assertEqualsExactType(ImportEnum.IMPORT_BAZ,
1510       message.getExtension(optionalImportEnumExtension));
1511
1512     assertEqualsExactType("124", message.getExtension(optionalStringPieceExtension));
1513     assertEqualsExactType("125", message.getExtension(optionalCordExtension));
1514
1515     // -----------------------------------------------------------------
1516
1517     Assert.assertEquals(2, message.getExtensionCount(repeatedInt32Extension   ));
1518     Assert.assertEquals(2, message.getExtensionCount(repeatedInt64Extension   ));
1519     Assert.assertEquals(2, message.getExtensionCount(repeatedUint32Extension  ));
1520     Assert.assertEquals(2, message.getExtensionCount(repeatedUint64Extension  ));
1521     Assert.assertEquals(2, message.getExtensionCount(repeatedSint32Extension  ));
1522     Assert.assertEquals(2, message.getExtensionCount(repeatedSint64Extension  ));
1523     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed32Extension ));
1524     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed64Extension ));
1525     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed32Extension));
1526     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed64Extension));
1527     Assert.assertEquals(2, message.getExtensionCount(repeatedFloatExtension   ));
1528     Assert.assertEquals(2, message.getExtensionCount(repeatedDoubleExtension  ));
1529     Assert.assertEquals(2, message.getExtensionCount(repeatedBoolExtension    ));
1530     Assert.assertEquals(2, message.getExtensionCount(repeatedStringExtension  ));
1531     Assert.assertEquals(2, message.getExtensionCount(repeatedBytesExtension   ));
1532
1533     Assert.assertEquals(2, message.getExtensionCount(repeatedGroupExtension         ));
1534     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtension ));
1535     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtension));
1536     Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtension ));
1537     Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtension   ));
1538     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtension    ));
1539     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtension   ));
1540     Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtension    ));
1541
1542     Assert.assertEquals(2, message.getExtensionCount(repeatedStringPieceExtension));
1543     Assert.assertEquals(2, message.getExtensionCount(repeatedCordExtension));
1544
1545     assertEqualsExactType(201  , message.getExtension(repeatedInt32Extension   , 0));
1546     assertEqualsExactType(202L , message.getExtension(repeatedInt64Extension   , 0));
1547     assertEqualsExactType(203  , message.getExtension(repeatedUint32Extension  , 0));
1548     assertEqualsExactType(204L , message.getExtension(repeatedUint64Extension  , 0));
1549     assertEqualsExactType(205  , message.getExtension(repeatedSint32Extension  , 0));
1550     assertEqualsExactType(206L , message.getExtension(repeatedSint64Extension  , 0));
1551     assertEqualsExactType(207  , message.getExtension(repeatedFixed32Extension , 0));
1552     assertEqualsExactType(208L , message.getExtension(repeatedFixed64Extension , 0));
1553     assertEqualsExactType(209  , message.getExtension(repeatedSfixed32Extension, 0));
1554     assertEqualsExactType(210L , message.getExtension(repeatedSfixed64Extension, 0));
1555     assertEqualsExactType(211F , message.getExtension(repeatedFloatExtension   , 0));
1556     assertEqualsExactType(212D , message.getExtension(repeatedDoubleExtension  , 0));
1557     assertEqualsExactType(true , message.getExtension(repeatedBoolExtension    , 0));
1558     assertEqualsExactType("215", message.getExtension(repeatedStringExtension  , 0));
1559     assertEqualsExactType(toBytes("216"), message.getExtension(repeatedBytesExtension, 0));
1560
1561     assertEqualsExactType(217, message.getExtension(repeatedGroupExtension         , 0).getA());
1562     assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtension , 0).getBb());
1563     assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtension, 0).getC());
1564     assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtension , 0).getD());
1565     assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtension   , 0).getBb());
1566
1567     assertEqualsExactType(TestAllTypes.NestedEnum.BAR,
1568       message.getExtension(repeatedNestedEnumExtension, 0));
1569     assertEqualsExactType(ForeignEnum.FOREIGN_BAR,
1570       message.getExtension(repeatedForeignEnumExtension, 0));
1571     assertEqualsExactType(ImportEnum.IMPORT_BAR,
1572       message.getExtension(repeatedImportEnumExtension, 0));
1573
1574     assertEqualsExactType("224", message.getExtension(repeatedStringPieceExtension, 0));
1575     assertEqualsExactType("225", message.getExtension(repeatedCordExtension, 0));
1576
1577     assertEqualsExactType(301  , message.getExtension(repeatedInt32Extension   , 1));
1578     assertEqualsExactType(302L , message.getExtension(repeatedInt64Extension   , 1));
1579     assertEqualsExactType(303  , message.getExtension(repeatedUint32Extension  , 1));
1580     assertEqualsExactType(304L , message.getExtension(repeatedUint64Extension  , 1));
1581     assertEqualsExactType(305  , message.getExtension(repeatedSint32Extension  , 1));
1582     assertEqualsExactType(306L , message.getExtension(repeatedSint64Extension  , 1));
1583     assertEqualsExactType(307  , message.getExtension(repeatedFixed32Extension , 1));
1584     assertEqualsExactType(308L , message.getExtension(repeatedFixed64Extension , 1));
1585     assertEqualsExactType(309  , message.getExtension(repeatedSfixed32Extension, 1));
1586     assertEqualsExactType(310L , message.getExtension(repeatedSfixed64Extension, 1));
1587     assertEqualsExactType(311F , message.getExtension(repeatedFloatExtension   , 1));
1588     assertEqualsExactType(312D , message.getExtension(repeatedDoubleExtension  , 1));
1589     assertEqualsExactType(false, message.getExtension(repeatedBoolExtension    , 1));
1590     assertEqualsExactType("315", message.getExtension(repeatedStringExtension  , 1));
1591     assertEqualsExactType(toBytes("316"), message.getExtension(repeatedBytesExtension, 1));
1592
1593     assertEqualsExactType(317, message.getExtension(repeatedGroupExtension         , 1).getA());
1594     assertEqualsExactType(318, message.getExtension(repeatedNestedMessageExtension , 1).getBb());
1595     assertEqualsExactType(319, message.getExtension(repeatedForeignMessageExtension, 1).getC());
1596     assertEqualsExactType(320, message.getExtension(repeatedImportMessageExtension , 1).getD());
1597     assertEqualsExactType(327, message.getExtension(repeatedLazyMessageExtension   , 1).getBb());
1598
1599     assertEqualsExactType(TestAllTypes.NestedEnum.BAZ,
1600       message.getExtension(repeatedNestedEnumExtension, 1));
1601     assertEqualsExactType(ForeignEnum.FOREIGN_BAZ,
1602       message.getExtension(repeatedForeignEnumExtension, 1));
1603     assertEqualsExactType(ImportEnum.IMPORT_BAZ,
1604       message.getExtension(repeatedImportEnumExtension, 1));
1605
1606     assertEqualsExactType("324", message.getExtension(repeatedStringPieceExtension, 1));
1607     assertEqualsExactType("325", message.getExtension(repeatedCordExtension, 1));
1608
1609     // -----------------------------------------------------------------
1610
1611     Assert.assertTrue(message.hasExtension(defaultInt32Extension   ));
1612     Assert.assertTrue(message.hasExtension(defaultInt64Extension   ));
1613     Assert.assertTrue(message.hasExtension(defaultUint32Extension  ));
1614     Assert.assertTrue(message.hasExtension(defaultUint64Extension  ));
1615     Assert.assertTrue(message.hasExtension(defaultSint32Extension  ));
1616     Assert.assertTrue(message.hasExtension(defaultSint64Extension  ));
1617     Assert.assertTrue(message.hasExtension(defaultFixed32Extension ));
1618     Assert.assertTrue(message.hasExtension(defaultFixed64Extension ));
1619     Assert.assertTrue(message.hasExtension(defaultSfixed32Extension));
1620     Assert.assertTrue(message.hasExtension(defaultSfixed64Extension));
1621     Assert.assertTrue(message.hasExtension(defaultFloatExtension   ));
1622     Assert.assertTrue(message.hasExtension(defaultDoubleExtension  ));
1623     Assert.assertTrue(message.hasExtension(defaultBoolExtension    ));
1624     Assert.assertTrue(message.hasExtension(defaultStringExtension  ));
1625     Assert.assertTrue(message.hasExtension(defaultBytesExtension   ));
1626
1627     Assert.assertTrue(message.hasExtension(defaultNestedEnumExtension ));
1628     Assert.assertTrue(message.hasExtension(defaultForeignEnumExtension));
1629     Assert.assertTrue(message.hasExtension(defaultImportEnumExtension ));
1630
1631     Assert.assertTrue(message.hasExtension(defaultStringPieceExtension));
1632     Assert.assertTrue(message.hasExtension(defaultCordExtension));
1633
1634     assertEqualsExactType(401  , message.getExtension(defaultInt32Extension   ));
1635     assertEqualsExactType(402L , message.getExtension(defaultInt64Extension   ));
1636     assertEqualsExactType(403  , message.getExtension(defaultUint32Extension  ));
1637     assertEqualsExactType(404L , message.getExtension(defaultUint64Extension  ));
1638     assertEqualsExactType(405  , message.getExtension(defaultSint32Extension  ));
1639     assertEqualsExactType(406L , message.getExtension(defaultSint64Extension  ));
1640     assertEqualsExactType(407  , message.getExtension(defaultFixed32Extension ));
1641     assertEqualsExactType(408L , message.getExtension(defaultFixed64Extension ));
1642     assertEqualsExactType(409  , message.getExtension(defaultSfixed32Extension));
1643     assertEqualsExactType(410L , message.getExtension(defaultSfixed64Extension));
1644     assertEqualsExactType(411F , message.getExtension(defaultFloatExtension   ));
1645     assertEqualsExactType(412D , message.getExtension(defaultDoubleExtension  ));
1646     assertEqualsExactType(false, message.getExtension(defaultBoolExtension    ));
1647     assertEqualsExactType("415", message.getExtension(defaultStringExtension  ));
1648     assertEqualsExactType(toBytes("416"), message.getExtension(defaultBytesExtension));
1649
1650     assertEqualsExactType(TestAllTypes.NestedEnum.FOO,
1651       message.getExtension(defaultNestedEnumExtension ));
1652     assertEqualsExactType(ForeignEnum.FOREIGN_FOO,
1653       message.getExtension(defaultForeignEnumExtension));
1654     assertEqualsExactType(ImportEnum.IMPORT_FOO,
1655       message.getExtension(defaultImportEnumExtension));
1656
1657     assertEqualsExactType("424", message.getExtension(defaultStringPieceExtension));
1658     assertEqualsExactType("425", message.getExtension(defaultCordExtension));
1659
1660     Assert.assertTrue(message.hasExtension(oneofBytesExtension));
1661
1662     assertEqualsExactType(toBytes("604"), message.getExtension(oneofBytesExtension));
1663   }
1664
1665   // -------------------------------------------------------------------
1666
1667   /**
1668    * Assert (using {@code junit.framework.Assert}} that all extensions of
1669    * {@code message} are cleared, and that getting the extensions returns their
1670    * default values.
1671    */
1672   public static void assertExtensionsClear(TestAllExtensionsOrBuilder message) {
1673     // hasBlah() should initially be false for all optional fields.
1674     Assert.assertFalse(message.hasExtension(optionalInt32Extension   ));
1675     Assert.assertFalse(message.hasExtension(optionalInt64Extension   ));
1676     Assert.assertFalse(message.hasExtension(optionalUint32Extension  ));
1677     Assert.assertFalse(message.hasExtension(optionalUint64Extension  ));
1678     Assert.assertFalse(message.hasExtension(optionalSint32Extension  ));
1679     Assert.assertFalse(message.hasExtension(optionalSint64Extension  ));
1680     Assert.assertFalse(message.hasExtension(optionalFixed32Extension ));
1681     Assert.assertFalse(message.hasExtension(optionalFixed64Extension ));
1682     Assert.assertFalse(message.hasExtension(optionalSfixed32Extension));
1683     Assert.assertFalse(message.hasExtension(optionalSfixed64Extension));
1684     Assert.assertFalse(message.hasExtension(optionalFloatExtension   ));
1685     Assert.assertFalse(message.hasExtension(optionalDoubleExtension  ));
1686     Assert.assertFalse(message.hasExtension(optionalBoolExtension    ));
1687     Assert.assertFalse(message.hasExtension(optionalStringExtension  ));
1688     Assert.assertFalse(message.hasExtension(optionalBytesExtension   ));
1689
1690     Assert.assertFalse(message.hasExtension(optionalGroupExtension         ));
1691     Assert.assertFalse(message.hasExtension(optionalNestedMessageExtension ));
1692     Assert.assertFalse(message.hasExtension(optionalForeignMessageExtension));
1693     Assert.assertFalse(message.hasExtension(optionalImportMessageExtension ));
1694
1695     Assert.assertFalse(message.hasExtension(optionalNestedEnumExtension ));
1696     Assert.assertFalse(message.hasExtension(optionalForeignEnumExtension));
1697     Assert.assertFalse(message.hasExtension(optionalImportEnumExtension ));
1698
1699     Assert.assertFalse(message.hasExtension(optionalStringPieceExtension));
1700     Assert.assertFalse(message.hasExtension(optionalCordExtension));
1701
1702     // Optional fields without defaults are set to zero or something like it.
1703     assertEqualsExactType(0    , message.getExtension(optionalInt32Extension   ));
1704     assertEqualsExactType(0L   , message.getExtension(optionalInt64Extension   ));
1705     assertEqualsExactType(0    , message.getExtension(optionalUint32Extension  ));
1706     assertEqualsExactType(0L   , message.getExtension(optionalUint64Extension  ));
1707     assertEqualsExactType(0    , message.getExtension(optionalSint32Extension  ));
1708     assertEqualsExactType(0L   , message.getExtension(optionalSint64Extension  ));
1709     assertEqualsExactType(0    , message.getExtension(optionalFixed32Extension ));
1710     assertEqualsExactType(0L   , message.getExtension(optionalFixed64Extension ));
1711     assertEqualsExactType(0    , message.getExtension(optionalSfixed32Extension));
1712     assertEqualsExactType(0L   , message.getExtension(optionalSfixed64Extension));
1713     assertEqualsExactType(0F   , message.getExtension(optionalFloatExtension   ));
1714     assertEqualsExactType(0D   , message.getExtension(optionalDoubleExtension  ));
1715     assertEqualsExactType(false, message.getExtension(optionalBoolExtension    ));
1716     assertEqualsExactType(""   , message.getExtension(optionalStringExtension  ));
1717     assertEqualsExactType(ByteString.EMPTY, message.getExtension(optionalBytesExtension));
1718
1719     // Embedded messages should also be clear.
1720     Assert.assertFalse(message.getExtension(optionalGroupExtension         ).hasA());
1721     Assert.assertFalse(message.getExtension(optionalNestedMessageExtension ).hasBb());
1722     Assert.assertFalse(message.getExtension(optionalForeignMessageExtension).hasC());
1723     Assert.assertFalse(message.getExtension(optionalImportMessageExtension ).hasD());
1724
1725     assertEqualsExactType(0, message.getExtension(optionalGroupExtension         ).getA());
1726     assertEqualsExactType(0, message.getExtension(optionalNestedMessageExtension ).getBb());
1727     assertEqualsExactType(0, message.getExtension(optionalForeignMessageExtension).getC());
1728     assertEqualsExactType(0, message.getExtension(optionalImportMessageExtension ).getD());
1729
1730     // Enums without defaults are set to the first value in the enum.
1731     assertEqualsExactType(TestAllTypes.NestedEnum.FOO,
1732       message.getExtension(optionalNestedEnumExtension ));
1733     assertEqualsExactType(ForeignEnum.FOREIGN_FOO,
1734       message.getExtension(optionalForeignEnumExtension));
1735     assertEqualsExactType(ImportEnum.IMPORT_FOO,
1736       message.getExtension(optionalImportEnumExtension));
1737
1738     assertEqualsExactType("", message.getExtension(optionalStringPieceExtension));
1739     assertEqualsExactType("", message.getExtension(optionalCordExtension));
1740
1741     // Repeated fields are empty.
1742     Assert.assertEquals(0, message.getExtensionCount(repeatedInt32Extension   ));
1743     Assert.assertEquals(0, message.getExtensionCount(repeatedInt64Extension   ));
1744     Assert.assertEquals(0, message.getExtensionCount(repeatedUint32Extension  ));
1745     Assert.assertEquals(0, message.getExtensionCount(repeatedUint64Extension  ));
1746     Assert.assertEquals(0, message.getExtensionCount(repeatedSint32Extension  ));
1747     Assert.assertEquals(0, message.getExtensionCount(repeatedSint64Extension  ));
1748     Assert.assertEquals(0, message.getExtensionCount(repeatedFixed32Extension ));
1749     Assert.assertEquals(0, message.getExtensionCount(repeatedFixed64Extension ));
1750     Assert.assertEquals(0, message.getExtensionCount(repeatedSfixed32Extension));
1751     Assert.assertEquals(0, message.getExtensionCount(repeatedSfixed64Extension));
1752     Assert.assertEquals(0, message.getExtensionCount(repeatedFloatExtension   ));
1753     Assert.assertEquals(0, message.getExtensionCount(repeatedDoubleExtension  ));
1754     Assert.assertEquals(0, message.getExtensionCount(repeatedBoolExtension    ));
1755     Assert.assertEquals(0, message.getExtensionCount(repeatedStringExtension  ));
1756     Assert.assertEquals(0, message.getExtensionCount(repeatedBytesExtension   ));
1757
1758     Assert.assertEquals(0, message.getExtensionCount(repeatedGroupExtension         ));
1759     Assert.assertEquals(0, message.getExtensionCount(repeatedNestedMessageExtension ));
1760     Assert.assertEquals(0, message.getExtensionCount(repeatedForeignMessageExtension));
1761     Assert.assertEquals(0, message.getExtensionCount(repeatedImportMessageExtension ));
1762     Assert.assertEquals(0, message.getExtensionCount(repeatedLazyMessageExtension   ));
1763     Assert.assertEquals(0, message.getExtensionCount(repeatedNestedEnumExtension    ));
1764     Assert.assertEquals(0, message.getExtensionCount(repeatedForeignEnumExtension   ));
1765     Assert.assertEquals(0, message.getExtensionCount(repeatedImportEnumExtension    ));
1766
1767     Assert.assertEquals(0, message.getExtensionCount(repeatedStringPieceExtension));
1768     Assert.assertEquals(0, message.getExtensionCount(repeatedCordExtension));
1769
1770     // Repeated fields are empty via getExtension().size().
1771     Assert.assertEquals(0, message.getExtension(repeatedInt32Extension   ).size());
1772     Assert.assertEquals(0, message.getExtension(repeatedInt64Extension   ).size());
1773     Assert.assertEquals(0, message.getExtension(repeatedUint32Extension  ).size());
1774     Assert.assertEquals(0, message.getExtension(repeatedUint64Extension  ).size());
1775     Assert.assertEquals(0, message.getExtension(repeatedSint32Extension  ).size());
1776     Assert.assertEquals(0, message.getExtension(repeatedSint64Extension  ).size());
1777     Assert.assertEquals(0, message.getExtension(repeatedFixed32Extension ).size());
1778     Assert.assertEquals(0, message.getExtension(repeatedFixed64Extension ).size());
1779     Assert.assertEquals(0, message.getExtension(repeatedSfixed32Extension).size());
1780     Assert.assertEquals(0, message.getExtension(repeatedSfixed64Extension).size());
1781     Assert.assertEquals(0, message.getExtension(repeatedFloatExtension   ).size());
1782     Assert.assertEquals(0, message.getExtension(repeatedDoubleExtension  ).size());
1783     Assert.assertEquals(0, message.getExtension(repeatedBoolExtension    ).size());
1784     Assert.assertEquals(0, message.getExtension(repeatedStringExtension  ).size());
1785     Assert.assertEquals(0, message.getExtension(repeatedBytesExtension   ).size());
1786
1787     Assert.assertEquals(0, message.getExtension(repeatedGroupExtension         ).size());
1788     Assert.assertEquals(0, message.getExtension(repeatedNestedMessageExtension ).size());
1789     Assert.assertEquals(0, message.getExtension(repeatedForeignMessageExtension).size());
1790     Assert.assertEquals(0, message.getExtension(repeatedImportMessageExtension ).size());
1791     Assert.assertEquals(0, message.getExtension(repeatedLazyMessageExtension   ).size());
1792     Assert.assertEquals(0, message.getExtension(repeatedNestedEnumExtension    ).size());
1793     Assert.assertEquals(0, message.getExtension(repeatedForeignEnumExtension   ).size());
1794     Assert.assertEquals(0, message.getExtension(repeatedImportEnumExtension    ).size());
1795
1796     Assert.assertEquals(0, message.getExtension(repeatedStringPieceExtension).size());
1797     Assert.assertEquals(0, message.getExtension(repeatedCordExtension).size());
1798
1799     // hasBlah() should also be false for all default fields.
1800     Assert.assertFalse(message.hasExtension(defaultInt32Extension   ));
1801     Assert.assertFalse(message.hasExtension(defaultInt64Extension   ));
1802     Assert.assertFalse(message.hasExtension(defaultUint32Extension  ));
1803     Assert.assertFalse(message.hasExtension(defaultUint64Extension  ));
1804     Assert.assertFalse(message.hasExtension(defaultSint32Extension  ));
1805     Assert.assertFalse(message.hasExtension(defaultSint64Extension  ));
1806     Assert.assertFalse(message.hasExtension(defaultFixed32Extension ));
1807     Assert.assertFalse(message.hasExtension(defaultFixed64Extension ));
1808     Assert.assertFalse(message.hasExtension(defaultSfixed32Extension));
1809     Assert.assertFalse(message.hasExtension(defaultSfixed64Extension));
1810     Assert.assertFalse(message.hasExtension(defaultFloatExtension   ));
1811     Assert.assertFalse(message.hasExtension(defaultDoubleExtension  ));
1812     Assert.assertFalse(message.hasExtension(defaultBoolExtension    ));
1813     Assert.assertFalse(message.hasExtension(defaultStringExtension  ));
1814     Assert.assertFalse(message.hasExtension(defaultBytesExtension   ));
1815
1816     Assert.assertFalse(message.hasExtension(defaultNestedEnumExtension ));
1817     Assert.assertFalse(message.hasExtension(defaultForeignEnumExtension));
1818     Assert.assertFalse(message.hasExtension(defaultImportEnumExtension ));
1819
1820     Assert.assertFalse(message.hasExtension(defaultStringPieceExtension));
1821     Assert.assertFalse(message.hasExtension(defaultCordExtension));
1822
1823     // Fields with defaults have their default values (duh).
1824     assertEqualsExactType( 41    , message.getExtension(defaultInt32Extension   ));
1825     assertEqualsExactType( 42L   , message.getExtension(defaultInt64Extension   ));
1826     assertEqualsExactType( 43    , message.getExtension(defaultUint32Extension  ));
1827     assertEqualsExactType( 44L   , message.getExtension(defaultUint64Extension  ));
1828     assertEqualsExactType(-45    , message.getExtension(defaultSint32Extension  ));
1829     assertEqualsExactType( 46L   , message.getExtension(defaultSint64Extension  ));
1830     assertEqualsExactType( 47    , message.getExtension(defaultFixed32Extension ));
1831     assertEqualsExactType( 48L   , message.getExtension(defaultFixed64Extension ));
1832     assertEqualsExactType( 49    , message.getExtension(defaultSfixed32Extension));
1833     assertEqualsExactType(-50L   , message.getExtension(defaultSfixed64Extension));
1834     assertEqualsExactType( 51.5F , message.getExtension(defaultFloatExtension   ));
1835     assertEqualsExactType( 52e3D , message.getExtension(defaultDoubleExtension  ));
1836     assertEqualsExactType(true   , message.getExtension(defaultBoolExtension    ));
1837     assertEqualsExactType("hello", message.getExtension(defaultStringExtension  ));
1838     assertEqualsExactType(toBytes("world"), message.getExtension(defaultBytesExtension));
1839
1840     assertEqualsExactType(TestAllTypes.NestedEnum.BAR,
1841       message.getExtension(defaultNestedEnumExtension ));
1842     assertEqualsExactType(ForeignEnum.FOREIGN_BAR,
1843       message.getExtension(defaultForeignEnumExtension));
1844     assertEqualsExactType(ImportEnum.IMPORT_BAR,
1845       message.getExtension(defaultImportEnumExtension));
1846
1847     assertEqualsExactType("abc", message.getExtension(defaultStringPieceExtension));
1848     assertEqualsExactType("123", message.getExtension(defaultCordExtension));
1849
1850     Assert.assertFalse(message.hasExtension(oneofUint32Extension));
1851     Assert.assertFalse(message.hasExtension(oneofNestedMessageExtension));
1852     Assert.assertFalse(message.hasExtension(oneofStringExtension));
1853     Assert.assertFalse(message.hasExtension(oneofBytesExtension));
1854   }
1855
1856   // -------------------------------------------------------------------
1857
1858   /**
1859    * Assert (using {@code junit.framework.Assert}} that all extensions of
1860    * {@code message} are set to the values assigned by {@code setAllExtensions}
1861    * followed by {@code modifyRepeatedExtensions}.
1862    */
1863   public static void assertRepeatedExtensionsModified(
1864       TestAllExtensionsOrBuilder message) {
1865     // ModifyRepeatedFields only sets the second repeated element of each
1866     // field.  In addition to verifying this, we also verify that the first
1867     // element and size were *not* modified.
1868     Assert.assertEquals(2, message.getExtensionCount(repeatedInt32Extension   ));
1869     Assert.assertEquals(2, message.getExtensionCount(repeatedInt64Extension   ));
1870     Assert.assertEquals(2, message.getExtensionCount(repeatedUint32Extension  ));
1871     Assert.assertEquals(2, message.getExtensionCount(repeatedUint64Extension  ));
1872     Assert.assertEquals(2, message.getExtensionCount(repeatedSint32Extension  ));
1873     Assert.assertEquals(2, message.getExtensionCount(repeatedSint64Extension  ));
1874     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed32Extension ));
1875     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed64Extension ));
1876     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed32Extension));
1877     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed64Extension));
1878     Assert.assertEquals(2, message.getExtensionCount(repeatedFloatExtension   ));
1879     Assert.assertEquals(2, message.getExtensionCount(repeatedDoubleExtension  ));
1880     Assert.assertEquals(2, message.getExtensionCount(repeatedBoolExtension    ));
1881     Assert.assertEquals(2, message.getExtensionCount(repeatedStringExtension  ));
1882     Assert.assertEquals(2, message.getExtensionCount(repeatedBytesExtension   ));
1883
1884     Assert.assertEquals(2, message.getExtensionCount(repeatedGroupExtension         ));
1885     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtension ));
1886     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtension));
1887     Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtension ));
1888     Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtension   ));
1889     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtension    ));
1890     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtension   ));
1891     Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtension    ));
1892
1893     Assert.assertEquals(2, message.getExtensionCount(repeatedStringPieceExtension));
1894     Assert.assertEquals(2, message.getExtensionCount(repeatedCordExtension));
1895
1896     assertEqualsExactType(201  , message.getExtension(repeatedInt32Extension   , 0));
1897     assertEqualsExactType(202L , message.getExtension(repeatedInt64Extension   , 0));
1898     assertEqualsExactType(203  , message.getExtension(repeatedUint32Extension  , 0));
1899     assertEqualsExactType(204L , message.getExtension(repeatedUint64Extension  , 0));
1900     assertEqualsExactType(205  , message.getExtension(repeatedSint32Extension  , 0));
1901     assertEqualsExactType(206L , message.getExtension(repeatedSint64Extension  , 0));
1902     assertEqualsExactType(207  , message.getExtension(repeatedFixed32Extension , 0));
1903     assertEqualsExactType(208L , message.getExtension(repeatedFixed64Extension , 0));
1904     assertEqualsExactType(209  , message.getExtension(repeatedSfixed32Extension, 0));
1905     assertEqualsExactType(210L , message.getExtension(repeatedSfixed64Extension, 0));
1906     assertEqualsExactType(211F , message.getExtension(repeatedFloatExtension   , 0));
1907     assertEqualsExactType(212D , message.getExtension(repeatedDoubleExtension  , 0));
1908     assertEqualsExactType(true , message.getExtension(repeatedBoolExtension    , 0));
1909     assertEqualsExactType("215", message.getExtension(repeatedStringExtension  , 0));
1910     assertEqualsExactType(toBytes("216"), message.getExtension(repeatedBytesExtension, 0));
1911
1912     assertEqualsExactType(217, message.getExtension(repeatedGroupExtension         , 0).getA());
1913     assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtension , 0).getBb());
1914     assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtension, 0).getC());
1915     assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtension , 0).getD());
1916     assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtension   , 0).getBb());
1917
1918     assertEqualsExactType(TestAllTypes.NestedEnum.BAR,
1919       message.getExtension(repeatedNestedEnumExtension, 0));
1920     assertEqualsExactType(ForeignEnum.FOREIGN_BAR,
1921       message.getExtension(repeatedForeignEnumExtension, 0));
1922     assertEqualsExactType(ImportEnum.IMPORT_BAR,
1923       message.getExtension(repeatedImportEnumExtension, 0));
1924
1925     assertEqualsExactType("224", message.getExtension(repeatedStringPieceExtension, 0));
1926     assertEqualsExactType("225", message.getExtension(repeatedCordExtension, 0));
1927
1928     // Actually verify the second (modified) elements now.
1929     assertEqualsExactType(501  , message.getExtension(repeatedInt32Extension   , 1));
1930     assertEqualsExactType(502L , message.getExtension(repeatedInt64Extension   , 1));
1931     assertEqualsExactType(503  , message.getExtension(repeatedUint32Extension  , 1));
1932     assertEqualsExactType(504L , message.getExtension(repeatedUint64Extension  , 1));
1933     assertEqualsExactType(505  , message.getExtension(repeatedSint32Extension  , 1));
1934     assertEqualsExactType(506L , message.getExtension(repeatedSint64Extension  , 1));
1935     assertEqualsExactType(507  , message.getExtension(repeatedFixed32Extension , 1));
1936     assertEqualsExactType(508L , message.getExtension(repeatedFixed64Extension , 1));
1937     assertEqualsExactType(509  , message.getExtension(repeatedSfixed32Extension, 1));
1938     assertEqualsExactType(510L , message.getExtension(repeatedSfixed64Extension, 1));
1939     assertEqualsExactType(511F , message.getExtension(repeatedFloatExtension   , 1));
1940     assertEqualsExactType(512D , message.getExtension(repeatedDoubleExtension  , 1));
1941     assertEqualsExactType(true , message.getExtension(repeatedBoolExtension    , 1));
1942     assertEqualsExactType("515", message.getExtension(repeatedStringExtension  , 1));
1943     assertEqualsExactType(toBytes("516"), message.getExtension(repeatedBytesExtension, 1));
1944
1945     assertEqualsExactType(517, message.getExtension(repeatedGroupExtension         , 1).getA());
1946     assertEqualsExactType(518, message.getExtension(repeatedNestedMessageExtension , 1).getBb());
1947     assertEqualsExactType(519, message.getExtension(repeatedForeignMessageExtension, 1).getC());
1948     assertEqualsExactType(520, message.getExtension(repeatedImportMessageExtension , 1).getD());
1949     assertEqualsExactType(527, message.getExtension(repeatedLazyMessageExtension   , 1).getBb());
1950
1951     assertEqualsExactType(TestAllTypes.NestedEnum.FOO,
1952       message.getExtension(repeatedNestedEnumExtension, 1));
1953     assertEqualsExactType(ForeignEnum.FOREIGN_FOO,
1954       message.getExtension(repeatedForeignEnumExtension, 1));
1955     assertEqualsExactType(ImportEnum.IMPORT_FOO,
1956       message.getExtension(repeatedImportEnumExtension, 1));
1957
1958     assertEqualsExactType("524", message.getExtension(repeatedStringPieceExtension, 1));
1959     assertEqualsExactType("525", message.getExtension(repeatedCordExtension, 1));
1960   }
1961
1962   public static void setPackedExtensions(TestPackedExtensions.Builder message) {
1963     message.addExtension(packedInt32Extension   , 601);
1964     message.addExtension(packedInt64Extension   , 602L);
1965     message.addExtension(packedUint32Extension  , 603);
1966     message.addExtension(packedUint64Extension  , 604L);
1967     message.addExtension(packedSint32Extension  , 605);
1968     message.addExtension(packedSint64Extension  , 606L);
1969     message.addExtension(packedFixed32Extension , 607);
1970     message.addExtension(packedFixed64Extension , 608L);
1971     message.addExtension(packedSfixed32Extension, 609);
1972     message.addExtension(packedSfixed64Extension, 610L);
1973     message.addExtension(packedFloatExtension   , 611F);
1974     message.addExtension(packedDoubleExtension  , 612D);
1975     message.addExtension(packedBoolExtension    , true);
1976     message.addExtension(packedEnumExtension, ForeignEnum.FOREIGN_BAR);
1977     // Add a second one of each field.
1978     message.addExtension(packedInt32Extension   , 701);
1979     message.addExtension(packedInt64Extension   , 702L);
1980     message.addExtension(packedUint32Extension  , 703);
1981     message.addExtension(packedUint64Extension  , 704L);
1982     message.addExtension(packedSint32Extension  , 705);
1983     message.addExtension(packedSint64Extension  , 706L);
1984     message.addExtension(packedFixed32Extension , 707);
1985     message.addExtension(packedFixed64Extension , 708L);
1986     message.addExtension(packedSfixed32Extension, 709);
1987     message.addExtension(packedSfixed64Extension, 710L);
1988     message.addExtension(packedFloatExtension   , 711F);
1989     message.addExtension(packedDoubleExtension  , 712D);
1990     message.addExtension(packedBoolExtension    , false);
1991     message.addExtension(packedEnumExtension, ForeignEnum.FOREIGN_BAZ);
1992   }
1993
1994   public static void assertPackedExtensionsSet(TestPackedExtensions message) {
1995     Assert.assertEquals(2, message.getExtensionCount(packedInt32Extension   ));
1996     Assert.assertEquals(2, message.getExtensionCount(packedInt64Extension   ));
1997     Assert.assertEquals(2, message.getExtensionCount(packedUint32Extension  ));
1998     Assert.assertEquals(2, message.getExtensionCount(packedUint64Extension  ));
1999     Assert.assertEquals(2, message.getExtensionCount(packedSint32Extension  ));
2000     Assert.assertEquals(2, message.getExtensionCount(packedSint64Extension  ));
2001     Assert.assertEquals(2, message.getExtensionCount(packedFixed32Extension ));
2002     Assert.assertEquals(2, message.getExtensionCount(packedFixed64Extension ));
2003     Assert.assertEquals(2, message.getExtensionCount(packedSfixed32Extension));
2004     Assert.assertEquals(2, message.getExtensionCount(packedSfixed64Extension));
2005     Assert.assertEquals(2, message.getExtensionCount(packedFloatExtension   ));
2006     Assert.assertEquals(2, message.getExtensionCount(packedDoubleExtension  ));
2007     Assert.assertEquals(2, message.getExtensionCount(packedBoolExtension    ));
2008     Assert.assertEquals(2, message.getExtensionCount(packedEnumExtension));
2009     assertEqualsExactType(601  , message.getExtension(packedInt32Extension   , 0));
2010     assertEqualsExactType(602L , message.getExtension(packedInt64Extension   , 0));
2011     assertEqualsExactType(603  , message.getExtension(packedUint32Extension  , 0));
2012     assertEqualsExactType(604L , message.getExtension(packedUint64Extension  , 0));
2013     assertEqualsExactType(605  , message.getExtension(packedSint32Extension  , 0));
2014     assertEqualsExactType(606L , message.getExtension(packedSint64Extension  , 0));
2015     assertEqualsExactType(607  , message.getExtension(packedFixed32Extension , 0));
2016     assertEqualsExactType(608L , message.getExtension(packedFixed64Extension , 0));
2017     assertEqualsExactType(609  , message.getExtension(packedSfixed32Extension, 0));
2018     assertEqualsExactType(610L , message.getExtension(packedSfixed64Extension, 0));
2019     assertEqualsExactType(611F , message.getExtension(packedFloatExtension   , 0));
2020     assertEqualsExactType(612D , message.getExtension(packedDoubleExtension  , 0));
2021     assertEqualsExactType(true , message.getExtension(packedBoolExtension    , 0));
2022     assertEqualsExactType(ForeignEnum.FOREIGN_BAR,
2023                           message.getExtension(packedEnumExtension, 0));
2024     assertEqualsExactType(701  , message.getExtension(packedInt32Extension   , 1));
2025     assertEqualsExactType(702L , message.getExtension(packedInt64Extension   , 1));
2026     assertEqualsExactType(703  , message.getExtension(packedUint32Extension  , 1));
2027     assertEqualsExactType(704L , message.getExtension(packedUint64Extension  , 1));
2028     assertEqualsExactType(705  , message.getExtension(packedSint32Extension  , 1));
2029     assertEqualsExactType(706L , message.getExtension(packedSint64Extension  , 1));
2030     assertEqualsExactType(707  , message.getExtension(packedFixed32Extension , 1));
2031     assertEqualsExactType(708L , message.getExtension(packedFixed64Extension , 1));
2032     assertEqualsExactType(709  , message.getExtension(packedSfixed32Extension, 1));
2033     assertEqualsExactType(710L , message.getExtension(packedSfixed64Extension, 1));
2034     assertEqualsExactType(711F , message.getExtension(packedFloatExtension   , 1));
2035     assertEqualsExactType(712D , message.getExtension(packedDoubleExtension  , 1));
2036     assertEqualsExactType(false, message.getExtension(packedBoolExtension    , 1));
2037     assertEqualsExactType(ForeignEnum.FOREIGN_BAZ,
2038                           message.getExtension(packedEnumExtension, 1));
2039   }
2040
2041   // ===================================================================
2042   // Lite extensions
2043
2044   /**
2045    * Set every field of {@code message} to the values expected by
2046    * {@code assertAllExtensionsSet()}.
2047    */
2048   public static void setAllExtensions(TestAllExtensionsLite.Builder message) {
2049     message.setExtension(optionalInt32ExtensionLite   , 101);
2050     message.setExtension(optionalInt64ExtensionLite   , 102L);
2051     message.setExtension(optionalUint32ExtensionLite  , 103);
2052     message.setExtension(optionalUint64ExtensionLite  , 104L);
2053     message.setExtension(optionalSint32ExtensionLite  , 105);
2054     message.setExtension(optionalSint64ExtensionLite  , 106L);
2055     message.setExtension(optionalFixed32ExtensionLite , 107);
2056     message.setExtension(optionalFixed64ExtensionLite , 108L);
2057     message.setExtension(optionalSfixed32ExtensionLite, 109);
2058     message.setExtension(optionalSfixed64ExtensionLite, 110L);
2059     message.setExtension(optionalFloatExtensionLite   , 111F);
2060     message.setExtension(optionalDoubleExtensionLite  , 112D);
2061     message.setExtension(optionalBoolExtensionLite    , true);
2062     message.setExtension(optionalStringExtensionLite  , "115");
2063     message.setExtension(optionalBytesExtensionLite   , toBytes("116"));
2064
2065     message.setExtension(optionalGroupExtensionLite,
2066       OptionalGroup_extension_lite.newBuilder().setA(117).build());
2067     message.setExtension(optionalNestedMessageExtensionLite,
2068       TestAllTypesLite.NestedMessage.newBuilder().setBb(118).build());
2069     message.setExtension(optionalForeignMessageExtensionLite,
2070       ForeignMessageLite.newBuilder().setC(119).build());
2071     message.setExtension(optionalImportMessageExtensionLite,
2072       ImportMessageLite.newBuilder().setD(120).build());
2073     message.setExtension(optionalPublicImportMessageExtensionLite,
2074       PublicImportMessageLite.newBuilder().setE(126).build());
2075     message.setExtension(optionalLazyMessageExtensionLite,
2076       TestAllTypesLite.NestedMessage.newBuilder().setBb(127).build());
2077
2078     message.setExtension(optionalNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAZ);
2079     message.setExtension(optionalForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ);
2080     message.setExtension(optionalImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAZ);
2081
2082     message.setExtension(optionalStringPieceExtensionLite, "124");
2083     message.setExtension(optionalCordExtensionLite, "125");
2084
2085     // -----------------------------------------------------------------
2086
2087     message.addExtension(repeatedInt32ExtensionLite   , 201);
2088     message.addExtension(repeatedInt64ExtensionLite   , 202L);
2089     message.addExtension(repeatedUint32ExtensionLite  , 203);
2090     message.addExtension(repeatedUint64ExtensionLite  , 204L);
2091     message.addExtension(repeatedSint32ExtensionLite  , 205);
2092     message.addExtension(repeatedSint64ExtensionLite  , 206L);
2093     message.addExtension(repeatedFixed32ExtensionLite , 207);
2094     message.addExtension(repeatedFixed64ExtensionLite , 208L);
2095     message.addExtension(repeatedSfixed32ExtensionLite, 209);
2096     message.addExtension(repeatedSfixed64ExtensionLite, 210L);
2097     message.addExtension(repeatedFloatExtensionLite   , 211F);
2098     message.addExtension(repeatedDoubleExtensionLite  , 212D);
2099     message.addExtension(repeatedBoolExtensionLite    , true);
2100     message.addExtension(repeatedStringExtensionLite  , "215");
2101     message.addExtension(repeatedBytesExtensionLite   , toBytes("216"));
2102
2103     message.addExtension(repeatedGroupExtensionLite,
2104       RepeatedGroup_extension_lite.newBuilder().setA(217).build());
2105     message.addExtension(repeatedNestedMessageExtensionLite,
2106       TestAllTypesLite.NestedMessage.newBuilder().setBb(218).build());
2107     message.addExtension(repeatedForeignMessageExtensionLite,
2108       ForeignMessageLite.newBuilder().setC(219).build());
2109     message.addExtension(repeatedImportMessageExtensionLite,
2110       ImportMessageLite.newBuilder().setD(220).build());
2111     message.addExtension(repeatedLazyMessageExtensionLite,
2112       TestAllTypesLite.NestedMessage.newBuilder().setBb(227).build());
2113
2114     message.addExtension(repeatedNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAR);
2115     message.addExtension(repeatedForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAR);
2116     message.addExtension(repeatedImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAR);
2117
2118     message.addExtension(repeatedStringPieceExtensionLite, "224");
2119     message.addExtension(repeatedCordExtensionLite, "225");
2120
2121     // Add a second one of each field.
2122     message.addExtension(repeatedInt32ExtensionLite   , 301);
2123     message.addExtension(repeatedInt64ExtensionLite   , 302L);
2124     message.addExtension(repeatedUint32ExtensionLite  , 303);
2125     message.addExtension(repeatedUint64ExtensionLite  , 304L);
2126     message.addExtension(repeatedSint32ExtensionLite  , 305);
2127     message.addExtension(repeatedSint64ExtensionLite  , 306L);
2128     message.addExtension(repeatedFixed32ExtensionLite , 307);
2129     message.addExtension(repeatedFixed64ExtensionLite , 308L);
2130     message.addExtension(repeatedSfixed32ExtensionLite, 309);
2131     message.addExtension(repeatedSfixed64ExtensionLite, 310L);
2132     message.addExtension(repeatedFloatExtensionLite   , 311F);
2133     message.addExtension(repeatedDoubleExtensionLite  , 312D);
2134     message.addExtension(repeatedBoolExtensionLite    , false);
2135     message.addExtension(repeatedStringExtensionLite  , "315");
2136     message.addExtension(repeatedBytesExtensionLite   , toBytes("316"));
2137
2138     message.addExtension(repeatedGroupExtensionLite,
2139       RepeatedGroup_extension_lite.newBuilder().setA(317).build());
2140     message.addExtension(repeatedNestedMessageExtensionLite,
2141       TestAllTypesLite.NestedMessage.newBuilder().setBb(318).build());
2142     message.addExtension(repeatedForeignMessageExtensionLite,
2143       ForeignMessageLite.newBuilder().setC(319).build());
2144     message.addExtension(repeatedImportMessageExtensionLite,
2145       ImportMessageLite.newBuilder().setD(320).build());
2146     message.addExtension(repeatedLazyMessageExtensionLite,
2147       TestAllTypesLite.NestedMessage.newBuilder().setBb(327).build());
2148
2149     message.addExtension(repeatedNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAZ);
2150     message.addExtension(repeatedForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ);
2151     message.addExtension(repeatedImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAZ);
2152
2153     message.addExtension(repeatedStringPieceExtensionLite, "324");
2154     message.addExtension(repeatedCordExtensionLite, "325");
2155
2156     // -----------------------------------------------------------------
2157
2158     message.setExtension(defaultInt32ExtensionLite   , 401);
2159     message.setExtension(defaultInt64ExtensionLite   , 402L);
2160     message.setExtension(defaultUint32ExtensionLite  , 403);
2161     message.setExtension(defaultUint64ExtensionLite  , 404L);
2162     message.setExtension(defaultSint32ExtensionLite  , 405);
2163     message.setExtension(defaultSint64ExtensionLite  , 406L);
2164     message.setExtension(defaultFixed32ExtensionLite , 407);
2165     message.setExtension(defaultFixed64ExtensionLite , 408L);
2166     message.setExtension(defaultSfixed32ExtensionLite, 409);
2167     message.setExtension(defaultSfixed64ExtensionLite, 410L);
2168     message.setExtension(defaultFloatExtensionLite   , 411F);
2169     message.setExtension(defaultDoubleExtensionLite  , 412D);
2170     message.setExtension(defaultBoolExtensionLite    , false);
2171     message.setExtension(defaultStringExtensionLite  , "415");
2172     message.setExtension(defaultBytesExtensionLite   , toBytes("416"));
2173
2174     message.setExtension(defaultNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.FOO);
2175     message.setExtension(defaultForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_FOO);
2176     message.setExtension(defaultImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_FOO);
2177
2178     message.setExtension(defaultStringPieceExtensionLite, "424");
2179     message.setExtension(defaultCordExtensionLite, "425");
2180
2181     message.setExtension(oneofUint32ExtensionLite, 601);
2182     message.setExtension(oneofNestedMessageExtensionLite,
2183       TestAllTypesLite.NestedMessage.newBuilder().setBb(602).build());
2184     message.setExtension(oneofStringExtensionLite, "603");
2185     message.setExtension(oneofBytesExtensionLite, toBytes("604"));
2186   }
2187
2188   // -------------------------------------------------------------------
2189
2190   /**
2191    * Modify the repeated extensions of {@code message} to contain the values
2192    * expected by {@code assertRepeatedExtensionsModified()}.
2193    */
2194   public static void modifyRepeatedExtensions(
2195       TestAllExtensionsLite.Builder message) {
2196     message.setExtension(repeatedInt32ExtensionLite   , 1, 501);
2197     message.setExtension(repeatedInt64ExtensionLite   , 1, 502L);
2198     message.setExtension(repeatedUint32ExtensionLite  , 1, 503);
2199     message.setExtension(repeatedUint64ExtensionLite  , 1, 504L);
2200     message.setExtension(repeatedSint32ExtensionLite  , 1, 505);
2201     message.setExtension(repeatedSint64ExtensionLite  , 1, 506L);
2202     message.setExtension(repeatedFixed32ExtensionLite , 1, 507);
2203     message.setExtension(repeatedFixed64ExtensionLite , 1, 508L);
2204     message.setExtension(repeatedSfixed32ExtensionLite, 1, 509);
2205     message.setExtension(repeatedSfixed64ExtensionLite, 1, 510L);
2206     message.setExtension(repeatedFloatExtensionLite   , 1, 511F);
2207     message.setExtension(repeatedDoubleExtensionLite  , 1, 512D);
2208     message.setExtension(repeatedBoolExtensionLite    , 1, true);
2209     message.setExtension(repeatedStringExtensionLite  , 1, "515");
2210     message.setExtension(repeatedBytesExtensionLite   , 1, toBytes("516"));
2211
2212     message.setExtension(repeatedGroupExtensionLite, 1,
2213       RepeatedGroup_extension_lite.newBuilder().setA(517).build());
2214     message.setExtension(repeatedNestedMessageExtensionLite, 1,
2215       TestAllTypesLite.NestedMessage.newBuilder().setBb(518).build());
2216     message.setExtension(repeatedForeignMessageExtensionLite, 1,
2217       ForeignMessageLite.newBuilder().setC(519).build());
2218     message.setExtension(repeatedImportMessageExtensionLite, 1,
2219       ImportMessageLite.newBuilder().setD(520).build());
2220     message.setExtension(repeatedLazyMessageExtensionLite, 1,
2221       TestAllTypesLite.NestedMessage.newBuilder().setBb(527).build());
2222
2223     message.setExtension(repeatedNestedEnumExtensionLite , 1, TestAllTypesLite.NestedEnum.FOO);
2224     message.setExtension(repeatedForeignEnumExtensionLite, 1, ForeignEnumLite.FOREIGN_LITE_FOO);
2225     message.setExtension(repeatedImportEnumExtensionLite , 1, ImportEnumLite.IMPORT_LITE_FOO);
2226
2227     message.setExtension(repeatedStringPieceExtensionLite, 1, "524");
2228     message.setExtension(repeatedCordExtensionLite, 1, "525");
2229   }
2230
2231   // -------------------------------------------------------------------
2232
2233   /**
2234    * Assert (using {@code junit.framework.Assert}} that all extensions of
2235    * {@code message} are set to the values assigned by {@code setAllExtensions}.
2236    */
2237   public static void assertAllExtensionsSet(
2238       TestAllExtensionsLiteOrBuilder message) {
2239     Assert.assertTrue(message.hasExtension(optionalInt32ExtensionLite   ));
2240     Assert.assertTrue(message.hasExtension(optionalInt64ExtensionLite   ));
2241     Assert.assertTrue(message.hasExtension(optionalUint32ExtensionLite  ));
2242     Assert.assertTrue(message.hasExtension(optionalUint64ExtensionLite  ));
2243     Assert.assertTrue(message.hasExtension(optionalSint32ExtensionLite  ));
2244     Assert.assertTrue(message.hasExtension(optionalSint64ExtensionLite  ));
2245     Assert.assertTrue(message.hasExtension(optionalFixed32ExtensionLite ));
2246     Assert.assertTrue(message.hasExtension(optionalFixed64ExtensionLite ));
2247     Assert.assertTrue(message.hasExtension(optionalSfixed32ExtensionLite));
2248     Assert.assertTrue(message.hasExtension(optionalSfixed64ExtensionLite));
2249     Assert.assertTrue(message.hasExtension(optionalFloatExtensionLite   ));
2250     Assert.assertTrue(message.hasExtension(optionalDoubleExtensionLite  ));
2251     Assert.assertTrue(message.hasExtension(optionalBoolExtensionLite    ));
2252     Assert.assertTrue(message.hasExtension(optionalStringExtensionLite  ));
2253     Assert.assertTrue(message.hasExtension(optionalBytesExtensionLite   ));
2254
2255     Assert.assertTrue(message.hasExtension(optionalGroupExtensionLite         ));
2256     Assert.assertTrue(message.hasExtension(optionalNestedMessageExtensionLite ));
2257     Assert.assertTrue(message.hasExtension(optionalForeignMessageExtensionLite));
2258     Assert.assertTrue(message.hasExtension(optionalImportMessageExtensionLite ));
2259
2260     Assert.assertTrue(message.getExtension(optionalGroupExtensionLite         ).hasA());
2261     Assert.assertTrue(message.getExtension(optionalNestedMessageExtensionLite ).hasBb());
2262     Assert.assertTrue(message.getExtension(optionalForeignMessageExtensionLite).hasC());
2263     Assert.assertTrue(message.getExtension(optionalImportMessageExtensionLite ).hasD());
2264
2265     Assert.assertTrue(message.hasExtension(optionalNestedEnumExtensionLite ));
2266     Assert.assertTrue(message.hasExtension(optionalForeignEnumExtensionLite));
2267     Assert.assertTrue(message.hasExtension(optionalImportEnumExtensionLite ));
2268
2269     Assert.assertTrue(message.hasExtension(optionalStringPieceExtensionLite));
2270     Assert.assertTrue(message.hasExtension(optionalCordExtensionLite));
2271
2272     assertEqualsExactType(101  , message.getExtension(optionalInt32ExtensionLite   ));
2273     assertEqualsExactType(102L , message.getExtension(optionalInt64ExtensionLite   ));
2274     assertEqualsExactType(103  , message.getExtension(optionalUint32ExtensionLite  ));
2275     assertEqualsExactType(104L , message.getExtension(optionalUint64ExtensionLite  ));
2276     assertEqualsExactType(105  , message.getExtension(optionalSint32ExtensionLite  ));
2277     assertEqualsExactType(106L , message.getExtension(optionalSint64ExtensionLite  ));
2278     assertEqualsExactType(107  , message.getExtension(optionalFixed32ExtensionLite ));
2279     assertEqualsExactType(108L , message.getExtension(optionalFixed64ExtensionLite ));
2280     assertEqualsExactType(109  , message.getExtension(optionalSfixed32ExtensionLite));
2281     assertEqualsExactType(110L , message.getExtension(optionalSfixed64ExtensionLite));
2282     assertEqualsExactType(111F , message.getExtension(optionalFloatExtensionLite   ));
2283     assertEqualsExactType(112D , message.getExtension(optionalDoubleExtensionLite  ));
2284     assertEqualsExactType(true , message.getExtension(optionalBoolExtensionLite    ));
2285     assertEqualsExactType("115", message.getExtension(optionalStringExtensionLite  ));
2286     assertEqualsExactType(toBytes("116"), message.getExtension(optionalBytesExtensionLite));
2287
2288     assertEqualsExactType(117, message.getExtension(optionalGroupExtensionLite         ).getA());
2289     assertEqualsExactType(118, message.getExtension(optionalNestedMessageExtensionLite ).getBb());
2290     assertEqualsExactType(119, message.getExtension(optionalForeignMessageExtensionLite).getC());
2291     assertEqualsExactType(120, message.getExtension(optionalImportMessageExtensionLite ).getD());
2292     assertEqualsExactType(126, message.getExtension(
2293         optionalPublicImportMessageExtensionLite).getE());
2294     assertEqualsExactType(127, message.getExtension(optionalLazyMessageExtensionLite).getBb());
2295
2296     assertEqualsExactType(TestAllTypesLite.NestedEnum.BAZ,
2297       message.getExtension(optionalNestedEnumExtensionLite));
2298     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAZ,
2299       message.getExtension(optionalForeignEnumExtensionLite));
2300     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_BAZ,
2301       message.getExtension(optionalImportEnumExtensionLite));
2302
2303     assertEqualsExactType("124", message.getExtension(optionalStringPieceExtensionLite));
2304     assertEqualsExactType("125", message.getExtension(optionalCordExtensionLite));
2305
2306     // -----------------------------------------------------------------
2307
2308     Assert.assertEquals(2, message.getExtensionCount(repeatedInt32ExtensionLite   ));
2309     Assert.assertEquals(2, message.getExtensionCount(repeatedInt64ExtensionLite   ));
2310     Assert.assertEquals(2, message.getExtensionCount(repeatedUint32ExtensionLite  ));
2311     Assert.assertEquals(2, message.getExtensionCount(repeatedUint64ExtensionLite  ));
2312     Assert.assertEquals(2, message.getExtensionCount(repeatedSint32ExtensionLite  ));
2313     Assert.assertEquals(2, message.getExtensionCount(repeatedSint64ExtensionLite  ));
2314     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed32ExtensionLite ));
2315     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed64ExtensionLite ));
2316     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed32ExtensionLite));
2317     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed64ExtensionLite));
2318     Assert.assertEquals(2, message.getExtensionCount(repeatedFloatExtensionLite   ));
2319     Assert.assertEquals(2, message.getExtensionCount(repeatedDoubleExtensionLite  ));
2320     Assert.assertEquals(2, message.getExtensionCount(repeatedBoolExtensionLite    ));
2321     Assert.assertEquals(2, message.getExtensionCount(repeatedStringExtensionLite  ));
2322     Assert.assertEquals(2, message.getExtensionCount(repeatedBytesExtensionLite   ));
2323
2324     Assert.assertEquals(2, message.getExtensionCount(repeatedGroupExtensionLite         ));
2325     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtensionLite ));
2326     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtensionLite));
2327     Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtensionLite ));
2328     Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtensionLite   ));
2329     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtensionLite    ));
2330     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtensionLite   ));
2331     Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtensionLite    ));
2332
2333     Assert.assertEquals(2, message.getExtensionCount(repeatedStringPieceExtensionLite));
2334     Assert.assertEquals(2, message.getExtensionCount(repeatedCordExtensionLite));
2335
2336     assertEqualsExactType(201  , message.getExtension(repeatedInt32ExtensionLite   , 0));
2337     assertEqualsExactType(202L , message.getExtension(repeatedInt64ExtensionLite   , 0));
2338     assertEqualsExactType(203  , message.getExtension(repeatedUint32ExtensionLite  , 0));
2339     assertEqualsExactType(204L , message.getExtension(repeatedUint64ExtensionLite  , 0));
2340     assertEqualsExactType(205  , message.getExtension(repeatedSint32ExtensionLite  , 0));
2341     assertEqualsExactType(206L , message.getExtension(repeatedSint64ExtensionLite  , 0));
2342     assertEqualsExactType(207  , message.getExtension(repeatedFixed32ExtensionLite , 0));
2343     assertEqualsExactType(208L , message.getExtension(repeatedFixed64ExtensionLite , 0));
2344     assertEqualsExactType(209  , message.getExtension(repeatedSfixed32ExtensionLite, 0));
2345     assertEqualsExactType(210L , message.getExtension(repeatedSfixed64ExtensionLite, 0));
2346     assertEqualsExactType(211F , message.getExtension(repeatedFloatExtensionLite   , 0));
2347     assertEqualsExactType(212D , message.getExtension(repeatedDoubleExtensionLite  , 0));
2348     assertEqualsExactType(true , message.getExtension(repeatedBoolExtensionLite    , 0));
2349     assertEqualsExactType("215", message.getExtension(repeatedStringExtensionLite  , 0));
2350     assertEqualsExactType(toBytes("216"), message.getExtension(repeatedBytesExtensionLite, 0));
2351
2352     assertEqualsExactType(217, message.getExtension(repeatedGroupExtensionLite         ,0).getA());
2353     assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtensionLite ,0).getBb());
2354     assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtensionLite,0).getC());
2355     assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtensionLite ,0).getD());
2356     assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtensionLite   ,0).getBb());
2357
2358     assertEqualsExactType(TestAllTypesLite.NestedEnum.BAR,
2359       message.getExtension(repeatedNestedEnumExtensionLite, 0));
2360     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAR,
2361       message.getExtension(repeatedForeignEnumExtensionLite, 0));
2362     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_BAR,
2363       message.getExtension(repeatedImportEnumExtensionLite, 0));
2364
2365     assertEqualsExactType("224", message.getExtension(repeatedStringPieceExtensionLite, 0));
2366     assertEqualsExactType("225", message.getExtension(repeatedCordExtensionLite, 0));
2367
2368     assertEqualsExactType(301  , message.getExtension(repeatedInt32ExtensionLite   , 1));
2369     assertEqualsExactType(302L , message.getExtension(repeatedInt64ExtensionLite   , 1));
2370     assertEqualsExactType(303  , message.getExtension(repeatedUint32ExtensionLite  , 1));
2371     assertEqualsExactType(304L , message.getExtension(repeatedUint64ExtensionLite  , 1));
2372     assertEqualsExactType(305  , message.getExtension(repeatedSint32ExtensionLite  , 1));
2373     assertEqualsExactType(306L , message.getExtension(repeatedSint64ExtensionLite  , 1));
2374     assertEqualsExactType(307  , message.getExtension(repeatedFixed32ExtensionLite , 1));
2375     assertEqualsExactType(308L , message.getExtension(repeatedFixed64ExtensionLite , 1));
2376     assertEqualsExactType(309  , message.getExtension(repeatedSfixed32ExtensionLite, 1));
2377     assertEqualsExactType(310L , message.getExtension(repeatedSfixed64ExtensionLite, 1));
2378     assertEqualsExactType(311F , message.getExtension(repeatedFloatExtensionLite   , 1));
2379     assertEqualsExactType(312D , message.getExtension(repeatedDoubleExtensionLite  , 1));
2380     assertEqualsExactType(false, message.getExtension(repeatedBoolExtensionLite    , 1));
2381     assertEqualsExactType("315", message.getExtension(repeatedStringExtensionLite  , 1));
2382     assertEqualsExactType(toBytes("316"), message.getExtension(repeatedBytesExtensionLite, 1));
2383
2384     assertEqualsExactType(317, message.getExtension(repeatedGroupExtensionLite         ,1).getA());
2385     assertEqualsExactType(318, message.getExtension(repeatedNestedMessageExtensionLite ,1).getBb());
2386     assertEqualsExactType(319, message.getExtension(repeatedForeignMessageExtensionLite,1).getC());
2387     assertEqualsExactType(320, message.getExtension(repeatedImportMessageExtensionLite ,1).getD());
2388     assertEqualsExactType(327, message.getExtension(repeatedLazyMessageExtensionLite   ,1).getBb());
2389
2390     assertEqualsExactType(TestAllTypesLite.NestedEnum.BAZ,
2391       message.getExtension(repeatedNestedEnumExtensionLite, 1));
2392     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAZ,
2393       message.getExtension(repeatedForeignEnumExtensionLite, 1));
2394     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_BAZ,
2395       message.getExtension(repeatedImportEnumExtensionLite, 1));
2396
2397     assertEqualsExactType("324", message.getExtension(repeatedStringPieceExtensionLite, 1));
2398     assertEqualsExactType("325", message.getExtension(repeatedCordExtensionLite, 1));
2399
2400     // -----------------------------------------------------------------
2401
2402     Assert.assertTrue(message.hasExtension(defaultInt32ExtensionLite   ));
2403     Assert.assertTrue(message.hasExtension(defaultInt64ExtensionLite   ));
2404     Assert.assertTrue(message.hasExtension(defaultUint32ExtensionLite  ));
2405     Assert.assertTrue(message.hasExtension(defaultUint64ExtensionLite  ));
2406     Assert.assertTrue(message.hasExtension(defaultSint32ExtensionLite  ));
2407     Assert.assertTrue(message.hasExtension(defaultSint64ExtensionLite  ));
2408     Assert.assertTrue(message.hasExtension(defaultFixed32ExtensionLite ));
2409     Assert.assertTrue(message.hasExtension(defaultFixed64ExtensionLite ));
2410     Assert.assertTrue(message.hasExtension(defaultSfixed32ExtensionLite));
2411     Assert.assertTrue(message.hasExtension(defaultSfixed64ExtensionLite));
2412     Assert.assertTrue(message.hasExtension(defaultFloatExtensionLite   ));
2413     Assert.assertTrue(message.hasExtension(defaultDoubleExtensionLite  ));
2414     Assert.assertTrue(message.hasExtension(defaultBoolExtensionLite    ));
2415     Assert.assertTrue(message.hasExtension(defaultStringExtensionLite  ));
2416     Assert.assertTrue(message.hasExtension(defaultBytesExtensionLite   ));
2417
2418     Assert.assertTrue(message.hasExtension(defaultNestedEnumExtensionLite ));
2419     Assert.assertTrue(message.hasExtension(defaultForeignEnumExtensionLite));
2420     Assert.assertTrue(message.hasExtension(defaultImportEnumExtensionLite ));
2421
2422     Assert.assertTrue(message.hasExtension(defaultStringPieceExtensionLite));
2423     Assert.assertTrue(message.hasExtension(defaultCordExtensionLite));
2424
2425     assertEqualsExactType(401  , message.getExtension(defaultInt32ExtensionLite   ));
2426     assertEqualsExactType(402L , message.getExtension(defaultInt64ExtensionLite   ));
2427     assertEqualsExactType(403  , message.getExtension(defaultUint32ExtensionLite  ));
2428     assertEqualsExactType(404L , message.getExtension(defaultUint64ExtensionLite  ));
2429     assertEqualsExactType(405  , message.getExtension(defaultSint32ExtensionLite  ));
2430     assertEqualsExactType(406L , message.getExtension(defaultSint64ExtensionLite  ));
2431     assertEqualsExactType(407  , message.getExtension(defaultFixed32ExtensionLite ));
2432     assertEqualsExactType(408L , message.getExtension(defaultFixed64ExtensionLite ));
2433     assertEqualsExactType(409  , message.getExtension(defaultSfixed32ExtensionLite));
2434     assertEqualsExactType(410L , message.getExtension(defaultSfixed64ExtensionLite));
2435     assertEqualsExactType(411F , message.getExtension(defaultFloatExtensionLite   ));
2436     assertEqualsExactType(412D , message.getExtension(defaultDoubleExtensionLite  ));
2437     assertEqualsExactType(false, message.getExtension(defaultBoolExtensionLite    ));
2438     assertEqualsExactType("415", message.getExtension(defaultStringExtensionLite  ));
2439     assertEqualsExactType(toBytes("416"), message.getExtension(defaultBytesExtensionLite));
2440
2441     assertEqualsExactType(TestAllTypesLite.NestedEnum.FOO,
2442       message.getExtension(defaultNestedEnumExtensionLite ));
2443     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_FOO,
2444       message.getExtension(defaultForeignEnumExtensionLite));
2445     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_FOO,
2446       message.getExtension(defaultImportEnumExtensionLite));
2447
2448     assertEqualsExactType("424", message.getExtension(defaultStringPieceExtensionLite));
2449     assertEqualsExactType("425", message.getExtension(defaultCordExtensionLite));
2450
2451     Assert.assertTrue(message.hasExtension(oneofBytesExtensionLite));
2452
2453     assertEqualsExactType(toBytes("604"), message.getExtension(oneofBytesExtensionLite));
2454   }
2455
2456   // -------------------------------------------------------------------
2457
2458   /**
2459    * Assert (using {@code junit.framework.Assert}} that all extensions of
2460    * {@code message} are cleared, and that getting the extensions returns their
2461    * default values.
2462    */
2463   public static void assertExtensionsClear(
2464       TestAllExtensionsLiteOrBuilder message) {
2465     // hasBlah() should initially be false for all optional fields.
2466     Assert.assertFalse(message.hasExtension(optionalInt32ExtensionLite   ));
2467     Assert.assertFalse(message.hasExtension(optionalInt64ExtensionLite   ));
2468     Assert.assertFalse(message.hasExtension(optionalUint32ExtensionLite  ));
2469     Assert.assertFalse(message.hasExtension(optionalUint64ExtensionLite  ));
2470     Assert.assertFalse(message.hasExtension(optionalSint32ExtensionLite  ));
2471     Assert.assertFalse(message.hasExtension(optionalSint64ExtensionLite  ));
2472     Assert.assertFalse(message.hasExtension(optionalFixed32ExtensionLite ));
2473     Assert.assertFalse(message.hasExtension(optionalFixed64ExtensionLite ));
2474     Assert.assertFalse(message.hasExtension(optionalSfixed32ExtensionLite));
2475     Assert.assertFalse(message.hasExtension(optionalSfixed64ExtensionLite));
2476     Assert.assertFalse(message.hasExtension(optionalFloatExtensionLite   ));
2477     Assert.assertFalse(message.hasExtension(optionalDoubleExtensionLite  ));
2478     Assert.assertFalse(message.hasExtension(optionalBoolExtensionLite    ));
2479     Assert.assertFalse(message.hasExtension(optionalStringExtensionLite  ));
2480     Assert.assertFalse(message.hasExtension(optionalBytesExtensionLite   ));
2481
2482     Assert.assertFalse(message.hasExtension(optionalGroupExtensionLite              ));
2483     Assert.assertFalse(message.hasExtension(optionalNestedMessageExtensionLite      ));
2484     Assert.assertFalse(message.hasExtension(optionalForeignMessageExtensionLite     ));
2485     Assert.assertFalse(message.hasExtension(optionalImportMessageExtensionLite      ));
2486     Assert.assertFalse(message.hasExtension(optionalPublicImportMessageExtensionLite));
2487     Assert.assertFalse(message.hasExtension(optionalLazyMessageExtensionLite        ));
2488
2489     Assert.assertFalse(message.hasExtension(optionalNestedEnumExtensionLite ));
2490     Assert.assertFalse(message.hasExtension(optionalForeignEnumExtensionLite));
2491     Assert.assertFalse(message.hasExtension(optionalImportEnumExtensionLite ));
2492
2493     Assert.assertFalse(message.hasExtension(optionalStringPieceExtensionLite));
2494     Assert.assertFalse(message.hasExtension(optionalCordExtensionLite));
2495
2496     // Optional fields without defaults are set to zero or something like it.
2497     assertEqualsExactType(0    , message.getExtension(optionalInt32ExtensionLite   ));
2498     assertEqualsExactType(0L   , message.getExtension(optionalInt64ExtensionLite   ));
2499     assertEqualsExactType(0    , message.getExtension(optionalUint32ExtensionLite  ));
2500     assertEqualsExactType(0L   , message.getExtension(optionalUint64ExtensionLite  ));
2501     assertEqualsExactType(0    , message.getExtension(optionalSint32ExtensionLite  ));
2502     assertEqualsExactType(0L   , message.getExtension(optionalSint64ExtensionLite  ));
2503     assertEqualsExactType(0    , message.getExtension(optionalFixed32ExtensionLite ));
2504     assertEqualsExactType(0L   , message.getExtension(optionalFixed64ExtensionLite ));
2505     assertEqualsExactType(0    , message.getExtension(optionalSfixed32ExtensionLite));
2506     assertEqualsExactType(0L   , message.getExtension(optionalSfixed64ExtensionLite));
2507     assertEqualsExactType(0F   , message.getExtension(optionalFloatExtensionLite   ));
2508     assertEqualsExactType(0D   , message.getExtension(optionalDoubleExtensionLite  ));
2509     assertEqualsExactType(false, message.getExtension(optionalBoolExtensionLite    ));
2510     assertEqualsExactType(""   , message.getExtension(optionalStringExtensionLite  ));
2511     assertEqualsExactType(ByteString.EMPTY, message.getExtension(optionalBytesExtensionLite));
2512
2513     // Embedded messages should also be clear.
2514     Assert.assertFalse(message.getExtension(optionalGroupExtensionLite              ).hasA());
2515     Assert.assertFalse(message.getExtension(optionalNestedMessageExtensionLite      ).hasBb());
2516     Assert.assertFalse(message.getExtension(optionalForeignMessageExtensionLite     ).hasC());
2517     Assert.assertFalse(message.getExtension(optionalImportMessageExtensionLite      ).hasD());
2518     Assert.assertFalse(message.getExtension(optionalPublicImportMessageExtensionLite).hasE());
2519     Assert.assertFalse(message.getExtension(optionalLazyMessageExtensionLite        ).hasBb());
2520
2521     assertEqualsExactType(0, message.getExtension(optionalGroupExtensionLite         ).getA());
2522     assertEqualsExactType(0, message.getExtension(optionalNestedMessageExtensionLite ).getBb());
2523     assertEqualsExactType(0, message.getExtension(optionalForeignMessageExtensionLite).getC());
2524     assertEqualsExactType(0, message.getExtension(optionalImportMessageExtensionLite ).getD());
2525     assertEqualsExactType(0, message.getExtension(
2526         optionalPublicImportMessageExtensionLite).getE());
2527     assertEqualsExactType(0, message.getExtension(optionalLazyMessageExtensionLite   ).getBb());
2528
2529     // Enums without defaults are set to the first value in the enum.
2530     assertEqualsExactType(TestAllTypesLite.NestedEnum.FOO,
2531       message.getExtension(optionalNestedEnumExtensionLite ));
2532     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_FOO,
2533       message.getExtension(optionalForeignEnumExtensionLite));
2534     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_FOO,
2535       message.getExtension(optionalImportEnumExtensionLite));
2536
2537     assertEqualsExactType("", message.getExtension(optionalStringPieceExtensionLite));
2538     assertEqualsExactType("", message.getExtension(optionalCordExtensionLite));
2539
2540     // Repeated fields are empty.
2541     Assert.assertEquals(0, message.getExtensionCount(repeatedInt32ExtensionLite   ));
2542     Assert.assertEquals(0, message.getExtensionCount(repeatedInt64ExtensionLite   ));
2543     Assert.assertEquals(0, message.getExtensionCount(repeatedUint32ExtensionLite  ));
2544     Assert.assertEquals(0, message.getExtensionCount(repeatedUint64ExtensionLite  ));
2545     Assert.assertEquals(0, message.getExtensionCount(repeatedSint32ExtensionLite  ));
2546     Assert.assertEquals(0, message.getExtensionCount(repeatedSint64ExtensionLite  ));
2547     Assert.assertEquals(0, message.getExtensionCount(repeatedFixed32ExtensionLite ));
2548     Assert.assertEquals(0, message.getExtensionCount(repeatedFixed64ExtensionLite ));
2549     Assert.assertEquals(0, message.getExtensionCount(repeatedSfixed32ExtensionLite));
2550     Assert.assertEquals(0, message.getExtensionCount(repeatedSfixed64ExtensionLite));
2551     Assert.assertEquals(0, message.getExtensionCount(repeatedFloatExtensionLite   ));
2552     Assert.assertEquals(0, message.getExtensionCount(repeatedDoubleExtensionLite  ));
2553     Assert.assertEquals(0, message.getExtensionCount(repeatedBoolExtensionLite    ));
2554     Assert.assertEquals(0, message.getExtensionCount(repeatedStringExtensionLite  ));
2555     Assert.assertEquals(0, message.getExtensionCount(repeatedBytesExtensionLite   ));
2556
2557     Assert.assertEquals(0, message.getExtensionCount(repeatedGroupExtensionLite         ));
2558     Assert.assertEquals(0, message.getExtensionCount(repeatedNestedMessageExtensionLite ));
2559     Assert.assertEquals(0, message.getExtensionCount(repeatedForeignMessageExtensionLite));
2560     Assert.assertEquals(0, message.getExtensionCount(repeatedImportMessageExtensionLite ));
2561     Assert.assertEquals(0, message.getExtensionCount(repeatedLazyMessageExtensionLite   ));
2562     Assert.assertEquals(0, message.getExtensionCount(repeatedNestedEnumExtensionLite    ));
2563     Assert.assertEquals(0, message.getExtensionCount(repeatedForeignEnumExtensionLite   ));
2564     Assert.assertEquals(0, message.getExtensionCount(repeatedImportEnumExtensionLite    ));
2565
2566     Assert.assertEquals(0, message.getExtensionCount(repeatedStringPieceExtensionLite));
2567     Assert.assertEquals(0, message.getExtensionCount(repeatedCordExtensionLite));
2568
2569     // hasBlah() should also be false for all default fields.
2570     Assert.assertFalse(message.hasExtension(defaultInt32ExtensionLite   ));
2571     Assert.assertFalse(message.hasExtension(defaultInt64ExtensionLite   ));
2572     Assert.assertFalse(message.hasExtension(defaultUint32ExtensionLite  ));
2573     Assert.assertFalse(message.hasExtension(defaultUint64ExtensionLite  ));
2574     Assert.assertFalse(message.hasExtension(defaultSint32ExtensionLite  ));
2575     Assert.assertFalse(message.hasExtension(defaultSint64ExtensionLite  ));
2576     Assert.assertFalse(message.hasExtension(defaultFixed32ExtensionLite ));
2577     Assert.assertFalse(message.hasExtension(defaultFixed64ExtensionLite ));
2578     Assert.assertFalse(message.hasExtension(defaultSfixed32ExtensionLite));
2579     Assert.assertFalse(message.hasExtension(defaultSfixed64ExtensionLite));
2580     Assert.assertFalse(message.hasExtension(defaultFloatExtensionLite   ));
2581     Assert.assertFalse(message.hasExtension(defaultDoubleExtensionLite  ));
2582     Assert.assertFalse(message.hasExtension(defaultBoolExtensionLite    ));
2583     Assert.assertFalse(message.hasExtension(defaultStringExtensionLite  ));
2584     Assert.assertFalse(message.hasExtension(defaultBytesExtensionLite   ));
2585
2586     Assert.assertFalse(message.hasExtension(defaultNestedEnumExtensionLite ));
2587     Assert.assertFalse(message.hasExtension(defaultForeignEnumExtensionLite));
2588     Assert.assertFalse(message.hasExtension(defaultImportEnumExtensionLite ));
2589
2590     Assert.assertFalse(message.hasExtension(defaultStringPieceExtensionLite));
2591     Assert.assertFalse(message.hasExtension(defaultCordExtensionLite));
2592
2593     // Fields with defaults have their default values (duh).
2594     assertEqualsExactType( 41    , message.getExtension(defaultInt32ExtensionLite   ));
2595     assertEqualsExactType( 42L   , message.getExtension(defaultInt64ExtensionLite   ));
2596     assertEqualsExactType( 43    , message.getExtension(defaultUint32ExtensionLite  ));
2597     assertEqualsExactType( 44L   , message.getExtension(defaultUint64ExtensionLite  ));
2598     assertEqualsExactType(-45    , message.getExtension(defaultSint32ExtensionLite  ));
2599     assertEqualsExactType( 46L   , message.getExtension(defaultSint64ExtensionLite  ));
2600     assertEqualsExactType( 47    , message.getExtension(defaultFixed32ExtensionLite ));
2601     assertEqualsExactType( 48L   , message.getExtension(defaultFixed64ExtensionLite ));
2602     assertEqualsExactType( 49    , message.getExtension(defaultSfixed32ExtensionLite));
2603     assertEqualsExactType(-50L   , message.getExtension(defaultSfixed64ExtensionLite));
2604     assertEqualsExactType( 51.5F , message.getExtension(defaultFloatExtensionLite   ));
2605     assertEqualsExactType( 52e3D , message.getExtension(defaultDoubleExtensionLite  ));
2606     assertEqualsExactType(true   , message.getExtension(defaultBoolExtensionLite    ));
2607     assertEqualsExactType("hello", message.getExtension(defaultStringExtensionLite  ));
2608     assertEqualsExactType(toBytes("world"), message.getExtension(defaultBytesExtensionLite));
2609
2610     assertEqualsExactType(TestAllTypesLite.NestedEnum.BAR,
2611       message.getExtension(defaultNestedEnumExtensionLite ));
2612     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAR,
2613       message.getExtension(defaultForeignEnumExtensionLite));
2614     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_BAR,
2615       message.getExtension(defaultImportEnumExtensionLite));
2616
2617     assertEqualsExactType("abc", message.getExtension(defaultStringPieceExtensionLite));
2618     assertEqualsExactType("123", message.getExtension(defaultCordExtensionLite));
2619
2620     Assert.assertFalse(message.hasExtension(oneofUint32ExtensionLite));
2621     Assert.assertFalse(message.hasExtension(oneofNestedMessageExtensionLite));
2622     Assert.assertFalse(message.hasExtension(oneofStringExtensionLite));
2623     Assert.assertFalse(message.hasExtension(oneofBytesExtensionLite));
2624   }
2625
2626   // -------------------------------------------------------------------
2627
2628   /**
2629    * Assert (using {@code junit.framework.Assert}} that all extensions of
2630    * {@code message} are set to the values assigned by {@code setAllExtensions}
2631    * followed by {@code modifyRepeatedExtensions}.
2632    */
2633   public static void assertRepeatedExtensionsModified(
2634       TestAllExtensionsLiteOrBuilder message) {
2635     // ModifyRepeatedFields only sets the second repeated element of each
2636     // field.  In addition to verifying this, we also verify that the first
2637     // element and size were *not* modified.
2638     Assert.assertEquals(2, message.getExtensionCount(repeatedInt32ExtensionLite   ));
2639     Assert.assertEquals(2, message.getExtensionCount(repeatedInt64ExtensionLite   ));
2640     Assert.assertEquals(2, message.getExtensionCount(repeatedUint32ExtensionLite  ));
2641     Assert.assertEquals(2, message.getExtensionCount(repeatedUint64ExtensionLite  ));
2642     Assert.assertEquals(2, message.getExtensionCount(repeatedSint32ExtensionLite  ));
2643     Assert.assertEquals(2, message.getExtensionCount(repeatedSint64ExtensionLite  ));
2644     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed32ExtensionLite ));
2645     Assert.assertEquals(2, message.getExtensionCount(repeatedFixed64ExtensionLite ));
2646     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed32ExtensionLite));
2647     Assert.assertEquals(2, message.getExtensionCount(repeatedSfixed64ExtensionLite));
2648     Assert.assertEquals(2, message.getExtensionCount(repeatedFloatExtensionLite   ));
2649     Assert.assertEquals(2, message.getExtensionCount(repeatedDoubleExtensionLite  ));
2650     Assert.assertEquals(2, message.getExtensionCount(repeatedBoolExtensionLite    ));
2651     Assert.assertEquals(2, message.getExtensionCount(repeatedStringExtensionLite  ));
2652     Assert.assertEquals(2, message.getExtensionCount(repeatedBytesExtensionLite   ));
2653
2654     Assert.assertEquals(2, message.getExtensionCount(repeatedGroupExtensionLite         ));
2655     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtensionLite ));
2656     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtensionLite));
2657     Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtensionLite ));
2658     Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtensionLite   ));
2659     Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtensionLite    ));
2660     Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtensionLite   ));
2661     Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtensionLite    ));
2662
2663     Assert.assertEquals(2, message.getExtensionCount(repeatedStringPieceExtensionLite));
2664     Assert.assertEquals(2, message.getExtensionCount(repeatedCordExtensionLite));
2665
2666     assertEqualsExactType(201  , message.getExtension(repeatedInt32ExtensionLite   , 0));
2667     assertEqualsExactType(202L , message.getExtension(repeatedInt64ExtensionLite   , 0));
2668     assertEqualsExactType(203  , message.getExtension(repeatedUint32ExtensionLite  , 0));
2669     assertEqualsExactType(204L , message.getExtension(repeatedUint64ExtensionLite  , 0));
2670     assertEqualsExactType(205  , message.getExtension(repeatedSint32ExtensionLite  , 0));
2671     assertEqualsExactType(206L , message.getExtension(repeatedSint64ExtensionLite  , 0));
2672     assertEqualsExactType(207  , message.getExtension(repeatedFixed32ExtensionLite , 0));
2673     assertEqualsExactType(208L , message.getExtension(repeatedFixed64ExtensionLite , 0));
2674     assertEqualsExactType(209  , message.getExtension(repeatedSfixed32ExtensionLite, 0));
2675     assertEqualsExactType(210L , message.getExtension(repeatedSfixed64ExtensionLite, 0));
2676     assertEqualsExactType(211F , message.getExtension(repeatedFloatExtensionLite   , 0));
2677     assertEqualsExactType(212D , message.getExtension(repeatedDoubleExtensionLite  , 0));
2678     assertEqualsExactType(true , message.getExtension(repeatedBoolExtensionLite    , 0));
2679     assertEqualsExactType("215", message.getExtension(repeatedStringExtensionLite  , 0));
2680     assertEqualsExactType(toBytes("216"), message.getExtension(repeatedBytesExtensionLite, 0));
2681
2682     assertEqualsExactType(217, message.getExtension(repeatedGroupExtensionLite         ,0).getA());
2683     assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtensionLite ,0).getBb());
2684     assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtensionLite,0).getC());
2685     assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtensionLite ,0).getD());
2686     assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtensionLite   ,0).getBb());
2687
2688     assertEqualsExactType(TestAllTypesLite.NestedEnum.BAR,
2689       message.getExtension(repeatedNestedEnumExtensionLite, 0));
2690     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAR,
2691       message.getExtension(repeatedForeignEnumExtensionLite, 0));
2692     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_BAR,
2693       message.getExtension(repeatedImportEnumExtensionLite, 0));
2694
2695     assertEqualsExactType("224", message.getExtension(repeatedStringPieceExtensionLite, 0));
2696     assertEqualsExactType("225", message.getExtension(repeatedCordExtensionLite, 0));
2697
2698     // Actually verify the second (modified) elements now.
2699     assertEqualsExactType(501  , message.getExtension(repeatedInt32ExtensionLite   , 1));
2700     assertEqualsExactType(502L , message.getExtension(repeatedInt64ExtensionLite   , 1));
2701     assertEqualsExactType(503  , message.getExtension(repeatedUint32ExtensionLite  , 1));
2702     assertEqualsExactType(504L , message.getExtension(repeatedUint64ExtensionLite  , 1));
2703     assertEqualsExactType(505  , message.getExtension(repeatedSint32ExtensionLite  , 1));
2704     assertEqualsExactType(506L , message.getExtension(repeatedSint64ExtensionLite  , 1));
2705     assertEqualsExactType(507  , message.getExtension(repeatedFixed32ExtensionLite , 1));
2706     assertEqualsExactType(508L , message.getExtension(repeatedFixed64ExtensionLite , 1));
2707     assertEqualsExactType(509  , message.getExtension(repeatedSfixed32ExtensionLite, 1));
2708     assertEqualsExactType(510L , message.getExtension(repeatedSfixed64ExtensionLite, 1));
2709     assertEqualsExactType(511F , message.getExtension(repeatedFloatExtensionLite   , 1));
2710     assertEqualsExactType(512D , message.getExtension(repeatedDoubleExtensionLite  , 1));
2711     assertEqualsExactType(true , message.getExtension(repeatedBoolExtensionLite    , 1));
2712     assertEqualsExactType("515", message.getExtension(repeatedStringExtensionLite  , 1));
2713     assertEqualsExactType(toBytes("516"), message.getExtension(repeatedBytesExtensionLite, 1));
2714
2715     assertEqualsExactType(517, message.getExtension(repeatedGroupExtensionLite         ,1).getA());
2716     assertEqualsExactType(518, message.getExtension(repeatedNestedMessageExtensionLite ,1).getBb());
2717     assertEqualsExactType(519, message.getExtension(repeatedForeignMessageExtensionLite,1).getC());
2718     assertEqualsExactType(520, message.getExtension(repeatedImportMessageExtensionLite ,1).getD());
2719     assertEqualsExactType(527, message.getExtension(repeatedLazyMessageExtensionLite   ,1).getBb());
2720
2721     assertEqualsExactType(TestAllTypesLite.NestedEnum.FOO,
2722       message.getExtension(repeatedNestedEnumExtensionLite, 1));
2723     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_FOO,
2724       message.getExtension(repeatedForeignEnumExtensionLite, 1));
2725     assertEqualsExactType(ImportEnumLite.IMPORT_LITE_FOO,
2726       message.getExtension(repeatedImportEnumExtensionLite, 1));
2727
2728     assertEqualsExactType("524", message.getExtension(repeatedStringPieceExtensionLite, 1));
2729     assertEqualsExactType("525", message.getExtension(repeatedCordExtensionLite, 1));
2730   }
2731
2732   public static void setPackedExtensions(TestPackedExtensionsLite.Builder message) {
2733     message.addExtension(packedInt32ExtensionLite   , 601);
2734     message.addExtension(packedInt64ExtensionLite   , 602L);
2735     message.addExtension(packedUint32ExtensionLite  , 603);
2736     message.addExtension(packedUint64ExtensionLite  , 604L);
2737     message.addExtension(packedSint32ExtensionLite  , 605);
2738     message.addExtension(packedSint64ExtensionLite  , 606L);
2739     message.addExtension(packedFixed32ExtensionLite , 607);
2740     message.addExtension(packedFixed64ExtensionLite , 608L);
2741     message.addExtension(packedSfixed32ExtensionLite, 609);
2742     message.addExtension(packedSfixed64ExtensionLite, 610L);
2743     message.addExtension(packedFloatExtensionLite   , 611F);
2744     message.addExtension(packedDoubleExtensionLite  , 612D);
2745     message.addExtension(packedBoolExtensionLite    , true);
2746     message.addExtension(packedEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAR);
2747     // Add a second one of each field.
2748     message.addExtension(packedInt32ExtensionLite   , 701);
2749     message.addExtension(packedInt64ExtensionLite   , 702L);
2750     message.addExtension(packedUint32ExtensionLite  , 703);
2751     message.addExtension(packedUint64ExtensionLite  , 704L);
2752     message.addExtension(packedSint32ExtensionLite  , 705);
2753     message.addExtension(packedSint64ExtensionLite  , 706L);
2754     message.addExtension(packedFixed32ExtensionLite , 707);
2755     message.addExtension(packedFixed64ExtensionLite , 708L);
2756     message.addExtension(packedSfixed32ExtensionLite, 709);
2757     message.addExtension(packedSfixed64ExtensionLite, 710L);
2758     message.addExtension(packedFloatExtensionLite   , 711F);
2759     message.addExtension(packedDoubleExtensionLite  , 712D);
2760     message.addExtension(packedBoolExtensionLite    , false);
2761     message.addExtension(packedEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ);
2762   }
2763
2764   public static void assertPackedExtensionsSet(TestPackedExtensionsLite message) {
2765     Assert.assertEquals(2, message.getExtensionCount(packedInt32ExtensionLite   ));
2766     Assert.assertEquals(2, message.getExtensionCount(packedInt64ExtensionLite   ));
2767     Assert.assertEquals(2, message.getExtensionCount(packedUint32ExtensionLite  ));
2768     Assert.assertEquals(2, message.getExtensionCount(packedUint64ExtensionLite  ));
2769     Assert.assertEquals(2, message.getExtensionCount(packedSint32ExtensionLite  ));
2770     Assert.assertEquals(2, message.getExtensionCount(packedSint64ExtensionLite  ));
2771     Assert.assertEquals(2, message.getExtensionCount(packedFixed32ExtensionLite ));
2772     Assert.assertEquals(2, message.getExtensionCount(packedFixed64ExtensionLite ));
2773     Assert.assertEquals(2, message.getExtensionCount(packedSfixed32ExtensionLite));
2774     Assert.assertEquals(2, message.getExtensionCount(packedSfixed64ExtensionLite));
2775     Assert.assertEquals(2, message.getExtensionCount(packedFloatExtensionLite   ));
2776     Assert.assertEquals(2, message.getExtensionCount(packedDoubleExtensionLite  ));
2777     Assert.assertEquals(2, message.getExtensionCount(packedBoolExtensionLite    ));
2778     Assert.assertEquals(2, message.getExtensionCount(packedEnumExtensionLite));
2779     assertEqualsExactType(601  , message.getExtension(packedInt32ExtensionLite   , 0));
2780     assertEqualsExactType(602L , message.getExtension(packedInt64ExtensionLite   , 0));
2781     assertEqualsExactType(603  , message.getExtension(packedUint32ExtensionLite  , 0));
2782     assertEqualsExactType(604L , message.getExtension(packedUint64ExtensionLite  , 0));
2783     assertEqualsExactType(605  , message.getExtension(packedSint32ExtensionLite  , 0));
2784     assertEqualsExactType(606L , message.getExtension(packedSint64ExtensionLite  , 0));
2785     assertEqualsExactType(607  , message.getExtension(packedFixed32ExtensionLite , 0));
2786     assertEqualsExactType(608L , message.getExtension(packedFixed64ExtensionLite , 0));
2787     assertEqualsExactType(609  , message.getExtension(packedSfixed32ExtensionLite, 0));
2788     assertEqualsExactType(610L , message.getExtension(packedSfixed64ExtensionLite, 0));
2789     assertEqualsExactType(611F , message.getExtension(packedFloatExtensionLite   , 0));
2790     assertEqualsExactType(612D , message.getExtension(packedDoubleExtensionLite  , 0));
2791     assertEqualsExactType(true , message.getExtension(packedBoolExtensionLite    , 0));
2792     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAR,
2793                           message.getExtension(packedEnumExtensionLite, 0));
2794     assertEqualsExactType(701  , message.getExtension(packedInt32ExtensionLite   , 1));
2795     assertEqualsExactType(702L , message.getExtension(packedInt64ExtensionLite   , 1));
2796     assertEqualsExactType(703  , message.getExtension(packedUint32ExtensionLite  , 1));
2797     assertEqualsExactType(704L , message.getExtension(packedUint64ExtensionLite  , 1));
2798     assertEqualsExactType(705  , message.getExtension(packedSint32ExtensionLite  , 1));
2799     assertEqualsExactType(706L , message.getExtension(packedSint64ExtensionLite  , 1));
2800     assertEqualsExactType(707  , message.getExtension(packedFixed32ExtensionLite , 1));
2801     assertEqualsExactType(708L , message.getExtension(packedFixed64ExtensionLite , 1));
2802     assertEqualsExactType(709  , message.getExtension(packedSfixed32ExtensionLite, 1));
2803     assertEqualsExactType(710L , message.getExtension(packedSfixed64ExtensionLite, 1));
2804     assertEqualsExactType(711F , message.getExtension(packedFloatExtensionLite   , 1));
2805     assertEqualsExactType(712D , message.getExtension(packedDoubleExtensionLite  , 1));
2806     assertEqualsExactType(false, message.getExtension(packedBoolExtensionLite    , 1));
2807     assertEqualsExactType(ForeignEnumLite.FOREIGN_LITE_BAZ,
2808                           message.getExtension(packedEnumExtensionLite, 1));
2809   }
2810
2811   // ===================================================================
2812   // oneof
2813   public static void setOneof(TestOneof2.Builder message) {
2814     message.setFooLazyMessage(
2815         TestOneof2.NestedMessage.newBuilder().setQuxInt(100).build());
2816     message.setBarString("101");
2817     message.setBazInt(102);
2818     message.setBazString("103");
2819   }
2820
2821   public static void assertOneofSet(TestOneof2 message) {
2822     Assert.assertTrue(message.hasFooLazyMessage            ());
2823     Assert.assertTrue(message.getFooLazyMessage().hasQuxInt());
2824
2825     Assert.assertTrue(message.hasBarString());
2826     Assert.assertTrue(message.hasBazInt   ());
2827     Assert.assertTrue(message.hasBazString());
2828
2829     Assert.assertEquals(100  , message.getFooLazyMessage().getQuxInt());
2830     Assert.assertEquals("101", message.getBarString                 ());
2831     Assert.assertEquals(102  , message.getBazInt                    ());
2832     Assert.assertEquals("103", message.getBazString                 ());
2833   }
2834
2835   public static void assertAtMostOneFieldSetOneof(TestOneof2 message) {
2836     int count = 0;
2837     if (message.hasFooInt()) { ++count; }
2838     if (message.hasFooString()) { ++count; }
2839     if (message.hasFooCord()) { ++count; }
2840     if (message.hasFooStringPiece()) { ++count; }
2841     if (message.hasFooBytes()) { ++count; }
2842     if (message.hasFooEnum()) { ++count; }
2843     if (message.hasFooMessage()) { ++count; }
2844     if (message.hasFooGroup()) { ++count; }
2845     if (message.hasFooLazyMessage()) { ++count; }
2846     Assert.assertTrue(count <= 1);
2847
2848     count = 0;
2849     if (message.hasBarInt()) { ++count; }
2850     if (message.hasBarString()) { ++count; }
2851     if (message.hasBarCord()) { ++count; }
2852     if (message.hasBarStringPiece()) { ++count; }
2853     if (message.hasBarBytes()) { ++count; }
2854     if (message.hasBarEnum()) { ++count; }
2855     Assert.assertTrue(count <= 1);
2856
2857     switch (message.getFooCase()) {
2858       case FOO_INT:
2859         Assert.assertTrue(message.hasFooInt());
2860         break;
2861       case FOO_STRING:
2862         Assert.assertTrue(message.hasFooString());
2863         break;
2864       case FOO_CORD:
2865         Assert.assertTrue(message.hasFooCord());
2866         break;
2867       case FOO_BYTES:
2868         Assert.assertTrue(message.hasFooBytes());
2869         break;
2870       case FOO_ENUM:
2871         Assert.assertTrue(message.hasFooEnum());
2872         break;
2873       case FOO_MESSAGE:
2874         Assert.assertTrue(message.hasFooMessage());
2875         break;
2876       case FOOGROUP:
2877         Assert.assertTrue(message.hasFooGroup());
2878         break;
2879       case FOO_LAZY_MESSAGE:
2880         Assert.assertTrue(message.hasFooLazyMessage());
2881         break;
2882       case FOO_NOT_SET:
2883         break;
2884     }
2885   }
2886
2887   // =================================================================
2888
2889   /**
2890    * Performs the same things that the methods of {@code TestUtil} do, but
2891    * via the reflection interface.  This is its own class because it needs
2892    * to know what descriptor to use.
2893    */
2894   public static class ReflectionTester {
2895     private final Descriptors.Descriptor baseDescriptor;
2896     private final ExtensionRegistry extensionRegistry;
2897
2898     private final Descriptors.FileDescriptor file;
2899     private final Descriptors.FileDescriptor importFile;
2900     private final Descriptors.FileDescriptor publicImportFile;
2901
2902     private final Descriptors.Descriptor optionalGroup;
2903     private final Descriptors.Descriptor repeatedGroup;
2904     private final Descriptors.Descriptor nestedMessage;
2905     private final Descriptors.Descriptor foreignMessage;
2906     private final Descriptors.Descriptor importMessage;
2907     private final Descriptors.Descriptor publicImportMessage;
2908
2909     private final Descriptors.FieldDescriptor groupA;
2910     private final Descriptors.FieldDescriptor repeatedGroupA;
2911     private final Descriptors.FieldDescriptor nestedB;
2912     private final Descriptors.FieldDescriptor foreignC;
2913     private final Descriptors.FieldDescriptor importD;
2914     private final Descriptors.FieldDescriptor importE;
2915
2916     private final Descriptors.EnumDescriptor nestedEnum;
2917     private final Descriptors.EnumDescriptor foreignEnum;
2918     private final Descriptors.EnumDescriptor importEnum;
2919
2920     private final Descriptors.EnumValueDescriptor nestedFoo;
2921     private final Descriptors.EnumValueDescriptor nestedBar;
2922     private final Descriptors.EnumValueDescriptor nestedBaz;
2923     private final Descriptors.EnumValueDescriptor foreignFoo;
2924     private final Descriptors.EnumValueDescriptor foreignBar;
2925     private final Descriptors.EnumValueDescriptor foreignBaz;
2926     private final Descriptors.EnumValueDescriptor importFoo;
2927     private final Descriptors.EnumValueDescriptor importBar;
2928     private final Descriptors.EnumValueDescriptor importBaz;
2929
2930     /**
2931      * Construct a {@code ReflectionTester} that will expect messages using
2932      * the given descriptor.
2933      *
2934      * Normally {@code baseDescriptor} should be a descriptor for the type
2935      * {@code TestAllTypes}, defined in
2936      * {@code google/protobuf/unittest.proto}.  However, if
2937      * {@code extensionRegistry} is non-null, then {@code baseDescriptor} should
2938      * be for {@code TestAllExtensions} instead, and instead of reading and
2939      * writing normal fields, the tester will read and write extensions.
2940      * All of {@code TestAllExtensions}' extensions must be registered in the
2941      * registry.
2942      */
2943     public ReflectionTester(Descriptors.Descriptor baseDescriptor,
2944                             ExtensionRegistry extensionRegistry) {
2945       this.baseDescriptor = baseDescriptor;
2946       this.extensionRegistry = extensionRegistry;
2947
2948       this.file = baseDescriptor.getFile();
2949       Assert.assertEquals(1, file.getDependencies().size());
2950       this.importFile = file.getDependencies().get(0);
2951       this.publicImportFile = importFile.getDependencies().get(0);
2952
2953       Descriptors.Descriptor testAllTypes;
2954       if (baseDescriptor.getName() == "TestAllTypes") {
2955         testAllTypes = baseDescriptor;
2956       } else {
2957         testAllTypes = file.findMessageTypeByName("TestAllTypes");
2958         Assert.assertNotNull(testAllTypes);
2959       }
2960
2961       if (extensionRegistry == null) {
2962         // Use testAllTypes, rather than baseDescriptor, to allow
2963         // initialization using TestPackedTypes descriptors. These objects
2964         // won't be used by the methods for packed fields.
2965         this.optionalGroup =
2966           testAllTypes.findNestedTypeByName("OptionalGroup");
2967         this.repeatedGroup =
2968           testAllTypes.findNestedTypeByName("RepeatedGroup");
2969       } else {
2970         this.optionalGroup =
2971           file.findMessageTypeByName("OptionalGroup_extension");
2972         this.repeatedGroup =
2973           file.findMessageTypeByName("RepeatedGroup_extension");
2974       }
2975       this.nestedMessage = testAllTypes.findNestedTypeByName("NestedMessage");
2976       this.foreignMessage = file.findMessageTypeByName("ForeignMessage");
2977       this.importMessage = importFile.findMessageTypeByName("ImportMessage");
2978       this.publicImportMessage = publicImportFile.findMessageTypeByName(
2979           "PublicImportMessage");
2980
2981       this.nestedEnum = testAllTypes.findEnumTypeByName("NestedEnum");
2982       this.foreignEnum = file.findEnumTypeByName("ForeignEnum");
2983       this.importEnum = importFile.findEnumTypeByName("ImportEnum");
2984
2985       Assert.assertNotNull(optionalGroup );
2986       Assert.assertNotNull(repeatedGroup );
2987       Assert.assertNotNull(nestedMessage );
2988       Assert.assertNotNull(foreignMessage);
2989       Assert.assertNotNull(importMessage );
2990       Assert.assertNotNull(nestedEnum    );
2991       Assert.assertNotNull(foreignEnum   );
2992       Assert.assertNotNull(importEnum    );
2993
2994       this.nestedB  = nestedMessage .findFieldByName("bb");
2995       this.foreignC = foreignMessage.findFieldByName("c");
2996       this.importD  = importMessage .findFieldByName("d");
2997       this.importE  = publicImportMessage.findFieldByName("e");
2998       this.nestedFoo = nestedEnum.findValueByName("FOO");
2999       this.nestedBar = nestedEnum.findValueByName("BAR");
3000       this.nestedBaz = nestedEnum.findValueByName("BAZ");
3001       this.foreignFoo = foreignEnum.findValueByName("FOREIGN_FOO");
3002       this.foreignBar = foreignEnum.findValueByName("FOREIGN_BAR");
3003       this.foreignBaz = foreignEnum.findValueByName("FOREIGN_BAZ");
3004       this.importFoo = importEnum.findValueByName("IMPORT_FOO");
3005       this.importBar = importEnum.findValueByName("IMPORT_BAR");
3006       this.importBaz = importEnum.findValueByName("IMPORT_BAZ");
3007
3008       this.groupA = optionalGroup.findFieldByName("a");
3009       this.repeatedGroupA = repeatedGroup.findFieldByName("a");
3010
3011       Assert.assertNotNull(groupA        );
3012       Assert.assertNotNull(repeatedGroupA);
3013       Assert.assertNotNull(nestedB       );
3014       Assert.assertNotNull(foreignC      );
3015       Assert.assertNotNull(importD       );
3016       Assert.assertNotNull(importE       );
3017       Assert.assertNotNull(nestedFoo     );
3018       Assert.assertNotNull(nestedBar     );
3019       Assert.assertNotNull(nestedBaz     );
3020       Assert.assertNotNull(foreignFoo    );
3021       Assert.assertNotNull(foreignBar    );
3022       Assert.assertNotNull(foreignBaz    );
3023       Assert.assertNotNull(importFoo     );
3024       Assert.assertNotNull(importBar     );
3025       Assert.assertNotNull(importBaz     );
3026     }
3027
3028     /**
3029      * Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.
3030      */
3031     private Descriptors.FieldDescriptor f(String name) {
3032       Descriptors.FieldDescriptor result;
3033       if (extensionRegistry == null) {
3034         result = baseDescriptor.findFieldByName(name);
3035       } else {
3036         result = file.findExtensionByName(name + "_extension");
3037       }
3038       Assert.assertNotNull(result);
3039       return result;
3040     }
3041
3042     /**
3043      * Calls {@code parent.newBuilderForField()} or uses the
3044      * {@code ExtensionRegistry} to find an appropriate builder, depending
3045      * on what type is being tested.
3046      */
3047     private Message.Builder newBuilderForField(
3048         Message.Builder parent, Descriptors.FieldDescriptor field) {
3049       if (extensionRegistry == null) {
3050         return parent.newBuilderForField(field);
3051       } else {
3052         ExtensionRegistry.ExtensionInfo extension =
3053           extensionRegistry.findImmutableExtensionByNumber(
3054               field.getContainingType(), field.getNumber());
3055         Assert.assertNotNull(extension);
3056         Assert.assertNotNull(extension.defaultInstance);
3057         return extension.defaultInstance.newBuilderForType();
3058       }
3059     }
3060
3061     // -------------------------------------------------------------------
3062
3063     /**
3064      * Set every field of {@code message} to the values expected by
3065      * {@code assertAllFieldsSet()}, using the {@link Message.Builder}
3066      * reflection interface.
3067      */
3068     void setAllFieldsViaReflection(Message.Builder message) {
3069       message.setField(f("optional_int32"   ), 101 );
3070       message.setField(f("optional_int64"   ), 102L);
3071       message.setField(f("optional_uint32"  ), 103 );
3072       message.setField(f("optional_uint64"  ), 104L);
3073       message.setField(f("optional_sint32"  ), 105 );
3074       message.setField(f("optional_sint64"  ), 106L);
3075       message.setField(f("optional_fixed32" ), 107 );
3076       message.setField(f("optional_fixed64" ), 108L);
3077       message.setField(f("optional_sfixed32"), 109 );
3078       message.setField(f("optional_sfixed64"), 110L);
3079       message.setField(f("optional_float"   ), 111F);
3080       message.setField(f("optional_double"  ), 112D);
3081       message.setField(f("optional_bool"    ), true);
3082       message.setField(f("optional_string"  ), "115");
3083       message.setField(f("optional_bytes"   ), toBytes("116"));
3084
3085       message.setField(f("optionalgroup"),
3086         newBuilderForField(message, f("optionalgroup"))
3087                .setField(groupA, 117).build());
3088       message.setField(f("optional_nested_message"),
3089         newBuilderForField(message, f("optional_nested_message"))
3090                .setField(nestedB, 118).build());
3091       message.setField(f("optional_foreign_message"),
3092         newBuilderForField(message, f("optional_foreign_message"))
3093                .setField(foreignC, 119).build());
3094       message.setField(f("optional_import_message"),
3095         newBuilderForField(message, f("optional_import_message"))
3096                .setField(importD, 120).build());
3097       message.setField(f("optional_public_import_message"),
3098         newBuilderForField(message, f("optional_public_import_message"))
3099                .setField(importE, 126).build());
3100       message.setField(f("optional_lazy_message"),
3101         newBuilderForField(message, f("optional_lazy_message"))
3102                .setField(nestedB, 127).build());
3103
3104       message.setField(f("optional_nested_enum" ),  nestedBaz);
3105       message.setField(f("optional_foreign_enum"), foreignBaz);
3106       message.setField(f("optional_import_enum" ),  importBaz);
3107
3108       message.setField(f("optional_string_piece" ), "124");
3109       message.setField(f("optional_cord" ), "125");
3110
3111       // -----------------------------------------------------------------
3112
3113       message.addRepeatedField(f("repeated_int32"   ), 201 );
3114       message.addRepeatedField(f("repeated_int64"   ), 202L);
3115       message.addRepeatedField(f("repeated_uint32"  ), 203 );
3116       message.addRepeatedField(f("repeated_uint64"  ), 204L);
3117       message.addRepeatedField(f("repeated_sint32"  ), 205 );
3118       message.addRepeatedField(f("repeated_sint64"  ), 206L);
3119       message.addRepeatedField(f("repeated_fixed32" ), 207 );
3120       message.addRepeatedField(f("repeated_fixed64" ), 208L);
3121       message.addRepeatedField(f("repeated_sfixed32"), 209 );
3122       message.addRepeatedField(f("repeated_sfixed64"), 210L);
3123       message.addRepeatedField(f("repeated_float"   ), 211F);
3124       message.addRepeatedField(f("repeated_double"  ), 212D);
3125       message.addRepeatedField(f("repeated_bool"    ), true);
3126       message.addRepeatedField(f("repeated_string"  ), "215");
3127       message.addRepeatedField(f("repeated_bytes"   ), toBytes("216"));
3128
3129       message.addRepeatedField(f("repeatedgroup"),
3130         newBuilderForField(message, f("repeatedgroup"))
3131                .setField(repeatedGroupA, 217).build());
3132       message.addRepeatedField(f("repeated_nested_message"),
3133         newBuilderForField(message, f("repeated_nested_message"))
3134                .setField(nestedB, 218).build());
3135       message.addRepeatedField(f("repeated_foreign_message"),
3136         newBuilderForField(message, f("repeated_foreign_message"))
3137                .setField(foreignC, 219).build());
3138       message.addRepeatedField(f("repeated_import_message"),
3139         newBuilderForField(message, f("repeated_import_message"))
3140                .setField(importD, 220).build());
3141       message.addRepeatedField(f("repeated_lazy_message"),
3142         newBuilderForField(message, f("repeated_lazy_message"))
3143                .setField(nestedB, 227).build());
3144
3145       message.addRepeatedField(f("repeated_nested_enum" ),  nestedBar);
3146       message.addRepeatedField(f("repeated_foreign_enum"), foreignBar);
3147       message.addRepeatedField(f("repeated_import_enum" ),  importBar);
3148
3149       message.addRepeatedField(f("repeated_string_piece" ), "224");
3150       message.addRepeatedField(f("repeated_cord" ), "225");
3151
3152       // Add a second one of each field.
3153       message.addRepeatedField(f("repeated_int32"   ), 301 );
3154       message.addRepeatedField(f("repeated_int64"   ), 302L);
3155       message.addRepeatedField(f("repeated_uint32"  ), 303 );
3156       message.addRepeatedField(f("repeated_uint64"  ), 304L);
3157       message.addRepeatedField(f("repeated_sint32"  ), 305 );
3158       message.addRepeatedField(f("repeated_sint64"  ), 306L);
3159       message.addRepeatedField(f("repeated_fixed32" ), 307 );
3160       message.addRepeatedField(f("repeated_fixed64" ), 308L);
3161       message.addRepeatedField(f("repeated_sfixed32"), 309 );
3162       message.addRepeatedField(f("repeated_sfixed64"), 310L);
3163       message.addRepeatedField(f("repeated_float"   ), 311F);
3164       message.addRepeatedField(f("repeated_double"  ), 312D);
3165       message.addRepeatedField(f("repeated_bool"    ), false);
3166       message.addRepeatedField(f("repeated_string"  ), "315");
3167       message.addRepeatedField(f("repeated_bytes"   ), toBytes("316"));
3168
3169       message.addRepeatedField(f("repeatedgroup"),
3170         newBuilderForField(message, f("repeatedgroup"))
3171                .setField(repeatedGroupA, 317).build());
3172       message.addRepeatedField(f("repeated_nested_message"),
3173         newBuilderForField(message, f("repeated_nested_message"))
3174                .setField(nestedB, 318).build());
3175       message.addRepeatedField(f("repeated_foreign_message"),
3176         newBuilderForField(message, f("repeated_foreign_message"))
3177                .setField(foreignC, 319).build());
3178       message.addRepeatedField(f("repeated_import_message"),
3179         newBuilderForField(message, f("repeated_import_message"))
3180                .setField(importD, 320).build());
3181       message.addRepeatedField(f("repeated_lazy_message"),
3182         newBuilderForField(message, f("repeated_lazy_message"))
3183                .setField(nestedB, 327).build());
3184
3185       message.addRepeatedField(f("repeated_nested_enum" ),  nestedBaz);
3186       message.addRepeatedField(f("repeated_foreign_enum"), foreignBaz);
3187       message.addRepeatedField(f("repeated_import_enum" ),  importBaz);
3188
3189       message.addRepeatedField(f("repeated_string_piece" ), "324");
3190       message.addRepeatedField(f("repeated_cord" ), "325");
3191
3192       // -----------------------------------------------------------------
3193
3194       message.setField(f("default_int32"   ), 401 );
3195       message.setField(f("default_int64"   ), 402L);
3196       message.setField(f("default_uint32"  ), 403 );
3197       message.setField(f("default_uint64"  ), 404L);
3198       message.setField(f("default_sint32"  ), 405 );
3199       message.setField(f("default_sint64"  ), 406L);
3200       message.setField(f("default_fixed32" ), 407 );
3201       message.setField(f("default_fixed64" ), 408L);
3202       message.setField(f("default_sfixed32"), 409 );
3203       message.setField(f("default_sfixed64"), 410L);
3204       message.setField(f("default_float"   ), 411F);
3205       message.setField(f("default_double"  ), 412D);
3206       message.setField(f("default_bool"    ), false);
3207       message.setField(f("default_string"  ), "415");
3208       message.setField(f("default_bytes"   ), toBytes("416"));
3209
3210       message.setField(f("default_nested_enum" ),  nestedFoo);
3211       message.setField(f("default_foreign_enum"), foreignFoo);
3212       message.setField(f("default_import_enum" ),  importFoo);
3213
3214       message.setField(f("default_string_piece" ), "424");
3215       message.setField(f("default_cord" ), "425");
3216
3217       message.setField(f("oneof_uint32" ), 601);
3218       message.setField(f("oneof_nested_message"),
3219         newBuilderForField(message, f("oneof_nested_message"))
3220           .setField(nestedB, 602).build());
3221       message.setField(f("oneof_string" ), "603");
3222       message.setField(f("oneof_bytes" ), toBytes("604"));
3223     }
3224
3225     // -------------------------------------------------------------------
3226
3227     /**
3228      * Modify the repeated fields of {@code message} to contain the values
3229      * expected by {@code assertRepeatedFieldsModified()}, using the
3230      * {@link Message.Builder} reflection interface.
3231      */
3232     void modifyRepeatedFieldsViaReflection(Message.Builder message) {
3233       message.setRepeatedField(f("repeated_int32"   ), 1, 501 );
3234       message.setRepeatedField(f("repeated_int64"   ), 1, 502L);
3235       message.setRepeatedField(f("repeated_uint32"  ), 1, 503 );
3236       message.setRepeatedField(f("repeated_uint64"  ), 1, 504L);
3237       message.setRepeatedField(f("repeated_sint32"  ), 1, 505 );
3238       message.setRepeatedField(f("repeated_sint64"  ), 1, 506L);
3239       message.setRepeatedField(f("repeated_fixed32" ), 1, 507 );
3240       message.setRepeatedField(f("repeated_fixed64" ), 1, 508L);
3241       message.setRepeatedField(f("repeated_sfixed32"), 1, 509 );
3242       message.setRepeatedField(f("repeated_sfixed64"), 1, 510L);
3243       message.setRepeatedField(f("repeated_float"   ), 1, 511F);
3244       message.setRepeatedField(f("repeated_double"  ), 1, 512D);
3245       message.setRepeatedField(f("repeated_bool"    ), 1, true);
3246       message.setRepeatedField(f("repeated_string"  ), 1, "515");
3247       message.setRepeatedField(f("repeated_bytes"   ), 1, toBytes("516"));
3248
3249       message.setRepeatedField(f("repeatedgroup"), 1,
3250         newBuilderForField(message, f("repeatedgroup"))
3251                .setField(repeatedGroupA, 517).build());
3252       message.setRepeatedField(f("repeated_nested_message"), 1,
3253         newBuilderForField(message, f("repeated_nested_message"))
3254                .setField(nestedB, 518).build());
3255       message.setRepeatedField(f("repeated_foreign_message"), 1,
3256         newBuilderForField(message, f("repeated_foreign_message"))
3257                .setField(foreignC, 519).build());
3258       message.setRepeatedField(f("repeated_import_message"), 1,
3259         newBuilderForField(message, f("repeated_import_message"))
3260                .setField(importD, 520).build());
3261       message.setRepeatedField(f("repeated_lazy_message"), 1,
3262         newBuilderForField(message, f("repeated_lazy_message"))
3263                .setField(nestedB, 527).build());
3264
3265       message.setRepeatedField(f("repeated_nested_enum" ), 1,  nestedFoo);
3266       message.setRepeatedField(f("repeated_foreign_enum"), 1, foreignFoo);
3267       message.setRepeatedField(f("repeated_import_enum" ), 1,  importFoo);
3268
3269       message.setRepeatedField(f("repeated_string_piece"), 1, "524");
3270       message.setRepeatedField(f("repeated_cord"), 1, "525");
3271     }
3272
3273     // -------------------------------------------------------------------
3274
3275     /**
3276      * Assert (using {@code junit.framework.Assert}} that all fields of
3277      * {@code message} are set to the values assigned by {@code setAllFields},
3278      * using the {@link Message} reflection interface.
3279      */
3280     public void assertAllFieldsSetViaReflection(MessageOrBuilder message) {
3281       Assert.assertTrue(message.hasField(f("optional_int32"   )));
3282       Assert.assertTrue(message.hasField(f("optional_int64"   )));
3283       Assert.assertTrue(message.hasField(f("optional_uint32"  )));
3284       Assert.assertTrue(message.hasField(f("optional_uint64"  )));
3285       Assert.assertTrue(message.hasField(f("optional_sint32"  )));
3286       Assert.assertTrue(message.hasField(f("optional_sint64"  )));
3287       Assert.assertTrue(message.hasField(f("optional_fixed32" )));
3288       Assert.assertTrue(message.hasField(f("optional_fixed64" )));
3289       Assert.assertTrue(message.hasField(f("optional_sfixed32")));
3290       Assert.assertTrue(message.hasField(f("optional_sfixed64")));
3291       Assert.assertTrue(message.hasField(f("optional_float"   )));
3292       Assert.assertTrue(message.hasField(f("optional_double"  )));
3293       Assert.assertTrue(message.hasField(f("optional_bool"    )));
3294       Assert.assertTrue(message.hasField(f("optional_string"  )));
3295       Assert.assertTrue(message.hasField(f("optional_bytes"   )));
3296
3297       Assert.assertTrue(message.hasField(f("optionalgroup"           )));
3298       Assert.assertTrue(message.hasField(f("optional_nested_message" )));
3299       Assert.assertTrue(message.hasField(f("optional_foreign_message")));
3300       Assert.assertTrue(message.hasField(f("optional_import_message" )));
3301
3302       Assert.assertTrue(
3303         ((Message)message.getField(f("optionalgroup"))).hasField(groupA));
3304       Assert.assertTrue(
3305         ((Message)message.getField(f("optional_nested_message")))
3306                          .hasField(nestedB));
3307       Assert.assertTrue(
3308         ((Message)message.getField(f("optional_foreign_message")))
3309                          .hasField(foreignC));
3310       Assert.assertTrue(
3311         ((Message)message.getField(f("optional_import_message")))
3312                          .hasField(importD));
3313
3314       Assert.assertTrue(message.hasField(f("optional_nested_enum" )));
3315       Assert.assertTrue(message.hasField(f("optional_foreign_enum")));
3316       Assert.assertTrue(message.hasField(f("optional_import_enum" )));
3317
3318       Assert.assertTrue(message.hasField(f("optional_string_piece")));
3319       Assert.assertTrue(message.hasField(f("optional_cord")));
3320
3321       Assert.assertEquals(101  , message.getField(f("optional_int32"   )));
3322       Assert.assertEquals(102L , message.getField(f("optional_int64"   )));
3323       Assert.assertEquals(103  , message.getField(f("optional_uint32"  )));
3324       Assert.assertEquals(104L , message.getField(f("optional_uint64"  )));
3325       Assert.assertEquals(105  , message.getField(f("optional_sint32"  )));
3326       Assert.assertEquals(106L , message.getField(f("optional_sint64"  )));
3327       Assert.assertEquals(107  , message.getField(f("optional_fixed32" )));
3328       Assert.assertEquals(108L , message.getField(f("optional_fixed64" )));
3329       Assert.assertEquals(109  , message.getField(f("optional_sfixed32")));
3330       Assert.assertEquals(110L , message.getField(f("optional_sfixed64")));
3331       Assert.assertEquals(111F , message.getField(f("optional_float"   )));
3332       Assert.assertEquals(112D , message.getField(f("optional_double"  )));
3333       Assert.assertEquals(true , message.getField(f("optional_bool"    )));
3334       Assert.assertEquals("115", message.getField(f("optional_string"  )));
3335       Assert.assertEquals(toBytes("116"), message.getField(f("optional_bytes")));
3336
3337       Assert.assertEquals(117,
3338         ((Message)message.getField(f("optionalgroup"))).getField(groupA));
3339       Assert.assertEquals(118,
3340         ((Message)message.getField(f("optional_nested_message")))
3341                          .getField(nestedB));
3342       Assert.assertEquals(119,
3343         ((Message)message.getField(f("optional_foreign_message")))
3344                          .getField(foreignC));
3345       Assert.assertEquals(120,
3346         ((Message)message.getField(f("optional_import_message")))
3347                          .getField(importD));
3348       Assert.assertEquals(126,
3349         ((Message)message.getField(f("optional_public_import_message")))
3350                          .getField(importE));
3351       Assert.assertEquals(127,
3352         ((Message)message.getField(f("optional_lazy_message")))
3353                          .getField(nestedB));
3354
3355       Assert.assertEquals( nestedBaz, message.getField(f("optional_nested_enum" )));
3356       Assert.assertEquals(foreignBaz, message.getField(f("optional_foreign_enum")));
3357       Assert.assertEquals( importBaz, message.getField(f("optional_import_enum" )));
3358
3359       Assert.assertEquals("124", message.getField(f("optional_string_piece")));
3360       Assert.assertEquals("125", message.getField(f("optional_cord")));
3361
3362       // -----------------------------------------------------------------
3363
3364       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_int32"   )));
3365       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_int64"   )));
3366       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_uint32"  )));
3367       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_uint64"  )));
3368       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sint32"  )));
3369       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sint64"  )));
3370       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_fixed32" )));
3371       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_fixed64" )));
3372       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sfixed32")));
3373       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sfixed64")));
3374       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_float"   )));
3375       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_double"  )));
3376       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_bool"    )));
3377       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_string"  )));
3378       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_bytes"   )));
3379
3380       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeatedgroup"           )));
3381       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_message" )));
3382       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_message")));
3383       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_message" )));
3384       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_lazy_message" )));
3385       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_enum"    )));
3386       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_enum"   )));
3387       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_enum"    )));
3388
3389       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_string_piece")));
3390       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_cord")));
3391
3392       Assert.assertEquals(201  , message.getRepeatedField(f("repeated_int32"   ), 0));
3393       Assert.assertEquals(202L , message.getRepeatedField(f("repeated_int64"   ), 0));
3394       Assert.assertEquals(203  , message.getRepeatedField(f("repeated_uint32"  ), 0));
3395       Assert.assertEquals(204L , message.getRepeatedField(f("repeated_uint64"  ), 0));
3396       Assert.assertEquals(205  , message.getRepeatedField(f("repeated_sint32"  ), 0));
3397       Assert.assertEquals(206L , message.getRepeatedField(f("repeated_sint64"  ), 0));
3398       Assert.assertEquals(207  , message.getRepeatedField(f("repeated_fixed32" ), 0));
3399       Assert.assertEquals(208L , message.getRepeatedField(f("repeated_fixed64" ), 0));
3400       Assert.assertEquals(209  , message.getRepeatedField(f("repeated_sfixed32"), 0));
3401       Assert.assertEquals(210L , message.getRepeatedField(f("repeated_sfixed64"), 0));
3402       Assert.assertEquals(211F , message.getRepeatedField(f("repeated_float"   ), 0));
3403       Assert.assertEquals(212D , message.getRepeatedField(f("repeated_double"  ), 0));
3404       Assert.assertEquals(true , message.getRepeatedField(f("repeated_bool"    ), 0));
3405       Assert.assertEquals("215", message.getRepeatedField(f("repeated_string"  ), 0));
3406       Assert.assertEquals(toBytes("216"), message.getRepeatedField(f("repeated_bytes"), 0));
3407
3408       Assert.assertEquals(217,
3409         ((Message)message.getRepeatedField(f("repeatedgroup"), 0))
3410                          .getField(repeatedGroupA));
3411       Assert.assertEquals(218,
3412         ((Message)message.getRepeatedField(f("repeated_nested_message"), 0))
3413                          .getField(nestedB));
3414       Assert.assertEquals(219,
3415         ((Message)message.getRepeatedField(f("repeated_foreign_message"), 0))
3416                          .getField(foreignC));
3417       Assert.assertEquals(220,
3418         ((Message)message.getRepeatedField(f("repeated_import_message"), 0))
3419                          .getField(importD));
3420       Assert.assertEquals(227,
3421         ((Message)message.getRepeatedField(f("repeated_lazy_message"), 0))
3422                          .getField(nestedB));
3423
3424       Assert.assertEquals( nestedBar, message.getRepeatedField(f("repeated_nested_enum" ),0));
3425       Assert.assertEquals(foreignBar, message.getRepeatedField(f("repeated_foreign_enum"),0));
3426       Assert.assertEquals( importBar, message.getRepeatedField(f("repeated_import_enum" ),0));
3427
3428       Assert.assertEquals("224", message.getRepeatedField(f("repeated_string_piece"), 0));
3429       Assert.assertEquals("225", message.getRepeatedField(f("repeated_cord"), 0));
3430
3431       Assert.assertEquals(301  , message.getRepeatedField(f("repeated_int32"   ), 1));
3432       Assert.assertEquals(302L , message.getRepeatedField(f("repeated_int64"   ), 1));
3433       Assert.assertEquals(303  , message.getRepeatedField(f("repeated_uint32"  ), 1));
3434       Assert.assertEquals(304L , message.getRepeatedField(f("repeated_uint64"  ), 1));
3435       Assert.assertEquals(305  , message.getRepeatedField(f("repeated_sint32"  ), 1));
3436       Assert.assertEquals(306L , message.getRepeatedField(f("repeated_sint64"  ), 1));
3437       Assert.assertEquals(307  , message.getRepeatedField(f("repeated_fixed32" ), 1));
3438       Assert.assertEquals(308L , message.getRepeatedField(f("repeated_fixed64" ), 1));
3439       Assert.assertEquals(309  , message.getRepeatedField(f("repeated_sfixed32"), 1));
3440       Assert.assertEquals(310L , message.getRepeatedField(f("repeated_sfixed64"), 1));
3441       Assert.assertEquals(311F , message.getRepeatedField(f("repeated_float"   ), 1));
3442       Assert.assertEquals(312D , message.getRepeatedField(f("repeated_double"  ), 1));
3443       Assert.assertEquals(false, message.getRepeatedField(f("repeated_bool"    ), 1));
3444       Assert.assertEquals("315", message.getRepeatedField(f("repeated_string"  ), 1));
3445       Assert.assertEquals(toBytes("316"), message.getRepeatedField(f("repeated_bytes"), 1));
3446
3447       Assert.assertEquals(317,
3448         ((Message)message.getRepeatedField(f("repeatedgroup"), 1))
3449                          .getField(repeatedGroupA));
3450       Assert.assertEquals(318,
3451         ((Message)message.getRepeatedField(f("repeated_nested_message"), 1))
3452                          .getField(nestedB));
3453       Assert.assertEquals(319,
3454         ((Message)message.getRepeatedField(f("repeated_foreign_message"), 1))
3455                          .getField(foreignC));
3456       Assert.assertEquals(320,
3457         ((Message)message.getRepeatedField(f("repeated_import_message"), 1))
3458                          .getField(importD));
3459       Assert.assertEquals(327,
3460         ((Message)message.getRepeatedField(f("repeated_lazy_message"), 1))
3461                          .getField(nestedB));
3462
3463       Assert.assertEquals( nestedBaz, message.getRepeatedField(f("repeated_nested_enum" ),1));
3464       Assert.assertEquals(foreignBaz, message.getRepeatedField(f("repeated_foreign_enum"),1));
3465       Assert.assertEquals( importBaz, message.getRepeatedField(f("repeated_import_enum" ),1));
3466
3467       Assert.assertEquals("324", message.getRepeatedField(f("repeated_string_piece"), 1));
3468       Assert.assertEquals("325", message.getRepeatedField(f("repeated_cord"), 1));
3469
3470       // -----------------------------------------------------------------
3471
3472       Assert.assertTrue(message.hasField(f("default_int32"   )));
3473       Assert.assertTrue(message.hasField(f("default_int64"   )));
3474       Assert.assertTrue(message.hasField(f("default_uint32"  )));
3475       Assert.assertTrue(message.hasField(f("default_uint64"  )));
3476       Assert.assertTrue(message.hasField(f("default_sint32"  )));
3477       Assert.assertTrue(message.hasField(f("default_sint64"  )));
3478       Assert.assertTrue(message.hasField(f("default_fixed32" )));
3479       Assert.assertTrue(message.hasField(f("default_fixed64" )));
3480       Assert.assertTrue(message.hasField(f("default_sfixed32")));
3481       Assert.assertTrue(message.hasField(f("default_sfixed64")));
3482       Assert.assertTrue(message.hasField(f("default_float"   )));
3483       Assert.assertTrue(message.hasField(f("default_double"  )));
3484       Assert.assertTrue(message.hasField(f("default_bool"    )));
3485       Assert.assertTrue(message.hasField(f("default_string"  )));
3486       Assert.assertTrue(message.hasField(f("default_bytes"   )));
3487
3488       Assert.assertTrue(message.hasField(f("default_nested_enum" )));
3489       Assert.assertTrue(message.hasField(f("default_foreign_enum")));
3490       Assert.assertTrue(message.hasField(f("default_import_enum" )));
3491
3492       Assert.assertTrue(message.hasField(f("default_string_piece")));
3493       Assert.assertTrue(message.hasField(f("default_cord")));
3494
3495       Assert.assertEquals(401  , message.getField(f("default_int32"   )));
3496       Assert.assertEquals(402L , message.getField(f("default_int64"   )));
3497       Assert.assertEquals(403  , message.getField(f("default_uint32"  )));
3498       Assert.assertEquals(404L , message.getField(f("default_uint64"  )));
3499       Assert.assertEquals(405  , message.getField(f("default_sint32"  )));
3500       Assert.assertEquals(406L , message.getField(f("default_sint64"  )));
3501       Assert.assertEquals(407  , message.getField(f("default_fixed32" )));
3502       Assert.assertEquals(408L , message.getField(f("default_fixed64" )));
3503       Assert.assertEquals(409  , message.getField(f("default_sfixed32")));
3504       Assert.assertEquals(410L , message.getField(f("default_sfixed64")));
3505       Assert.assertEquals(411F , message.getField(f("default_float"   )));
3506       Assert.assertEquals(412D , message.getField(f("default_double"  )));
3507       Assert.assertEquals(false, message.getField(f("default_bool"    )));
3508       Assert.assertEquals("415", message.getField(f("default_string"  )));
3509       Assert.assertEquals(toBytes("416"), message.getField(f("default_bytes")));
3510
3511       Assert.assertEquals( nestedFoo, message.getField(f("default_nested_enum" )));
3512       Assert.assertEquals(foreignFoo, message.getField(f("default_foreign_enum")));
3513       Assert.assertEquals( importFoo, message.getField(f("default_import_enum" )));
3514
3515       Assert.assertEquals("424", message.getField(f("default_string_piece")));
3516       Assert.assertEquals("425", message.getField(f("default_cord")));
3517
3518       Assert.assertTrue(message.hasField(f("oneof_bytes")));
3519       Assert.assertEquals(toBytes("604"), message.getField(f("oneof_bytes")));
3520
3521       if (extensionRegistry == null) {
3522         Assert.assertFalse(message.hasField(f("oneof_uint32")));
3523         Assert.assertFalse(message.hasField(f("oneof_nested_message")));
3524         Assert.assertFalse(message.hasField(f("oneof_string")));
3525       } else {
3526         Assert.assertTrue(message.hasField(f("oneof_uint32")));
3527         Assert.assertTrue(message.hasField(f("oneof_nested_message")));
3528         Assert.assertTrue(message.hasField(f("oneof_string")));
3529         Assert.assertEquals(601, message.getField(f("oneof_uint32")));
3530         Assert.assertEquals(602,
3531             ((MessageOrBuilder) message.getField(f("oneof_nested_message")))
3532             .getField(nestedB));
3533         Assert.assertEquals("603", message.getField(f("oneof_string")));
3534       }
3535     }
3536
3537     // -------------------------------------------------------------------
3538
3539     /**
3540      * Assert (using {@code junit.framework.Assert}} that all fields of
3541      * {@code message} are cleared, and that getting the fields returns their
3542      * default values, using the {@link Message} reflection interface.
3543      */
3544     public void assertClearViaReflection(MessageOrBuilder message) {
3545       // has_blah() should initially be false for all optional fields.
3546       Assert.assertFalse(message.hasField(f("optional_int32"   )));
3547       Assert.assertFalse(message.hasField(f("optional_int64"   )));
3548       Assert.assertFalse(message.hasField(f("optional_uint32"  )));
3549       Assert.assertFalse(message.hasField(f("optional_uint64"  )));
3550       Assert.assertFalse(message.hasField(f("optional_sint32"  )));
3551       Assert.assertFalse(message.hasField(f("optional_sint64"  )));
3552       Assert.assertFalse(message.hasField(f("optional_fixed32" )));
3553       Assert.assertFalse(message.hasField(f("optional_fixed64" )));
3554       Assert.assertFalse(message.hasField(f("optional_sfixed32")));
3555       Assert.assertFalse(message.hasField(f("optional_sfixed64")));
3556       Assert.assertFalse(message.hasField(f("optional_float"   )));
3557       Assert.assertFalse(message.hasField(f("optional_double"  )));
3558       Assert.assertFalse(message.hasField(f("optional_bool"    )));
3559       Assert.assertFalse(message.hasField(f("optional_string"  )));
3560       Assert.assertFalse(message.hasField(f("optional_bytes"   )));
3561
3562       Assert.assertFalse(message.hasField(f("optionalgroup"           )));
3563       Assert.assertFalse(message.hasField(f("optional_nested_message" )));
3564       Assert.assertFalse(message.hasField(f("optional_foreign_message")));
3565       Assert.assertFalse(message.hasField(f("optional_import_message" )));
3566
3567       Assert.assertFalse(message.hasField(f("optional_nested_enum" )));
3568       Assert.assertFalse(message.hasField(f("optional_foreign_enum")));
3569       Assert.assertFalse(message.hasField(f("optional_import_enum" )));
3570
3571       Assert.assertFalse(message.hasField(f("optional_string_piece")));
3572       Assert.assertFalse(message.hasField(f("optional_cord")));
3573
3574       // Optional fields without defaults are set to zero or something like it.
3575       Assert.assertEquals(0    , message.getField(f("optional_int32"   )));
3576       Assert.assertEquals(0L   , message.getField(f("optional_int64"   )));
3577       Assert.assertEquals(0    , message.getField(f("optional_uint32"  )));
3578       Assert.assertEquals(0L   , message.getField(f("optional_uint64"  )));
3579       Assert.assertEquals(0    , message.getField(f("optional_sint32"  )));
3580       Assert.assertEquals(0L   , message.getField(f("optional_sint64"  )));
3581       Assert.assertEquals(0    , message.getField(f("optional_fixed32" )));
3582       Assert.assertEquals(0L   , message.getField(f("optional_fixed64" )));
3583       Assert.assertEquals(0    , message.getField(f("optional_sfixed32")));
3584       Assert.assertEquals(0L   , message.getField(f("optional_sfixed64")));
3585       Assert.assertEquals(0F   , message.getField(f("optional_float"   )));
3586       Assert.assertEquals(0D   , message.getField(f("optional_double"  )));
3587       Assert.assertEquals(false, message.getField(f("optional_bool"    )));
3588       Assert.assertEquals(""   , message.getField(f("optional_string"  )));
3589       Assert.assertEquals(ByteString.EMPTY, message.getField(f("optional_bytes")));
3590
3591       // Embedded messages should also be clear.
3592       Assert.assertFalse(
3593         ((Message)message.getField(f("optionalgroup"))).hasField(groupA));
3594       Assert.assertFalse(
3595         ((Message)message.getField(f("optional_nested_message")))
3596                          .hasField(nestedB));
3597       Assert.assertFalse(
3598         ((Message)message.getField(f("optional_foreign_message")))
3599                          .hasField(foreignC));
3600       Assert.assertFalse(
3601         ((Message)message.getField(f("optional_import_message")))
3602                          .hasField(importD));
3603       Assert.assertFalse(
3604         ((Message)message.getField(f("optional_public_import_message")))
3605                          .hasField(importE));
3606       Assert.assertFalse(
3607         ((Message)message.getField(f("optional_lazy_message")))
3608                          .hasField(nestedB));
3609
3610       Assert.assertEquals(0,
3611         ((Message)message.getField(f("optionalgroup"))).getField(groupA));
3612       Assert.assertEquals(0,
3613         ((Message)message.getField(f("optional_nested_message")))
3614                          .getField(nestedB));
3615       Assert.assertEquals(0,
3616         ((Message)message.getField(f("optional_foreign_message")))
3617                          .getField(foreignC));
3618       Assert.assertEquals(0,
3619         ((Message)message.getField(f("optional_import_message")))
3620                          .getField(importD));
3621       Assert.assertEquals(0,
3622         ((Message)message.getField(f("optional_public_import_message")))
3623                          .getField(importE));
3624       Assert.assertEquals(0,
3625         ((Message)message.getField(f("optional_lazy_message")))
3626                          .getField(nestedB));
3627
3628       // Enums without defaults are set to the first value in the enum.
3629       Assert.assertEquals( nestedFoo, message.getField(f("optional_nested_enum" )));
3630       Assert.assertEquals(foreignFoo, message.getField(f("optional_foreign_enum")));
3631       Assert.assertEquals( importFoo, message.getField(f("optional_import_enum" )));
3632
3633       Assert.assertEquals("", message.getField(f("optional_string_piece")));
3634       Assert.assertEquals("", message.getField(f("optional_cord")));
3635
3636       // Repeated fields are empty.
3637       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_int32"   )));
3638       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_int64"   )));
3639       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_uint32"  )));
3640       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_uint64"  )));
3641       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_sint32"  )));
3642       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_sint64"  )));
3643       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_fixed32" )));
3644       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_fixed64" )));
3645       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_sfixed32")));
3646       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_sfixed64")));
3647       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_float"   )));
3648       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_double"  )));
3649       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_bool"    )));
3650       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_string"  )));
3651       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_bytes"   )));
3652
3653       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeatedgroup"           )));
3654       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_nested_message" )));
3655       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_foreign_message")));
3656       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_import_message" )));
3657       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_lazy_message"   )));
3658       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_nested_enum"    )));
3659       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_foreign_enum"   )));
3660       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_import_enum"    )));
3661
3662       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_string_piece")));
3663       Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_cord")));
3664
3665       // has_blah() should also be false for all default fields.
3666       Assert.assertFalse(message.hasField(f("default_int32"   )));
3667       Assert.assertFalse(message.hasField(f("default_int64"   )));
3668       Assert.assertFalse(message.hasField(f("default_uint32"  )));
3669       Assert.assertFalse(message.hasField(f("default_uint64"  )));
3670       Assert.assertFalse(message.hasField(f("default_sint32"  )));
3671       Assert.assertFalse(message.hasField(f("default_sint64"  )));
3672       Assert.assertFalse(message.hasField(f("default_fixed32" )));
3673       Assert.assertFalse(message.hasField(f("default_fixed64" )));
3674       Assert.assertFalse(message.hasField(f("default_sfixed32")));
3675       Assert.assertFalse(message.hasField(f("default_sfixed64")));
3676       Assert.assertFalse(message.hasField(f("default_float"   )));
3677       Assert.assertFalse(message.hasField(f("default_double"  )));
3678       Assert.assertFalse(message.hasField(f("default_bool"    )));
3679       Assert.assertFalse(message.hasField(f("default_string"  )));
3680       Assert.assertFalse(message.hasField(f("default_bytes"   )));
3681
3682       Assert.assertFalse(message.hasField(f("default_nested_enum" )));
3683       Assert.assertFalse(message.hasField(f("default_foreign_enum")));
3684       Assert.assertFalse(message.hasField(f("default_import_enum" )));
3685
3686       Assert.assertFalse(message.hasField(f("default_string_piece" )));
3687       Assert.assertFalse(message.hasField(f("default_cord" )));
3688
3689       // Fields with defaults have their default values (duh).
3690       Assert.assertEquals( 41    , message.getField(f("default_int32"   )));
3691       Assert.assertEquals( 42L   , message.getField(f("default_int64"   )));
3692       Assert.assertEquals( 43    , message.getField(f("default_uint32"  )));
3693       Assert.assertEquals( 44L   , message.getField(f("default_uint64"  )));
3694       Assert.assertEquals(-45    , message.getField(f("default_sint32"  )));
3695       Assert.assertEquals( 46L   , message.getField(f("default_sint64"  )));
3696       Assert.assertEquals( 47    , message.getField(f("default_fixed32" )));
3697       Assert.assertEquals( 48L   , message.getField(f("default_fixed64" )));
3698       Assert.assertEquals( 49    , message.getField(f("default_sfixed32")));
3699       Assert.assertEquals(-50L   , message.getField(f("default_sfixed64")));
3700       Assert.assertEquals( 51.5F , message.getField(f("default_float"   )));
3701       Assert.assertEquals( 52e3D , message.getField(f("default_double"  )));
3702       Assert.assertEquals(true   , message.getField(f("default_bool"    )));
3703       Assert.assertEquals("hello", message.getField(f("default_string"  )));
3704       Assert.assertEquals(toBytes("world"), message.getField(f("default_bytes")));
3705
3706       Assert.assertEquals( nestedBar, message.getField(f("default_nested_enum" )));
3707       Assert.assertEquals(foreignBar, message.getField(f("default_foreign_enum")));
3708       Assert.assertEquals( importBar, message.getField(f("default_import_enum" )));
3709
3710       Assert.assertEquals("abc", message.getField(f("default_string_piece")));
3711       Assert.assertEquals("123", message.getField(f("default_cord")));
3712
3713       Assert.assertFalse(message.hasField(f("oneof_uint32")));
3714       Assert.assertFalse(message.hasField(f("oneof_nested_message")));
3715       Assert.assertFalse(message.hasField(f("oneof_string")));
3716       Assert.assertFalse(message.hasField(f("oneof_bytes")));
3717
3718       Assert.assertEquals(0, message.getField(f("oneof_uint32")));
3719       Assert.assertEquals("", message.getField(f("oneof_string")));
3720       Assert.assertEquals(toBytes(""), message.getField(f("oneof_bytes")));
3721     }
3722
3723
3724     // ---------------------------------------------------------------
3725
3726     public void assertRepeatedFieldsModifiedViaReflection(
3727         MessageOrBuilder message) {
3728       // ModifyRepeatedFields only sets the second repeated element of each
3729       // field.  In addition to verifying this, we also verify that the first
3730       // element and size were *not* modified.
3731       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_int32"   )));
3732       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_int64"   )));
3733       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_uint32"  )));
3734       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_uint64"  )));
3735       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sint32"  )));
3736       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sint64"  )));
3737       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_fixed32" )));
3738       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_fixed64" )));
3739       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sfixed32")));
3740       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_sfixed64")));
3741       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_float"   )));
3742       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_double"  )));
3743       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_bool"    )));
3744       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_string"  )));
3745       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_bytes"   )));
3746
3747       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeatedgroup"           )));
3748       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_message" )));
3749       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_message")));
3750       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_message" )));
3751       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_lazy_message"   )));
3752       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_enum"    )));
3753       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_enum"   )));
3754       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_enum"    )));
3755
3756       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_string_piece")));
3757       Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_cord")));
3758
3759       Assert.assertEquals(201  , message.getRepeatedField(f("repeated_int32"   ), 0));
3760       Assert.assertEquals(202L , message.getRepeatedField(f("repeated_int64"   ), 0));
3761       Assert.assertEquals(203  , message.getRepeatedField(f("repeated_uint32"  ), 0));
3762       Assert.assertEquals(204L , message.getRepeatedField(f("repeated_uint64"  ), 0));
3763       Assert.assertEquals(205  , message.getRepeatedField(f("repeated_sint32"  ), 0));
3764       Assert.assertEquals(206L , message.getRepeatedField(f("repeated_sint64"  ), 0));
3765       Assert.assertEquals(207  , message.getRepeatedField(f("repeated_fixed32" ), 0));
3766       Assert.assertEquals(208L , message.getRepeatedField(f("repeated_fixed64" ), 0));
3767       Assert.assertEquals(209  , message.getRepeatedField(f("repeated_sfixed32"), 0));
3768       Assert.assertEquals(210L , message.getRepeatedField(f("repeated_sfixed64"), 0));
3769       Assert.assertEquals(211F , message.getRepeatedField(f("repeated_float"   ), 0));
3770       Assert.assertEquals(212D , message.getRepeatedField(f("repeated_double"  ), 0));
3771       Assert.assertEquals(true , message.getRepeatedField(f("repeated_bool"    ), 0));
3772       Assert.assertEquals("215", message.getRepeatedField(f("repeated_string"  ), 0));
3773       Assert.assertEquals(toBytes("216"), message.getRepeatedField(f("repeated_bytes"), 0));
3774
3775       Assert.assertEquals(217,
3776         ((Message)message.getRepeatedField(f("repeatedgroup"), 0))
3777                          .getField(repeatedGroupA));
3778       Assert.assertEquals(218,
3779         ((Message)message.getRepeatedField(f("repeated_nested_message"), 0))
3780                          .getField(nestedB));
3781       Assert.assertEquals(219,
3782         ((Message)message.getRepeatedField(f("repeated_foreign_message"), 0))
3783                          .getField(foreignC));
3784       Assert.assertEquals(220,
3785         ((Message)message.getRepeatedField(f("repeated_import_message"), 0))
3786                          .getField(importD));
3787       Assert.assertEquals(227,
3788         ((Message)message.getRepeatedField(f("repeated_lazy_message"), 0))
3789                          .getField(nestedB));
3790
3791       Assert.assertEquals( nestedBar, message.getRepeatedField(f("repeated_nested_enum" ),0));
3792       Assert.assertEquals(foreignBar, message.getRepeatedField(f("repeated_foreign_enum"),0));
3793       Assert.assertEquals( importBar, message.getRepeatedField(f("repeated_import_enum" ),0));
3794
3795       Assert.assertEquals("224", message.getRepeatedField(f("repeated_string_piece"), 0));
3796       Assert.assertEquals("225", message.getRepeatedField(f("repeated_cord"), 0));
3797
3798       Assert.assertEquals(501  , message.getRepeatedField(f("repeated_int32"   ), 1));
3799       Assert.assertEquals(502L , message.getRepeatedField(f("repeated_int64"   ), 1));
3800       Assert.assertEquals(503  , message.getRepeatedField(f("repeated_uint32"  ), 1));
3801       Assert.assertEquals(504L , message.getRepeatedField(f("repeated_uint64"  ), 1));
3802       Assert.assertEquals(505  , message.getRepeatedField(f("repeated_sint32"  ), 1));
3803       Assert.assertEquals(506L , message.getRepeatedField(f("repeated_sint64"  ), 1));
3804       Assert.assertEquals(507  , message.getRepeatedField(f("repeated_fixed32" ), 1));
3805       Assert.assertEquals(508L , message.getRepeatedField(f("repeated_fixed64" ), 1));
3806       Assert.assertEquals(509  , message.getRepeatedField(f("repeated_sfixed32"), 1));
3807       Assert.assertEquals(510L , message.getRepeatedField(f("repeated_sfixed64"), 1));
3808       Assert.assertEquals(511F , message.getRepeatedField(f("repeated_float"   ), 1));
3809       Assert.assertEquals(512D , message.getRepeatedField(f("repeated_double"  ), 1));
3810       Assert.assertEquals(true , message.getRepeatedField(f("repeated_bool"    ), 1));
3811       Assert.assertEquals("515", message.getRepeatedField(f("repeated_string"  ), 1));
3812       Assert.assertEquals(toBytes("516"), message.getRepeatedField(f("repeated_bytes"), 1));
3813
3814       Assert.assertEquals(517,
3815         ((Message)message.getRepeatedField(f("repeatedgroup"), 1))
3816                          .getField(repeatedGroupA));
3817       Assert.assertEquals(518,
3818         ((Message)message.getRepeatedField(f("repeated_nested_message"), 1))
3819                          .getField(nestedB));
3820       Assert.assertEquals(519,
3821         ((Message)message.getRepeatedField(f("repeated_foreign_message"), 1))
3822                          .getField(foreignC));
3823       Assert.assertEquals(520,
3824         ((Message)message.getRepeatedField(f("repeated_import_message"), 1))
3825                          .getField(importD));
3826       Assert.assertEquals(527,
3827         ((Message)message.getRepeatedField(f("repeated_lazy_message"), 1))
3828                          .getField(nestedB));
3829
3830       Assert.assertEquals( nestedFoo, message.getRepeatedField(f("repeated_nested_enum" ),1));
3831       Assert.assertEquals(foreignFoo, message.getRepeatedField(f("repeated_foreign_enum"),1));
3832       Assert.assertEquals( importFoo, message.getRepeatedField(f("repeated_import_enum" ),1));
3833
3834       Assert.assertEquals("524", message.getRepeatedField(f("repeated_string_piece"), 1));
3835       Assert.assertEquals("525", message.getRepeatedField(f("repeated_cord"), 1));
3836     }
3837
3838     public void setPackedFieldsViaReflection(Message.Builder message) {
3839       message.addRepeatedField(f("packed_int32"   ), 601 );
3840       message.addRepeatedField(f("packed_int64"   ), 602L);
3841       message.addRepeatedField(f("packed_uint32"  ), 603 );
3842       message.addRepeatedField(f("packed_uint64"  ), 604L);
3843       message.addRepeatedField(f("packed_sint32"  ), 605 );
3844       message.addRepeatedField(f("packed_sint64"  ), 606L);
3845       message.addRepeatedField(f("packed_fixed32" ), 607 );
3846       message.addRepeatedField(f("packed_fixed64" ), 608L);
3847       message.addRepeatedField(f("packed_sfixed32"), 609 );
3848       message.addRepeatedField(f("packed_sfixed64"), 610L);
3849       message.addRepeatedField(f("packed_float"   ), 611F);
3850       message.addRepeatedField(f("packed_double"  ), 612D);
3851       message.addRepeatedField(f("packed_bool"    ), true);
3852       message.addRepeatedField(f("packed_enum" ),  foreignBar);
3853       // Add a second one of each field.
3854       message.addRepeatedField(f("packed_int32"   ), 701 );
3855       message.addRepeatedField(f("packed_int64"   ), 702L);
3856       message.addRepeatedField(f("packed_uint32"  ), 703 );
3857       message.addRepeatedField(f("packed_uint64"  ), 704L);
3858       message.addRepeatedField(f("packed_sint32"  ), 705 );
3859       message.addRepeatedField(f("packed_sint64"  ), 706L);
3860       message.addRepeatedField(f("packed_fixed32" ), 707 );
3861       message.addRepeatedField(f("packed_fixed64" ), 708L);
3862       message.addRepeatedField(f("packed_sfixed32"), 709 );
3863       message.addRepeatedField(f("packed_sfixed64"), 710L);
3864       message.addRepeatedField(f("packed_float"   ), 711F);
3865       message.addRepeatedField(f("packed_double"  ), 712D);
3866       message.addRepeatedField(f("packed_bool"    ), false);
3867       message.addRepeatedField(f("packed_enum" ),  foreignBaz);
3868     }
3869
3870     public void assertPackedFieldsSetViaReflection(MessageOrBuilder message) {
3871       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_int32"   )));
3872       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_int64"   )));
3873       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_uint32"  )));
3874       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_uint64"  )));
3875       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_sint32"  )));
3876       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_sint64"  )));
3877       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_fixed32" )));
3878       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_fixed64" )));
3879       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_sfixed32")));
3880       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_sfixed64")));
3881       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_float"   )));
3882       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_double"  )));
3883       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_bool"    )));
3884       Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_enum"   )));
3885       Assert.assertEquals(601  , message.getRepeatedField(f("packed_int32"   ), 0));
3886       Assert.assertEquals(602L , message.getRepeatedField(f("packed_int64"   ), 0));
3887       Assert.assertEquals(603  , message.getRepeatedField(f("packed_uint32"  ), 0));
3888       Assert.assertEquals(604L , message.getRepeatedField(f("packed_uint64"  ), 0));
3889       Assert.assertEquals(605  , message.getRepeatedField(f("packed_sint32"  ), 0));
3890       Assert.assertEquals(606L , message.getRepeatedField(f("packed_sint64"  ), 0));
3891       Assert.assertEquals(607  , message.getRepeatedField(f("packed_fixed32" ), 0));
3892       Assert.assertEquals(608L , message.getRepeatedField(f("packed_fixed64" ), 0));
3893       Assert.assertEquals(609  , message.getRepeatedField(f("packed_sfixed32"), 0));
3894       Assert.assertEquals(610L , message.getRepeatedField(f("packed_sfixed64"), 0));
3895       Assert.assertEquals(611F , message.getRepeatedField(f("packed_float"   ), 0));
3896       Assert.assertEquals(612D , message.getRepeatedField(f("packed_double"  ), 0));
3897       Assert.assertEquals(true , message.getRepeatedField(f("packed_bool"    ), 0));
3898       Assert.assertEquals(foreignBar, message.getRepeatedField(f("packed_enum" ),0));
3899       Assert.assertEquals(701  , message.getRepeatedField(f("packed_int32"   ), 1));
3900       Assert.assertEquals(702L , message.getRepeatedField(f("packed_int64"   ), 1));
3901       Assert.assertEquals(703  , message.getRepeatedField(f("packed_uint32"  ), 1));
3902       Assert.assertEquals(704L , message.getRepeatedField(f("packed_uint64"  ), 1));
3903       Assert.assertEquals(705  , message.getRepeatedField(f("packed_sint32"  ), 1));
3904       Assert.assertEquals(706L , message.getRepeatedField(f("packed_sint64"  ), 1));
3905       Assert.assertEquals(707  , message.getRepeatedField(f("packed_fixed32" ), 1));
3906       Assert.assertEquals(708L , message.getRepeatedField(f("packed_fixed64" ), 1));
3907       Assert.assertEquals(709  , message.getRepeatedField(f("packed_sfixed32"), 1));
3908       Assert.assertEquals(710L , message.getRepeatedField(f("packed_sfixed64"), 1));
3909       Assert.assertEquals(711F , message.getRepeatedField(f("packed_float"   ), 1));
3910       Assert.assertEquals(712D , message.getRepeatedField(f("packed_double"  ), 1));
3911       Assert.assertEquals(false, message.getRepeatedField(f("packed_bool"    ), 1));
3912       Assert.assertEquals(foreignBaz, message.getRepeatedField(f("packed_enum" ),1));
3913     }
3914
3915     /**
3916      * Verifies that the reflection setters for the given.Builder object throw a
3917      * NullPointerException if they are passed a null value.  Uses Assert to throw an
3918      * appropriate assertion failure, if the condition is not verified.
3919      */
3920     public void assertReflectionSettersRejectNull(Message.Builder builder)
3921         throws Exception {
3922       try {
3923         builder.setField(f("optional_string"), null);
3924         Assert.fail("Exception was not thrown");
3925       } catch (NullPointerException e) {
3926         // We expect this exception.
3927       }
3928       try {
3929         builder.setField(f("optional_bytes"), null);
3930         Assert.fail("Exception was not thrown");
3931       } catch (NullPointerException e) {
3932         // We expect this exception.
3933       }
3934       try {
3935         builder.setField(f("optional_nested_enum"), null);
3936         Assert.fail("Exception was not thrown");
3937       } catch (NullPointerException e) {
3938         // We expect this exception.
3939       }
3940       try {
3941         builder.setField(f("optional_nested_message"),
3942                          (TestAllTypes.NestedMessage) null);
3943         Assert.fail("Exception was not thrown");
3944       } catch (NullPointerException e) {
3945         // We expect this exception.
3946       }
3947       try {
3948         builder.setField(f("optional_nested_message"),
3949                          (TestAllTypes.NestedMessage.Builder) null);
3950         Assert.fail("Exception was not thrown");
3951       } catch (NullPointerException e) {
3952         // We expect this exception.
3953       }
3954
3955       try {
3956         builder.addRepeatedField(f("repeated_string"), null);
3957         Assert.fail("Exception was not thrown");
3958       } catch (NullPointerException e) {
3959         // We expect this exception.
3960       }
3961       try {
3962         builder.addRepeatedField(f("repeated_bytes"), null);
3963         Assert.fail("Exception was not thrown");
3964       } catch (NullPointerException e) {
3965         // We expect this exception.
3966       }
3967       try {
3968         builder.addRepeatedField(f("repeated_nested_enum"), null);
3969         Assert.fail("Exception was not thrown");
3970       } catch (NullPointerException e) {
3971         // We expect this exception.
3972       }
3973       try {
3974         builder.addRepeatedField(f("repeated_nested_message"), null);
3975         Assert.fail("Exception was not thrown");
3976       } catch (NullPointerException e) {
3977         // We expect this exception.
3978       }
3979     }
3980
3981     /**
3982      * Verifies that the reflection repeated setters for the given Builder object throw a
3983      * NullPointerException if they are passed a null value.  Uses Assert to throw an appropriate
3984      * assertion failure, if the condition is not verified.
3985      */
3986     public void assertReflectionRepeatedSettersRejectNull(Message.Builder builder)
3987         throws Exception {
3988       builder.addRepeatedField(f("repeated_string"), "one");
3989       try {
3990         builder.setRepeatedField(f("repeated_string"), 0, null);
3991         Assert.fail("Exception was not thrown");
3992       } catch (NullPointerException e) {
3993         // We expect this exception.
3994       }
3995
3996       builder.addRepeatedField(f("repeated_bytes"), toBytes("one"));
3997       try {
3998         builder.setRepeatedField(f("repeated_bytes"), 0, null);
3999         Assert.fail("Exception was not thrown");
4000       } catch (NullPointerException e) {
4001         // We expect this exception.
4002       }
4003
4004       builder.addRepeatedField(f("repeated_nested_enum"), nestedBaz);
4005       try {
4006         builder.setRepeatedField(f("repeated_nested_enum"), 0, null);
4007         Assert.fail("Exception was not thrown");
4008       } catch (NullPointerException e) {
4009         // We expect this exception.
4010       }
4011
4012       builder.addRepeatedField(
4013           f("repeated_nested_message"),
4014           TestAllTypes.NestedMessage.newBuilder().setBb(218).build());
4015       try {
4016         builder.setRepeatedField(f("repeated_nested_message"), 0, null);
4017         Assert.fail("Exception was not thrown");
4018       } catch (NullPointerException e) {
4019         // We expect this exception.
4020       }
4021     }
4022   }
4023
4024   /**
4025    * @param filePath The path relative to
4026    * {@link #getTestDataDir}.
4027    */
4028   public static String readTextFromFile(String filePath) {
4029     return readBytesFromFile(filePath).toStringUtf8();
4030   }
4031
4032   private static File getTestDataDir() {
4033     // Search each parent directory looking for "src/google/protobuf".
4034     File ancestor = new File(".");
4035     try {
4036       ancestor = ancestor.getCanonicalFile();
4037     } catch (IOException e) {
4038       throw new RuntimeException(
4039         "Couldn't get canonical name of working directory.", e);
4040     }
4041     while (ancestor != null && ancestor.exists()) {
4042       if (new File(ancestor, "src/google/protobuf").exists()) {
4043         return new File(ancestor, "src/google/protobuf/testdata");
4044       }
4045       ancestor = ancestor.getParentFile();
4046     }
4047
4048     throw new RuntimeException(
4049       "Could not find golden files.  This test must be run from within the " +
4050       "protobuf source package so that it can read test data files from the " +
4051       "C++ source tree.");
4052   }
4053
4054   /**
4055    * @param filename The path relative to
4056    * {@link #getTestDataDir}.
4057    */
4058   public static ByteString readBytesFromFile(String filename) {
4059     File fullPath = new File(getTestDataDir(), filename);
4060     try {
4061       RandomAccessFile file = new RandomAccessFile(fullPath, "r");
4062       byte[] content = new byte[(int) file.length()];
4063       file.readFully(content);
4064       return ByteString.copyFrom(content);
4065     } catch (IOException e) {
4066       // Throw a RuntimeException here so that we can call this function from
4067       // static initializers.
4068       throw new IllegalArgumentException(
4069         "Couldn't read file: " + fullPath.getPath(), e);
4070     }
4071   }
4072
4073   /**
4074    * Get the bytes of the "golden message".  This is a serialized TestAllTypes
4075    * with all fields set as they would be by
4076    * {@link #setAllFields(TestAllTypes.Builder)}, but it is loaded from a file
4077    * on disk rather than generated dynamically.  The file is actually generated
4078    * by C++ code, so testing against it verifies compatibility with C++.
4079    */
4080   public static ByteString getGoldenMessage() {
4081     if (goldenMessage == null) {
4082       goldenMessage = readBytesFromFile("golden_message_oneof_implemented");
4083     }
4084     return goldenMessage;
4085   }
4086   private static ByteString goldenMessage = null;
4087
4088   /**
4089    * Get the bytes of the "golden packed fields message".  This is a serialized
4090    * TestPackedTypes with all fields set as they would be by
4091    * {@link #setPackedFields(TestPackedTypes.Builder)}, but it is loaded from a
4092    * file on disk rather than generated dynamically.  The file is actually
4093    * generated by C++ code, so testing against it verifies compatibility with
4094    * C++.
4095    */
4096   public static ByteString getGoldenPackedFieldsMessage() {
4097     if (goldenPackedFieldsMessage == null) {
4098       goldenPackedFieldsMessage =
4099           readBytesFromFile("golden_packed_fields_message");
4100     }
4101     return goldenPackedFieldsMessage;
4102   }
4103   private static ByteString goldenPackedFieldsMessage = null;
4104
4105   /**
4106    * Mock implementation of {@link GeneratedMessage.BuilderParent} for testing.
4107    *
4108    * @author jonp@google.com (Jon Perlow)
4109    */
4110   public static class MockBuilderParent
4111       implements GeneratedMessage.BuilderParent {
4112
4113     private int invalidations;
4114
4115     //@Override (Java 1.6 override semantics, but we must support 1.5)
4116     public void markDirty() {
4117       invalidations++;
4118     }
4119
4120     public int getInvalidationCount() {
4121       return invalidations;
4122     }
4123   }
4124 }