Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/protobuf/java/compatibility_tests/v2.5.0/tests/src/main/java/com/google/protobuf/test/GeneratedMessageTest.java

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // http://code.google.com/p/protobuf/
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.test;
32 import com.google.protobuf.*;
33
34 import com.google.protobuf.Descriptors.Descriptor;
35 import com.google.protobuf.Descriptors.FieldDescriptor;
36 import com.google.protobuf.test.UnittestImport;
37 import protobuf_unittest.EnumWithNoOuter;
38 import protobuf_unittest.MessageWithNoOuter;
39 import protobuf_unittest.MultipleFilesTestProto;
40 import protobuf_unittest.NestedExtension.MyNestedExtension;
41 import protobuf_unittest.NonNestedExtension;
42 import protobuf_unittest.NonNestedExtension.MessageToBeExtended;
43 import protobuf_unittest.NonNestedExtension.MyNonNestedExtension;
44 import protobuf_unittest.ServiceWithNoOuter;
45 import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize;
46 import protobuf_unittest.UnittestOptimizeFor.TestOptionalOptimizedForSize;
47 import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize;
48 import protobuf_unittest.UnittestProto;
49 import protobuf_unittest.UnittestProto.ForeignEnum;
50 import protobuf_unittest.UnittestProto.ForeignMessage;
51 import protobuf_unittest.UnittestProto.ForeignMessageOrBuilder;
52 import protobuf_unittest.UnittestProto.TestAllExtensions;
53 import protobuf_unittest.UnittestProto.TestAllTypes;
54 import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage;
55 import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
56 import protobuf_unittest.UnittestProto.TestExtremeDefaultValues;
57 import protobuf_unittest.UnittestProto.TestPackedTypes;
58 import protobuf_unittest.UnittestProto.TestUnpackedTypes;
59
60 import junit.framework.TestCase;
61
62 import java.io.ByteArrayInputStream;
63 import java.io.ByteArrayOutputStream;
64 import java.io.ObjectInputStream;
65 import java.io.ObjectOutputStream;
66 import java.util.Arrays;
67 import java.util.Collections;
68 import java.util.List;
69
70 /**
71 * Unit test for generated messages and generated code. See also
72 * {@link MessageTest}, which tests some generated message functionality.
73 *
74 * @author kenton@google.com Kenton Varda
75 */
76 public class GeneratedMessageTest extends TestCase {
77 TestUtil.ReflectionTester reflectionTester =
78 new TestUtil.ReflectionTester(TestAllTypes.getDescriptor(), null);
79
80 public void testDefaultInstance() throws Exception {
81 assertSame(TestAllTypes.getDefaultInstance(),
82 TestAllTypes.getDefaultInstance().getDefaultInstanceForType());
83 assertSame(TestAllTypes.getDefaultInstance(),
84 TestAllTypes.newBuilder().getDefaultInstanceForType());
85 }
86
87 public void testMessageOrBuilder() throws Exception {
88 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
89 TestUtil.setAllFields(builder);
90 TestAllTypes message = builder.build();
91 TestUtil.assertAllFieldsSet(message);
92 }
93
94 public void testUsingBuilderMultipleTimes() throws Exception {
95 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
96 // primitive field scalar and repeated
97 builder.setOptionalSfixed64(100);
98 builder.addRepeatedInt32(100);
99 // enum field scalar and repeated
100 builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_BAR);
101 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR);
102 // proto field scalar and repeated
103 builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(1));
104 builder.addRepeatedForeignMessage(ForeignMessage.newBuilder().setC(1));
105
106 TestAllTypes value1 = builder.build();
107
108 assertEquals(100, value1.getOptionalSfixed64());
109 assertEquals(100, value1.getRepeatedInt32(0));
110 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR,
111 value1.getOptionalImportEnum());
112 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR,
113 value1.getRepeatedImportEnum(0));
114 assertEquals(1, value1.getOptionalForeignMessage().getC());
115 assertEquals(1, value1.getRepeatedForeignMessage(0).getC());
116
117 // Make sure that builder didn't update previously created values
118 builder.setOptionalSfixed64(200);
119 builder.setRepeatedInt32(0, 200);
120 builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_FOO);
121 builder.setRepeatedImportEnum(0, UnittestImport.ImportEnum.IMPORT_FOO);
122 builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(2));
123 builder.setRepeatedForeignMessage(0, ForeignMessage.newBuilder().setC(2));
124
125 TestAllTypes value2 = builder.build();
126
127 // Make sure value1 didn't change.
128 assertEquals(100, value1.getOptionalSfixed64());
129 assertEquals(100, value1.getRepeatedInt32(0));
130 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR,
131 value1.getOptionalImportEnum());
132 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR,
133 value1.getRepeatedImportEnum(0));
134 assertEquals(1, value1.getOptionalForeignMessage().getC());
135 assertEquals(1, value1.getRepeatedForeignMessage(0).getC());
136
137 // Make sure value2 is correct
138 assertEquals(200, value2.getOptionalSfixed64());
139 assertEquals(200, value2.getRepeatedInt32(0));
140 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO,
141 value2.getOptionalImportEnum());
142 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO,
143 value2.getRepeatedImportEnum(0));
144 assertEquals(2, value2.getOptionalForeignMessage().getC());
145 assertEquals(2, value2.getRepeatedForeignMessage(0).getC());
146 }
147
148 public void testRepeatedArraysAreImmutable() throws Exception {
149 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
150 builder.addRepeatedInt32(100);
151 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR);
152 builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance());
153 assertIsUnmodifiable(builder.getRepeatedInt32List());
154 assertIsUnmodifiable(builder.getRepeatedImportEnumList());
155 assertIsUnmodifiable(builder.getRepeatedForeignMessageList());
156 assertIsUnmodifiable(builder.getRepeatedFloatList());
157
158
159 TestAllTypes value = builder.build();
160 assertIsUnmodifiable(value.getRepeatedInt32List());
161 assertIsUnmodifiable(value.getRepeatedImportEnumList());
162 assertIsUnmodifiable(value.getRepeatedForeignMessageList());
163 assertIsUnmodifiable(value.getRepeatedFloatList());
164 }
165
166 public void testParsedMessagesAreImmutable() throws Exception {
167 TestAllTypes value = TestAllTypes.PARSER.parseFrom(
168 TestUtil.getAllSet().toByteString());
169 assertIsUnmodifiable(value.getRepeatedInt32List());
170 assertIsUnmodifiable(value.getRepeatedInt64List());
171 assertIsUnmodifiable(value.getRepeatedUint32List());
172 assertIsUnmodifiable(value.getRepeatedUint64List());
173 assertIsUnmodifiable(value.getRepeatedSint32List());
174 assertIsUnmodifiable(value.getRepeatedSint64List());
175 assertIsUnmodifiable(value.getRepeatedFixed32List());
176 assertIsUnmodifiable(value.getRepeatedFixed64List());
177 assertIsUnmodifiable(value.getRepeatedSfixed32List());
178 assertIsUnmodifiable(value.getRepeatedSfixed64List());
179 assertIsUnmodifiable(value.getRepeatedFloatList());
180 assertIsUnmodifiable(value.getRepeatedDoubleList());
181 assertIsUnmodifiable(value.getRepeatedBoolList());
182 assertIsUnmodifiable(value.getRepeatedStringList());
183 assertIsUnmodifiable(value.getRepeatedBytesList());
184 assertIsUnmodifiable(value.getRepeatedGroupList());
185 assertIsUnmodifiable(value.getRepeatedNestedMessageList());
186 assertIsUnmodifiable(value.getRepeatedForeignMessageList());
187 assertIsUnmodifiable(value.getRepeatedImportMessageList());
188 assertIsUnmodifiable(value.getRepeatedNestedEnumList());
189 assertIsUnmodifiable(value.getRepeatedForeignEnumList());
190 assertIsUnmodifiable(value.getRepeatedImportEnumList());
191 }
192
193 private void assertIsUnmodifiable(List<?> list) {
194 if (list == Collections.emptyList()) {
195 // OKAY -- Need to check this b/c EmptyList allows you to call clear.
196 } else {
197 try {
198 list.clear();
199 fail("List wasn't immutable");
200 } catch (UnsupportedOperationException e) {
201 // good
202 }
203 }
204 }
205
206 public void testSettersRejectNull() throws Exception {
207 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
208 try {
209 builder.setOptionalString(null);
210 fail("Exception was not thrown");
211 } catch (NullPointerException e) {
212 // We expect this exception.
213 }
214 try {
215 builder.setOptionalBytes(null);
216 fail("Exception was not thrown");
217 } catch (NullPointerException e) {
218 // We expect this exception.
219 }
220 try {
221 builder.setOptionalNestedMessage((TestAllTypes.NestedMessage) null);
222 fail("Exception was not thrown");
223 } catch (NullPointerException e) {
224 // We expect this exception.
225 }
226 try {
227 builder.setOptionalNestedMessage(
228 (TestAllTypes.NestedMessage.Builder) null);
229 fail("Exception was not thrown");
230 } catch (NullPointerException e) {
231 // We expect this exception.
232 }
233 try {
234 builder.setOptionalNestedEnum(null);
235 fail("Exception was not thrown");
236 } catch (NullPointerException e) {
237 // We expect this exception.
238 }
239 try {
240 builder.addRepeatedString(null);
241 fail("Exception was not thrown");
242 } catch (NullPointerException e) {
243 // We expect this exception.
244 }
245 try {
246 builder.addRepeatedBytes(null);
247 fail("Exception was not thrown");
248 } catch (NullPointerException e) {
249 // We expect this exception.
250 }
251 try {
252 builder.addRepeatedNestedMessage((TestAllTypes.NestedMessage) null);
253 fail("Exception was not thrown");
254 } catch (NullPointerException e) {
255 // We expect this exception.
256 }
257 try {
258 builder.addRepeatedNestedMessage(
259 (TestAllTypes.NestedMessage.Builder) null);
260 fail("Exception was not thrown");
261 } catch (NullPointerException e) {
262 // We expect this exception.
263 }
264 try {
265 builder.addRepeatedNestedEnum(null);
266 fail("Exception was not thrown");
267 } catch (NullPointerException e) {
268 // We expect this exception.
269 }
270 }
271
272 public void testRepeatedSetters() throws Exception {
273 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
274 TestUtil.setAllFields(builder);
275 TestUtil.modifyRepeatedFields(builder);
276 TestAllTypes message = builder.build();
277 TestUtil.assertRepeatedFieldsModified(message);
278 }
279
280 public void testRepeatedSettersRejectNull() throws Exception {
281 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
282
283 builder.addRepeatedString("one");
284 builder.addRepeatedString("two");
285 try {
286 builder.setRepeatedString(1, null);
287 fail("Exception was not thrown");
288 } catch (NullPointerException e) {
289 // We expect this exception.
290 }
291
292 builder.addRepeatedBytes(TestUtil.toBytes("one"));
293 builder.addRepeatedBytes(TestUtil.toBytes("two"));
294 try {
295 builder.setRepeatedBytes(1, null);
296 fail("Exception was not thrown");
297 } catch (NullPointerException e) {
298 // We expect this exception.
299 }
300
301 builder.addRepeatedNestedMessage(
302 TestAllTypes.NestedMessage.newBuilder().setBb(218).build());
303 builder.addRepeatedNestedMessage(
304 TestAllTypes.NestedMessage.newBuilder().setBb(456).build());
305 try {
306 builder.setRepeatedNestedMessage(1, (TestAllTypes.NestedMessage) null);
307 fail("Exception was not thrown");
308 } catch (NullPointerException e) {
309 // We expect this exception.
310 }
311 try {
312 builder.setRepeatedNestedMessage(
313 1, (TestAllTypes.NestedMessage.Builder) null);
314 fail("Exception was not thrown");
315 } catch (NullPointerException e) {
316 // We expect this exception.
317 }
318
319 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.FOO);
320 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAR);
321 try {
322 builder.setRepeatedNestedEnum(1, null);
323 fail("Exception was not thrown");
324 } catch (NullPointerException e) {
325 // We expect this exception.
326 }
327 }
328
329 public void testRepeatedAppend() throws Exception {
330 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
331
332 builder.addAllRepeatedInt32(Arrays.asList(1, 2, 3, 4));
333 builder.addAllRepeatedForeignEnum(Arrays.asList(ForeignEnum.FOREIGN_BAZ));
334
335 ForeignMessage foreignMessage =
336 ForeignMessage.newBuilder().setC(12).build();
337 builder.addAllRepeatedForeignMessage(Arrays.asList(foreignMessage));
338
339 TestAllTypes message = builder.build();
340 assertEquals(message.getRepeatedInt32List(), Arrays.asList(1, 2, 3, 4));
341 assertEquals(message.getRepeatedForeignEnumList(),
342 Arrays.asList(ForeignEnum.FOREIGN_BAZ));
343 assertEquals(1, message.getRepeatedForeignMessageCount());
344 assertEquals(12, message.getRepeatedForeignMessage(0).getC());
345 }
346
347 public void testRepeatedAppendRejectsNull() throws Exception {
348 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
349
350 ForeignMessage foreignMessage =
351 ForeignMessage.newBuilder().setC(12).build();
352 try {
353 builder.addAllRepeatedForeignMessage(
354 Arrays.asList(foreignMessage, (ForeignMessage) null));
355 fail("Exception was not thrown");
356 } catch (NullPointerException e) {
357 // We expect this exception.
358 }
359
360 try {
361 builder.addAllRepeatedForeignEnum(
362 Arrays.asList(ForeignEnum.FOREIGN_BAZ, null));
363 fail("Exception was not thrown");
364 } catch (NullPointerException e) {
365 // We expect this exception.
366 }
367
368 try {
369 builder.addAllRepeatedString(Arrays.asList("one", null));
370 fail("Exception was not thrown");
371 } catch (NullPointerException e) {
372 // We expect this exception.
373 }
374
375 try {
376 builder.addAllRepeatedBytes(Arrays.asList(TestUtil.toBytes("one"), null));
377 fail("Exception was not thrown");
378 } catch (NullPointerException e) {
379 // We expect this exception.
380 }
381 }
382
383 public void testSettingForeignMessageUsingBuilder() throws Exception {
384 TestAllTypes message = TestAllTypes.newBuilder()
385 // Pass builder for foreign message instance.
386 .setOptionalForeignMessage(ForeignMessage.newBuilder().setC(123))
387 .build();
388 TestAllTypes expectedMessage = TestAllTypes.newBuilder()
389 // Create expected version passing foreign message instance explicitly.
390 .setOptionalForeignMessage(
391 ForeignMessage.newBuilder().setC(123).build())
392 .build();
393 // TODO(ngd): Upgrade to using real #equals method once implemented
394 assertEquals(expectedMessage.toString(), message.toString());
395 }
396
397 public void testSettingRepeatedForeignMessageUsingBuilder() throws Exception {
398 TestAllTypes message = TestAllTypes.newBuilder()
399 // Pass builder for foreign message instance.
400 .addRepeatedForeignMessage(ForeignMessage.newBuilder().setC(456))
401 .build();
402 TestAllTypes expectedMessage = TestAllTypes.newBuilder()
403 // Create expected version passing foreign message instance explicitly.
404 .addRepeatedForeignMessage(
405 ForeignMessage.newBuilder().setC(456).build())
406 .build();
407 assertEquals(expectedMessage.toString(), message.toString());
408 }
409
410 public void testDefaults() throws Exception {
411 TestUtil.assertClear(TestAllTypes.getDefaultInstance());
412 TestUtil.assertClear(TestAllTypes.newBuilder().build());
413
414 TestExtremeDefaultValues message =
415 TestExtremeDefaultValues.getDefaultInstance();
416 assertEquals("\u1234", message.getUtf8String());
417 assertEquals(Double.POSITIVE_INFINITY, message.getInfDouble());
418 assertEquals(Double.NEGATIVE_INFINITY, message.getNegInfDouble());
419 assertTrue(Double.isNaN(message.getNanDouble()));
420 assertEquals(Float.POSITIVE_INFINITY, message.getInfFloat());
421 assertEquals(Float.NEGATIVE_INFINITY, message.getNegInfFloat());
422 assertTrue(Float.isNaN(message.getNanFloat()));
423 assertEquals("? ? ?? ?? ??? ??/ ??-", message.getCppTrigraph());
424 }
425
426 public void testClear() throws Exception {
427 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
428 TestUtil.assertClear(builder);
429 TestUtil.setAllFields(builder);
430 builder.clear();
431 TestUtil.assertClear(builder);
432 }
433
434 public void testReflectionGetters() throws Exception {
435 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
436 TestUtil.setAllFields(builder);
437 reflectionTester.assertAllFieldsSetViaReflection(builder);
438
439 TestAllTypes message = builder.build();
440 reflectionTester.assertAllFieldsSetViaReflection(message);
441 }
442
443 public void testReflectionSetters() throws Exception {
444 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
445 reflectionTester.setAllFieldsViaReflection(builder);
446 TestUtil.assertAllFieldsSet(builder);
447
448 TestAllTypes message = builder.build();
449 TestUtil.assertAllFieldsSet(message);
450 }
451
452 public void testReflectionSettersRejectNull() throws Exception {
453 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
454 reflectionTester.assertReflectionSettersRejectNull(builder);
455 }
456
457 public void testReflectionRepeatedSetters() throws Exception {
458 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
459 reflectionTester.setAllFieldsViaReflection(builder);
460 reflectionTester.modifyRepeatedFieldsViaReflection(builder);
461 TestUtil.assertRepeatedFieldsModified(builder);
462
463 TestAllTypes message = builder.build();
464 TestUtil.assertRepeatedFieldsModified(message);
465 }
466
467 public void testReflectionRepeatedSettersRejectNull() throws Exception {
468 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
469 reflectionTester.assertReflectionRepeatedSettersRejectNull(builder);
470 }
471
472 public void testReflectionDefaults() throws Exception {
473 reflectionTester.assertClearViaReflection(
474 TestAllTypes.getDefaultInstance());
475 reflectionTester.assertClearViaReflection(
476 TestAllTypes.newBuilder().build());
477 }
478
479 public void testEnumInterface() throws Exception {
480 assertTrue(TestAllTypes.getDefaultInstance().getDefaultNestedEnum()
481 instanceof ProtocolMessageEnum);
482 }
483
484 public void testEnumMap() throws Exception {
485 Internal.EnumLiteMap<ForeignEnum> map = ForeignEnum.internalGetValueMap();
486
487 for (ForeignEnum value : ForeignEnum.values()) {
488 assertEquals(value, map.findValueByNumber(value.getNumber()));
489 }
490
491 assertTrue(map.findValueByNumber(12345) == null);
492 }
493
494 public void testParsePackedToUnpacked() throws Exception {
495 TestUnpackedTypes.Builder builder = TestUnpackedTypes.newBuilder();
496 TestUnpackedTypes message =
497 builder.mergeFrom(TestUtil.getPackedSet().toByteString()).build();
498 TestUtil.assertUnpackedFieldsSet(message);
499 }
500
501 public void testParseUnpackedToPacked() throws Exception {
502 TestPackedTypes.Builder builder = TestPackedTypes.newBuilder();
503 TestPackedTypes message =
504 builder.mergeFrom(TestUtil.getUnpackedSet().toByteString()).build();
505 TestUtil.assertPackedFieldsSet(message);
506 }
507
508 // =================================================================
509 // Extensions.
510
511 TestUtil.ReflectionTester extensionsReflectionTester =
512 new TestUtil.ReflectionTester(TestAllExtensions.getDescriptor(),
513 TestUtil.getExtensionRegistry());
514
515 public void testExtensionMessageOrBuilder() throws Exception {
516 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
517 TestUtil.setAllExtensions(builder);
518 TestAllExtensions message = builder.build();
519 TestUtil.assertAllExtensionsSet(message);
520 }
521
522 public void testExtensionRepeatedSetters() throws Exception {
523 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
524 TestUtil.setAllExtensions(builder);
525 TestUtil.modifyRepeatedExtensions(builder);
526 TestAllExtensions message = builder.build();
527 TestUtil.assertRepeatedExtensionsModified(message);
528 }
529
530 public void testExtensionDefaults() throws Exception {
531 TestUtil.assertExtensionsClear(TestAllExtensions.getDefaultInstance());
532 TestUtil.assertExtensionsClear(TestAllExtensions.newBuilder().build());
533 }
534
535 public void testExtensionReflectionGetters() throws Exception {
536 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
537 TestUtil.setAllExtensions(builder);
538 extensionsReflectionTester.assertAllFieldsSetViaReflection(builder);
539
540 TestAllExtensions message = builder.build();
541 extensionsReflectionTester.assertAllFieldsSetViaReflection(message);
542 }
543
544 public void testExtensionReflectionSetters() throws Exception {
545 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
546 extensionsReflectionTester.setAllFieldsViaReflection(builder);
547 TestUtil.assertAllExtensionsSet(builder);
548
549 TestAllExtensions message = builder.build();
550 TestUtil.assertAllExtensionsSet(message);
551 }
552
553 public void testExtensionReflectionSettersRejectNull() throws Exception {
554 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
555 extensionsReflectionTester.assertReflectionSettersRejectNull(builder);
556 }
557
558 public void testExtensionReflectionRepeatedSetters() throws Exception {
559 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
560 extensionsReflectionTester.setAllFieldsViaReflection(builder);
561 extensionsReflectionTester.modifyRepeatedFieldsViaReflection(builder);
562 TestUtil.assertRepeatedExtensionsModified(builder);
563
564 TestAllExtensions message = builder.build();
565 TestUtil.assertRepeatedExtensionsModified(message);
566 }
567
568 public void testExtensionReflectionRepeatedSettersRejectNull()
569 throws Exception {
570 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
571 extensionsReflectionTester.assertReflectionRepeatedSettersRejectNull(
572 builder);
573 }
574
575 public void testExtensionReflectionDefaults() throws Exception {
576 extensionsReflectionTester.assertClearViaReflection(
577 TestAllExtensions.getDefaultInstance());
578 extensionsReflectionTester.assertClearViaReflection(
579 TestAllExtensions.newBuilder().build());
580 }
581
582 public void testClearExtension() throws Exception {
583 // clearExtension() is not actually used in TestUtil, so try it manually.
584 assertFalse(
585 TestAllExtensions.newBuilder()
586 .setExtension(UnittestProto.optionalInt32Extension, 1)
587 .clearExtension(UnittestProto.optionalInt32Extension)
588 .hasExtension(UnittestProto.optionalInt32Extension));
589 assertEquals(0,
590 TestAllExtensions.newBuilder()
591 .addExtension(UnittestProto.repeatedInt32Extension, 1)
592 .clearExtension(UnittestProto.repeatedInt32Extension)
593 .getExtensionCount(UnittestProto.repeatedInt32Extension));
594 }
595
596 public void testExtensionCopy() throws Exception {
597 TestAllExtensions original = TestUtil.getAllExtensionsSet();
598 TestAllExtensions copy = TestAllExtensions.newBuilder(original).build();
599 TestUtil.assertAllExtensionsSet(copy);
600 }
601
602 public void testExtensionMergeFrom() throws Exception {
603 TestAllExtensions original =
604 TestAllExtensions.newBuilder()
605 .setExtension(UnittestProto.optionalInt32Extension, 1).build();
606 TestAllExtensions merged =
607 TestAllExtensions.newBuilder().mergeFrom(original).build();
608 assertTrue(merged.hasExtension(UnittestProto.optionalInt32Extension));
609 assertEquals(
610 1, (int) merged.getExtension(UnittestProto.optionalInt32Extension));
611 }
612
613 // =================================================================
614 // multiple_files_test
615
616 public void testMultipleFilesOption() throws Exception {
617 // We mostly just want to check that things compile.
618 MessageWithNoOuter message =
619 MessageWithNoOuter.newBuilder()
620 .setNested(MessageWithNoOuter.NestedMessage.newBuilder().setI(1))
621 .addForeign(TestAllTypes.newBuilder().setOptionalInt32(1))
622 .setNestedEnum(MessageWithNoOuter.NestedEnum.BAZ)
623 .setForeignEnum(EnumWithNoOuter.BAR)
624 .build();
625 assertEquals(message, MessageWithNoOuter.parseFrom(message.toByteString()));
626
627 assertEquals(MultipleFilesTestProto.getDescriptor(),
628 MessageWithNoOuter.getDescriptor().getFile());
629
630 Descriptors.FieldDescriptor field =
631 MessageWithNoOuter.getDescriptor().findFieldByName("foreign_enum");
632 assertEquals(EnumWithNoOuter.BAR.getValueDescriptor(),
633 message.getField(field));
634
635 assertEquals(MultipleFilesTestProto.getDescriptor(),
636 ServiceWithNoOuter.getDescriptor().getFile());
637
638 assertFalse(
639 TestAllExtensions.getDefaultInstance().hasExtension(
640 MultipleFilesTestProto.extensionWithOuter));
641 }
642
643 public void testOptionalFieldWithRequiredSubfieldsOptimizedForSize()
644 throws Exception {
645 TestOptionalOptimizedForSize message =
646 TestOptionalOptimizedForSize.getDefaultInstance();
647 assertTrue(message.isInitialized());
648
649 message = TestOptionalOptimizedForSize.newBuilder().setO(
650 TestRequiredOptimizedForSize.newBuilder().buildPartial()
651 ).buildPartial();
652 assertFalse(message.isInitialized());
653
654 message = TestOptionalOptimizedForSize.newBuilder().setO(
655 TestRequiredOptimizedForSize.newBuilder().setX(5).buildPartial()
656 ).buildPartial();
657 assertTrue(message.isInitialized());
658 }
659
660 public void testUninitializedExtensionInOptimizedForSize()
661 throws Exception {
662 TestOptimizedForSize.Builder builder = TestOptimizedForSize.newBuilder();
663 builder.setExtension(TestOptimizedForSize.testExtension2,
664 TestRequiredOptimizedForSize.newBuilder().buildPartial());
665 assertFalse(builder.isInitialized());
666 assertFalse(builder.buildPartial().isInitialized());
667
668 builder = TestOptimizedForSize.newBuilder();
669 builder.setExtension(TestOptimizedForSize.testExtension2,
670 TestRequiredOptimizedForSize.newBuilder().setX(10).buildPartial());
671 assertTrue(builder.isInitialized());
672 assertTrue(builder.buildPartial().isInitialized());
673 }
674
675 public void testToBuilder() throws Exception {
676 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
677 TestUtil.setAllFields(builder);
678 TestAllTypes message = builder.build();
679 TestUtil.assertAllFieldsSet(message);
680 TestUtil.assertAllFieldsSet(message.toBuilder().build());
681 }
682
683 public void testFieldConstantValues() throws Exception {
684 assertEquals(TestAllTypes.NestedMessage.BB_FIELD_NUMBER, 1);
685 assertEquals(TestAllTypes.OPTIONAL_INT32_FIELD_NUMBER, 1);
686 assertEquals(TestAllTypes.OPTIONALGROUP_FIELD_NUMBER, 16);
687 assertEquals(TestAllTypes.OPTIONAL_NESTED_MESSAGE_FIELD_NUMBER, 18);
688 assertEquals(TestAllTypes.OPTIONAL_NESTED_ENUM_FIELD_NUMBER, 21);
689 assertEquals(TestAllTypes.REPEATED_INT32_FIELD_NUMBER, 31);
690 assertEquals(TestAllTypes.REPEATEDGROUP_FIELD_NUMBER, 46);
691 assertEquals(TestAllTypes.REPEATED_NESTED_MESSAGE_FIELD_NUMBER, 48);
692 assertEquals(TestAllTypes.REPEATED_NESTED_ENUM_FIELD_NUMBER, 51);
693 }
694
695 public void testExtensionConstantValues() throws Exception {
696 assertEquals(UnittestProto.TestRequired.SINGLE_FIELD_NUMBER, 1000);
697 assertEquals(UnittestProto.TestRequired.MULTI_FIELD_NUMBER, 1001);
698 assertEquals(UnittestProto.OPTIONAL_INT32_EXTENSION_FIELD_NUMBER, 1);
699 assertEquals(UnittestProto.OPTIONALGROUP_EXTENSION_FIELD_NUMBER, 16);
700 assertEquals(
701 UnittestProto.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 18);
702 assertEquals(UnittestProto.OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 21);
703 assertEquals(UnittestProto.REPEATED_INT32_EXTENSION_FIELD_NUMBER, 31);
704 assertEquals(UnittestProto.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46);
705 assertEquals(
706 UnittestProto.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48);
707 assertEquals(UnittestProto.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 51);
708 }
709
710 public void testRecursiveMessageDefaultInstance() throws Exception {
711 UnittestProto.TestRecursiveMessage message =
712 UnittestProto.TestRecursiveMessage.getDefaultInstance();
713 assertTrue(message != null);
714 assertTrue(message.getA() != null);
715 assertTrue(message.getA() == message);
716 }
717
718 public void testSerialize() throws Exception {
719 ByteArrayOutputStream baos = new ByteArrayOutputStream();
720 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
721 TestUtil.setAllFields(builder);
722 TestAllTypes expected = builder.build();
723 ObjectOutputStream out = new ObjectOutputStream(baos);
724 try {
725 out.writeObject(expected);
726 } finally {
727 out.close();
728 }
729 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
730 ObjectInputStream in = new ObjectInputStream(bais);
731 TestAllTypes actual = (TestAllTypes) in.readObject();
732 assertEquals(expected, actual);
733 }
734
735 public void testSerializePartial() throws Exception {
736 ByteArrayOutputStream baos = new ByteArrayOutputStream();
737 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
738 TestAllTypes expected = builder.buildPartial();
739 ObjectOutputStream out = new ObjectOutputStream(baos);
740 try {
741 out.writeObject(expected);
742 } finally {
743 out.close();
744 }
745 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
746 ObjectInputStream in = new ObjectInputStream(bais);
747 TestAllTypes actual = (TestAllTypes) in.readObject();
748 assertEquals(expected, actual);
749 }
750
751 public void testEnumValues() {
752 assertEquals(
753 TestAllTypes.NestedEnum.BAR.getNumber(),
754 TestAllTypes.NestedEnum.BAR_VALUE);
755 assertEquals(
756 TestAllTypes.NestedEnum.BAZ.getNumber(),
757 TestAllTypes.NestedEnum.BAZ_VALUE);
758 assertEquals(
759 TestAllTypes.NestedEnum.FOO.getNumber(),
760 TestAllTypes.NestedEnum.FOO_VALUE);
761 }
762
763 public void testNonNestedExtensionInitialization() {
764 assertTrue(NonNestedExtension.nonNestedExtension
765 .getMessageDefaultInstance() instanceof MyNonNestedExtension);
766 assertEquals("nonNestedExtension",
767 NonNestedExtension.nonNestedExtension.getDescriptor().getName() );
768 }
769
770 public void testNestedExtensionInitialization() {
771 assertTrue(MyNestedExtension.recursiveExtension.getMessageDefaultInstance()
772 instanceof MessageToBeExtended);
773 assertEquals("recursiveExtension",
774 MyNestedExtension.recursiveExtension.getDescriptor().getName()) ;
775 }
776
777
778 public void testBaseMessageOrBuilder() {
779 // Mostly just makes sure the base interface exists and has some methods.
780 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
781 TestAllTypes message = builder.buildPartial();
782 TestAllTypesOrBuilder builderAsInterface = (TestAllTypesOrBuilder) builder;
783 TestAllTypesOrBuilder messageAsInterface = (TestAllTypesOrBuilder) message;
784
785 assertEquals(
786 messageAsInterface.getDefaultBool(),
787 messageAsInterface.getDefaultBool());
788 assertEquals(
789 messageAsInterface.getOptionalDouble(),
790 messageAsInterface.getOptionalDouble());
791 }
792
793 public void testMessageOrBuilderGetters() {
794 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
795
796 // single fields
797 assertSame(ForeignMessage.getDefaultInstance(),
798 builder.getOptionalForeignMessageOrBuilder());
799 ForeignMessage.Builder subBuilder =
800 builder.getOptionalForeignMessageBuilder();
801 assertSame(subBuilder, builder.getOptionalForeignMessageOrBuilder());
802
803 // repeated fields
804 ForeignMessage m0 = ForeignMessage.newBuilder().buildPartial();
805 ForeignMessage m1 = ForeignMessage.newBuilder().buildPartial();
806 ForeignMessage m2 = ForeignMessage.newBuilder().buildPartial();
807 builder.addRepeatedForeignMessage(m0);
808 builder.addRepeatedForeignMessage(m1);
809 builder.addRepeatedForeignMessage(m2);
810 assertSame(m0, builder.getRepeatedForeignMessageOrBuilder(0));
811 assertSame(m1, builder.getRepeatedForeignMessageOrBuilder(1));
812 assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2));
813 ForeignMessage.Builder b0 = builder.getRepeatedForeignMessageBuilder(0);
814 ForeignMessage.Builder b1 = builder.getRepeatedForeignMessageBuilder(1);
815 assertSame(b0, builder.getRepeatedForeignMessageOrBuilder(0));
816 assertSame(b1, builder.getRepeatedForeignMessageOrBuilder(1));
817 assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2));
818
819 List<? extends ForeignMessageOrBuilder> messageOrBuilderList =
820 builder.getRepeatedForeignMessageOrBuilderList();
821 assertSame(b0, messageOrBuilderList.get(0));
822 assertSame(b1, messageOrBuilderList.get(1));
823 assertSame(m2, messageOrBuilderList.get(2));
824 }
825
826 public void testGetFieldBuilder() {
827 Descriptor descriptor = TestAllTypes.getDescriptor();
828
829 FieldDescriptor fieldDescriptor =
830 descriptor.findFieldByName("optional_nested_message");
831 FieldDescriptor foreignFieldDescriptor =
832 descriptor.findFieldByName("optional_foreign_message");
833 FieldDescriptor importFieldDescriptor =
834 descriptor.findFieldByName("optional_import_message");
835
836 // Mutate the message with new field builder
837 // Mutate nested message
838 TestAllTypes.Builder builder1 = TestAllTypes.newBuilder();
839 Message.Builder fieldBuilder1 = builder1.newBuilderForField(fieldDescriptor)
840 .mergeFrom((Message) builder1.getField(fieldDescriptor));
841 FieldDescriptor subFieldDescriptor1 =
842 fieldBuilder1.getDescriptorForType().findFieldByName("bb");
843 fieldBuilder1.setField(subFieldDescriptor1, 1);
844 builder1.setField(fieldDescriptor, fieldBuilder1.build());
845
846 // Mutate foreign message
847 Message.Builder foreignFieldBuilder1 = builder1.newBuilderForField(
848 foreignFieldDescriptor)
849 .mergeFrom((Message) builder1.getField(foreignFieldDescriptor));
850 FieldDescriptor subForeignFieldDescriptor1 =
851 foreignFieldBuilder1.getDescriptorForType().findFieldByName("c");
852 foreignFieldBuilder1.setField(subForeignFieldDescriptor1, 2);
853 builder1.setField(foreignFieldDescriptor, foreignFieldBuilder1.build());
854
855 // Mutate import message
856 Message.Builder importFieldBuilder1 = builder1.newBuilderForField(
857 importFieldDescriptor)
858 .mergeFrom((Message) builder1.getField(importFieldDescriptor));
859 FieldDescriptor subImportFieldDescriptor1 =
860 importFieldBuilder1.getDescriptorForType().findFieldByName("d");
861 importFieldBuilder1.setField(subImportFieldDescriptor1, 3);
862 builder1.setField(importFieldDescriptor, importFieldBuilder1.build());
863
864 Message newMessage1 = builder1.build();
865
866 // Mutate the message with existing field builder
867 // Mutate nested message
868 TestAllTypes.Builder builder2 = TestAllTypes.newBuilder();
869 Message.Builder fieldBuilder2 = builder2.getFieldBuilder(fieldDescriptor);
870 FieldDescriptor subFieldDescriptor2 =
871 fieldBuilder2.getDescriptorForType().findFieldByName("bb");
872 fieldBuilder2.setField(subFieldDescriptor2, 1);
873 builder2.setField(fieldDescriptor, fieldBuilder2.build());
874
875 // Mutate foreign message
876 Message.Builder foreignFieldBuilder2 = builder2.newBuilderForField(
877 foreignFieldDescriptor)
878 .mergeFrom((Message) builder2.getField(foreignFieldDescriptor));
879 FieldDescriptor subForeignFieldDescriptor2 =
880 foreignFieldBuilder2.getDescriptorForType().findFieldByName("c");
881 foreignFieldBuilder2.setField(subForeignFieldDescriptor2, 2);
882 builder2.setField(foreignFieldDescriptor, foreignFieldBuilder2.build());
883
884 // Mutate import message
885 Message.Builder importFieldBuilder2 = builder2.newBuilderForField(
886 importFieldDescriptor)
887 .mergeFrom((Message) builder2.getField(importFieldDescriptor));
888 FieldDescriptor subImportFieldDescriptor2 =
889 importFieldBuilder2.getDescriptorForType().findFieldByName("d");
890 importFieldBuilder2.setField(subImportFieldDescriptor2, 3);
891 builder2.setField(importFieldDescriptor, importFieldBuilder2.build());
892
893 Message newMessage2 = builder2.build();
894
895 // These two messages should be equal.
896 assertEquals(newMessage1, newMessage2);
897 }
898
899 public void testGetFieldBuilderWithInitializedValue() {
900 Descriptor descriptor = TestAllTypes.getDescriptor();
901 FieldDescriptor fieldDescriptor =
902 descriptor.findFieldByName("optional_nested_message");
903
904 // Before setting field, builder is initialized by default value.
905 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
906 NestedMessage.Builder fieldBuilder =
907 (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor);
908 assertEquals(0, fieldBuilder.getBb());
909
910 // Setting field value with new field builder instance.
911 builder = TestAllTypes.newBuilder();
912 NestedMessage.Builder newFieldBuilder =
913 builder.getOptionalNestedMessageBuilder();
914 newFieldBuilder.setBb(2);
915 // Then get the field builder instance by getFieldBuilder().
916 fieldBuilder =
917 (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor);
918 // It should contain new value.
919 assertEquals(2, fieldBuilder.getBb());
920 // These two builder should be equal.
921 assertSame(fieldBuilder, newFieldBuilder);
922 }
923
924 public void testGetFieldBuilderNotSupportedException() {
925 Descriptor descriptor = TestAllTypes.getDescriptor();
926 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
927 try {
928 builder.getFieldBuilder(descriptor.findFieldByName("optional_int32"));
929 fail("Exception was not thrown");
930 } catch (UnsupportedOperationException e) {
931 // We expect this exception.
932 }
933 try {
934 builder.getFieldBuilder(
935 descriptor.findFieldByName("optional_nested_enum"));
936 fail("Exception was not thrown");
937 } catch (UnsupportedOperationException e) {
938 // We expect this exception.
939 }
940 try {
941 builder.getFieldBuilder(descriptor.findFieldByName("repeated_int32"));
942 fail("Exception was not thrown");
943 } catch (UnsupportedOperationException e) {
944 // We expect this exception.
945 }
946 try {
947 builder.getFieldBuilder(
948 descriptor.findFieldByName("repeated_nested_enum"));
949 fail("Exception was not thrown");
950 } catch (UnsupportedOperationException e) {
951 // We expect this exception.
952 }
953 try {
954 builder.getFieldBuilder(
955 descriptor.findFieldByName("repeated_nested_message"));
956 fail("Exception was not thrown");
957 } catch (UnsupportedOperationException e) {
958 // We expect this exception.
959 }
960 }
961 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698