| Index: third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java
|
| diff --git a/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java b/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java
|
| index c0eb03306ebd8f4eced6d3ce83d4d3e58b36352e..d95b626c412c79be194064a0c16f83c459cac930 100644
|
| --- a/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java
|
| +++ b/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java
|
| @@ -122,11 +122,11 @@ public class JsonFormatTest extends TestCase {
|
| builder.addRepeatedNestedEnum(NestedEnum.BAZ);
|
| builder.addRepeatedNestedMessageBuilder().setValue(200);
|
| }
|
| -
|
| +
|
| private void assertRoundTripEquals(Message message) throws Exception {
|
| assertRoundTripEquals(message, TypeRegistry.getEmptyTypeRegistry());
|
| }
|
| -
|
| +
|
| private void assertRoundTripEquals(Message message, TypeRegistry registry) throws Exception {
|
| JsonFormat.Printer printer = JsonFormat.printer().usingTypeRegistry(registry);
|
| JsonFormat.Parser parser = JsonFormat.parser().usingTypeRegistry(registry);
|
| @@ -135,68 +135,68 @@ public class JsonFormatTest extends TestCase {
|
| Message parsedMessage = builder.build();
|
| assertEquals(message.toString(), parsedMessage.toString());
|
| }
|
| -
|
| +
|
| private String toJsonString(Message message) throws IOException {
|
| return JsonFormat.printer().print(message);
|
| }
|
| -
|
| +
|
| private void mergeFromJson(String json, Message.Builder builder) throws IOException {
|
| JsonFormat.parser().merge(json, builder);
|
| }
|
| -
|
| +
|
| public void testAllFields() throws Exception {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| setAllFields(builder);
|
| TestAllTypes message = builder.build();
|
| -
|
| - assertEquals(
|
| +
|
| + assertEquals(
|
| "{\n"
|
| - + " \"optionalInt32\": 1234,\n"
|
| - + " \"optionalInt64\": \"1234567890123456789\",\n"
|
| - + " \"optionalUint32\": 5678,\n"
|
| - + " \"optionalUint64\": \"2345678901234567890\",\n"
|
| - + " \"optionalSint32\": 9012,\n"
|
| - + " \"optionalSint64\": \"3456789012345678901\",\n"
|
| - + " \"optionalFixed32\": 3456,\n"
|
| - + " \"optionalFixed64\": \"4567890123456789012\",\n"
|
| - + " \"optionalSfixed32\": 7890,\n"
|
| - + " \"optionalSfixed64\": \"5678901234567890123\",\n"
|
| - + " \"optionalFloat\": 1.5,\n"
|
| - + " \"optionalDouble\": 1.25,\n"
|
| - + " \"optionalBool\": true,\n"
|
| - + " \"optionalString\": \"Hello world!\",\n"
|
| - + " \"optionalBytes\": \"AAEC\",\n"
|
| - + " \"optionalNestedMessage\": {\n"
|
| - + " \"value\": 100\n"
|
| - + " },\n"
|
| - + " \"optionalNestedEnum\": \"BAR\",\n"
|
| - + " \"repeatedInt32\": [1234, 234],\n"
|
| - + " \"repeatedInt64\": [\"1234567890123456789\", \"234567890123456789\"],\n"
|
| - + " \"repeatedUint32\": [5678, 678],\n"
|
| - + " \"repeatedUint64\": [\"2345678901234567890\", \"345678901234567890\"],\n"
|
| - + " \"repeatedSint32\": [9012, 10],\n"
|
| - + " \"repeatedSint64\": [\"3456789012345678901\", \"456789012345678901\"],\n"
|
| - + " \"repeatedFixed32\": [3456, 456],\n"
|
| - + " \"repeatedFixed64\": [\"4567890123456789012\", \"567890123456789012\"],\n"
|
| - + " \"repeatedSfixed32\": [7890, 890],\n"
|
| - + " \"repeatedSfixed64\": [\"5678901234567890123\", \"678901234567890123\"],\n"
|
| - + " \"repeatedFloat\": [1.5, 11.5],\n"
|
| - + " \"repeatedDouble\": [1.25, 11.25],\n"
|
| - + " \"repeatedBool\": [true, true],\n"
|
| - + " \"repeatedString\": [\"Hello world!\", \"ello world!\"],\n"
|
| - + " \"repeatedBytes\": [\"AAEC\", \"AQI=\"],\n"
|
| - + " \"repeatedNestedMessage\": [{\n"
|
| - + " \"value\": 100\n"
|
| - + " }, {\n"
|
| - + " \"value\": 200\n"
|
| - + " }],\n"
|
| - + " \"repeatedNestedEnum\": [\"BAR\", \"BAZ\"]\n"
|
| - + "}",
|
| + + " \"optionalInt32\": 1234,\n"
|
| + + " \"optionalInt64\": \"1234567890123456789\",\n"
|
| + + " \"optionalUint32\": 5678,\n"
|
| + + " \"optionalUint64\": \"2345678901234567890\",\n"
|
| + + " \"optionalSint32\": 9012,\n"
|
| + + " \"optionalSint64\": \"3456789012345678901\",\n"
|
| + + " \"optionalFixed32\": 3456,\n"
|
| + + " \"optionalFixed64\": \"4567890123456789012\",\n"
|
| + + " \"optionalSfixed32\": 7890,\n"
|
| + + " \"optionalSfixed64\": \"5678901234567890123\",\n"
|
| + + " \"optionalFloat\": 1.5,\n"
|
| + + " \"optionalDouble\": 1.25,\n"
|
| + + " \"optionalBool\": true,\n"
|
| + + " \"optionalString\": \"Hello world!\",\n"
|
| + + " \"optionalBytes\": \"AAEC\",\n"
|
| + + " \"optionalNestedMessage\": {\n"
|
| + + " \"value\": 100\n"
|
| + + " },\n"
|
| + + " \"optionalNestedEnum\": \"BAR\",\n"
|
| + + " \"repeatedInt32\": [1234, 234],\n"
|
| + + " \"repeatedInt64\": [\"1234567890123456789\", \"234567890123456789\"],\n"
|
| + + " \"repeatedUint32\": [5678, 678],\n"
|
| + + " \"repeatedUint64\": [\"2345678901234567890\", \"345678901234567890\"],\n"
|
| + + " \"repeatedSint32\": [9012, 10],\n"
|
| + + " \"repeatedSint64\": [\"3456789012345678901\", \"456789012345678901\"],\n"
|
| + + " \"repeatedFixed32\": [3456, 456],\n"
|
| + + " \"repeatedFixed64\": [\"4567890123456789012\", \"567890123456789012\"],\n"
|
| + + " \"repeatedSfixed32\": [7890, 890],\n"
|
| + + " \"repeatedSfixed64\": [\"5678901234567890123\", \"678901234567890123\"],\n"
|
| + + " \"repeatedFloat\": [1.5, 11.5],\n"
|
| + + " \"repeatedDouble\": [1.25, 11.25],\n"
|
| + + " \"repeatedBool\": [true, true],\n"
|
| + + " \"repeatedString\": [\"Hello world!\", \"ello world!\"],\n"
|
| + + " \"repeatedBytes\": [\"AAEC\", \"AQI=\"],\n"
|
| + + " \"repeatedNestedMessage\": [{\n"
|
| + + " \"value\": 100\n"
|
| + + " }, {\n"
|
| + + " \"value\": 200\n"
|
| + + " }],\n"
|
| + + " \"repeatedNestedEnum\": [\"BAR\", \"BAZ\"]\n"
|
| + + "}",
|
| toJsonString(message));
|
| -
|
| +
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testUnknownEnumValues() throws Exception {
|
| TestAllTypes message = TestAllTypes.newBuilder()
|
| .setOptionalNestedEnumValue(12345)
|
| @@ -209,21 +209,22 @@ public class JsonFormatTest extends TestCase {
|
| + " \"repeatedNestedEnum\": [12345, \"FOO\"]\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| -
|
| +
|
| TestMap.Builder mapBuilder = TestMap.newBuilder();
|
| mapBuilder.getMutableInt32ToEnumMapValue().put(1, 0);
|
| mapBuilder.getMutableInt32ToEnumMapValue().put(2, 12345);
|
| TestMap mapMessage = mapBuilder.build();
|
| assertEquals(
|
| - "{\n"
|
| - + " \"int32ToEnumMap\": {\n"
|
| - + " \"1\": \"FOO\",\n"
|
| - + " \"2\": 12345\n"
|
| - + " }\n"
|
| - + "}", toJsonString(mapMessage));
|
| + "{\n"
|
| + + " \"int32ToEnumMap\": {\n"
|
| + + " \"1\": \"FOO\",\n"
|
| + + " \"2\": 12345\n"
|
| + + " }\n"
|
| + + "}",
|
| + toJsonString(mapMessage));
|
| assertRoundTripEquals(mapMessage);
|
| }
|
| -
|
| +
|
| public void testSpecialFloatValues() throws Exception {
|
| TestAllTypes message = TestAllTypes.newBuilder()
|
| .addRepeatedFloat(Float.NaN)
|
| @@ -238,10 +239,10 @@ public class JsonFormatTest extends TestCase {
|
| + " \"repeatedFloat\": [\"NaN\", \"Infinity\", \"-Infinity\"],\n"
|
| + " \"repeatedDouble\": [\"NaN\", \"Infinity\", \"-Infinity\"]\n"
|
| + "}", toJsonString(message));
|
| -
|
| +
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testParserAcceptStringForNumbericField() throws Exception {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| mergeFromJson(
|
| @@ -265,7 +266,7 @@ public class JsonFormatTest extends TestCase {
|
| assertEquals(1.25, message.getOptionalDouble());
|
| assertEquals(true, message.getOptionalBool());
|
| }
|
| -
|
| +
|
| public void testParserAcceptFloatingPointValueForIntegerField() throws Exception {
|
| // Test that numeric values like "1.000", "1e5" will also be accepted.
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| @@ -287,14 +288,14 @@ public class JsonFormatTest extends TestCase {
|
| assertEquals(expectedValues[i], builder.getRepeatedInt64(i));
|
| assertEquals(expectedValues[i], builder.getRepeatedUint64(i));
|
| }
|
| -
|
| +
|
| // Non-integers will still be rejected.
|
| assertRejects("optionalInt32", "1.5");
|
| assertRejects("optionalUint32", "1.5");
|
| assertRejects("optionalInt64", "1.5");
|
| assertRejects("optionalUint64", "1.5");
|
| }
|
| -
|
| +
|
| private void assertRejects(String name, String value) {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| try {
|
| @@ -312,7 +313,7 @@ public class JsonFormatTest extends TestCase {
|
| // Expected.
|
| }
|
| }
|
| -
|
| +
|
| private void assertAccepts(String name, String value) throws IOException {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| // Both numeric form and string form are accepted.
|
| @@ -320,17 +321,17 @@ public class JsonFormatTest extends TestCase {
|
| builder.clear();
|
| mergeFromJson("{\"" + name + "\":\"" + value + "\"}", builder);
|
| }
|
| -
|
| +
|
| public void testParserRejectOutOfRangeNumericValues() throws Exception {
|
| assertAccepts("optionalInt32", String.valueOf(Integer.MAX_VALUE));
|
| assertAccepts("optionalInt32", String.valueOf(Integer.MIN_VALUE));
|
| assertRejects("optionalInt32", String.valueOf(Integer.MAX_VALUE + 1L));
|
| assertRejects("optionalInt32", String.valueOf(Integer.MIN_VALUE - 1L));
|
| -
|
| +
|
| assertAccepts("optionalUint32", String.valueOf(Integer.MAX_VALUE + 1L));
|
| assertRejects("optionalUint32", "123456789012345");
|
| assertRejects("optionalUint32", "-1");
|
| -
|
| +
|
| BigInteger one = new BigInteger("1");
|
| BigInteger maxLong = new BigInteger(String.valueOf(Long.MAX_VALUE));
|
| BigInteger minLong = new BigInteger(String.valueOf(Long.MIN_VALUE));
|
| @@ -351,7 +352,7 @@ public class JsonFormatTest extends TestCase {
|
| assertAccepts("optionalFloat", String.valueOf(-Float.MAX_VALUE));
|
| assertRejects("optionalFloat", String.valueOf(Double.MAX_VALUE));
|
| assertRejects("optionalFloat", String.valueOf(-Double.MAX_VALUE));
|
| -
|
| +
|
| BigDecimal moreThanOne = new BigDecimal("1.000001");
|
| BigDecimal maxDouble = new BigDecimal(Double.MAX_VALUE);
|
| BigDecimal minDouble = new BigDecimal(-Double.MAX_VALUE);
|
| @@ -360,7 +361,7 @@ public class JsonFormatTest extends TestCase {
|
| assertRejects("optionalDouble", maxDouble.multiply(moreThanOne).toString());
|
| assertRejects("optionalDouble", minDouble.multiply(moreThanOne).toString());
|
| }
|
| -
|
| +
|
| public void testParserAcceptNull() throws Exception {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| mergeFromJson(
|
| @@ -402,7 +403,7 @@ public class JsonFormatTest extends TestCase {
|
| + "}", builder);
|
| TestAllTypes message = builder.build();
|
| assertEquals(TestAllTypes.getDefaultInstance(), message);
|
| -
|
| +
|
| // Repeated field elements cannot be null.
|
| try {
|
| builder = TestAllTypes.newBuilder();
|
| @@ -414,7 +415,7 @@ public class JsonFormatTest extends TestCase {
|
| } catch (InvalidProtocolBufferException e) {
|
| // Exception expected.
|
| }
|
| -
|
| +
|
| try {
|
| builder = TestAllTypes.newBuilder();
|
| mergeFromJson(
|
| @@ -426,14 +427,14 @@ public class JsonFormatTest extends TestCase {
|
| // Exception expected.
|
| }
|
| }
|
| -
|
| +
|
| public void testParserRejectDuplicatedFields() throws Exception {
|
| // TODO(xiaofeng): The parser we are currently using (GSON) will accept and keep the last
|
| // one if multiple entries have the same name. This is not the desired behavior but it can
|
| // only be fixed by using our own parser. Here we only test the cases where the names are
|
| // different but still referring to the same field.
|
| -
|
| - // Duplicated optional fields.
|
| +
|
| + // Duplicated optional fields.
|
| try {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| mergeFromJson(
|
| @@ -445,7 +446,7 @@ public class JsonFormatTest extends TestCase {
|
| } catch (InvalidProtocolBufferException e) {
|
| // Exception expected.
|
| }
|
| -
|
| +
|
| // Duplicated repeated fields.
|
| try {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| @@ -458,7 +459,7 @@ public class JsonFormatTest extends TestCase {
|
| } catch (InvalidProtocolBufferException e) {
|
| // Exception expected.
|
| }
|
| -
|
| +
|
| // Duplicated oneof fields.
|
| try {
|
| TestOneof.Builder builder = TestOneof.newBuilder();
|
| @@ -472,7 +473,7 @@ public class JsonFormatTest extends TestCase {
|
| // Exception expected.
|
| }
|
| }
|
| -
|
| +
|
| public void testMapFields() throws Exception {
|
| TestMap.Builder builder = TestMap.newBuilder();
|
| builder.getMutableInt32ToInt32Map().put(1, 10);
|
| @@ -507,7 +508,7 @@ public class JsonFormatTest extends TestCase {
|
| 8, NestedMessage.newBuilder().setValue(1234).build());
|
| builder.getMutableInt32ToEnumMap().put(9, NestedEnum.BAR);
|
| TestMap message = builder.build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"int32ToInt32Map\": {\n"
|
| @@ -598,13 +599,13 @@ public class JsonFormatTest extends TestCase {
|
| + " }\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| -
|
| +
|
| // Test multiple entries.
|
| builder = TestMap.newBuilder();
|
| builder.getMutableInt32ToInt32Map().put(1, 2);
|
| builder.getMutableInt32ToInt32Map().put(3, 4);
|
| message = builder.build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"int32ToInt32Map\": {\n"
|
| @@ -614,7 +615,7 @@ public class JsonFormatTest extends TestCase {
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testMapNullValueIsRejected() throws Exception {
|
| try {
|
| TestMap.Builder builder = TestMap.newBuilder();
|
| @@ -627,7 +628,7 @@ public class JsonFormatTest extends TestCase {
|
| } catch (InvalidProtocolBufferException e) {
|
| // Exception expected.
|
| }
|
| -
|
| +
|
| try {
|
| TestMap.Builder builder = TestMap.newBuilder();
|
| mergeFromJson(
|
| @@ -640,7 +641,7 @@ public class JsonFormatTest extends TestCase {
|
| // Exception expected.
|
| }
|
| }
|
| -
|
| +
|
| public void testParserAcceptNonQuotedObjectKey() throws Exception {
|
| TestMap.Builder builder = TestMap.newBuilder();
|
| mergeFromJson(
|
| @@ -652,7 +653,7 @@ public class JsonFormatTest extends TestCase {
|
| assertEquals(2, message.getInt32ToInt32Map().get(1).intValue());
|
| assertEquals(3, message.getStringToInt32Map().get("hello").intValue());
|
| }
|
| -
|
| +
|
| public void testWrappers() throws Exception {
|
| TestWrappers.Builder builder = TestWrappers.newBuilder();
|
| builder.getBoolValueBuilder().setValue(false);
|
| @@ -665,7 +666,7 @@ public class JsonFormatTest extends TestCase {
|
| builder.getStringValueBuilder().setValue("");
|
| builder.getBytesValueBuilder().setValue(ByteString.EMPTY);
|
| TestWrappers message = builder.build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"int32Value\": 0,\n"
|
| @@ -691,7 +692,7 @@ public class JsonFormatTest extends TestCase {
|
| builder.getStringValueBuilder().setValue("7");
|
| builder.getBytesValueBuilder().setValue(ByteString.copyFrom(new byte[]{8}));
|
| message = builder.build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"int32Value\": 1,\n"
|
| @@ -706,43 +707,43 @@ public class JsonFormatTest extends TestCase {
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testTimestamp() throws Exception {
|
| TestTimestamp message = TestTimestamp.newBuilder()
|
| .setTimestampValue(TimeUtil.parseTimestamp("1970-01-01T00:00:00Z"))
|
| .build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"timestampValue\": \"1970-01-01T00:00:00Z\"\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testDuration() throws Exception {
|
| TestDuration message = TestDuration.newBuilder()
|
| .setDurationValue(TimeUtil.parseDuration("12345s"))
|
| .build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"durationValue\": \"12345s\"\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testFieldMask() throws Exception {
|
| TestFieldMask message = TestFieldMask.newBuilder()
|
| .setFieldMaskValue(FieldMaskUtil.fromString("foo.bar,baz"))
|
| .build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"fieldMaskValue\": \"foo.bar,baz\"\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testStruct() throws Exception {
|
| // Build a struct with all possible values.
|
| TestStruct.Builder builder = TestStruct.newBuilder();
|
| @@ -764,7 +765,7 @@ public class JsonFormatTest extends TestCase {
|
| structBuilder.getMutableFields().put(
|
| "list_value", Value.newBuilder().setListValue(listBuilder.build()).build());
|
| TestStruct message = builder.build();
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"structValue\": {\n"
|
| @@ -778,7 +779,7 @@ public class JsonFormatTest extends TestCase {
|
| + " }\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| -
|
| +
|
| builder = TestStruct.newBuilder();
|
| builder.setValue(Value.newBuilder().setNullValueValue(0).build());
|
| message = builder.build();
|
| @@ -787,12 +788,23 @@ public class JsonFormatTest extends TestCase {
|
| + " \"value\": null\n"
|
| + "}", toJsonString(message));
|
| assertRoundTripEquals(message);
|
| +
|
| + builder = TestStruct.newBuilder();
|
| + listBuilder = builder.getListValueBuilder();
|
| + listBuilder.addValues(Value.newBuilder().setNumberValue(31831.125).build());
|
| + listBuilder.addValues(Value.newBuilder().setNullValueValue(0).build());
|
| + message = builder.build();
|
| + assertEquals(
|
| + "{\n"
|
| + + " \"listValue\": [31831.125, null]\n"
|
| + + "}", toJsonString(message));
|
| + assertRoundTripEquals(message);
|
| }
|
| -
|
| +
|
| public void testAnyFields() throws Exception {
|
| TestAllTypes content = TestAllTypes.newBuilder().setOptionalInt32(1234).build();
|
| TestAny message = TestAny.newBuilder().setAnyValue(Any.pack(content)).build();
|
| -
|
| +
|
| // A TypeRegistry must be provided in order to convert Any types.
|
| try {
|
| toJsonString(message);
|
| @@ -800,11 +812,11 @@ public class JsonFormatTest extends TestCase {
|
| } catch (IOException e) {
|
| // Expected.
|
| }
|
| -
|
| +
|
| JsonFormat.TypeRegistry registry = JsonFormat.TypeRegistry.newBuilder()
|
| .add(TestAllTypes.getDescriptor()).build();
|
| JsonFormat.Printer printer = JsonFormat.printer().usingTypeRegistry(registry);
|
| -
|
| +
|
| assertEquals(
|
| "{\n"
|
| + " \"anyValue\": {\n"
|
| @@ -813,8 +825,8 @@ public class JsonFormatTest extends TestCase {
|
| + " }\n"
|
| + "}" , printer.print(message));
|
| assertRoundTripEquals(message, registry);
|
| -
|
| -
|
| +
|
| +
|
| // Well-known types have a special formatting when embedded in Any.
|
| //
|
| // 1. Any in Any.
|
| @@ -828,7 +840,7 @@ public class JsonFormatTest extends TestCase {
|
| + " }\n"
|
| + "}", printer.print(anyMessage));
|
| assertRoundTripEquals(anyMessage, registry);
|
| -
|
| +
|
| // 2. Wrappers in Any.
|
| anyMessage = Any.pack(Int32Value.newBuilder().setValue(12345).build());
|
| assertEquals(
|
| @@ -894,7 +906,7 @@ public class JsonFormatTest extends TestCase {
|
| + " \"value\": \"AQI=\"\n"
|
| + "}", printer.print(anyMessage));
|
| assertRoundTripEquals(anyMessage, registry);
|
| -
|
| +
|
| // 3. Timestamp in Any.
|
| anyMessage = Any.pack(TimeUtil.parseTimestamp("1969-12-31T23:59:59Z"));
|
| assertEquals(
|
| @@ -903,7 +915,7 @@ public class JsonFormatTest extends TestCase {
|
| + " \"value\": \"1969-12-31T23:59:59Z\"\n"
|
| + "}", printer.print(anyMessage));
|
| assertRoundTripEquals(anyMessage, registry);
|
| -
|
| +
|
| // 4. Duration in Any
|
| anyMessage = Any.pack(TimeUtil.parseDuration("12345.10s"));
|
| assertEquals(
|
| @@ -945,7 +957,7 @@ public class JsonFormatTest extends TestCase {
|
| + "}", printer.print(anyMessage));
|
| assertRoundTripEquals(anyMessage, registry);
|
| }
|
| -
|
| +
|
| public void testParserMissingTypeUrl() throws Exception {
|
| try {
|
| Any.Builder builder = Any.newBuilder();
|
| @@ -958,7 +970,7 @@ public class JsonFormatTest extends TestCase {
|
| // Expected.
|
| }
|
| }
|
| -
|
| +
|
| public void testParserUnexpectedTypeUrl() throws Exception {
|
| try {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| @@ -970,9 +982,9 @@ public class JsonFormatTest extends TestCase {
|
| fail("Exception is expected.");
|
| } catch (IOException e) {
|
| // Expected.
|
| - }
|
| + }
|
| }
|
| -
|
| +
|
| public void testParserRejectTrailingComma() throws Exception {
|
| try {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| @@ -1000,13 +1012,13 @@ public class JsonFormatTest extends TestCase {
|
| // // Expected.
|
| // }
|
| }
|
| -
|
| +
|
| public void testParserRejectInvalidBase64() throws Exception {
|
| assertRejects("optionalBytes", "!@#$");
|
| // We use standard BASE64 with paddings.
|
| assertRejects("optionalBytes", "AQI");
|
| }
|
| -
|
| +
|
| public void testParserRejectInvalidEnumValue() throws Exception {
|
| try {
|
| TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
| @@ -1017,7 +1029,7 @@ public class JsonFormatTest extends TestCase {
|
| fail("Exception is expected.");
|
| } catch (InvalidProtocolBufferException e) {
|
| // Expected.
|
| - }
|
| + }
|
| }
|
|
|
| public void testCustomJsonName() throws Exception {
|
| @@ -1026,6 +1038,12 @@ public class JsonFormatTest extends TestCase {
|
| assertRoundTripEquals(message);
|
| }
|
|
|
| + public void testDefaultGsonDoesNotHtmlEscape() throws Exception {
|
| + TestAllTypes message = TestAllTypes.newBuilder().setOptionalString("=").build();
|
| + assertEquals(
|
| + "{\n" + " \"optionalString\": \"=\"" + "\n}", JsonFormat.printer().print(message));
|
| + }
|
| +
|
| public void testIncludingDefaultValueFields() throws Exception {
|
| TestAllTypes message = TestAllTypes.getDefaultInstance();
|
| assertEquals("{\n}", JsonFormat.printer().print(message));
|
|
|