Clean up conformance tests warnings and formatting.
PiperOrigin-RevId: 574304654
diff --git a/conformance/binary_json_conformance_suite.cc b/conformance/binary_json_conformance_suite.cc
index 81ee1a4..d063c12 100644
--- a/conformance/binary_json_conformance_suite.cc
+++ b/conformance/binary_json_conformance_suite.cc
@@ -7,24 +7,28 @@
#include "binary_json_conformance_suite.h"
+#include <cassert>
+#include <cctype>
+#include <cstddef>
#include <cstdint>
+#include <cstring>
#include <memory>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
-#include "google/protobuf/util/json_util.h"
-#include "google/protobuf/util/type_resolver_util.h"
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/log/die_if_null.h"
#include "absl/status/status.h"
#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
#include "json/json.h"
#include "conformance/conformance.pb.h"
#include "conformance_test.h"
#include "google/protobuf/endian.h"
+#include "google/protobuf/json/json.h"
#include "google/protobuf/test_messages_proto2.pb.h"
#include "google/protobuf/test_messages_proto2.pb.h"
#include "google/protobuf/test_messages_proto3.pb.h"
@@ -43,7 +47,6 @@
using google::protobuf::util::NewTypeResolverForDescriptorPool;
using protobuf_test_messages::proto2::TestAllTypesProto2;
using protobuf_test_messages::proto3::TestAllTypesProto3;
-using std::string;
namespace {
@@ -53,7 +56,7 @@
// Corresponds approx to 500KB wireformat bytes.
const size_t kPerformanceRepeatCount = 50000;
-string GetTypeUrl(const Descriptor* message) {
+std::string GetTypeUrl(const Descriptor* message) {
return absl::StrCat(kTypeUrlPrefix, "/", message->full_name());
}
@@ -85,52 +88,56 @@
return i;
}
-string varint(uint64_t x) {
+std::string varint(uint64_t x) {
char buf[VARINT_MAX_LEN];
size_t len = vencode64(x, 0, buf);
- return string(buf, len);
+ return std::string(buf, len);
}
// Encodes a varint that is |extra| bytes longer than it needs to be, but still
// valid.
-string longvarint(uint64_t x, int extra) {
+std::string longvarint(uint64_t x, int extra) {
char buf[VARINT_MAX_LEN];
size_t len = vencode64(x, extra, buf);
- return string(buf, len);
+ return std::string(buf, len);
}
-string fixed32(void* data) {
+std::string fixed32(void* data) {
uint32_t data_le;
std::memcpy(&data_le, data, 4);
data_le = FromHost(data_le);
- return string(reinterpret_cast<char*>(&data_le), 4);
+ return std::string(reinterpret_cast<char*>(&data_le), 4);
}
-string fixed64(void* data) {
+std::string fixed64(void* data) {
uint64_t data_le;
std::memcpy(&data_le, data, 8);
data_le = FromHost(data_le);
- return string(reinterpret_cast<char*>(&data_le), 8);
+ return std::string(reinterpret_cast<char*>(&data_le), 8);
}
-string delim(const string& buf) {
+std::string delim(const std::string& buf) {
return absl::StrCat(varint(buf.size()), buf);
}
-string u32(uint32_t u32) { return fixed32(&u32); }
-string u64(uint64_t u64) { return fixed64(&u64); }
-string flt(float f) { return fixed32(&f); }
-string dbl(double d) { return fixed64(&d); }
-string zz32(int32_t x) { return varint(WireFormatLite::ZigZagEncode32(x)); }
-string zz64(int64_t x) { return varint(WireFormatLite::ZigZagEncode64(x)); }
+std::string u32(uint32_t u32) { return fixed32(&u32); }
+std::string u64(uint64_t u64) { return fixed64(&u64); }
+std::string flt(float f) { return fixed32(&f); }
+std::string dbl(double d) { return fixed64(&d); }
+std::string zz32(int32_t x) {
+ return varint(WireFormatLite::ZigZagEncode32(x));
+}
+std::string zz64(int64_t x) {
+ return varint(WireFormatLite::ZigZagEncode64(x));
+}
-string tag(uint32_t fieldnum, char wire_type) {
+std::string tag(uint32_t fieldnum, char wire_type) {
return varint((fieldnum << 3) | wire_type);
}
-string tag(int fieldnum, char wire_type) {
+std::string tag(int fieldnum, char wire_type) {
return tag(static_cast<uint32_t>(fieldnum), wire_type);
}
-string GetDefaultValue(FieldDescriptor::Type type) {
+std::string GetDefaultValue(FieldDescriptor::Type type) {
switch (type) {
case FieldDescriptor::TYPE_INT32:
case FieldDescriptor::TYPE_INT64:
@@ -163,7 +170,7 @@
return "";
}
-string GetNonDefaultValue(FieldDescriptor::Type type) {
+std::string GetNonDefaultValue(FieldDescriptor::Type type) {
switch (type) {
case FieldDescriptor::TYPE_INT32:
case FieldDescriptor::TYPE_INT64:
@@ -200,14 +207,15 @@
#define UNKNOWN_FIELD 666
-string UpperCase(string str) {
+std::string UpperCase(std::string str) {
for (size_t i = 0; i < str.size(); i++) {
str[i] = toupper(str[i]);
}
return str;
}
-bool IsProto3Default(FieldDescriptor::Type type, const string& binary_data) {
+bool IsProto3Default(FieldDescriptor::Type type,
+ const std::string& binary_data) {
switch (type) {
case FieldDescriptor::TYPE_DOUBLE:
return binary_data == dbl(0);
@@ -243,10 +251,10 @@
bool BinaryAndJsonConformanceSuite::ParseJsonResponse(
const ConformanceResponse& response, Message* test_message) {
- string binary_protobuf;
+ std::string binary_protobuf;
absl::Status status =
- JsonToBinaryString(type_resolver_.get(), type_url_,
- response.json_payload(), &binary_protobuf);
+ json::JsonToBinaryString(type_resolver_.get(), type_url_,
+ response.json_payload(), &binary_protobuf);
if (!status.ok()) {
return false;
@@ -266,7 +274,7 @@
const ConformanceRequestSetting& setting, Message* test_message) {
const ConformanceRequest& request = setting.GetRequest();
WireFormat requested_output = request.requested_output_format();
- const string& test_name = setting.GetTestName();
+ const std::string& test_name = setting.GetTestName();
ConformanceLevel level = setting.GetLevel();
switch (response.result_case()) {
@@ -327,8 +335,8 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- ExpectParseFailureForProtoWithProtoVersion(const string& proto,
- const string& test_name,
+ ExpectParseFailureForProtoWithProtoVersion(const std::string& proto,
+ const std::string& test_name,
ConformanceLevel level) {
MessageType prototype;
// We don't expect output, but if the program erroneously accepts the protobuf
@@ -339,7 +347,7 @@
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
- string effective_test_name =
+ std::string effective_test_name =
absl::StrCat(setting.ConformanceLevelToString(level), ".",
SyntaxIdentifier(), ".ProtobufInput.", test_name);
@@ -357,7 +365,8 @@
// Expect that this precise protobuf will cause a parse error.
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::ExpectParseFailureForProto(
- const string& proto, const string& test_name, ConformanceLevel level) {
+ const std::string& proto, const std::string& test_name,
+ ConformanceLevel level) {
ExpectParseFailureForProtoWithProtoVersion(proto, test_name, level);
}
@@ -368,16 +377,16 @@
// TODO: implement the second of these.
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<
- MessageType>::ExpectHardParseFailureForProto(const string& proto,
- const string& test_name,
+ MessageType>::ExpectHardParseFailureForProto(const std::string& proto,
+ const std::string& test_name,
ConformanceLevel level) {
return ExpectParseFailureForProto(proto, test_name, level);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunValidJsonTest(
- const string& test_name, ConformanceLevel level, const string& input_json,
- const string& equivalent_text_format) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_json, const std::string& equivalent_text_format) {
MessageType prototype;
RunValidJsonTestWithMessage(test_name, level, input_json,
equivalent_text_format, prototype);
@@ -385,9 +394,10 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- RunValidJsonTestWithMessage(const string& test_name, ConformanceLevel level,
- const string& input_json,
- const string& equivalent_text_format,
+ RunValidJsonTestWithMessage(const std::string& test_name,
+ ConformanceLevel level,
+ const std::string& input_json,
+ const std::string& equivalent_text_format,
const Message& prototype) {
ConformanceRequestSetting setting1(
level, conformance::JSON, conformance::PROTOBUF, conformance::JSON_TEST,
@@ -401,10 +411,10 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- RunValidJsonTestWithProtobufInput(const string& test_name,
- ConformanceLevel level,
- const TestAllTypesProto3& input,
- const string& equivalent_text_format) {
+ RunValidJsonTestWithProtobufInput(
+ const std::string& test_name, ConformanceLevel level,
+ const TestAllTypesProto3& input,
+ const std::string& equivalent_text_format) {
ConformanceRequestSetting setting(
level, conformance::PROTOBUF, conformance::JSON, conformance::JSON_TEST,
input, test_name, input.SerializeAsString());
@@ -413,10 +423,10 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- RunValidJsonIgnoreUnknownTest(const string& test_name,
+ RunValidJsonIgnoreUnknownTest(const std::string& test_name,
ConformanceLevel level,
- const string& input_json,
- const string& equivalent_text_format) {
+ const std::string& input_json,
+ const std::string& equivalent_text_format) {
TestAllTypesProto3 prototype;
ConformanceRequestSetting setting(
level, conformance::JSON, conformance::PROTOBUF,
@@ -427,8 +437,9 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunValidProtobufTest(
- const string& test_name, ConformanceLevel level,
- const string& input_protobuf, const string& equivalent_text_format) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_protobuf,
+ const std::string& equivalent_text_format) {
MessageType prototype;
ConformanceRequestSetting setting1(
@@ -446,15 +457,15 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunValidBinaryProtobufTest(
- const string& test_name, ConformanceLevel level,
- const string& input_protobuf) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_protobuf) {
RunValidBinaryProtobufTest(test_name, level, input_protobuf, input_protobuf);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunValidBinaryProtobufTest(
- const string& test_name, ConformanceLevel level,
- const string& input_protobuf, const string& expected_protobuf) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_protobuf, const std::string& expected_protobuf) {
MessageType prototype;
ConformanceRequestSetting setting(
level, conformance::PROTOBUF, conformance::PROTOBUF,
@@ -464,21 +475,21 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- RunBinaryPerformanceMergeMessageWithField(const string& test_name,
- const string& field_proto) {
- string message_tag = tag(27, WireFormatLite::WIRETYPE_LENGTH_DELIMITED);
- string message_proto = absl::StrCat(message_tag, delim(field_proto));
+ RunBinaryPerformanceMergeMessageWithField(const std::string& test_name,
+ const std::string& field_proto) {
+ std::string message_tag = tag(27, WireFormatLite::WIRETYPE_LENGTH_DELIMITED);
+ std::string message_proto = absl::StrCat(message_tag, delim(field_proto));
- string proto;
+ std::string proto;
for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
proto.append(message_proto);
}
- string multiple_repeated_field_proto;
+ std::string multiple_repeated_field_proto;
for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
multiple_repeated_field_proto.append(field_proto);
}
- string expected_proto =
+ std::string expected_proto =
absl::StrCat(message_tag, delim(multiple_repeated_field_proto));
RunValidBinaryProtobufTest(test_name, RECOMMENDED, proto, expected_proto);
@@ -486,10 +497,10 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
- RunValidProtobufTestWithMessage(const string& test_name,
+ RunValidProtobufTestWithMessage(const std::string& test_name,
ConformanceLevel level,
const Message* input,
- const string& equivalent_text_format) {
+ const std::string& equivalent_text_format) {
RunValidProtobufTest(test_name, level, input->SerializeAsString(),
equivalent_text_format);
}
@@ -501,9 +512,9 @@
template <typename MessageType> // the JSON output directly.
void BinaryAndJsonConformanceSuiteImpl<
- MessageType>::RunValidJsonTestWithValidator(const string& test_name,
+ MessageType>::RunValidJsonTestWithValidator(const std::string& test_name,
ConformanceLevel level,
- const string& input_json,
+ const std::string& input_json,
const Validator& validator) {
MessageType prototype;
ConformanceRequestSetting setting(level, conformance::JSON, conformance::JSON,
@@ -511,7 +522,7 @@
test_name, input_json);
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
- string effective_test_name =
+ std::string effective_test_name =
absl::StrCat(setting.ConformanceLevelToString(level), ".",
SyntaxIdentifier(), ".JsonInput.", test_name, ".Validator");
@@ -547,7 +558,8 @@
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::ExpectParseFailureForJson(
- const string& test_name, ConformanceLevel level, const string& input_json) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_json) {
TestAllTypesProto3 prototype;
// We don't expect output, but if the program erroneously accepts the protobuf
// we let it send its response as this. We must not leave it unspecified.
@@ -556,7 +568,7 @@
test_name, input_json);
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
- string effective_test_name = absl::StrCat(
+ std::string effective_test_name = absl::StrCat(
setting.ConformanceLevelToString(level), ".Proto3.JsonInput.", test_name);
suite_.RunTest(effective_test_name, request, &response);
@@ -571,10 +583,10 @@
}
template <typename MessageType>
-void BinaryAndJsonConformanceSuiteImpl<
- MessageType>::ExpectSerializeFailureForJson(const string& test_name,
- ConformanceLevel level,
- const string& text_format) {
+void BinaryAndJsonConformanceSuiteImpl<MessageType>::
+ ExpectSerializeFailureForJson(const std::string& test_name,
+ ConformanceLevel level,
+ const std::string& text_format) {
TestAllTypesProto3 payload_message;
ABSL_CHECK(TextFormat::ParseFromString(text_format, &payload_message))
<< "Failed to parse: " << text_format;
@@ -585,7 +597,7 @@
prototype, test_name, payload_message.SerializeAsString());
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
- string effective_test_name = absl::StrCat(
+ std::string effective_test_name = absl::StrCat(
setting.ConformanceLevelToString(level), ".", test_name, ".JsonOutput");
suite_.RunTest(effective_test_name, request, &response);
@@ -617,7 +629,7 @@
WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
static_cast<WireFormatLite::FieldType>(type));
absl::string_view incomplete = incompletes[wire_type];
- const string type_name =
+ const std::string type_name =
UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
ExpectParseFailureForProto(
@@ -669,7 +681,7 @@
if (type == FieldDescriptor::TYPE_MESSAGE) {
// Submessage ends in the middle of a value.
- string incomplete_submsg = absl::StrCat(
+ std::string incomplete_submsg = absl::StrCat(
tag(WireFormatLite::TYPE_INT32, WireFormatLite::WIRETYPE_VARINT),
incompletes[WireFormatLite::WIRETYPE_VARINT]);
ExpectHardParseFailureForProto(
@@ -701,7 +713,7 @@
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestValidDataForType(
FieldDescriptor::Type type,
std::vector<std::pair<std::string, std::string>> values) {
- const string type_name =
+ const std::string type_name =
UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
static_cast<WireFormatLite::FieldType>(type));
@@ -710,16 +722,16 @@
// Test singular data for singular fields.
for (size_t i = 0; i < values.size(); i++) {
- string proto =
+ std::string proto =
absl::StrCat(tag(field->number(), wire_type), values[i].first);
// In proto3, default primitive fields should not be encoded.
- string expected_proto =
+ std::string expected_proto =
run_proto3_tests_ && IsProto3Default(field->type(), values[i].second)
? ""
: absl::StrCat(tag(field->number(), wire_type), values[i].second);
MessageType test_message;
test_message.MergeFromString(expected_proto);
- string text;
+ std::string text;
TextFormat::PrintToString(test_message, &text);
RunValidProtobufTest(
@@ -734,15 +746,15 @@
// For scalar message fields, repeated values are merged, which is tested
// separately.
if (type != FieldDescriptor::TYPE_MESSAGE) {
- string proto;
+ std::string proto;
for (size_t i = 0; i < values.size(); i++) {
proto += absl::StrCat(tag(field->number(), wire_type), values[i].first);
}
- string expected_proto =
+ std::string expected_proto =
absl::StrCat(tag(field->number(), wire_type), values.back().second);
MessageType test_message;
test_message.MergeFromString(expected_proto);
- string text;
+ std::string text;
TextFormat::PrintToString(test_message, &text);
RunValidProtobufTest(absl::StrCat("RepeatedScalarSelectsLast", type_name),
@@ -756,16 +768,16 @@
const FieldDescriptor* unpacked_field =
GetFieldForType(type, true, Packed::kFalse);
- string default_proto_packed;
- string default_proto_unpacked;
- string default_proto_packed_expected;
- string default_proto_unpacked_expected;
- string packed_proto_packed;
- string packed_proto_unpacked;
- string packed_proto_expected;
- string unpacked_proto_packed;
- string unpacked_proto_unpacked;
- string unpacked_proto_expected;
+ std::string default_proto_packed;
+ std::string default_proto_unpacked;
+ std::string default_proto_packed_expected;
+ std::string default_proto_unpacked_expected;
+ std::string packed_proto_packed;
+ std::string packed_proto_unpacked;
+ std::string packed_proto_expected;
+ std::string unpacked_proto_packed;
+ std::string unpacked_proto_unpacked;
+ std::string unpacked_proto_expected;
for (size_t i = 0; i < values.size(); i++) {
default_proto_unpacked +=
@@ -803,7 +815,7 @@
MessageType test_message;
test_message.MergeFromString(default_proto_packed_expected);
- string text;
+ std::string text;
TextFormat::PrintToString(test_message, &text);
// Ensures both packed and unpacked data can be parsed.
@@ -816,9 +828,9 @@
// proto2 should encode as unpacked by default and proto3 should encode as
// packed by default.
- string expected_proto = rep_field->is_packed()
- ? default_proto_packed_expected
- : default_proto_unpacked_expected;
+ std::string expected_proto = rep_field->is_packed()
+ ? default_proto_packed_expected
+ : default_proto_unpacked_expected;
RunValidBinaryProtobufTest(absl::StrCat("ValidDataRepeated", type_name,
".UnpackedInput.DefaultOutput"),
RECOMMENDED, default_proto_unpacked,
@@ -844,8 +856,8 @@
RECOMMENDED, unpacked_proto_packed,
unpacked_proto_expected);
} else {
- string proto;
- string expected_proto;
+ std::string proto;
+ std::string expected_proto;
for (size_t i = 0; i < values.size(); i++) {
proto +=
absl::StrCat(tag(rep_field->number(), wire_type), values[i].first);
@@ -854,7 +866,7 @@
}
MessageType test_message;
test_message.MergeFromString(expected_proto);
- string text;
+ std::string text;
TextFormat::PrintToString(test_message, &text);
RunValidProtobufTest(absl::StrCat("ValidDataRepeated", type_name), REQUIRED,
@@ -887,433 +899,430 @@
optional_int64: 1234,
optional_uint32: 4321,
repeated_int32: [1234, 4321],
- }
+ }
})";
- string proto;
- const FieldDescriptor* field =
- GetFieldForType(FieldDescriptor::TYPE_MESSAGE, false);
- for (size_t i = 0; i < values.size(); i++) {
- proto += absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- values[i]);
- }
+ std::string proto;
+ const FieldDescriptor* field =
+ GetFieldForType(FieldDescriptor::TYPE_MESSAGE, false);
+ for (size_t i = 0; i < values.size(); i++) {
+ proto += absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ values[i]);
+ }
- RunValidProtobufTest("RepeatedScalarMessageMerge", REQUIRED, proto,
- absl::StrCat(field->name(), ": ", expected));
+ RunValidProtobufTest("RepeatedScalarMessageMerge", REQUIRED, proto,
+ absl::StrCat(field->name(), ": ", expected));
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestValidDataForMapType(
FieldDescriptor::Type key_type, FieldDescriptor::Type value_type) {
- const string key_type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(key_type)));
- const string value_type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(value_type)));
- WireFormatLite::WireType key_wire_type =
- WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(key_type));
- WireFormatLite::WireType value_wire_type =
- WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(value_type));
+ const std::string key_type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(key_type)));
+ const std::string value_type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(value_type)));
+ WireFormatLite::WireType key_wire_type = WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(key_type));
+ WireFormatLite::WireType value_wire_type =
+ WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(value_type));
- string key1_data =
- absl::StrCat(tag(1, key_wire_type), GetDefaultValue(key_type));
- string value1_data =
- absl::StrCat(tag(2, value_wire_type), GetDefaultValue(value_type));
- string key2_data =
- absl::StrCat(tag(1, key_wire_type), GetNonDefaultValue(key_type));
- string value2_data =
- absl::StrCat(tag(2, value_wire_type), GetNonDefaultValue(value_type));
+ std::string key1_data =
+ absl::StrCat(tag(1, key_wire_type), GetDefaultValue(key_type));
+ std::string value1_data =
+ absl::StrCat(tag(2, value_wire_type), GetDefaultValue(value_type));
+ std::string key2_data =
+ absl::StrCat(tag(1, key_wire_type), GetNonDefaultValue(key_type));
+ std::string value2_data =
+ absl::StrCat(tag(2, value_wire_type), GetNonDefaultValue(value_type));
- const FieldDescriptor* field = GetFieldForMapType(key_type, value_type);
+ const FieldDescriptor* field = GetFieldForMapType(key_type, value_type);
- {
- // Tests map with default key and value.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key1_data, value1_data)));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
- value_type_name, ".Default"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with default key and value.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key1_data, value1_data)));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
+ value_type_name, ".Default"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with missing default key and value.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(""));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
- value_type_name, ".MissingDefault"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with missing default key and value.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(""));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
+ value_type_name, ".MissingDefault"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with non-default key and value.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key2_data, value2_data)));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
- value_type_name, ".NonDefault"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with non-default key and value.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key2_data, value2_data)));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
+ value_type_name, ".NonDefault"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with unordered key and value.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(value2_data, key2_data)));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
- value_type_name, ".Unordered"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with unordered key and value.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(value2_data, key2_data)));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
+ value_type_name, ".Unordered"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with duplicate key.
- string proto1 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key2_data, value1_data)));
- string proto2 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key2_data, value2_data)));
- string proto = absl::StrCat(proto1, proto2);
- MessageType test_message;
- test_message.MergeFromString(proto2);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
- value_type_name, ".DuplicateKey"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with duplicate key.
+ std::string proto1 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key2_data, value1_data)));
+ std::string proto2 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key2_data, value2_data)));
+ std::string proto = absl::StrCat(proto1, proto2);
+ MessageType test_message;
+ test_message.MergeFromString(proto2);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(absl::StrCat("ValidDataMap", key_type_name,
+ value_type_name, ".DuplicateKey"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with duplicate key in map entry.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key1_data, key2_data, value2_data)));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(
- absl::StrCat("ValidDataMap", key_type_name, value_type_name,
- ".DuplicateKeyInMapEntry"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with duplicate key in map entry.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key1_data, key2_data, value2_data)));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(
+ absl::StrCat("ValidDataMap", key_type_name, value_type_name,
+ ".DuplicateKeyInMapEntry"),
+ REQUIRED, proto, text);
+ }
- {
- // Tests map with duplicate value in map entry.
- string proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key2_data, value1_data, value2_data)));
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(
- absl::StrCat("ValidDataMap", key_type_name, value_type_name,
- ".DuplicateValueInMapEntry"),
- REQUIRED, proto, text);
- }
+ {
+ // Tests map with duplicate value in map entry.
+ std::string proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key2_data, value1_data, value2_data)));
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest(
+ absl::StrCat("ValidDataMap", key_type_name, value_type_name,
+ ".DuplicateValueInMapEntry"),
+ REQUIRED, proto, text);
+ }
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<
MessageType>::TestOverwriteMessageValueMap() {
- string key_data = absl::StrCat(
- tag(1, WireFormatLite::WIRETYPE_LENGTH_DELIMITED), delim(""));
- string field1_data =
- absl::StrCat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string field2_data =
- absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string field31_data =
- absl::StrCat(tag(31, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string submsg1_data = delim(absl::StrCat(field1_data, field31_data));
- string submsg2_data = delim(absl::StrCat(field2_data, field31_data));
- string value1_data = absl::StrCat(
- tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- submsg1_data)));
- string value2_data = absl::StrCat(
- tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- submsg2_data)));
+ std::string key_data = absl::StrCat(
+ tag(1, WireFormatLite::WIRETYPE_LENGTH_DELIMITED), delim(""));
+ std::string field1_data =
+ absl::StrCat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string field2_data =
+ absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string field31_data =
+ absl::StrCat(tag(31, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string submsg1_data = delim(absl::StrCat(field1_data, field31_data));
+ std::string submsg2_data = delim(absl::StrCat(field2_data, field31_data));
+ std::string value1_data = absl::StrCat(
+ tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ submsg1_data)));
+ std::string value2_data = absl::StrCat(
+ tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ submsg2_data)));
- const FieldDescriptor* field = GetFieldForMapType(
- FieldDescriptor::TYPE_STRING, FieldDescriptor::TYPE_MESSAGE);
+ const FieldDescriptor* field = GetFieldForMapType(
+ FieldDescriptor::TYPE_STRING, FieldDescriptor::TYPE_MESSAGE);
- string proto1 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key_data, value1_data)));
- string proto2 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(key_data, value2_data)));
- string proto = absl::StrCat(proto1, proto2);
- MessageType test_message;
- test_message.MergeFromString(proto2);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest("ValidDataMap.STRING.MESSAGE.MergeValue", REQUIRED,
- proto, text);
+ std::string proto1 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key_data, value1_data)));
+ std::string proto2 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(key_data, value2_data)));
+ std::string proto = absl::StrCat(proto1, proto2);
+ MessageType test_message;
+ test_message.MergeFromString(proto2);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest("ValidDataMap.STRING.MESSAGE.MergeValue", REQUIRED,
+ proto, text);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestValidDataForOneofType(
FieldDescriptor::Type type) {
- const string type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
- WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(type));
+ const std::string type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
+ WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(type));
- const FieldDescriptor* field = GetFieldForOneofType(type);
- const string default_value =
- absl::StrCat(tag(field->number(), wire_type), GetDefaultValue(type));
- const string non_default_value =
- absl::StrCat(tag(field->number(), wire_type), GetNonDefaultValue(type));
+ const FieldDescriptor* field = GetFieldForOneofType(type);
+ const std::string default_value =
+ absl::StrCat(tag(field->number(), wire_type), GetDefaultValue(type));
+ const std::string non_default_value =
+ absl::StrCat(tag(field->number(), wire_type), GetNonDefaultValue(type));
- {
- // Tests oneof with default value.
- const string proto = default_value;
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
+ {
+ // Tests oneof with default value.
+ const std::string proto = default_value;
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(
- absl::StrCat("ValidDataOneof", type_name, ".DefaultValue"), REQUIRED,
- proto, text);
- RunValidBinaryProtobufTest(
- absl::StrCat("ValidDataOneofBinary", type_name, ".DefaultValue"),
- RECOMMENDED, proto, proto);
- }
+ RunValidProtobufTest(
+ absl::StrCat("ValidDataOneof", type_name, ".DefaultValue"), REQUIRED,
+ proto, text);
+ RunValidBinaryProtobufTest(
+ absl::StrCat("ValidDataOneofBinary", type_name, ".DefaultValue"),
+ RECOMMENDED, proto, proto);
+ }
- {
- // Tests oneof with non-default value.
- const string proto = non_default_value;
- MessageType test_message;
- test_message.MergeFromString(proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
+ {
+ // Tests oneof with non-default value.
+ const std::string proto = non_default_value;
+ MessageType test_message;
+ test_message.MergeFromString(proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(
- absl::StrCat("ValidDataOneof", type_name, ".NonDefaultValue"),
- REQUIRED, proto, text);
- RunValidBinaryProtobufTest(
- absl::StrCat("ValidDataOneofBinary", type_name, ".NonDefaultValue"),
- RECOMMENDED, proto, proto);
- }
+ RunValidProtobufTest(
+ absl::StrCat("ValidDataOneof", type_name, ".NonDefaultValue"), REQUIRED,
+ proto, text);
+ RunValidBinaryProtobufTest(
+ absl::StrCat("ValidDataOneofBinary", type_name, ".NonDefaultValue"),
+ RECOMMENDED, proto, proto);
+ }
- {
- // Tests oneof with multiple values of the same field.
- const string proto = absl::StrCat(default_value, non_default_value);
- const string expected_proto = non_default_value;
- MessageType test_message;
- test_message.MergeFromString(expected_proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
+ {
+ // Tests oneof with multiple values of the same field.
+ const std::string proto = absl::StrCat(default_value, non_default_value);
+ const std::string expected_proto = non_default_value;
+ MessageType test_message;
+ test_message.MergeFromString(expected_proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataOneof", type_name,
- ".MultipleValuesForSameField"),
- REQUIRED, proto, text);
- RunValidBinaryProtobufTest(absl::StrCat("ValidDataOneofBinary", type_name,
- ".MultipleValuesForSameField"),
- RECOMMENDED, proto, expected_proto);
- }
+ RunValidProtobufTest(absl::StrCat("ValidDataOneof", type_name,
+ ".MultipleValuesForSameField"),
+ REQUIRED, proto, text);
+ RunValidBinaryProtobufTest(absl::StrCat("ValidDataOneofBinary", type_name,
+ ".MultipleValuesForSameField"),
+ RECOMMENDED, proto, expected_proto);
+ }
- {
- // Tests oneof with multiple values of the different fields.
- const FieldDescriptor* other_field = GetFieldForOneofType(type, true);
- FieldDescriptor::Type other_type = other_field->type();
- WireFormatLite::WireType other_wire_type =
- WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(other_type));
- const string other_value =
- absl::StrCat(tag(other_field->number(), other_wire_type),
- GetDefaultValue(other_type));
+ {
+ // Tests oneof with multiple values of the different fields.
+ const FieldDescriptor* other_field = GetFieldForOneofType(type, true);
+ FieldDescriptor::Type other_type = other_field->type();
+ WireFormatLite::WireType other_wire_type =
+ WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(other_type));
+ const std::string other_value =
+ absl::StrCat(tag(other_field->number(), other_wire_type),
+ GetDefaultValue(other_type));
- const string proto = absl::StrCat(other_value, non_default_value);
- const string expected_proto = non_default_value;
- MessageType test_message;
- test_message.MergeFromString(expected_proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
+ const std::string proto = absl::StrCat(other_value, non_default_value);
+ const std::string expected_proto = non_default_value;
+ MessageType test_message;
+ test_message.MergeFromString(expected_proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest(absl::StrCat("ValidDataOneof", type_name,
- ".MultipleValuesForDifferentField"),
- REQUIRED, proto, text);
- RunValidBinaryProtobufTest(
- absl::StrCat("ValidDataOneofBinary", type_name,
- ".MultipleValuesForDifferentField"),
- RECOMMENDED, proto, expected_proto);
- }
+ RunValidProtobufTest(absl::StrCat("ValidDataOneof", type_name,
+ ".MultipleValuesForDifferentField"),
+ REQUIRED, proto, text);
+ RunValidBinaryProtobufTest(absl::StrCat("ValidDataOneofBinary", type_name,
+ ".MultipleValuesForDifferentField"),
+ RECOMMENDED, proto, expected_proto);
+ }
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestMergeOneofMessage() {
- string field1_data =
- absl::StrCat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string field2a_data =
- absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string field2b_data =
- absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string field89_data =
- absl::StrCat(tag(89, WireFormatLite::WIRETYPE_VARINT), varint(1));
- string submsg1_data = absl::StrCat(
- tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(field1_data, field2a_data, field89_data)));
- string submsg2_data =
- absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(field2b_data, field89_data)));
- string merged_data =
- absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(absl::StrCat(field1_data, field2b_data, field89_data,
- field89_data)));
+ std::string field1_data =
+ absl::StrCat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string field2a_data =
+ absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string field2b_data =
+ absl::StrCat(tag(2, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string field89_data =
+ absl::StrCat(tag(89, WireFormatLite::WIRETYPE_VARINT), varint(1));
+ std::string submsg1_data = absl::StrCat(
+ tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(field1_data, field2a_data, field89_data)));
+ std::string submsg2_data =
+ absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(field2b_data, field89_data)));
+ std::string merged_data =
+ absl::StrCat(tag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(absl::StrCat(field1_data, field2b_data, field89_data,
+ field89_data)));
- const FieldDescriptor* field =
- GetFieldForOneofType(FieldDescriptor::TYPE_MESSAGE);
+ const FieldDescriptor* field =
+ GetFieldForOneofType(FieldDescriptor::TYPE_MESSAGE);
- string proto1 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(submsg1_data));
- string proto2 = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(submsg2_data));
- string proto = absl::StrCat(proto1, proto2);
- string expected_proto = absl::StrCat(
- tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- delim(merged_data));
+ std::string proto1 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(submsg1_data));
+ std::string proto2 = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(submsg2_data));
+ std::string proto = absl::StrCat(proto1, proto2);
+ std::string expected_proto = absl::StrCat(
+ tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
+ delim(merged_data));
- MessageType test_message;
- test_message.MergeFromString(expected_proto);
- string text;
- TextFormat::PrintToString(test_message, &text);
- RunValidProtobufTest("ValidDataOneof.MESSAGE.Merge", REQUIRED, proto, text);
- RunValidBinaryProtobufTest("ValidDataOneofBinary.MESSAGE.Merge",
- RECOMMENDED, proto, expected_proto);
+ MessageType test_message;
+ test_message.MergeFromString(expected_proto);
+ std::string text;
+ TextFormat::PrintToString(test_message, &text);
+ RunValidProtobufTest("ValidDataOneof.MESSAGE.Merge", REQUIRED, proto, text);
+ RunValidBinaryProtobufTest("ValidDataOneofBinary.MESSAGE.Merge", RECOMMENDED,
+ proto, expected_proto);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestIllegalTags() {
- // field num 0 is illegal
- string nullfield[] = {"\1DEADBEEF", "\2\1\1", "\3\4", "\5DEAD"};
- for (int i = 0; i < 4; i++) {
- string name = "IllegalZeroFieldNum_Case_0";
- name.back() += i;
- ExpectParseFailureForProto(nullfield[i], name, REQUIRED);
- }
+ // field num 0 is illegal
+ std::string nullfield[] = {"\1DEADBEEF", "\2\1\1", "\3\4", "\5DEAD"};
+ for (int i = 0; i < 4; i++) {
+ std::string name = "IllegalZeroFieldNum_Case_0";
+ name.back() += i;
+ ExpectParseFailureForProto(nullfield[i], name, REQUIRED);
+ }
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestOneofMessage() {
- MessageType message;
- message.set_oneof_uint32(0);
- RunValidProtobufTestWithMessage("OneofZeroUint32", RECOMMENDED, &message,
- "oneof_uint32: 0");
- message.mutable_oneof_nested_message()->set_a(0);
- RunValidProtobufTestWithMessage("OneofZeroMessage", RECOMMENDED, &message,
- run_proto3_tests_
- ? "oneof_nested_message: {}"
- : "oneof_nested_message: {a: 0}");
- message.mutable_oneof_nested_message()->set_a(1);
- RunValidProtobufTestWithMessage("OneofZeroMessageSetTwice", RECOMMENDED,
- &message, "oneof_nested_message: {a: 1}");
- message.set_oneof_string("");
- RunValidProtobufTestWithMessage("OneofZeroString", RECOMMENDED, &message,
- "oneof_string: \"\"");
- message.set_oneof_bytes("");
- RunValidProtobufTestWithMessage("OneofZeroBytes", RECOMMENDED, &message,
- "oneof_bytes: \"\"");
- message.set_oneof_bool(false);
- RunValidProtobufTestWithMessage("OneofZeroBool", RECOMMENDED, &message,
- "oneof_bool: false");
- message.set_oneof_uint64(0);
- RunValidProtobufTestWithMessage("OneofZeroUint64", RECOMMENDED, &message,
- "oneof_uint64: 0");
- message.set_oneof_float(0.0f);
- RunValidProtobufTestWithMessage("OneofZeroFloat", RECOMMENDED, &message,
- "oneof_float: 0");
- message.set_oneof_double(0.0);
- RunValidProtobufTestWithMessage("OneofZeroDouble", RECOMMENDED, &message,
- "oneof_double: 0");
- message.set_oneof_enum(MessageType::FOO);
- RunValidProtobufTestWithMessage("OneofZeroEnum", RECOMMENDED, &message,
- "oneof_enum: FOO");
+ MessageType message;
+ message.set_oneof_uint32(0);
+ RunValidProtobufTestWithMessage("OneofZeroUint32", RECOMMENDED, &message,
+ "oneof_uint32: 0");
+ message.mutable_oneof_nested_message()->set_a(0);
+ RunValidProtobufTestWithMessage("OneofZeroMessage", RECOMMENDED, &message,
+ run_proto3_tests_
+ ? "oneof_nested_message: {}"
+ : "oneof_nested_message: {a: 0}");
+ message.mutable_oneof_nested_message()->set_a(1);
+ RunValidProtobufTestWithMessage("OneofZeroMessageSetTwice", RECOMMENDED,
+ &message, "oneof_nested_message: {a: 1}");
+ message.set_oneof_string("");
+ RunValidProtobufTestWithMessage("OneofZeroString", RECOMMENDED, &message,
+ "oneof_string: \"\"");
+ message.set_oneof_bytes("");
+ RunValidProtobufTestWithMessage("OneofZeroBytes", RECOMMENDED, &message,
+ "oneof_bytes: \"\"");
+ message.set_oneof_bool(false);
+ RunValidProtobufTestWithMessage("OneofZeroBool", RECOMMENDED, &message,
+ "oneof_bool: false");
+ message.set_oneof_uint64(0);
+ RunValidProtobufTestWithMessage("OneofZeroUint64", RECOMMENDED, &message,
+ "oneof_uint64: 0");
+ message.set_oneof_float(0.0f);
+ RunValidProtobufTestWithMessage("OneofZeroFloat", RECOMMENDED, &message,
+ "oneof_float: 0");
+ message.set_oneof_double(0.0);
+ RunValidProtobufTestWithMessage("OneofZeroDouble", RECOMMENDED, &message,
+ "oneof_double: 0");
+ message.set_oneof_enum(MessageType::FOO);
+ RunValidProtobufTestWithMessage("OneofZeroEnum", RECOMMENDED, &message,
+ "oneof_enum: FOO");
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestUnknownMessage() {
- MessageType message;
- message.ParseFromString("\xA8\x1F\x01");
- RunValidBinaryProtobufTest("UnknownVarint", REQUIRED,
- message.SerializeAsString());
+ MessageType message;
+ message.ParseFromString("\xA8\x1F\x01");
+ RunValidBinaryProtobufTest("UnknownVarint", REQUIRED,
+ message.SerializeAsString());
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<
MessageType>::TestBinaryPerformanceForAlternatingUnknownFields() {
- string unknown_field_1 = absl::StrCat(
- tag(UNKNOWN_FIELD, WireFormatLite::WIRETYPE_VARINT), varint(1234));
- string unknown_field_2 = absl::StrCat(
- tag(UNKNOWN_FIELD + 1, WireFormatLite::WIRETYPE_VARINT), varint(5678));
- string proto;
- for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
- proto.append(unknown_field_1);
- proto.append(unknown_field_2);
- }
+ std::string unknown_field_1 = absl::StrCat(
+ tag(UNKNOWN_FIELD, WireFormatLite::WIRETYPE_VARINT), varint(1234));
+ std::string unknown_field_2 = absl::StrCat(
+ tag(UNKNOWN_FIELD + 1, WireFormatLite::WIRETYPE_VARINT), varint(5678));
+ std::string proto;
+ for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
+ proto.append(unknown_field_1);
+ proto.append(unknown_field_2);
+ }
- RunValidBinaryProtobufTest(
- "TestBinaryPerformanceForAlternatingUnknownFields", RECOMMENDED, proto);
+ RunValidBinaryProtobufTest("TestBinaryPerformanceForAlternatingUnknownFields",
+ RECOMMENDED, proto);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
FieldDescriptor::Type type) {
- const string type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
- int field_number = GetFieldForType(type, true, Packed::kFalse)->number();
- string rep_field_proto = absl::StrCat(
- tag(field_number, WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(type))),
- GetNonDefaultValue(type));
+ const std::string type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
+ int field_number = GetFieldForType(type, true, Packed::kFalse)->number();
+ std::string rep_field_proto = absl::StrCat(
+ tag(field_number, WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(type))),
+ GetNonDefaultValue(type));
- RunBinaryPerformanceMergeMessageWithField(
- absl::StrCat(
- "TestBinaryPerformanceMergeMessageWithRepeatedFieldForType",
- type_name),
- rep_field_proto);
+ RunBinaryPerformanceMergeMessageWithField(
+ absl::StrCat("TestBinaryPerformanceMergeMessageWithRepeatedFieldForType",
+ type_name),
+ rep_field_proto);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
FieldDescriptor::Type type) {
- const string type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
- string unknown_field_proto = absl::StrCat(
- tag(UNKNOWN_FIELD, WireFormatLite::WireTypeForFieldType(
- static_cast<WireFormatLite::FieldType>(type))),
- GetNonDefaultValue(type));
- RunBinaryPerformanceMergeMessageWithField(
- absl::StrCat("TestBinaryPerformanceMergeMessageWithUnknownFieldForType",
- type_name),
- unknown_field_proto);
+ const std::string type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
+ std::string unknown_field_proto = absl::StrCat(
+ tag(UNKNOWN_FIELD, WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(type))),
+ GetNonDefaultValue(type));
+ RunBinaryPerformanceMergeMessageWithField(
+ absl::StrCat("TestBinaryPerformanceMergeMessageWithUnknownFieldForType",
+ type_name),
+ unknown_field_proto);
}
template <typename MessageType>
@@ -1321,16 +1330,16 @@
BinaryAndJsonConformanceSuiteImpl(BinaryAndJsonConformanceSuite* suite,
bool run_proto3_tests)
: suite_(*ABSL_DIE_IF_NULL(suite)), run_proto3_tests_(run_proto3_tests) {
- RunAllTests();
+ RunAllTests();
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunAllTests() {
- if (!suite_.performance_) {
- for (int i = 1; i <= FieldDescriptor::MAX_TYPE; i++) {
+ if (!suite_.performance_) {
+ for (int i = 1; i <= FieldDescriptor::MAX_TYPE; i++) {
if (i == FieldDescriptor::TYPE_GROUP) continue;
TestPrematureEOFForType(static_cast<FieldDescriptor::Type>(i));
- }
+ }
TestIllegalTags();
@@ -1553,104 +1562,104 @@
TestOneofMessage();
RunJsonTests();
- }
+ }
// Flag control performance tests to keep them internal and opt-in only
- if (suite_.performance_) {
+ if (suite_.performance_) {
RunBinaryPerformanceTests();
RunJsonPerformanceTests();
- }
+ }
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<
MessageType>::RunBinaryPerformanceTests() {
- TestBinaryPerformanceForAlternatingUnknownFields();
+ TestBinaryPerformanceForAlternatingUnknownFields();
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_BOOL);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_DOUBLE);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_FLOAT);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_UINT32);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_UINT64);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_STRING);
- TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_BYTES);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_BOOL);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_DOUBLE);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_FLOAT);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_UINT32);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_UINT64);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_STRING);
+ TestBinaryPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_BYTES);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_BOOL);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_DOUBLE);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_FLOAT);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_UINT32);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_UINT64);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_STRING);
- TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
- FieldDescriptor::TYPE_BYTES);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_BOOL);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_DOUBLE);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_FLOAT);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_UINT32);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_UINT64);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_STRING);
+ TestBinaryPerformanceMergeMessageWithUnknownFieldForType(
+ FieldDescriptor::TYPE_BYTES);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunJsonPerformanceTests() {
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_BOOL, "true");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_DOUBLE, "123");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_FLOAT, "123");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_UINT32, "123");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_UINT64, "123");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_STRING, "\"foo\"");
- TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::TYPE_BYTES, "\"foo\"");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_BOOL, "true");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_DOUBLE, "123");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_FLOAT, "123");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_UINT32, "123");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_UINT64, "123");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_STRING, "\"foo\"");
+ TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
+ FieldDescriptor::TYPE_BYTES, "\"foo\"");
}
// This is currently considered valid input by some languages but not others
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::
TestJsonPerformanceMergeMessageWithRepeatedFieldForType(
- FieldDescriptor::Type type, string field_value) {
- const string type_name =
- UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
- const FieldDescriptor* field = GetFieldForType(type, true, Packed::kFalse);
- string field_name = field->name();
+ FieldDescriptor::Type type, std::string field_value) {
+ const std::string type_name =
+ UpperCase(absl::StrCat(".", FieldDescriptor::TypeName(type)));
+ const FieldDescriptor* field = GetFieldForType(type, true, Packed::kFalse);
+ std::string field_name = field->name();
- string message_field =
- absl::StrCat("\"", field_name, "\": [", field_value, "]");
- string recursive_message =
- absl::StrCat("\"recursive_message\": { ", message_field, "}");
- string input = absl::StrCat("{", recursive_message);
- for (size_t i = 1; i < kPerformanceRepeatCount; i++) {
+ std::string message_field =
+ absl::StrCat("\"", field_name, "\": [", field_value, "]");
+ std::string recursive_message =
+ absl::StrCat("\"recursive_message\": { ", message_field, "}");
+ std::string input = absl::StrCat("{", recursive_message);
+ for (size_t i = 1; i < kPerformanceRepeatCount; i++) {
absl::StrAppend(&input, ",", recursive_message);
- }
- absl::StrAppend(&input, "}");
+ }
+ absl::StrAppend(&input, "}");
- string textproto_message_field =
- absl::StrCat(field_name, ": ", field_value);
- string expected_textproto = "recursive_message { ";
- for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
+ std::string textproto_message_field =
+ absl::StrCat(field_name, ": ", field_value);
+ std::string expected_textproto = "recursive_message { ";
+ for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
absl::StrAppend(&expected_textproto, textproto_message_field, " ");
- }
- absl::StrAppend(&expected_textproto, "}");
- RunValidJsonTest(
- absl::StrCat("TestJsonPerformanceMergeMessageWithRepeatedFieldForType",
- type_name),
- RECOMMENDED, input, expected_textproto);
+ }
+ absl::StrAppend(&expected_textproto, "}");
+ RunValidJsonTest(
+ absl::StrCat("TestJsonPerformanceMergeMessageWithRepeatedFieldForType",
+ type_name),
+ RECOMMENDED, input, expected_textproto);
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunJsonTests() {
- if (!run_proto3_tests_) {
+ if (!run_proto3_tests_) {
RunValidJsonTestWithValidator(
"StoresDefaultPrimitive", REQUIRED,
R"({
@@ -1667,72 +1676,72 @@
"[protobuf_test_messages.proto2.extension_int32]");
});
return;
- }
- RunValidJsonTest("HelloWorld", REQUIRED,
- "{\"optionalString\":\"Hello, World!\"}",
- "optional_string: 'Hello, World!'");
+ }
+ RunValidJsonTest("HelloWorld", REQUIRED,
+ "{\"optionalString\":\"Hello, World!\"}",
+ "optional_string: 'Hello, World!'");
- // NOTE: The spec for JSON support is still being sorted out, these may not
- // all be correct.
+ // NOTE: The spec for JSON support is still being sorted out, these may not
+ // all be correct.
- RunJsonTestsForFieldNameConvention();
- RunJsonTestsForNonRepeatedTypes();
- RunJsonTestsForRepeatedTypes();
- RunJsonTestsForNullTypes();
- RunJsonTestsForWrapperTypes();
- RunJsonTestsForFieldMask();
- RunJsonTestsForStruct();
- RunJsonTestsForValue();
- RunJsonTestsForAny();
- RunJsonTestsForUnknownEnumStringValues();
+ RunJsonTestsForFieldNameConvention();
+ RunJsonTestsForNonRepeatedTypes();
+ RunJsonTestsForRepeatedTypes();
+ RunJsonTestsForNullTypes();
+ RunJsonTestsForWrapperTypes();
+ RunJsonTestsForFieldMask();
+ RunJsonTestsForStruct();
+ RunJsonTestsForValue();
+ RunJsonTestsForAny();
+ RunJsonTestsForUnknownEnumStringValues();
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonNumber", REQUIRED,
- R"({
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonNumber", REQUIRED,
+ R"({
"unknown": 1
})",
- "");
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonString", REQUIRED,
- R"({
+ "");
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonString", REQUIRED,
+ R"({
"unknown": "a"
})",
- "");
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonTrue", REQUIRED,
- R"({
+ "");
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonTrue", REQUIRED,
+ R"({
"unknown": true
})",
- "");
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonFalse", REQUIRED,
- R"({
+ "");
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonFalse", REQUIRED,
+ R"({
"unknown": false
})",
- "");
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonNull", REQUIRED,
- R"({
+ "");
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonNull", REQUIRED,
+ R"({
"unknown": null
})",
- "");
- RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonObject", REQUIRED,
- R"({
+ "");
+ RunValidJsonIgnoreUnknownTest("IgnoreUnknownJsonObject", REQUIRED,
+ R"({
"unknown": {"a": 1}
})",
- "");
+ "");
- ExpectParseFailureForJson("RejectTopLevelNull", REQUIRED, "null");
+ ExpectParseFailureForJson("RejectTopLevelNull", REQUIRED, "null");
}
template <typename MessageType>
void BinaryAndJsonConformanceSuiteImpl<
MessageType>::RunJsonTestsForUnknownEnumStringValues() {
- // Tests the handling of unknown enum values when encoded as string labels.
- // The expected behavior depends on whether unknown fields are ignored:
- // * when ignored, the parser should ignore the unknown enum string value.
- // * when not ignored, the parser should fail.
- struct TestCase {
+ // Tests the handling of unknown enum values when encoded as string labels.
+ // The expected behavior depends on whether unknown fields are ignored:
+ // * when ignored, the parser should ignore the unknown enum string value.
+ // * when not ignored, the parser should fail.
+ struct TestCase {
// Used in the test name.
- string enum_location;
+ std::string enum_location;
// JSON input which will contain the unknown field.
- string input_json;
- };
+ std::string input_json;
+ };
const std::vector<TestCase> test_cases = {
{"InOptionalField", R"json({
"optional_nested_enum": "UNKNOWN_ENUM_VALUE"
@@ -2393,17 +2402,17 @@
"mapStringNestedMessage": {
"hello": {"a": 1234},
"world": {"a": 5678}
- }
+ }
})",
R"(
map_string_nested_message: {
key: "hello"
value: {a: 1234}
- }
+ }
map_string_nested_message: {
key: "world"
value: {a: 5678}
- }
+ }
)");
// Since Map keys are represented as JSON strings, escaping should be allowed.
RunValidJsonTest("Int32MapEscapedKey", REQUIRED,
@@ -2736,7 +2745,7 @@
"repeatedTimestamp": [
"0001-01-01T00:00:00Z",
"9999-12-31T23:59:59.999999999Z"
- ]
+ ]
})",
"repeated_timestamp: {seconds: -62135596800}"
"repeated_timestamp: {seconds: 253402300799 nanos: 999999999}");
@@ -2835,44 +2844,44 @@
"listValue": [1234, "5678"],
"objectValue": {
"value": 0
- }
- }
+ }
+ }
})",
R"(
optional_struct: {
fields: {
key: "nullValue"
value: {null_value: NULL_VALUE}
- }
+ }
fields: {
key: "intValue"
value: {number_value: 1234}
- }
+ }
fields: {
key: "boolValue"
value: {bool_value: true}
- }
+ }
fields: {
key: "doubleValue"
value: {number_value: 1234.5678}
- }
+ }
fields: {
key: "stringValue"
value: {string_value: "Hello world!"}
- }
+ }
fields: {
key: "listValue"
value: {
list_value: {
values: {
number_value: 1234
- }
+ }
values: {
string_value: "5678"
- }
- }
- }
}
+ }
+ }
+ }
fields: {
key: "objectValue"
value: {
@@ -2881,18 +2890,18 @@
key: "value"
value: {
number_value: 0
- }
- }
- }
}
}
}
+ }
+ }
+ }
)");
RunValidJsonTest("StructWithEmptyListValue", REQUIRED,
R"({
"optionalStruct": {
"listValue": []
- }
+ }
})",
R"(
optional_struct: {
@@ -2900,10 +2909,10 @@
key: "listValue"
value: {
list_value: {
- }
- }
- }
}
+ }
+ }
+ }
)");
}
@@ -2927,12 +2936,12 @@
list_value: {
values: {
number_value: 0
- }
+ }
values: {
string_value: "hello"
- }
- }
- }
+ }
+ }
+ }
)");
RunValidJsonTest("ValueAcceptObject", REQUIRED,
R"({"optionalValue": {"value": 1}})",
@@ -2943,10 +2952,10 @@
key: "value"
value: {
number_value: 1
- }
- }
- }
}
+ }
+ }
+ }
)");
RunValidJsonTest("RepeatedValue", REQUIRED,
R"({
@@ -2954,14 +2963,14 @@
})",
R"(
repeated_value: [
- {
+ {
list_value: {
values: [
{ string_value: "a"}
- ]
- }
- }
]
+ }
+ }
+ ]
)");
RunValidJsonTest("RepeatedListValue", REQUIRED,
R"({
@@ -2969,12 +2978,12 @@
})",
R"(
repeated_list_value: [
- {
+ {
values: [
{ string_value: "a"}
- ]
- }
- ]
+ ]
+ }
+ ]
)");
RunValidJsonTestWithValidator(
"NullValueInOtherOneofOldFormat", RECOMMENDED,
@@ -3004,14 +3013,14 @@
"optionalAny": {
"@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3",
"optionalInt32": 12345
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
+ [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
optional_int32: 12345
- }
- }
+ }
+ }
)");
RunValidJsonTest("AnyNested", REQUIRED,
R"({
@@ -3020,17 +3029,17 @@
"value": {
"@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3",
"optionalInt32": 12345
- }
- }
+ }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Any] {
- [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
+ [type.googleapis.com/google.protobuf.Any] {
+ [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
optional_int32: 12345
- }
- }
- }
+ }
+ }
+ }
)");
// The special "@type" tag is not required to appear first.
RunValidJsonTest("AnyUnorderedTypeTag", REQUIRED,
@@ -3038,14 +3047,14 @@
"optionalAny": {
"optionalInt32": 12345,
"@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3"
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
+ [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
optional_int32: 12345
- }
- }
+ }
+ }
)");
// Well-known types in Any.
RunValidJsonTest("AnyWithInt32ValueWrapper", REQUIRED,
@@ -3053,58 +3062,58 @@
"optionalAny": {
"@type": "type.googleapis.com/google.protobuf.Int32Value",
"value": 12345
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Int32Value] {
+ [type.googleapis.com/google.protobuf.Int32Value] {
value: 12345
- }
- }
+ }
+ }
)");
RunValidJsonTest("AnyWithDuration", REQUIRED,
R"({
"optionalAny": {
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.5s"
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Duration] {
+ [type.googleapis.com/google.protobuf.Duration] {
seconds: 1
nanos: 500000000
- }
- }
+ }
+ }
)");
RunValidJsonTest("AnyWithTimestamp", REQUIRED,
R"({
"optionalAny": {
"@type": "type.googleapis.com/google.protobuf.Timestamp",
"value": "1970-01-01T00:00:00Z"
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Timestamp] {
+ [type.googleapis.com/google.protobuf.Timestamp] {
seconds: 0
nanos: 0
- }
- }
+ }
+ }
)");
RunValidJsonTest("AnyWithFieldMask", REQUIRED,
R"({
"optionalAny": {
"@type": "type.googleapis.com/google.protobuf.FieldMask",
"value": "foo,barBaz"
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.FieldMask] {
+ [type.googleapis.com/google.protobuf.FieldMask] {
paths: ["foo", "bar_baz"]
- }
- }
+ }
+ }
)");
RunValidJsonTest("AnyWithStruct", REQUIRED,
R"({
@@ -3112,20 +3121,20 @@
"@type": "type.googleapis.com/google.protobuf.Struct",
"value": {
"foo": 1
- }
- }
+ }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Struct] {
+ [type.googleapis.com/google.protobuf.Struct] {
fields: {
key: "foo"
value: {
number_value: 1
- }
- }
- }
}
+ }
+ }
+ }
)");
RunValidJsonTest("AnyWithValueForJsonObject", REQUIRED,
R"({
@@ -3133,36 +3142,36 @@
"@type": "type.googleapis.com/google.protobuf.Value",
"value": {
"foo": 1
- }
- }
+ }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Value] {
+ [type.googleapis.com/google.protobuf.Value] {
struct_value: {
fields: {
key: "foo"
value: {
number_value: 1
- }
- }
- }
}
}
+ }
+ }
+ }
)");
RunValidJsonTest("AnyWithValueForInteger", REQUIRED,
R"({
"optionalAny": {
"@type": "type.googleapis.com/google.protobuf.Value",
"value": 1
- }
+ }
})",
R"(
optional_any: {
- [type.googleapis.com/google.protobuf.Value] {
+ [type.googleapis.com/google.protobuf.Value] {
number_value: 1
- }
- }
+ }
+ }
)");
}
diff --git a/conformance/binary_json_conformance_suite.h b/conformance/binary_json_conformance_suite.h
index 452e672..f6a8708 100644
--- a/conformance/binary_json_conformance_suite.h
+++ b/conformance/binary_json_conformance_suite.h
@@ -8,6 +8,7 @@
#ifndef CONFORMANCE_BINARY_JSON_CONFORMANCE_SUITE_H
#define CONFORMANCE_BINARY_JSON_CONFORMANCE_SUITE_H
+#include <functional>
#include <memory>
#include <string>
#include <utility>
diff --git a/conformance/conformance_test.cc b/conformance/conformance_test.cc
index 88cfdc2..fc80ec6 100644
--- a/conformance/conformance_test.cc
+++ b/conformance/conformance_test.cc
@@ -9,12 +9,15 @@
#include <stdarg.h>
+#include <cstddef>
+#include <cstdint>
#include <fstream>
+#include <memory>
#include <string>
#include "google/protobuf/util/field_comparator.h"
-#include "google/protobuf/util/json_util.h"
#include "google/protobuf/util/message_differencer.h"
+#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
@@ -28,15 +31,14 @@
using conformance::ConformanceRequest;
using conformance::ConformanceResponse;
using conformance::WireFormat;
-using google::protobuf::TextFormat;
using google::protobuf::util::DefaultFieldComparator;
using google::protobuf::util::MessageDifferencer;
using std::string;
namespace {
-static string ToOctString(const string& binary_string) {
- string oct_string;
+static std::string ToOctString(const std::string& binary_string) {
+ std::string oct_string;
for (size_t i = 0; i < binary_string.size(); i++) {
uint8_t c = binary_string.at(i);
uint8_t high = c / 64;
@@ -96,7 +98,7 @@
ConformanceLevel level, conformance::WireFormat input_format,
conformance::WireFormat output_format,
conformance::TestCategory test_category, const Message& prototype_message,
- const string& test_name, const string& input)
+ const std::string& test_name, const std::string& input)
: level_(level),
input_format_(input_format),
output_format_(output_format),
@@ -139,8 +141,9 @@
return std::unique_ptr<Message>(prototype_message_for_compare_->New());
}
-string ConformanceTestSuite::ConformanceRequestSetting::GetTestName() const {
- string rname;
+std::string ConformanceTestSuite::ConformanceRequestSetting::GetTestName()
+ const {
+ std::string rname;
switch (FileDescriptorLegacy(prototype_message_.GetDescriptor()->file())
.syntax()) {
case FileDescriptorLegacy::Syntax::SYNTAX_PROTO3:
@@ -158,7 +161,7 @@
OutputFormatString(output_format_));
}
-string
+std::string
ConformanceTestSuite::ConformanceRequestSetting::ConformanceLevelToString(
ConformanceLevel level) const {
switch (level) {
@@ -171,7 +174,7 @@
return "";
}
-string ConformanceTestSuite::ConformanceRequestSetting::InputFormatString(
+std::string ConformanceTestSuite::ConformanceRequestSetting::InputFormatString(
conformance::WireFormat format) const {
switch (format) {
case conformance::PROTOBUF:
@@ -186,7 +189,7 @@
return "";
}
-string ConformanceTestSuite::ConformanceRequestSetting::OutputFormatString(
+std::string ConformanceTestSuite::ConformanceRequestSetting::OutputFormatString(
conformance::WireFormat format) const {
switch (format) {
case conformance::PROTOBUF:
@@ -208,7 +211,7 @@
}
}
-const ConformanceRequest ConformanceTestSuite::TruncateRequest(
+ConformanceRequest ConformanceTestSuite::TruncateRequest(
const ConformanceRequest& request) {
ConformanceRequest debug_request(request);
switch (debug_request.payload_case()) {
@@ -231,7 +234,7 @@
return debug_request;
}
-const ConformanceResponse ConformanceTestSuite::TruncateResponse(
+ConformanceResponse ConformanceTestSuite::TruncateResponse(
const ConformanceResponse& response) {
ConformanceResponse debug_response(response);
switch (debug_response.result_case()) {
@@ -254,7 +257,7 @@
return debug_response;
}
-void ConformanceTestSuite::ReportSuccess(const string& test_name) {
+void ConformanceTestSuite::ReportSuccess(const std::string& test_name) {
if (expected_to_fail_.erase(test_name) != 0) {
absl::StrAppendFormat(
&output_,
@@ -266,7 +269,7 @@
successes_++;
}
-void ConformanceTestSuite::ReportFailure(const string& test_name,
+void ConformanceTestSuite::ReportFailure(const std::string& test_name,
ConformanceLevel level,
const ConformanceRequest& request,
const ConformanceResponse& response,
@@ -286,7 +289,7 @@
TruncateResponse(response).ShortDebugString());
}
-void ConformanceTestSuite::ReportSkip(const string& test_name,
+void ConformanceTestSuite::ReportSkip(const std::string& test_name,
const ConformanceRequest& request,
const ConformanceResponse& response) {
if (verbose_) {
@@ -299,19 +302,20 @@
void ConformanceTestSuite::RunValidInputTest(
const ConformanceRequestSetting& setting,
- const string& equivalent_text_format) {
+ const std::string& equivalent_text_format) {
std::unique_ptr<Message> reference_message(setting.NewTestMessage());
ABSL_CHECK(TextFormat::ParseFromString(equivalent_text_format,
reference_message.get()))
<< "Failed to parse data for test case: " << setting.GetTestName()
<< ", data: " << equivalent_text_format;
- const string equivalent_wire_format = reference_message->SerializeAsString();
+ const std::string equivalent_wire_format =
+ reference_message->SerializeAsString();
RunValidBinaryInputTest(setting, equivalent_wire_format);
}
void ConformanceTestSuite::RunValidBinaryInputTest(
const ConformanceRequestSetting& setting,
- const string& equivalent_wire_format, bool require_same_wire_format) {
+ const std::string& equivalent_wire_format, bool require_same_wire_format) {
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
RunTest(setting.GetTestName(), request, &response);
@@ -321,11 +325,12 @@
void ConformanceTestSuite::VerifyResponse(
const ConformanceRequestSetting& setting,
- const string& equivalent_wire_format, const ConformanceResponse& response,
- bool need_report_success, bool require_same_wire_format) {
+ const std::string& equivalent_wire_format,
+ const ConformanceResponse& response, bool need_report_success,
+ bool require_same_wire_format) {
std::unique_ptr<Message> test_message(setting.NewTestMessage());
const ConformanceRequest& request = setting.GetRequest();
- const string& test_name = setting.GetTestName();
+ const std::string& test_name = setting.GetTestName();
ConformanceLevel level = setting.GetLevel();
std::unique_ptr<Message> reference_message = setting.NewTestMessage();
@@ -358,7 +363,7 @@
DefaultFieldComparator field_comparator;
field_comparator.set_treat_nan_as_equal(true);
differencer.set_field_comparator(&field_comparator);
- string differences;
+ std::string differences;
differencer.ReportDifferencesToString(&differences);
bool check = false;
@@ -366,7 +371,7 @@
if (require_same_wire_format) {
ABSL_DCHECK_EQ(response.result_case(),
ConformanceResponse::kProtobufPayload);
- const string& protobuf_payload = response.protobuf_payload();
+ const std::string& protobuf_payload = response.protobuf_payload();
check = equivalent_wire_format == protobuf_payload;
differences = absl::StrCat("Expect: ", ToOctString(equivalent_wire_format),
", but got: ", ToOctString(protobuf_payload));
@@ -386,15 +391,15 @@
}
}
-void ConformanceTestSuite::RunTest(const string& test_name,
+void ConformanceTestSuite::RunTest(const std::string& test_name,
const ConformanceRequest& request,
ConformanceResponse* response) {
if (test_names_.insert(test_name).second == false) {
ABSL_LOG(FATAL) << "Duplicated test name: " << test_name;
}
- string serialized_request;
- string serialized_response;
+ std::string serialized_request;
+ std::string serialized_response;
request.SerializeToString(&serialized_request);
runner_->RunTest(test_name, serialized_request, &serialized_response);
@@ -412,7 +417,7 @@
}
}
-string ConformanceTestSuite::WireFormatToString(WireFormat wire_format) {
+std::string ConformanceTestSuite::WireFormatToString(WireFormat wire_format) {
switch (wire_format) {
case conformance::PROTOBUF:
return "PROTOBUF";
@@ -435,7 +440,8 @@
}
bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
- std::string* output, const string& filename,
+ std::string* output,
+ const std::string& filename,
conformance::FailureSet* failure_list) {
runner_ = runner;
successes_ = 0;
@@ -449,7 +455,7 @@
failure_list_filename_ = filename;
expected_to_fail_.clear();
- for (const string& failure : failure_list->failure()) {
+ for (const std::string& failure : failure_list->failure()) {
AddExpectedFailedTest(failure);
}
RunSuiteImpl();
diff --git a/conformance/conformance_test.h b/conformance/conformance_test.h
index 0e3fb70..bdc7a69 100644
--- a/conformance/conformance_test.h
+++ b/conformance/conformance_test.h
@@ -14,13 +14,15 @@
#ifndef CONFORMANCE_CONFORMANCE_TEST_H
#define CONFORMANCE_CONFORMANCE_TEST_H
-#include <functional>
+#include <cstddef>
+#include <memory>
#include <string>
#include <vector>
#include "google/protobuf/util/type_resolver.h"
#include "absl/container/btree_set.h"
#include "absl/container/flat_hash_set.h"
+#include "absl/strings/string_view.h"
#include "conformance/conformance.pb.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/wire_format_lite.h"
@@ -204,7 +206,7 @@
return request_;
}
- const ConformanceLevel GetLevel() const { return level_; }
+ ConformanceLevel GetLevel() const { return level_; }
std::string ConformanceLevelToString(ConformanceLevel level) const;
@@ -245,9 +247,9 @@
bool need_report_success, bool require_same_wire_format);
void TruncateDebugPayload(std::string* payload);
- const conformance::ConformanceRequest TruncateRequest(
+ conformance::ConformanceRequest TruncateRequest(
const conformance::ConformanceRequest& request);
- const conformance::ConformanceResponse TruncateResponse(
+ conformance::ConformanceResponse TruncateResponse(
const conformance::ConformanceResponse& response);
void ReportSuccess(const std::string& test_name);
diff --git a/conformance/text_format_conformance_suite.cc b/conformance/text_format_conformance_suite.cc
index 25740ee..fb0ca1f 100644
--- a/conformance/text_format_conformance_suite.cc
+++ b/conformance/text_format_conformance_suite.cc
@@ -7,7 +7,10 @@
#include "text_format_conformance_suite.h"
-#include "google/protobuf/any.pb.h"
+#include <cstddef>
+#include <string>
+#include <vector>
+
#include "absl/log/absl_log.h"
#include "absl/strings/str_cat.h"
#include "conformance_test.h"
@@ -20,12 +23,9 @@
using conformance::ConformanceRequest;
using conformance::ConformanceResponse;
using conformance::WireFormat;
-using google::protobuf::Message;
-using google::protobuf::TextFormat;
using proto2_messages::TestAllTypesProto2;
using proto2_messages::UnknownToTestAllTypes;
using protobuf_test_messages::proto3::TestAllTypesProto3;
-using std::string;
namespace google {
namespace protobuf {
@@ -61,7 +61,7 @@
const ConformanceRequestSetting& setting, Message* test_message) {
const ConformanceRequest& request = setting.GetRequest();
WireFormat requested_output = request.requested_output_format();
- const string& test_name = setting.GetTestName();
+ const std::string& test_name = setting.GetTestName();
ConformanceLevel level = setting.GetLevel();
switch (response.result_case()) {
@@ -111,9 +111,9 @@
return true;
}
-void TextFormatConformanceTestSuite::ExpectParseFailure(const string& test_name,
- ConformanceLevel level,
- const string& input) {
+void TextFormatConformanceTestSuite::ExpectParseFailure(
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input) {
TestAllTypesProto3 prototype;
// We don't expect output, but if the program erroneously accepts the protobuf
// we let it send its response as this. We must not leave it unspecified.
@@ -122,7 +122,7 @@
conformance::TEXT_FORMAT_TEST, prototype, test_name, input);
const ConformanceRequest& request = setting.GetRequest();
ConformanceResponse response;
- string effective_test_name =
+ std::string effective_test_name =
absl::StrCat(setting.ConformanceLevelToString(level),
".Proto3.TextFormatInput.", test_name);
@@ -138,36 +138,38 @@
}
void TextFormatConformanceTestSuite::RunValidTextFormatTest(
- const string& test_name, ConformanceLevel level, const string& input_text) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text) {
TestAllTypesProto3 prototype;
RunValidTextFormatTestWithMessage(test_name, level, input_text, prototype);
}
void TextFormatConformanceTestSuite::RunValidTextFormatTestProto2(
- const string& test_name, ConformanceLevel level, const string& input_text) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text) {
TestAllTypesProto2 prototype;
RunValidTextFormatTestWithMessage(test_name, level, input_text, prototype);
}
void TextFormatConformanceTestSuite::RunValidTextFormatTestWithExpected(
- const string& test_name, ConformanceLevel level, const string& input_text,
- const string& expected_text) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text, const std::string& expected_text) {
TestAllTypesProto3 prototype;
RunValidTextFormatTestWithMessage(test_name, level, input_text, expected_text,
prototype);
}
void TextFormatConformanceTestSuite::RunValidTextFormatTestProto2WithExpected(
- const string& test_name, ConformanceLevel level, const string& input_text,
- const string& expected_text) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text, const std::string& expected_text) {
TestAllTypesProto2 prototype;
RunValidTextFormatTestWithMessage(test_name, level, input_text, expected_text,
prototype);
}
void TextFormatConformanceTestSuite::RunValidTextFormatTestWithMessage(
- const string& test_name, ConformanceLevel level, const string& input_text,
- const Message& prototype) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text, const Message& prototype) {
ConformanceRequestSetting setting1(
level, conformance::TEXT_FORMAT, conformance::PROTOBUF,
conformance::TEXT_FORMAT_TEST, prototype, test_name, input_text);
@@ -179,8 +181,9 @@
}
void TextFormatConformanceTestSuite::RunValidTextFormatTestWithMessage(
- const string& test_name, ConformanceLevel level, const string& input_text,
- const string& expected_text, const Message& prototype) {
+ const std::string& test_name, ConformanceLevel level,
+ const std::string& input_text, const std::string& expected_text,
+ const Message& prototype) {
ConformanceRequestSetting setting1(
level, conformance::TEXT_FORMAT, conformance::PROTOBUF,
conformance::TEXT_FORMAT_TEST, prototype, test_name, input_text);
@@ -192,8 +195,8 @@
}
void TextFormatConformanceTestSuite::RunValidUnknownTextFormatTest(
- const string& test_name, const Message& message) {
- string serialized_input;
+ const std::string& test_name, const Message& message) {
+ std::string serialized_input;
message.SerializeToString(&serialized_input);
TestAllTypesProto3 prototype;
ConformanceRequestSetting setting1(
@@ -509,16 +512,16 @@
// This is currently considered valid input by some languages but not others
void TextFormatConformanceTestSuite::
TestTextFormatPerformanceMergeMessageWithRepeatedField(
- const string& test_type_name, const string& message_field) {
- string recursive_message =
+ const std::string& test_type_name, const std::string& message_field) {
+ std::string recursive_message =
absl::StrCat("recursive_message { ", message_field, " }");
- string input;
+ std::string input;
for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
absl::StrAppend(&input, recursive_message);
}
- string expected = "recursive_message { ";
+ std::string expected = "recursive_message { ";
for (size_t i = 0; i < kPerformanceRepeatCount; i++) {
absl::StrAppend(&expected, message_field, " ");
}
diff --git a/conformance/text_format_conformance_suite.h b/conformance/text_format_conformance_suite.h
index 045fdc2..1917ee5 100644
--- a/conformance/text_format_conformance_suite.h
+++ b/conformance/text_format_conformance_suite.h
@@ -8,7 +8,10 @@
#ifndef TEXT_FORMAT_CONFORMANCE_SUITE_H_
#define TEXT_FORMAT_CONFORMANCE_SUITE_H_
+#include <string>
+
#include "conformance_test.h"
+#include "google/protobuf/message.h"
namespace google {
namespace protobuf {