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 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years 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
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // http://code.google.com/p/protobuf/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above 11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer 12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the 13 // in the documentation and/or other materials provided with the
14 // distribution. 14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its 15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from 16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission. 17 // this software without specific prior written permission.
18 // 18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 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. 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 package com.google.protobuf; 31 package com.google.protobuf.test;
32 import com.google.protobuf.*;
32 33
33 import com.google.protobuf.Descriptors.Descriptor; 34 import com.google.protobuf.Descriptors.Descriptor;
34 import com.google.protobuf.Descriptors.FieldDescriptor; 35 import com.google.protobuf.Descriptors.FieldDescriptor;
35 import com.google.protobuf.UnittestLite.TestAllExtensionsLite;
36 import com.google.protobuf.test.UnittestImport; 36 import com.google.protobuf.test.UnittestImport;
37 import protobuf_unittest.EnumWithNoOuter; 37 import protobuf_unittest.EnumWithNoOuter;
38 import protobuf_unittest.MessageWithNoOuter; 38 import protobuf_unittest.MessageWithNoOuter;
39 import protobuf_unittest.MultipleFilesTestProto; 39 import protobuf_unittest.MultipleFilesTestProto;
40 import protobuf_unittest.NestedExtension.MyNestedExtension; 40 import protobuf_unittest.NestedExtension.MyNestedExtension;
41 import protobuf_unittest.NestedExtensionLite.MyNestedExtensionLite;
42 import protobuf_unittest.NonNestedExtension; 41 import protobuf_unittest.NonNestedExtension;
43 import protobuf_unittest.NonNestedExtension.MessageToBeExtended; 42 import protobuf_unittest.NonNestedExtension.MessageToBeExtended;
44 import protobuf_unittest.NonNestedExtension.MyNonNestedExtension; 43 import protobuf_unittest.NonNestedExtension.MyNonNestedExtension;
45 import protobuf_unittest.NonNestedExtensionLite;
46 import protobuf_unittest.NonNestedExtensionLite.MessageLiteToBeExtended;
47 import protobuf_unittest.NonNestedExtensionLite.MyNonNestedExtensionLite;
48 import protobuf_unittest.OuterClassNameTest2OuterClass;
49 import protobuf_unittest.OuterClassNameTest3OuterClass;
50 import protobuf_unittest.OuterClassNameTestOuterClass;
51 import protobuf_unittest.ServiceWithNoOuter; 44 import protobuf_unittest.ServiceWithNoOuter;
52 import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; 45 import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize;
53 import protobuf_unittest.UnittestOptimizeFor.TestOptionalOptimizedForSize; 46 import protobuf_unittest.UnittestOptimizeFor.TestOptionalOptimizedForSize;
54 import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize; 47 import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize;
55 import protobuf_unittest.UnittestProto; 48 import protobuf_unittest.UnittestProto;
56 import protobuf_unittest.UnittestProto.ForeignEnum; 49 import protobuf_unittest.UnittestProto.ForeignEnum;
57 import protobuf_unittest.UnittestProto.ForeignMessage; 50 import protobuf_unittest.UnittestProto.ForeignMessage;
58 import protobuf_unittest.UnittestProto.ForeignMessageOrBuilder; 51 import protobuf_unittest.UnittestProto.ForeignMessageOrBuilder;
59 import protobuf_unittest.UnittestProto.NestedTestAllTypes;
60 import protobuf_unittest.UnittestProto.TestAllExtensions; 52 import protobuf_unittest.UnittestProto.TestAllExtensions;
61 import protobuf_unittest.UnittestProto.TestAllTypes; 53 import protobuf_unittest.UnittestProto.TestAllTypes;
62 import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage; 54 import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage;
63 import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; 55 import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder;
64 import protobuf_unittest.UnittestProto.TestExtremeDefaultValues; 56 import protobuf_unittest.UnittestProto.TestExtremeDefaultValues;
65 import protobuf_unittest.UnittestProto.TestOneof2;
66 import protobuf_unittest.UnittestProto.TestPackedTypes; 57 import protobuf_unittest.UnittestProto.TestPackedTypes;
67 import protobuf_unittest.UnittestProto.TestUnpackedTypes; 58 import protobuf_unittest.UnittestProto.TestUnpackedTypes;
68 59
69 import junit.framework.TestCase; 60 import junit.framework.TestCase;
70 61
71 import java.io.ByteArrayInputStream; 62 import java.io.ByteArrayInputStream;
72 import java.io.ByteArrayOutputStream; 63 import java.io.ByteArrayOutputStream;
73 import java.io.ObjectInputStream; 64 import java.io.ObjectInputStream;
74 import java.io.ObjectOutputStream; 65 import java.io.ObjectOutputStream;
75 import java.util.Arrays; 66 import java.util.Arrays;
76 import java.util.Collections; 67 import java.util.Collections;
77 import java.util.Iterator;
78 import java.util.List; 68 import java.util.List;
79 69
80 /** 70 /**
81 * Unit test for generated messages and generated code. See also 71 * Unit test for generated messages and generated code. See also
82 * {@link MessageTest}, which tests some generated message functionality. 72 * {@link MessageTest}, which tests some generated message functionality.
83 * 73 *
84 * @author kenton@google.com Kenton Varda 74 * @author kenton@google.com Kenton Varda
85 */ 75 */
86 public class GeneratedMessageTest extends TestCase { 76 public class GeneratedMessageTest extends TestCase {
87 TestUtil.ReflectionTester reflectionTester = 77 TestUtil.ReflectionTester reflectionTester =
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 assertEquals(200, value2.getOptionalSfixed64()); 138 assertEquals(200, value2.getOptionalSfixed64());
149 assertEquals(200, value2.getRepeatedInt32(0)); 139 assertEquals(200, value2.getRepeatedInt32(0));
150 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, 140 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO,
151 value2.getOptionalImportEnum()); 141 value2.getOptionalImportEnum());
152 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, 142 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO,
153 value2.getRepeatedImportEnum(0)); 143 value2.getRepeatedImportEnum(0));
154 assertEquals(2, value2.getOptionalForeignMessage().getC()); 144 assertEquals(2, value2.getOptionalForeignMessage().getC());
155 assertEquals(2, value2.getRepeatedForeignMessage(0).getC()); 145 assertEquals(2, value2.getRepeatedForeignMessage(0).getC());
156 } 146 }
157 147
158 public void testProtosShareRepeatedArraysIfDidntChange() throws Exception {
159 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
160 builder.addRepeatedInt32(100);
161 builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance());
162
163 TestAllTypes value1 = builder.build();
164 TestAllTypes value2 = value1.toBuilder().build();
165
166 assertSame(value1.getRepeatedInt32List(), value2.getRepeatedInt32List());
167 assertSame(value1.getRepeatedForeignMessageList(),
168 value2.getRepeatedForeignMessageList());
169 }
170
171 public void testRepeatedArraysAreImmutable() throws Exception { 148 public void testRepeatedArraysAreImmutable() throws Exception {
172 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); 149 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
173 builder.addRepeatedInt32(100); 150 builder.addRepeatedInt32(100);
174 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); 151 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR);
175 builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()); 152 builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance());
176 assertIsUnmodifiable(builder.getRepeatedInt32List()); 153 assertIsUnmodifiable(builder.getRepeatedInt32List());
177 assertIsUnmodifiable(builder.getRepeatedImportEnumList()); 154 assertIsUnmodifiable(builder.getRepeatedImportEnumList());
178 assertIsUnmodifiable(builder.getRepeatedForeignMessageList()); 155 assertIsUnmodifiable(builder.getRepeatedForeignMessageList());
179 assertIsUnmodifiable(builder.getRepeatedFloatList()); 156 assertIsUnmodifiable(builder.getRepeatedFloatList());
180 157
181 158
182 TestAllTypes value = builder.build(); 159 TestAllTypes value = builder.build();
183 assertIsUnmodifiable(value.getRepeatedInt32List()); 160 assertIsUnmodifiable(value.getRepeatedInt32List());
184 assertIsUnmodifiable(value.getRepeatedImportEnumList()); 161 assertIsUnmodifiable(value.getRepeatedImportEnumList());
185 assertIsUnmodifiable(value.getRepeatedForeignMessageList()); 162 assertIsUnmodifiable(value.getRepeatedForeignMessageList());
186 assertIsUnmodifiable(value.getRepeatedFloatList()); 163 assertIsUnmodifiable(value.getRepeatedFloatList());
187 } 164 }
188 165
189 public void testParsedMessagesAreImmutable() throws Exception { 166 public void testParsedMessagesAreImmutable() throws Exception {
190 TestAllTypes value = TestAllTypes.parser().parseFrom(TestUtil.getAllSet().to ByteString()); 167 TestAllTypes value = TestAllTypes.PARSER.parseFrom(
168 TestUtil.getAllSet().toByteString());
191 assertIsUnmodifiable(value.getRepeatedInt32List()); 169 assertIsUnmodifiable(value.getRepeatedInt32List());
192 assertIsUnmodifiable(value.getRepeatedInt64List()); 170 assertIsUnmodifiable(value.getRepeatedInt64List());
193 assertIsUnmodifiable(value.getRepeatedUint32List()); 171 assertIsUnmodifiable(value.getRepeatedUint32List());
194 assertIsUnmodifiable(value.getRepeatedUint64List()); 172 assertIsUnmodifiable(value.getRepeatedUint64List());
195 assertIsUnmodifiable(value.getRepeatedSint32List()); 173 assertIsUnmodifiable(value.getRepeatedSint32List());
196 assertIsUnmodifiable(value.getRepeatedSint64List()); 174 assertIsUnmodifiable(value.getRepeatedSint64List());
197 assertIsUnmodifiable(value.getRepeatedFixed32List()); 175 assertIsUnmodifiable(value.getRepeatedFixed32List());
198 assertIsUnmodifiable(value.getRepeatedFixed64List()); 176 assertIsUnmodifiable(value.getRepeatedFixed64List());
199 assertIsUnmodifiable(value.getRepeatedSfixed32List()); 177 assertIsUnmodifiable(value.getRepeatedSfixed32List());
200 assertIsUnmodifiable(value.getRepeatedSfixed64List()); 178 assertIsUnmodifiable(value.getRepeatedSfixed64List());
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // We expect this exception. 372 // We expect this exception.
395 } 373 }
396 374
397 try { 375 try {
398 builder.addAllRepeatedBytes(Arrays.asList(TestUtil.toBytes("one"), null)); 376 builder.addAllRepeatedBytes(Arrays.asList(TestUtil.toBytes("one"), null));
399 fail("Exception was not thrown"); 377 fail("Exception was not thrown");
400 } catch (NullPointerException e) { 378 } catch (NullPointerException e) {
401 // We expect this exception. 379 // We expect this exception.
402 } 380 }
403 } 381 }
404
405 public void testRepeatedAppendIterateOnlyOnce() throws Exception {
406 // Create a Iterable that can only be iterated once.
407 Iterable<String> stringIterable = new Iterable<String>() {
408 private boolean called = false;
409 @Override
410 public Iterator<String> iterator() {
411 if (called) {
412 throw new IllegalStateException();
413 }
414 called = true;
415 return Arrays.asList("one", "two", "three").iterator();
416 }
417 };
418 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
419 builder.addAllRepeatedString(stringIterable);
420 assertEquals(3, builder.getRepeatedStringCount());
421 assertEquals("one", builder.getRepeatedString(0));
422 assertEquals("two", builder.getRepeatedString(1));
423 assertEquals("three", builder.getRepeatedString(2));
424
425 try {
426 builder.addAllRepeatedString(stringIterable);
427 fail("Exception was not thrown");
428 } catch (IllegalStateException e) {
429 // We expect this exception.
430 }
431 }
432
433 public void testMergeFromOtherRejectsNull() throws Exception {
434 try {
435 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
436 builder.mergeFrom((TestAllTypes) null);
437 fail("Exception was not thrown");
438 } catch (NullPointerException e) {
439 // We expect this exception.
440 }
441 }
442 382
443 public void testSettingForeignMessageUsingBuilder() throws Exception { 383 public void testSettingForeignMessageUsingBuilder() throws Exception {
444 TestAllTypes message = TestAllTypes.newBuilder() 384 TestAllTypes message = TestAllTypes.newBuilder()
445 // Pass builder for foreign message instance. 385 // Pass builder for foreign message instance.
446 .setOptionalForeignMessage(ForeignMessage.newBuilder().setC(123)) 386 .setOptionalForeignMessage(ForeignMessage.newBuilder().setC(123))
447 .build(); 387 .build();
448 TestAllTypes expectedMessage = TestAllTypes.newBuilder() 388 TestAllTypes expectedMessage = TestAllTypes.newBuilder()
449 // Create expected version passing foreign message instance explicitly. 389 // Create expected version passing foreign message instance explicitly.
450 .setOptionalForeignMessage( 390 .setOptionalForeignMessage(
451 ForeignMessage.newBuilder().setC(123).build()) 391 ForeignMessage.newBuilder().setC(123).build())
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 reflectionTester.assertReflectionRepeatedSettersRejectNull(builder); 469 reflectionTester.assertReflectionRepeatedSettersRejectNull(builder);
530 } 470 }
531 471
532 public void testReflectionDefaults() throws Exception { 472 public void testReflectionDefaults() throws Exception {
533 reflectionTester.assertClearViaReflection( 473 reflectionTester.assertClearViaReflection(
534 TestAllTypes.getDefaultInstance()); 474 TestAllTypes.getDefaultInstance());
535 reflectionTester.assertClearViaReflection( 475 reflectionTester.assertClearViaReflection(
536 TestAllTypes.newBuilder().build()); 476 TestAllTypes.newBuilder().build());
537 } 477 }
538 478
539 public void testReflectionGetOneof() throws Exception {
540 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
541 reflectionTester.setAllFieldsViaReflection(builder);
542 Descriptors.OneofDescriptor oneof =
543 TestAllTypes.getDescriptor().getOneofs().get(0);
544 Descriptors.FieldDescriptor field =
545 TestAllTypes.getDescriptor().findFieldByName("oneof_bytes");
546 assertSame(field, builder.getOneofFieldDescriptor(oneof));
547
548 TestAllTypes message = builder.build();
549 assertSame(field, message.getOneofFieldDescriptor(oneof));
550 }
551
552 public void testReflectionClearOneof() throws Exception {
553 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
554 reflectionTester.setAllFieldsViaReflection(builder);
555 Descriptors.OneofDescriptor oneof =
556 TestAllTypes.getDescriptor().getOneofs().get(0);
557 Descriptors.FieldDescriptor field =
558 TestAllTypes.getDescriptor().findFieldByName("oneof_bytes");
559
560 assertTrue(builder.hasOneof(oneof));
561 assertTrue(builder.hasField(field));
562 builder.clearOneof(oneof);
563 assertFalse(builder.hasOneof(oneof));
564 assertFalse(builder.hasField(field));
565 }
566
567 public void testEnumInterface() throws Exception { 479 public void testEnumInterface() throws Exception {
568 assertTrue(TestAllTypes.getDefaultInstance().getDefaultNestedEnum() 480 assertTrue(TestAllTypes.getDefaultInstance().getDefaultNestedEnum()
569 instanceof ProtocolMessageEnum); 481 instanceof ProtocolMessageEnum);
570 } 482 }
571 483
572 public void testEnumMap() throws Exception { 484 public void testEnumMap() throws Exception {
573 Internal.EnumLiteMap<ForeignEnum> map = ForeignEnum.internalGetValueMap(); 485 Internal.EnumLiteMap<ForeignEnum> map = ForeignEnum.internalGetValueMap();
574 486
575 for (ForeignEnum value : ForeignEnum.values()) { 487 for (ForeignEnum value : ForeignEnum.values()) {
576 assertEquals(value, map.findValueByNumber(value.getNumber())); 488 assertEquals(value, map.findValueByNumber(value.getNumber()));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 TestUtil.modifyRepeatedExtensions(builder); 525 TestUtil.modifyRepeatedExtensions(builder);
614 TestAllExtensions message = builder.build(); 526 TestAllExtensions message = builder.build();
615 TestUtil.assertRepeatedExtensionsModified(message); 527 TestUtil.assertRepeatedExtensionsModified(message);
616 } 528 }
617 529
618 public void testExtensionDefaults() throws Exception { 530 public void testExtensionDefaults() throws Exception {
619 TestUtil.assertExtensionsClear(TestAllExtensions.getDefaultInstance()); 531 TestUtil.assertExtensionsClear(TestAllExtensions.getDefaultInstance());
620 TestUtil.assertExtensionsClear(TestAllExtensions.newBuilder().build()); 532 TestUtil.assertExtensionsClear(TestAllExtensions.newBuilder().build());
621 } 533 }
622 534
623 public void testUnsetRepeatedExtensionGetField() {
624 TestAllExtensions message = TestAllExtensions.getDefaultInstance();
625 Object value;
626
627 value = message.getField(UnittestProto.repeatedStringExtension.getDescriptor ());
628 assertTrue(value instanceof List);
629 assertTrue(((List<?>) value).isEmpty());
630 assertIsUnmodifiable((List<?>) value);
631
632 value = message.getField(UnittestProto.repeatedNestedMessageExtension.getDes criptor());
633 assertTrue(value instanceof List);
634 assertTrue(((List<?>) value).isEmpty());
635 assertIsUnmodifiable((List<?>) value);
636 }
637
638 public void testExtensionReflectionGetters() throws Exception { 535 public void testExtensionReflectionGetters() throws Exception {
639 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); 536 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder();
640 TestUtil.setAllExtensions(builder); 537 TestUtil.setAllExtensions(builder);
641 extensionsReflectionTester.assertAllFieldsSetViaReflection(builder); 538 extensionsReflectionTester.assertAllFieldsSetViaReflection(builder);
642 539
643 TestAllExtensions message = builder.build(); 540 TestAllExtensions message = builder.build();
644 extensionsReflectionTester.assertAllFieldsSetViaReflection(message); 541 extensionsReflectionTester.assertAllFieldsSetViaReflection(message);
645 } 542 }
646 543
647 public void testExtensionReflectionSetters() throws Exception { 544 public void testExtensionReflectionSetters() throws Exception {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 TestAllExtensions.newBuilder() 604 TestAllExtensions.newBuilder()
708 .setExtension(UnittestProto.optionalInt32Extension, 1).build(); 605 .setExtension(UnittestProto.optionalInt32Extension, 1).build();
709 TestAllExtensions merged = 606 TestAllExtensions merged =
710 TestAllExtensions.newBuilder().mergeFrom(original).build(); 607 TestAllExtensions.newBuilder().mergeFrom(original).build();
711 assertTrue(merged.hasExtension(UnittestProto.optionalInt32Extension)); 608 assertTrue(merged.hasExtension(UnittestProto.optionalInt32Extension));
712 assertEquals( 609 assertEquals(
713 1, (int) merged.getExtension(UnittestProto.optionalInt32Extension)); 610 1, (int) merged.getExtension(UnittestProto.optionalInt32Extension));
714 } 611 }
715 612
716 // ================================================================= 613 // =================================================================
717 // Lite Extensions.
718
719 // We test lite extensions directly because they have a separate
720 // implementation from full extensions. In contrast, we do not test
721 // lite fields directly since they are implemented exactly the same as
722 // regular fields.
723
724 public void testLiteExtensionMessageOrBuilder() throws Exception {
725 TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.newBuilder();
726 TestUtilLite.setAllExtensions(builder);
727 TestUtil.assertAllExtensionsSet(builder);
728
729 TestAllExtensionsLite message = builder.build();
730 TestUtil.assertAllExtensionsSet(message);
731 }
732
733 public void testLiteExtensionRepeatedSetters() throws Exception {
734 TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.newBuilder();
735 TestUtilLite.setAllExtensions(builder);
736 TestUtilLite.modifyRepeatedExtensions(builder);
737 TestUtil.assertRepeatedExtensionsModified(builder);
738
739 TestAllExtensionsLite message = builder.build();
740 TestUtil.assertRepeatedExtensionsModified(message);
741 }
742
743 public void testLiteExtensionDefaults() throws Exception {
744 TestUtil.assertExtensionsClear(TestAllExtensionsLite.getDefaultInstance());
745 TestUtil.assertExtensionsClear(TestAllExtensionsLite.newBuilder().build());
746 }
747
748 public void testClearLiteExtension() throws Exception {
749 // clearExtension() is not actually used in TestUtil, so try it manually.
750 assertFalse(
751 TestAllExtensionsLite.newBuilder()
752 .setExtension(UnittestLite.optionalInt32ExtensionLite, 1)
753 .clearExtension(UnittestLite.optionalInt32ExtensionLite)
754 .hasExtension(UnittestLite.optionalInt32ExtensionLite));
755 assertEquals(0,
756 TestAllExtensionsLite.newBuilder()
757 .addExtension(UnittestLite.repeatedInt32ExtensionLite, 1)
758 .clearExtension(UnittestLite.repeatedInt32ExtensionLite)
759 .getExtensionCount(UnittestLite.repeatedInt32ExtensionLite));
760 }
761
762 public void testLiteExtensionCopy() throws Exception {
763 TestAllExtensionsLite original = TestUtilLite.getAllLiteExtensionsSet();
764 TestAllExtensionsLite copy =
765 TestAllExtensionsLite.newBuilder(original).build();
766 TestUtil.assertAllExtensionsSet(copy);
767 }
768
769 public void testLiteExtensionMergeFrom() throws Exception {
770 TestAllExtensionsLite original =
771 TestAllExtensionsLite.newBuilder()
772 .setExtension(UnittestLite.optionalInt32ExtensionLite, 1).build();
773 TestAllExtensionsLite merged =
774 TestAllExtensionsLite.newBuilder().mergeFrom(original).build();
775 assertTrue(merged.hasExtension(UnittestLite.optionalInt32ExtensionLite));
776 assertEquals(
777 1, (int) merged.getExtension(UnittestLite.optionalInt32ExtensionLite));
778 }
779
780 // =================================================================
781 // multiple_files_test 614 // multiple_files_test
782 615
783 // Test that custom options of an file level enum are properly initialized.
784 // This test needs to be put before any other access to MultipleFilesTestProto
785 // or messages defined in multiple_files_test.proto because the class loading
786 // order affects initialization process of custom options.
787 public void testEnumValueOptionsInMultipleFilesMode() throws Exception {
788 assertEquals(12345, EnumWithNoOuter.FOO.getValueDescriptor().getOptions()
789 .getExtension(MultipleFilesTestProto.enumValueOption).intValue());
790 }
791
792 public void testMultipleFilesOption() throws Exception { 616 public void testMultipleFilesOption() throws Exception {
793 // We mostly just want to check that things compile. 617 // We mostly just want to check that things compile.
794 MessageWithNoOuter message = 618 MessageWithNoOuter message =
795 MessageWithNoOuter.newBuilder() 619 MessageWithNoOuter.newBuilder()
796 .setNested(MessageWithNoOuter.NestedMessage.newBuilder().setI(1)) 620 .setNested(MessageWithNoOuter.NestedMessage.newBuilder().setI(1))
797 .addForeign(TestAllTypes.newBuilder().setOptionalInt32(1)) 621 .addForeign(TestAllTypes.newBuilder().setOptionalInt32(1))
798 .setNestedEnum(MessageWithNoOuter.NestedEnum.BAZ) 622 .setNestedEnum(MessageWithNoOuter.NestedEnum.BAZ)
799 .setForeignEnum(EnumWithNoOuter.BAR) 623 .setForeignEnum(EnumWithNoOuter.BAR)
800 .build(); 624 .build();
801 assertEquals(message, MessageWithNoOuter.parseFrom(message.toByteString())); 625 assertEquals(message, MessageWithNoOuter.parseFrom(message.toByteString()));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 assertEquals(UnittestProto.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46); 704 assertEquals(UnittestProto.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46);
881 assertEquals( 705 assertEquals(
882 UnittestProto.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48); 706 UnittestProto.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48);
883 assertEquals(UnittestProto.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 51); 707 assertEquals(UnittestProto.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 51);
884 } 708 }
885 709
886 public void testRecursiveMessageDefaultInstance() throws Exception { 710 public void testRecursiveMessageDefaultInstance() throws Exception {
887 UnittestProto.TestRecursiveMessage message = 711 UnittestProto.TestRecursiveMessage message =
888 UnittestProto.TestRecursiveMessage.getDefaultInstance(); 712 UnittestProto.TestRecursiveMessage.getDefaultInstance();
889 assertTrue(message != null); 713 assertTrue(message != null);
890 assertNotNull(message.getA()); 714 assertTrue(message.getA() != null);
891 assertTrue(message.getA() == message); 715 assertTrue(message.getA() == message);
892 } 716 }
893 717
894 public void testSerialize() throws Exception { 718 public void testSerialize() throws Exception {
895 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 719 ByteArrayOutputStream baos = new ByteArrayOutputStream();
896 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); 720 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
897 TestUtil.setAllFields(builder); 721 TestUtil.setAllFields(builder);
898 TestAllTypes expected = builder.build(); 722 TestAllTypes expected = builder.build();
899 ObjectOutputStream out = new ObjectOutputStream(baos); 723 ObjectOutputStream out = new ObjectOutputStream(baos);
900 try { 724 try {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 NonNestedExtension.nonNestedExtension.getDescriptor().getName() ); 767 NonNestedExtension.nonNestedExtension.getDescriptor().getName() );
944 } 768 }
945 769
946 public void testNestedExtensionInitialization() { 770 public void testNestedExtensionInitialization() {
947 assertTrue(MyNestedExtension.recursiveExtension.getMessageDefaultInstance() 771 assertTrue(MyNestedExtension.recursiveExtension.getMessageDefaultInstance()
948 instanceof MessageToBeExtended); 772 instanceof MessageToBeExtended);
949 assertEquals("recursiveExtension", 773 assertEquals("recursiveExtension",
950 MyNestedExtension.recursiveExtension.getDescriptor().getName()) ; 774 MyNestedExtension.recursiveExtension.getDescriptor().getName()) ;
951 } 775 }
952 776
953 public void testNonNestedExtensionLiteInitialization() {
954 assertTrue(NonNestedExtensionLite.nonNestedExtensionLite
955 .getMessageDefaultInstance() instanceof MyNonNestedExtensionLite) ;
956 }
957
958 public void testNestedExtensionLiteInitialization() {
959 assertTrue(MyNestedExtensionLite.recursiveExtensionLite
960 .getMessageDefaultInstance() instanceof MessageLiteToBeExtended);
961 }
962
963 public void testInvalidations() throws Exception {
964 GeneratedMessage.enableAlwaysUseFieldBuildersForTesting();
965 TestAllTypes.NestedMessage nestedMessage1 =
966 TestAllTypes.NestedMessage.newBuilder().build();
967 TestAllTypes.NestedMessage nestedMessage2 =
968 TestAllTypes.NestedMessage.newBuilder().build();
969
970 // Set all three flavors (enum, primitive, message and singular/repeated)
971 // and verify no invalidations fired
972 TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
973
974 TestAllTypes.Builder builder = (TestAllTypes.Builder)
975 ((GeneratedMessage) TestAllTypes.getDefaultInstance()).
976 newBuilderForType(mockParent);
977 builder.setOptionalInt32(1);
978 builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAR);
979 builder.setOptionalNestedMessage(nestedMessage1);
980 builder.addRepeatedInt32(1);
981 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAR);
982 builder.addRepeatedNestedMessage(nestedMessage1);
983 assertEquals(0, mockParent.getInvalidationCount());
984
985 // Now tell it we want changes and make sure it's only fired once
986 // And do this for each flavor
987
988 // primitive single
989 builder.buildPartial();
990 builder.setOptionalInt32(2);
991 builder.setOptionalInt32(3);
992 assertEquals(1, mockParent.getInvalidationCount());
993
994 // enum single
995 builder.buildPartial();
996 builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAZ);
997 builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAR);
998 assertEquals(2, mockParent.getInvalidationCount());
999
1000 // message single
1001 builder.buildPartial();
1002 builder.setOptionalNestedMessage(nestedMessage2);
1003 builder.setOptionalNestedMessage(nestedMessage1);
1004 assertEquals(3, mockParent.getInvalidationCount());
1005
1006 // primitive repeated
1007 builder.buildPartial();
1008 builder.addRepeatedInt32(2);
1009 builder.addRepeatedInt32(3);
1010 assertEquals(4, mockParent.getInvalidationCount());
1011
1012 // enum repeated
1013 builder.buildPartial();
1014 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAZ);
1015 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAZ);
1016 assertEquals(5, mockParent.getInvalidationCount());
1017
1018 // message repeated
1019 builder.buildPartial();
1020 builder.addRepeatedNestedMessage(nestedMessage2);
1021 builder.addRepeatedNestedMessage(nestedMessage1);
1022 assertEquals(6, mockParent.getInvalidationCount());
1023
1024 }
1025
1026 public void testInvalidations_Extensions() throws Exception {
1027 TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent();
1028
1029 TestAllExtensions.Builder builder = (TestAllExtensions.Builder)
1030 ((GeneratedMessage) TestAllExtensions.getDefaultInstance()).
1031 newBuilderForType(mockParent);
1032
1033 builder.addExtension(UnittestProto.repeatedInt32Extension, 1);
1034 builder.setExtension(UnittestProto.repeatedInt32Extension, 0, 2);
1035 builder.clearExtension(UnittestProto.repeatedInt32Extension);
1036 assertEquals(0, mockParent.getInvalidationCount());
1037
1038 // Now tell it we want changes and make sure it's only fired once
1039 builder.buildPartial();
1040 builder.addExtension(UnittestProto.repeatedInt32Extension, 2);
1041 builder.addExtension(UnittestProto.repeatedInt32Extension, 3);
1042 assertEquals(1, mockParent.getInvalidationCount());
1043
1044 builder.buildPartial();
1045 builder.setExtension(UnittestProto.repeatedInt32Extension, 0, 4);
1046 builder.setExtension(UnittestProto.repeatedInt32Extension, 1, 5);
1047 assertEquals(2, mockParent.getInvalidationCount());
1048
1049 builder.buildPartial();
1050 builder.clearExtension(UnittestProto.repeatedInt32Extension);
1051 builder.clearExtension(UnittestProto.repeatedInt32Extension);
1052 assertEquals(3, mockParent.getInvalidationCount());
1053 }
1054 777
1055 public void testBaseMessageOrBuilder() { 778 public void testBaseMessageOrBuilder() {
1056 // Mostly just makes sure the base interface exists and has some methods. 779 // Mostly just makes sure the base interface exists and has some methods.
1057 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); 780 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
1058 TestAllTypes message = builder.buildPartial(); 781 TestAllTypes message = builder.buildPartial();
1059 TestAllTypesOrBuilder builderAsInterface = (TestAllTypesOrBuilder) builder; 782 TestAllTypesOrBuilder builderAsInterface = (TestAllTypesOrBuilder) builder;
1060 TestAllTypesOrBuilder messageAsInterface = (TestAllTypesOrBuilder) message; 783 TestAllTypesOrBuilder messageAsInterface = (TestAllTypesOrBuilder) message;
1061 784
1062 assertEquals( 785 assertEquals(
1063 messageAsInterface.getDefaultBool(), 786 messageAsInterface.getDefaultBool(),
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 // We expect this exception. 951 // We expect this exception.
1229 } 952 }
1230 try { 953 try {
1231 builder.getFieldBuilder( 954 builder.getFieldBuilder(
1232 descriptor.findFieldByName("repeated_nested_message")); 955 descriptor.findFieldByName("repeated_nested_message"));
1233 fail("Exception was not thrown"); 956 fail("Exception was not thrown");
1234 } catch (UnsupportedOperationException e) { 957 } catch (UnsupportedOperationException e) {
1235 // We expect this exception. 958 // We expect this exception.
1236 } 959 }
1237 } 960 }
1238
1239 // Test that when the default outer class name conflicts with another type
1240 // defined in the proto the compiler will append a suffix to avoid the
1241 // conflict.
1242 public void testConflictingOuterClassName() {
1243 // We just need to make sure we can refer to the outer class with the
1244 // expected name. There is nothing else to test.
1245 OuterClassNameTestOuterClass.OuterClassNameTest message =
1246 OuterClassNameTestOuterClass.OuterClassNameTest.newBuilder().build();
1247 assertTrue(message.getDescriptorForType() ==
1248 OuterClassNameTestOuterClass.OuterClassNameTest.getDescriptor());
1249
1250 OuterClassNameTest2OuterClass.TestMessage2.NestedMessage.OuterClassNameTest2
1251 message2 = OuterClassNameTest2OuterClass.TestMessage2.NestedMessage
1252 .OuterClassNameTest2.newBuilder().build();
1253 assertEquals(0, message2.getSerializedSize());
1254
1255 OuterClassNameTest3OuterClass.TestMessage3.NestedMessage.OuterClassNameTest3
1256 enumValue = OuterClassNameTest3OuterClass.TestMessage3.NestedMessage
1257 .OuterClassNameTest3.DUMMY_VALUE;
1258 assertEquals(1, enumValue.getNumber());
1259 }
1260
1261 // =================================================================
1262 // oneof generated code test
1263 public void testOneofEnumCase() throws Exception {
1264 TestOneof2 message = TestOneof2.newBuilder()
1265 .setFooInt(123).setFooString("foo").setFooCord("bar").build();
1266 TestUtil.assertAtMostOneFieldSetOneof(message);
1267 }
1268
1269 public void testClearOneof() throws Exception {
1270 TestOneof2.Builder builder = TestOneof2.newBuilder().setFooInt(123);
1271 assertEquals(TestOneof2.FooCase.FOO_INT, builder.getFooCase());
1272 builder.clearFoo();
1273 assertEquals(TestOneof2.FooCase.FOO_NOT_SET, builder.getFooCase());
1274 }
1275
1276 public void testSetOneofClearsOthers() throws Exception {
1277 TestOneof2.Builder builder = TestOneof2.newBuilder();
1278 TestOneof2 message =
1279 builder.setFooInt(123).setFooString("foo").buildPartial();
1280 assertTrue(message.hasFooString());
1281 TestUtil.assertAtMostOneFieldSetOneof(message);
1282
1283 message = builder.setFooCord("bar").buildPartial();
1284 assertTrue(message.hasFooCord());
1285 TestUtil.assertAtMostOneFieldSetOneof(message);
1286
1287 message = builder.setFooStringPiece("baz").buildPartial();
1288 assertTrue(message.hasFooStringPiece());
1289 TestUtil.assertAtMostOneFieldSetOneof(message);
1290
1291 message = builder.setFooBytes(TestUtil.toBytes("qux")).buildPartial();
1292 assertTrue(message.hasFooBytes());
1293 TestUtil.assertAtMostOneFieldSetOneof(message);
1294
1295 message = builder.setFooEnum(TestOneof2.NestedEnum.FOO).buildPartial();
1296 assertTrue(message.hasFooEnum());
1297 TestUtil.assertAtMostOneFieldSetOneof(message);
1298
1299 message = builder.setFooMessage(
1300 TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).buildParti al();
1301 assertTrue(message.hasFooMessage());
1302 TestUtil.assertAtMostOneFieldSetOneof(message);
1303
1304 message = builder.setFooInt(123).buildPartial();
1305 assertTrue(message.hasFooInt());
1306 TestUtil.assertAtMostOneFieldSetOneof(message);
1307 }
1308
1309 public void testOneofTypes() throws Exception {
1310 // Primitive
1311 {
1312 TestOneof2.Builder builder = TestOneof2.newBuilder();
1313 assertEquals(builder.getFooInt(), 0);
1314 assertFalse(builder.hasFooInt());
1315 assertTrue(builder.setFooInt(123).hasFooInt());
1316 assertEquals(builder.getFooInt(), 123);
1317 TestOneof2 message = builder.buildPartial();
1318 assertTrue(message.hasFooInt());
1319 assertEquals(message.getFooInt(), 123);
1320
1321 assertFalse(builder.clearFooInt().hasFooInt());
1322 TestOneof2 message2 = builder.build();
1323 assertFalse(message2.hasFooInt());
1324 assertEquals(message2.getFooInt(), 0);
1325 }
1326
1327 // Enum
1328 {
1329 TestOneof2.Builder builder = TestOneof2.newBuilder();
1330 assertEquals(builder.getFooEnum(), TestOneof2.NestedEnum.FOO);
1331 assertTrue(builder.setFooEnum(TestOneof2.NestedEnum.BAR).hasFooEnum());
1332 assertEquals(builder.getFooEnum(), TestOneof2.NestedEnum.BAR);
1333 TestOneof2 message = builder.buildPartial();
1334 assertTrue(message.hasFooEnum());
1335 assertEquals(message.getFooEnum(), TestOneof2.NestedEnum.BAR);
1336
1337 assertFalse(builder.clearFooEnum().hasFooEnum());
1338 TestOneof2 message2 = builder.build();
1339 assertFalse(message2.hasFooEnum());
1340 assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.FOO);
1341 }
1342
1343 // String
1344 {
1345 TestOneof2.Builder builder = TestOneof2.newBuilder();
1346 assertEquals(builder.getFooString(), "");
1347 builder.setFooString("foo");
1348 assertTrue(builder.hasFooString());
1349 assertEquals(builder.getFooString(), "foo");
1350 TestOneof2 message = builder.buildPartial();
1351 assertTrue(message.hasFooString());
1352 assertEquals(message.getFooString(), "foo");
1353 assertEquals(message.getFooStringBytes(), TestUtil.toBytes("foo"));
1354
1355 assertFalse(builder.clearFooString().hasFooString());
1356 TestOneof2 message2 = builder.buildPartial();
1357 assertFalse(message2.hasFooString());
1358 assertEquals(message2.getFooString(), "");
1359 assertEquals(message2.getFooStringBytes(), TestUtil.toBytes(""));
1360
1361 // Get method should not change the oneof value.
1362 builder.setFooInt(123);
1363 assertEquals(builder.getFooString(), "");
1364 assertEquals(builder.getFooStringBytes(), TestUtil.toBytes(""));
1365 assertEquals(123, builder.getFooInt());
1366
1367 message = builder.build();
1368 assertEquals(message.getFooString(), "");
1369 assertEquals(message.getFooStringBytes(), TestUtil.toBytes(""));
1370 assertEquals(123, message.getFooInt());
1371 }
1372
1373 // Cord
1374 {
1375 TestOneof2.Builder builder = TestOneof2.newBuilder();
1376 assertEquals(builder.getFooCord(), "");
1377 builder.setFooCord("foo");
1378 assertTrue(builder.hasFooCord());
1379 assertEquals(builder.getFooCord(), "foo");
1380 TestOneof2 message = builder.buildPartial();
1381 assertTrue(message.hasFooCord());
1382 assertEquals(message.getFooCord(), "foo");
1383 assertEquals(message.getFooCordBytes(), TestUtil.toBytes("foo"));
1384
1385 assertFalse(builder.clearFooCord().hasFooCord());
1386 TestOneof2 message2 = builder.build();
1387 assertFalse(message2.hasFooCord());
1388 assertEquals(message2.getFooCord(), "");
1389 assertEquals(message2.getFooCordBytes(), TestUtil.toBytes(""));
1390 }
1391
1392 // StringPiece
1393 {
1394 TestOneof2.Builder builder = TestOneof2.newBuilder();
1395 assertEquals(builder.getFooStringPiece(), "");
1396 builder.setFooStringPiece("foo");
1397 assertTrue(builder.hasFooStringPiece());
1398 assertEquals(builder.getFooStringPiece(), "foo");
1399 TestOneof2 message = builder.buildPartial();
1400 assertTrue(message.hasFooStringPiece());
1401 assertEquals(message.getFooStringPiece(), "foo");
1402 assertEquals(message.getFooStringPieceBytes(), TestUtil.toBytes("foo"));
1403
1404 assertFalse(builder.clearFooStringPiece().hasFooStringPiece());
1405 TestOneof2 message2 = builder.build();
1406 assertFalse(message2.hasFooStringPiece());
1407 assertEquals(message2.getFooStringPiece(), "");
1408 assertEquals(message2.getFooStringPieceBytes(), TestUtil.toBytes(""));
1409 }
1410
1411 // Message
1412 {
1413 // set
1414 TestOneof2.Builder builder = TestOneof2.newBuilder();
1415 assertEquals(builder.getFooMessage().getQuxInt(), 0);
1416 builder.setFooMessage(
1417 TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build());
1418 assertTrue(builder.hasFooMessage());
1419 assertEquals(builder.getFooMessage().getQuxInt(), 234);
1420 TestOneof2 message = builder.buildPartial();
1421 assertTrue(message.hasFooMessage());
1422 assertEquals(message.getFooMessage().getQuxInt(), 234);
1423
1424 // clear
1425 assertFalse(builder.clearFooMessage().hasFooString());
1426 message = builder.build();
1427 assertFalse(message.hasFooMessage());
1428 assertEquals(message.getFooMessage().getQuxInt(), 0);
1429
1430 // nested builder
1431 builder = TestOneof2.newBuilder();
1432 assertSame(builder.getFooMessageOrBuilder(),
1433 TestOneof2.NestedMessage.getDefaultInstance());
1434 assertFalse(builder.hasFooMessage());
1435 builder.getFooMessageBuilder().setQuxInt(123);
1436 assertTrue(builder.hasFooMessage());
1437 assertEquals(builder.getFooMessage().getQuxInt(), 123);
1438 message = builder.build();
1439 assertTrue(message.hasFooMessage());
1440 assertEquals(message.getFooMessage().getQuxInt(), 123);
1441 }
1442
1443 // LazyMessage is tested in LazyMessageLiteTest.java
1444 }
1445
1446 public void testOneofMerge() throws Exception {
1447 // Primitive Type
1448 {
1449 TestOneof2.Builder builder = TestOneof2.newBuilder();
1450 TestOneof2 message = builder.setFooInt(123).build();
1451 TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build();
1452 assertTrue(message2.hasFooInt());
1453 assertEquals(message2.getFooInt(), 123);
1454 }
1455
1456 // String
1457 {
1458 TestOneof2.Builder builder = TestOneof2.newBuilder();
1459 TestOneof2 message = builder.setFooString("foo").build();
1460 TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build();
1461 assertTrue(message2.hasFooString());
1462 assertEquals(message2.getFooString(), "foo");
1463 }
1464
1465 // Enum
1466 {
1467 TestOneof2.Builder builder = TestOneof2.newBuilder();
1468 TestOneof2 message = builder.setFooEnum(TestOneof2.NestedEnum.BAR).build() ;
1469 TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build();
1470 assertTrue(message2.hasFooEnum());
1471 assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.BAR);
1472 }
1473
1474 // Message
1475 {
1476 TestOneof2.Builder builder = TestOneof2.newBuilder();
1477 TestOneof2 message = builder.setFooMessage(
1478 TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).build();
1479 TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build();
1480 assertTrue(message2.hasFooMessage());
1481 assertEquals(message2.getFooMessage().getQuxInt(), 234);
1482 }
1483 }
1484
1485 public void testOneofSerialization() throws Exception {
1486 // Primitive Type
1487 {
1488 TestOneof2.Builder builder = TestOneof2.newBuilder();
1489 TestOneof2 message = builder.setFooInt(123).build();
1490 ByteString serialized = message.toByteString();
1491 TestOneof2 message2 = TestOneof2.parseFrom(serialized);
1492 assertTrue(message2.hasFooInt());
1493 assertEquals(message2.getFooInt(), 123);
1494 }
1495
1496 // String
1497 {
1498 TestOneof2.Builder builder = TestOneof2.newBuilder();
1499 TestOneof2 message = builder.setFooString("foo").build();
1500 ByteString serialized = message.toByteString();
1501 TestOneof2 message2 = TestOneof2.parseFrom(serialized);
1502 assertTrue(message2.hasFooString());
1503 assertEquals(message2.getFooString(), "foo");
1504 }
1505
1506 // Enum
1507 {
1508 TestOneof2.Builder builder = TestOneof2.newBuilder();
1509 TestOneof2 message = builder.setFooEnum(TestOneof2.NestedEnum.BAR).build() ;
1510 ByteString serialized = message.toByteString();
1511 TestOneof2 message2 = TestOneof2.parseFrom(serialized);
1512 assertTrue(message2.hasFooEnum());
1513 assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.BAR);
1514 }
1515
1516 // Message
1517 {
1518 TestOneof2.Builder builder = TestOneof2.newBuilder();
1519 TestOneof2 message = builder.setFooMessage(
1520 TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).build();
1521 ByteString serialized = message.toByteString();
1522 TestOneof2 message2 = TestOneof2.parseFrom(serialized);
1523 assertTrue(message2.hasFooMessage());
1524 assertEquals(message2.getFooMessage().getQuxInt(), 234);
1525 }
1526 }
1527
1528 public void testOneofNestedBuilderOnChangePropagation() {
1529 NestedTestAllTypes.Builder parentBuilder = NestedTestAllTypes.newBuilder();
1530 TestAllTypes.Builder builder = parentBuilder.getPayloadBuilder();
1531 builder.getOneofNestedMessageBuilder();
1532 assertTrue(builder.hasOneofNestedMessage());
1533 assertTrue(parentBuilder.hasPayload());
1534 NestedTestAllTypes message = parentBuilder.build();
1535 assertTrue(message.hasPayload());
1536 assertTrue(message.getPayload().hasOneofNestedMessage());
1537 }
1538
1539 public void testGetRepeatedFieldBuilder() {
1540 Descriptor descriptor = TestAllTypes.getDescriptor();
1541
1542 FieldDescriptor fieldDescriptor =
1543 descriptor.findFieldByName("repeated_nested_message");
1544 FieldDescriptor foreignFieldDescriptor =
1545 descriptor.findFieldByName("repeated_foreign_message");
1546 FieldDescriptor importFieldDescriptor =
1547 descriptor.findFieldByName("repeated_import_message");
1548
1549 // Mutate the message with new field builder
1550 // Mutate nested message
1551 TestAllTypes.Builder builder1 = TestAllTypes.newBuilder();
1552 Message.Builder fieldBuilder1 = builder1.newBuilderForField(
1553 fieldDescriptor);
1554 FieldDescriptor subFieldDescriptor1 =
1555 fieldBuilder1.getDescriptorForType().findFieldByName("bb");
1556 fieldBuilder1.setField(subFieldDescriptor1, 1);
1557 builder1.addRepeatedField(fieldDescriptor, fieldBuilder1.build());
1558
1559 // Mutate foreign message
1560 Message.Builder foreignFieldBuilder1 = builder1.newBuilderForField(
1561 foreignFieldDescriptor);
1562 FieldDescriptor subForeignFieldDescriptor1 =
1563 foreignFieldBuilder1.getDescriptorForType().findFieldByName("c");
1564 foreignFieldBuilder1.setField(subForeignFieldDescriptor1, 2);
1565 builder1.addRepeatedField(foreignFieldDescriptor,
1566 foreignFieldBuilder1.build());
1567
1568 // Mutate import message
1569 Message.Builder importFieldBuilder1 = builder1.newBuilderForField(
1570 importFieldDescriptor);
1571 FieldDescriptor subImportFieldDescriptor1 =
1572 importFieldBuilder1.getDescriptorForType().findFieldByName("d");
1573 importFieldBuilder1.setField(subImportFieldDescriptor1, 3);
1574 builder1.addRepeatedField(importFieldDescriptor,
1575 importFieldBuilder1.build());
1576
1577 Message newMessage1 = builder1.build();
1578
1579 // Mutate the message with existing field builder
1580 // Mutate nested message
1581 TestAllTypes.Builder builder2 = TestAllTypes.newBuilder();
1582 builder2.addRepeatedNestedMessageBuilder();
1583 Message.Builder fieldBuilder2 = builder2.getRepeatedFieldBuilder(
1584 fieldDescriptor, 0);
1585 FieldDescriptor subFieldDescriptor2 =
1586 fieldBuilder2.getDescriptorForType().findFieldByName("bb");
1587 fieldBuilder2.setField(subFieldDescriptor2, 1);
1588
1589 // Mutate foreign message
1590 Message.Builder foreignFieldBuilder2 = builder2.newBuilderForField(
1591 foreignFieldDescriptor);
1592 FieldDescriptor subForeignFieldDescriptor2 =
1593 foreignFieldBuilder2.getDescriptorForType().findFieldByName("c");
1594 foreignFieldBuilder2.setField(subForeignFieldDescriptor2, 2);
1595 builder2.addRepeatedField(foreignFieldDescriptor,
1596 foreignFieldBuilder2.build());
1597
1598 // Mutate import message
1599 Message.Builder importFieldBuilder2 = builder2.newBuilderForField(
1600 importFieldDescriptor);
1601 FieldDescriptor subImportFieldDescriptor2 =
1602 importFieldBuilder2.getDescriptorForType().findFieldByName("d");
1603 importFieldBuilder2.setField(subImportFieldDescriptor2, 3);
1604 builder2.addRepeatedField(importFieldDescriptor,
1605 importFieldBuilder2.build());
1606
1607 Message newMessage2 = builder2.build();
1608
1609 // These two messages should be equal.
1610 assertEquals(newMessage1, newMessage2);
1611 }
1612
1613 public void testGetRepeatedFieldBuilderWithInitializedValue() {
1614 Descriptor descriptor = TestAllTypes.getDescriptor();
1615 FieldDescriptor fieldDescriptor =
1616 descriptor.findFieldByName("repeated_nested_message");
1617
1618 // Before setting field, builder is initialized by default value.
1619 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
1620 builder.addRepeatedNestedMessageBuilder();
1621 NestedMessage.Builder fieldBuilder =
1622 (NestedMessage.Builder) builder.getRepeatedFieldBuilder(fieldDescriptor, 0);
1623 assertEquals(0, fieldBuilder.getBb());
1624
1625 // Setting field value with new field builder instance.
1626 builder = TestAllTypes.newBuilder();
1627 NestedMessage.Builder newFieldBuilder =
1628 builder.addRepeatedNestedMessageBuilder();
1629 newFieldBuilder.setBb(2);
1630 // Then get the field builder instance by getRepeatedFieldBuilder().
1631 fieldBuilder =
1632 (NestedMessage.Builder) builder.getRepeatedFieldBuilder(fieldDescriptor, 0);
1633 // It should contain new value.
1634 assertEquals(2, fieldBuilder.getBb());
1635 // These two builder should be equal.
1636 assertSame(fieldBuilder, newFieldBuilder);
1637 }
1638
1639 public void testGetRepeatedFieldBuilderNotSupportedException() {
1640 Descriptor descriptor = TestAllTypes.getDescriptor();
1641 TestAllTypes.Builder builder = TestAllTypes.newBuilder();
1642 try {
1643 builder.getRepeatedFieldBuilder(descriptor.findFieldByName("repeated_int32 "), 0);
1644 fail("Exception was not thrown");
1645 } catch (UnsupportedOperationException e) {
1646 // We expect this exception.
1647 }
1648 try {
1649 builder.getRepeatedFieldBuilder(
1650 descriptor.findFieldByName("repeated_nested_enum"), 0);
1651 fail("Exception was not thrown");
1652 } catch (UnsupportedOperationException e) {
1653 // We expect this exception.
1654 }
1655 try {
1656 builder.getRepeatedFieldBuilder(descriptor.findFieldByName("optional_int32 "), 0);
1657 fail("Exception was not thrown");
1658 } catch (UnsupportedOperationException e) {
1659 // We expect this exception.
1660 }
1661 try {
1662 builder.getRepeatedFieldBuilder(
1663 descriptor.findFieldByName("optional_nested_enum"), 0);
1664 fail("Exception was not thrown");
1665 } catch (UnsupportedOperationException e) {
1666 // We expect this exception.
1667 }
1668 try {
1669 builder.getRepeatedFieldBuilder(
1670 descriptor.findFieldByName("optional_nested_message"), 0);
1671 fail("Exception was not thrown");
1672 } catch (UnsupportedOperationException e) {
1673 // We expect this exception.
1674 }
1675 }
1676 } 961 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698