More JSON tests
- String behaviors - Testing only valid JSON is allowed
This commit is contained in:
parent
ff2a6600e5
commit
7437774a27
@ -763,6 +763,10 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
|
||||
"FieldNameEscaped",
|
||||
R"({"fieldn\u0061me1": 1})",
|
||||
"fieldname1: 1");
|
||||
// String ends with escape character.
|
||||
ExpectParseFailureForJson(
|
||||
"StringEndsWithEscapeChar",
|
||||
"{\"optionalString\": \"abc\\");
|
||||
// Field names must be quoted (or it's not valid JSON).
|
||||
ExpectParseFailureForJson(
|
||||
"FieldNameNotQuoted",
|
||||
@ -771,6 +775,17 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
|
||||
ExpectParseFailureForJson(
|
||||
"TrailingCommaInAnObject",
|
||||
R"({"fieldname1":1,})");
|
||||
ExpectParseFailureForJson(
|
||||
"TrailingCommaInAnObjectWithSpace",
|
||||
R"({"fieldname1":1 ,})");
|
||||
ExpectParseFailureForJson(
|
||||
"TrailingCommaInAnObjectWithSpaceCommaSpace",
|
||||
R"({"fieldname1":1 , })");
|
||||
ExpectParseFailureForJson(
|
||||
"TrailingCommaInAnObjectWithNewlines",
|
||||
R"({
|
||||
"fieldname1":1,
|
||||
})");
|
||||
// JSON doesn't support comments.
|
||||
ExpectParseFailureForJson(
|
||||
"JsonWithComments",
|
||||
@ -778,6 +793,42 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
|
||||
// This is a comment.
|
||||
"fieldname1": 1
|
||||
})");
|
||||
// JSON spec says whitespace doesn't matter, so try a few spacings to be sure.
|
||||
RunValidJsonTest(
|
||||
"OneLineNoSpaces",
|
||||
"{\"optionalInt32\":1,\"optionalInt64\":2}",
|
||||
R"(
|
||||
optional_int32: 1
|
||||
optional_int64: 2
|
||||
)");
|
||||
RunValidJsonTest(
|
||||
"OneLineWithSpaces",
|
||||
"{ \"optionalInt32\" : 1 , \"optionalInt64\" : 2 }",
|
||||
R"(
|
||||
optional_int32: 1
|
||||
optional_int64: 2
|
||||
)");
|
||||
RunValidJsonTest(
|
||||
"MultilineNoSpaces",
|
||||
"{\n\"optionalInt32\"\n:\n1\n,\n\"optionalInt64\"\n:\n2\n}",
|
||||
R"(
|
||||
optional_int32: 1
|
||||
optional_int64: 2
|
||||
)");
|
||||
RunValidJsonTest(
|
||||
"MultilineWithSpaces",
|
||||
"{\n \"optionalInt32\" : 1\n ,\n \"optionalInt64\" : 2\n}\n",
|
||||
R"(
|
||||
optional_int32: 1
|
||||
optional_int64: 2
|
||||
)");
|
||||
// Missing comma between key/value pairs.
|
||||
ExpectParseFailureForJson(
|
||||
"MissingCommaOneLine",
|
||||
"{ \"optionalInt32\": 1 \"optionalInt64\": 2 }");
|
||||
ExpectParseFailureForJson(
|
||||
"MissingCommaMultiline",
|
||||
"{\n \"optionalInt32\": 1\n \"optionalInt64\": 2\n}");
|
||||
// Duplicated field names are not allowed.
|
||||
ExpectParseFailureForJson(
|
||||
"FieldNameDuplicate",
|
||||
@ -1389,6 +1440,15 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
|
||||
ExpectParseFailureForJson(
|
||||
"RepeatedFieldTrailingComma",
|
||||
R"({"repeatedInt32": [1, 2, 3, 4,]})");
|
||||
ExpectParseFailureForJson(
|
||||
"RepeatedFieldTrailingCommaWithSpace",
|
||||
"{\"repeatedInt32\": [1, 2, 3, 4 ,]}");
|
||||
ExpectParseFailureForJson(
|
||||
"RepeatedFieldTrailingCommaWithSpaceCommaSpace",
|
||||
"{\"repeatedInt32\": [1, 2, 3, 4 , ]}");
|
||||
ExpectParseFailureForJson(
|
||||
"RepeatedFieldTrailingCommaWithNewlines",
|
||||
"{\"repeatedInt32\": [\n 1,\n 2,\n 3,\n 4,\n]}");
|
||||
|
||||
// Map fields.
|
||||
RunValidJsonTest(
|
||||
@ -1507,6 +1567,18 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
|
||||
"MapFieldValueIsNull",
|
||||
R"({"mapInt32Int32": {"0": null}})");
|
||||
|
||||
// http://www.rfc-editor.org/rfc/rfc7159.txt says strings have to use double
|
||||
// quotes.
|
||||
ExpectParseFailureForJson(
|
||||
"StringFieldSingleQuoteKey",
|
||||
R"({'optionalString': "Hello world!"})");
|
||||
ExpectParseFailureForJson(
|
||||
"StringFieldSingleQuoteValue",
|
||||
R"({"optionalString": 'Hello world!'})");
|
||||
ExpectParseFailureForJson(
|
||||
"StringFieldSingleQuoteBoth",
|
||||
R"({'optionalString': 'Hello world!'})");
|
||||
|
||||
// Wrapper types.
|
||||
RunValidJsonTest(
|
||||
"OptionalBoolWrapper",
|
||||
|
@ -30,8 +30,17 @@ JsonInput.MapFieldValueIsNull
|
||||
JsonInput.RepeatedFieldMessageElementIsNull
|
||||
JsonInput.RepeatedFieldPrimitiveElementIsNull
|
||||
JsonInput.RepeatedFieldTrailingComma
|
||||
JsonInput.RepeatedFieldTrailingCommaWithNewlines
|
||||
JsonInput.RepeatedFieldTrailingCommaWithSpace
|
||||
JsonInput.RepeatedFieldTrailingCommaWithSpaceCommaSpace
|
||||
JsonInput.StringFieldSingleQuoteBoth
|
||||
JsonInput.StringFieldSingleQuoteKey
|
||||
JsonInput.StringFieldSingleQuoteValue
|
||||
JsonInput.StringFieldUppercaseEscapeLetter
|
||||
JsonInput.TrailingCommaInAnObject
|
||||
JsonInput.TrailingCommaInAnObjectWithNewlines
|
||||
JsonInput.TrailingCommaInAnObjectWithSpace
|
||||
JsonInput.TrailingCommaInAnObjectWithSpaceCommaSpace
|
||||
JsonInput.WrapperTypesWithNullValue.JsonOutput
|
||||
JsonInput.WrapperTypesWithNullValue.ProtobufOutput
|
||||
ProtobufInput.PrematureEofBeforeKnownRepeatedValue.MESSAGE
|
||||
|
@ -38,6 +38,9 @@ JsonInput.OriginalProtoFieldName.JsonOutput
|
||||
JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotBool
|
||||
JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt
|
||||
JsonInput.StringFieldNotAString
|
||||
JsonInput.StringFieldSingleQuoteBoth
|
||||
JsonInput.StringFieldSingleQuoteKey
|
||||
JsonInput.StringFieldSingleQuoteValue
|
||||
JsonInput.StringFieldSurrogateInWrongOrder
|
||||
JsonInput.StringFieldUnpairedHighSurrogate
|
||||
JsonInput.StringFieldUnpairedLowSurrogate
|
||||
|
@ -156,6 +156,7 @@ JsonInput.RepeatedUint32Wrapper.JsonOutput
|
||||
JsonInput.RepeatedUint32Wrapper.ProtobufOutput
|
||||
JsonInput.RepeatedUint64Wrapper.JsonOutput
|
||||
JsonInput.RepeatedUint64Wrapper.ProtobufOutput
|
||||
JsonInput.StringEndsWithEscapeChar
|
||||
JsonInput.StringFieldNotAString
|
||||
JsonInput.StringFieldSurrogateInWrongOrder
|
||||
JsonInput.StringFieldSurrogatePair.JsonOutput
|
||||
|
Loading…
Reference in New Issue
Block a user