31 package com.google.protobuf;
38 import map_test.MapForProto2TestProto;
39 import map_test.MapTestProto.TestMap;
52 import proto2_wireformat_unittest.UnittestMsetWireFormat.TestMessageSet;
53 import proto3_unittest.UnittestProto3;
54 import java.io.ByteArrayInputStream;
55 import java.io.ByteArrayOutputStream;
56 import java.io.IOException;
57 import java.io.InputStream;
58 import java.util.Arrays;
59 import java.util.List;
60 import junit.framework.TestCase;
70 assertEquals(rawBytes.
size(),
message.getSerializedSize());
72 TestAllTypes message2 = TestAllTypes.parseFrom(rawBytes);
84 ByteString rawBytes2 = message2.toByteString();
86 assertEquals(rawBytes, rawBytes2);
99 TestAllExtensionsLite message2 = TestAllExtensionsLite.parseFrom(rawBytes, registryLite);
101 message2 = TestAllExtensionsLite.parseFrom(
message.toByteArray(), registryLite);
112 TestPackedExtensionsLite message2 = TestPackedExtensionsLite.parseFrom(rawBytes, registry);
114 message2 = TestPackedExtensionsLite.parseFrom(
message.toByteArray(), registry);
122 assertEquals(rawBytes.
size(),
message.getSerializedSize());
124 TestAllTypes message2 = TestAllTypes.parseFrom(rawBytes);
133 assertEquals(rawBytes.
size(),
message.getSerializedSize());
135 TestPackedTypes message2 = TestPackedTypes.parseFrom(rawBytes);
147 assertEquals(rawBytes.
size(),
message.getSerializedSize());
149 TestAllTypes message2 = TestAllTypes.parseFrom(rawBytes);
161 ByteString rawBytes2 = message2.toByteString();
163 assertEquals(rawBytes, rawBytes2);
174 ByteArrayOutputStream outputStream =
new ByteArrayOutputStream();
181 TestPackedTypes message2 = TestPackedTypes.parseFrom(outputStream.toByteArray());
196 TestAllExtensions message2 = TestAllExtensions.parseFrom(rawBytes, registry);
208 TestPackedExtensions message2 = TestPackedExtensions.parseFrom(rawBytes, registry);
214 ByteArrayOutputStream
output =
new ByteArrayOutputStream();
220 ByteArrayInputStream
input =
new ByteArrayInputStream(
output.toByteArray());
223 assertEquals(12,
input.read());
225 assertEquals(34,
input.read());
226 assertEquals(-1,
input.read());
229 assertNull(TestAllTypes.parseDelimitedFrom(
input));
234 result.
add(UnittestProto.myExtensionInt);
235 result.
add(UnittestProto.myExtensionString);
242 TestFieldOrderings
source =
243 TestFieldOrderings.newBuilder()
247 .setExtension(UnittestProto.myExtensionInt, 23)
248 .setExtension(UnittestProto.myExtensionString,
"bar")
250 TestFieldOrderings
dest =
257 result.
add(UnittestProto.testExtensionInsideTableExtension);
264 TestExtensionInsideTable
source =
265 TestExtensionInsideTable.newBuilder()
267 .setExtension(UnittestProto.testExtensionInsideTableExtension, 23)
269 TestExtensionInsideTable
dest =
270 TestExtensionInsideTable.parseFrom(
288 ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream();
292 byte[] messageSetBytes = byteArrayOutputStream.toByteArray();
296 TestMessageSet messageSet =
297 TestMessageSet.newBuilder()
299 TestMessageSetExtension1.messageSetExtension,
300 TestMessageSetExtension1.newBuilder().setI(123).build())
302 TestMessageSetExtension2.messageSetExtension,
303 TestMessageSetExtension2.newBuilder().setStr(
"foo").build())
304 .mergeFrom(messageSetBytes)
310 RawMessageSet raw = RawMessageSet.parseFrom(
data);
312 assertEquals(3, raw.getItemCount());
313 assertEquals(
TYPE_ID_1, raw.getItem(0).getTypeId());
314 assertEquals(
TYPE_ID_2, raw.getItem(1).getTypeId());
317 TestMessageSetExtension1 message1 =
318 TestMessageSetExtension1.parseFrom(raw.getItem(0).getMessage());
319 assertEquals(123, message1.getI());
321 TestMessageSetExtension2 message2 =
322 TestMessageSetExtension2.parseFrom(raw.getItem(1).getMessage());
323 assertEquals(
"foo", message2.getStr());
325 assertEquals(
"bar", raw.getItem(2).getMessage().toStringUtf8());
339 extensionRegistry.
add(TestMessageSetExtension1.messageSetExtension);
340 extensionRegistry.
add(TestMessageSetExtension2.messageSetExtension);
344 RawMessageSet.newBuilder()
346 RawMessageSet.Item.newBuilder()
349 TestMessageSetExtension1.newBuilder().setI(123).build().toByteString())
352 RawMessageSet.Item.newBuilder()
355 TestMessageSetExtension2.newBuilder().setStr(
"foo").build().toByteString())
358 RawMessageSet.Item.newBuilder()
367 TestMessageSet messageSet = TestMessageSet.parseFrom(
data, extensionRegistry);
369 assertEquals(123, messageSet.getExtension(TestMessageSetExtension1.messageSetExtension).getI());
371 "foo", messageSet.getExtension(TestMessageSetExtension2.messageSetExtension).getStr());
385 extensionRegistry.
add(TestMessageSetExtension1.messageSetExtension);
388 int typeId1 = 1545008;
390 RawMessageSet.newBuilder()
392 RawMessageSet.Item.newBuilder()
395 TestMessageSetExtension1.newBuilder().setI(123).build().toByteString())
402 TestMessageSet messageSet = TestMessageSet.parseFrom(
data, extensionRegistry);
403 assertEquals(123, messageSet.getExtension(TestMessageSetExtension1.messageSetExtension).getI());
417 extensionRegistry.
add(TestMessageSetExtension1.messageSetExtension);
420 int typeId1 = 1545008;
422 RawMessageSet.newBuilder()
424 RawMessageSet.Item.newBuilder()
427 TestMessageSetExtension1.newBuilder().setI(123).build().toByteString())
434 TestMessageSet messageSet = TestMessageSet.parseFrom(
data, extensionRegistry);
436 messageSet = messageSet.toBuilder().mergeFrom(
data, extensionRegistry).build();
437 assertEquals(123, messageSet.getExtension(TestMessageSetExtension1.messageSetExtension).getI());
451 extensionRegistry.
add(TestMessageSetExtension1.messageSetExtension);
454 int typeId1 = 1545008;
456 RawMessageSet.newBuilder()
458 RawMessageSet.Item.newBuilder()
461 TestMessageSetExtension1.newBuilder().setI(123).build().toByteString())
468 List<RawMessageSet.Item> items = raw.getItemList();
469 for (RawMessageSet.Item
item : items) {
478 TestMessageSet messageSet =
479 TestMessageSet.newBuilder().mergeFrom(
data, extensionRegistry).build();
480 assertEquals(123, messageSet.getExtension(TestMessageSetExtension1.messageSetExtension).getI());
486 TestOneof2.Builder builder = TestOneof2.newBuilder();
488 TestOneof2
message = builder.build();
491 assertEquals(rawBytes.
size(),
message.getSerializedSize());
493 TestOneof2 message2 = TestOneof2.parseFrom(rawBytes);
498 TestOneofBackwardsCompatible
source =
499 TestOneofBackwardsCompatible.newBuilder().setFooInt(100).setFooString(
"101").build();
502 TestOneof2
message = TestOneof2.parseFrom(rawBytes);
503 assertFalse(
message.hasFooInt());
504 assertTrue(
message.hasFooString());
512 fail(
"Expected exception");
518 fail(
"Expected exception");
525 fail(
"Expected exception");
526 }
catch (IOException e) {
532 fail(
"Expected exception");
533 }
catch (IOException e) {
558 for (
byte invalidTag : invalidTags) {
560 byte[]
data =
new byte[] {invalidTag, 0};
616 (
byte) ((startTag & 0x7F) | 0x80), (
byte) ((startTag >>> 7) & 0x7F),
640 assertEquals(message1, message2);
641 assertEquals(message2, message3);
642 assertEquals(message3, message4);
649 ByteArrayOutputStream
output =
new ByteArrayOutputStream();
651 for (
int i = 1;
i <= 128;
i++) {
665 TestPackedTypes[] messages =
666 new TestPackedTypes[] {
667 TestPackedTypes.newBuilder().addAllPackedInt32(all.getPackedInt32List()).build(),
668 TestPackedTypes.newBuilder().addAllPackedInt64(all.getPackedInt64List()).build(),
669 TestPackedTypes.newBuilder().addAllPackedUint32(all.getPackedUint32List()).build(),
670 TestPackedTypes.newBuilder().addAllPackedUint64(all.getPackedUint64List()).build(),
671 TestPackedTypes.newBuilder().addAllPackedSint32(all.getPackedSint32List()).build(),
672 TestPackedTypes.newBuilder().addAllPackedSint64(all.getPackedSint64List()).build(),
673 TestPackedTypes.newBuilder().addAllPackedFixed32(all.getPackedFixed32List()).build(),
674 TestPackedTypes.newBuilder().addAllPackedFixed64(all.getPackedFixed64List()).build(),
675 TestPackedTypes.newBuilder().addAllPackedSfixed32(all.getPackedSfixed32List()).build(),
676 TestPackedTypes.newBuilder().addAllPackedSfixed64(all.getPackedSfixed64List()).build(),
677 TestPackedTypes.newBuilder().addAllPackedFloat(all.getPackedFloatList()).build(),
678 TestPackedTypes.newBuilder().addAllPackedDouble(all.getPackedDoubleList()).build(),
679 TestPackedTypes.newBuilder().addAllPackedEnum(all.getPackedEnumList()).build(),
681 for (TestPackedTypes
message : messages) {
684 for (
int i = 1;
i <
data.length;
i++) {
708 TestPackedTypes.PACKED_INT32_FIELD_NUMBER,
709 TestPackedTypes.PACKED_INT64_FIELD_NUMBER,
710 TestPackedTypes.PACKED_UINT32_FIELD_NUMBER,
711 TestPackedTypes.PACKED_UINT64_FIELD_NUMBER,
712 TestPackedTypes.PACKED_SINT32_FIELD_NUMBER,
713 TestPackedTypes.PACKED_SINT64_FIELD_NUMBER,
714 TestPackedTypes.PACKED_FIXED32_FIELD_NUMBER,
715 TestPackedTypes.PACKED_SFIXED32_FIELD_NUMBER,
716 TestPackedTypes.PACKED_FLOAT_FIELD_NUMBER,
717 TestPackedTypes.PACKED_BOOL_FIELD_NUMBER,
718 TestPackedTypes.PACKED_ENUM_FIELD_NUMBER,
720 for (
int number : fieldNumbers) {
745 int[] fieldNumbers8Bytes =
747 TestPackedTypes.PACKED_FIXED64_FIELD_NUMBER,
748 TestPackedTypes.PACKED_SFIXED64_FIELD_NUMBER,
749 TestPackedTypes.PACKED_DOUBLE_FIELD_NUMBER,
751 for (
int number : fieldNumbers8Bytes) {
763 TestAllTypes.newBuilder()
764 .setOptionalInt32(Integer.MIN_VALUE)
765 .addRepeatedInt32(Integer.MAX_VALUE)
766 .setOptionalInt64(Long.MIN_VALUE)
767 .addRepeatedInt64(Long.MAX_VALUE)
769 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
770 assertEquals(Integer.MIN_VALUE, parsed.getOptionalInt32());
771 assertEquals(Integer.MAX_VALUE, parsed.getRepeatedInt32(0));
772 assertEquals(Long.MIN_VALUE, parsed.getOptionalInt64());
773 assertEquals(Long.MAX_VALUE, parsed.getRepeatedInt64(0));
777 for (
int i = 0;
i < 32;
i++) {
779 TestAllTypes
message = TestAllTypes.newBuilder().setOptionalInt32(
value).build();
780 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
781 assertEquals(
value, parsed.getOptionalInt32());
783 for (
int i = 0;
i < 64;
i++) {
784 final long value = 1L <<
i;
785 TestAllTypes
message = TestAllTypes.newBuilder().setOptionalInt64(
value).build();
786 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
787 assertEquals(
value, parsed.getOptionalInt64());
794 TestAllTypes parsed = TestAllTypes.parseFrom(
data);
795 assertTrue(Arrays.equals(
data, parsed.toByteArray()));
799 TestAllTypes
message = TestAllTypes.newBuilder().setOptionalString(
"").build();
800 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
801 assertEquals(
"", parsed.getOptionalString());
805 TestAllTypes
message = TestAllTypes.newBuilder().setOptionalString(
"").build();
808 UnittestProto3.TestAllTypes parsed =
809 UnittestProto3.TestAllTypes.parseFrom(
message.toByteArray());
810 assertEquals(
"", parsed.getOptionalString());
815 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
821 TestAllTypes.newBuilder()
822 .addRepeatedString(
"")
823 .addRepeatedString(
"")
824 .addRepeatedString(
"0")
826 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
827 assertEquals(3, parsed.getRepeatedStringCount());
828 assertEquals(
"", parsed.getRepeatedString(0));
829 assertEquals(
"", parsed.getRepeatedString(1));
830 assertEquals(
"0", parsed.getRepeatedString(2));
835 TestAllTypes.newBuilder()
836 .addRepeatedString(
"")
837 .addRepeatedString(
"")
838 .addRepeatedString(
"0")
841 UnittestProto3.TestAllTypes parsed =
842 UnittestProto3.TestAllTypes.parseFrom(
message.toByteArray());
843 assertEquals(3, parsed.getRepeatedStringCount());
844 assertEquals(
"", parsed.getRepeatedString(0));
845 assertEquals(
"", parsed.getRepeatedString(1));
846 assertEquals(
"0", parsed.getRepeatedString(2));
852 TestAllTypes.newBuilder()
855 .addRepeatedBytes(oneByte)
857 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
858 assertEquals(3, parsed.getRepeatedBytesCount());
861 assertEquals(oneByte, parsed.getRepeatedBytes(2));
865 ByteArrayOutputStream
output =
new ByteArrayOutputStream();
880 TestMessageSet parsed = TestMessageSet.parseFrom(
data);
883 RawMessageSet raw = RawMessageSet.parseFrom(parsed.toByteArray());
884 assertEquals(1, raw.getItemCount());
885 assertEquals(100, raw.getItem(0).getTypeId());
886 assertEquals(0, raw.getItem(0).getMessage().size());
892 UnittestProto3.TestAllTypes
message =
893 UnittestProto3.TestAllTypes.newBuilder().setOptionalNestedEnumValue(4321).build();
894 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
895 assertFalse(parsed.hasOptionalNestedEnum());
897 UnittestProto3.TestAllTypes actual =
898 UnittestProto3.TestAllTypes.parseFrom(parsed.toByteArray());
899 assertEquals(4321, actual.getOptionalNestedEnumValue());
905 UnittestProto3.TestAllTypes
message =
906 UnittestProto3.TestAllTypes.newBuilder().addRepeatedNestedEnumValue(5432).build();
907 TestAllTypes parsed = TestAllTypes.parseFrom(
message.toByteArray());
908 assertEquals(0, parsed.getRepeatedNestedEnumCount());
910 UnittestProto3.TestAllTypes actual =
911 UnittestProto3.TestAllTypes.parseFrom(parsed.toByteArray());
912 assertEquals(1, actual.getRepeatedNestedEnumCount());
913 assertEquals(5432, actual.getRepeatedNestedEnumValue(0));
919 TestMap
message = TestMap.newBuilder().putInt32ToEnumFieldValue(1, 4321).build();
920 MapForProto2TestProto.TestMap parsed =
921 MapForProto2TestProto.TestMap.parseFrom(
message.toByteArray());
922 assertEquals(0, parsed.getInt32ToEnumFieldMap().size());
924 TestMap actual = TestMap.parseFrom(parsed.toByteArray());
925 assertEquals(1, actual.getInt32ToEnumFieldMap().size());
926 assertEquals(4321, actual.getInt32ToEnumFieldValueOrThrow(1));
932 UnittestProto3.TestOneof2
message =
933 UnittestProto3.TestOneof2.newBuilder().setFooEnumValue(1234).build();
934 TestOneof2 parsed = TestOneof2.parseFrom(
message.toByteArray());
935 assertFalse(parsed.hasFooEnum());
937 UnittestProto3.TestOneof2 actual = UnittestProto3.TestOneof2.parseFrom(parsed.toByteArray());
938 assertEquals(1234, actual.getFooEnumValue());
944 final byte[] rawBytes =
new byte[]{-80, 1, 10};
945 TestAllExtensionsLite testAllExtensionsLite =
946 TestAllExtensionsLite.parseFrom(rawBytes, extensionRegistry);
947 assertEquals(ForeignEnumLite.FOREIGN_LITE_FOO,
948 testAllExtensionsLite.getExtension(optionalForeignEnumExtensionLite));
949 final byte[] resultRawBytes = testAllExtensionsLite.toByteArray();
950 assertEquals(rawBytes.length, resultRawBytes.length);
951 for (
int i = 0;
i < rawBytes.length;
i++) {
952 assertEquals(rawBytes[
i], resultRawBytes[
i]);
957 UnittestProto3.TestAllTypes
message =
958 UnittestProto3.TestAllTypes.newBuilder().setOptionalNestedEnumValue(4321).build();
959 UnittestProto3.TestAllTypes parsed =
960 UnittestProto3.TestAllTypes.parseFrom(
message.toByteArray());
961 assertEquals(4321, parsed.getOptionalNestedEnumValue());
965 UnittestProto3.TestAllTypes
message =
966 UnittestProto3.TestAllTypes.newBuilder().addRepeatedNestedEnumValue(5432).build();
967 UnittestProto3.TestAllTypes parsed =
968 UnittestProto3.TestAllTypes.parseFrom(
message.toByteArray());
969 assertEquals(1, parsed.getRepeatedNestedEnumCount());
970 assertEquals(5432, parsed.getRepeatedNestedEnumValue(0));
974 TestMap
message = TestMap.newBuilder().putInt32ToEnumFieldValue(1, 4321).build();
975 TestMap parsed = TestMap.parseFrom(
message.toByteArray());
976 assertEquals(1, parsed.getInt32ToEnumFieldMap().size());
977 assertEquals(4321, parsed.getInt32ToEnumFieldValueOrThrow(1));
981 UnittestProto3.TestOneof2
message =
982 UnittestProto3.TestOneof2.newBuilder().setFooEnumValue(1234).build();
983 UnittestProto3.TestOneof2 parsed = UnittestProto3.TestOneof2.parseFrom(
message.toByteArray());
984 assertEquals(1234, parsed.getFooEnumValue());
988 UnittestProto3.NestedTestAllTypes message1 =
989 UnittestProto3.NestedTestAllTypes.newBuilder()
991 UnittestProto3.TestAllTypes.newBuilder()
992 .setOptionalInt32(1234)
993 .setOptionalInt64(5678))
995 UnittestProto3.NestedTestAllTypes message2 =
996 UnittestProto3.NestedTestAllTypes.newBuilder()
998 UnittestProto3.TestAllTypes.newBuilder()
999 .setOptionalInt32(4321)
1000 .setOptionalUint32(8765))
1003 UnittestProto3.NestedTestAllTypes
merged =
1004 UnittestProto3.NestedTestAllTypes.newBuilder()
1005 .mergeFrom(message1.toByteArray())
1006 .mergeFrom(message2.toByteArray())
1009 assertEquals(4321,
merged.getPayload().getOptionalInt32());
1011 assertEquals(5678,
merged.getPayload().getOptionalInt64());
1012 assertEquals(8765,
merged.getPayload().getOptionalUint32());
1017 byte[] dataWithPaddings =
new byte[
data.length + 2];
1018 System.arraycopy(
data, 0, dataWithPaddings, 1,
data.length);
1020 TestAllTypes.newBuilder().mergeFrom(dataWithPaddings, 1,
data.length);
1021 TestAllTypes.parser().parseFrom(dataWithPaddings, 1,
data.length);