|
@@ -795,9 +795,73 @@ TEST(WireFormatTest, CompatibleTypes) {
|
|
|
ASSERT_EQ(static_cast<uint32>(data), msg5.data());
|
|
|
}
|
|
|
|
|
|
-class Proto3PrimitiveRepeatedWireFormatTest
|
|
|
- : public ::testing::TestWithParam<bool> {
|
|
|
+class Proto3PrimitiveRepeatedWireFormatTest : public ::testing::Test {
|
|
|
protected:
|
|
|
+ Proto3PrimitiveRepeatedWireFormatTest()
|
|
|
+ : packedTestAllTypes_(
|
|
|
+ "\xFA\x01\x01\x01"
|
|
|
+ "\x82\x02\x01\x01"
|
|
|
+ "\x8A\x02\x01\x01"
|
|
|
+ "\x92\x02\x01\x01"
|
|
|
+ "\x9A\x02\x01\x02"
|
|
|
+ "\xA2\x02\x01\x02"
|
|
|
+ "\xAA\x02\x04\x01\x00\x00\x00"
|
|
|
+ "\xB2\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\xBA\x02\x04\x01\x00\x00\x00"
|
|
|
+ "\xC2\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\xCA\x02\x04\x00\x00\x80\x3f"
|
|
|
+ "\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
+ "\xDA\x02\x01\x01"
|
|
|
+ "\x9A\x03\x01\x01",
|
|
|
+ 86),
|
|
|
+ packedTestUnpackedTypes_(
|
|
|
+ "\x0A\x01\x01"
|
|
|
+ "\x12\x01\x01"
|
|
|
+ "\x1A\x01\x01"
|
|
|
+ "\x22\x01\x01"
|
|
|
+ "\x2A\x01\x02"
|
|
|
+ "\x32\x01\x02"
|
|
|
+ "\x3A\x04\x01\x00\x00\x00"
|
|
|
+ "\x42\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\x4A\x04\x01\x00\x00\x00"
|
|
|
+ "\x52\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\x5A\x04\x00\x00\x80\x3f"
|
|
|
+ "\x62\x08\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
+ "\x6A\x01\x01"
|
|
|
+ "\x72\x01\x01",
|
|
|
+ 72),
|
|
|
+ unpackedTestAllTypes_(
|
|
|
+ "\xF8\x01\x01"
|
|
|
+ "\x80\x02\x01"
|
|
|
+ "\x88\x02\x01"
|
|
|
+ "\x90\x02\x01"
|
|
|
+ "\x98\x02\x02"
|
|
|
+ "\xA0\x02\x02"
|
|
|
+ "\xAD\x02\x01\x00\x00\x00"
|
|
|
+ "\xB1\x02\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\xBD\x02\x01\x00\x00\x00"
|
|
|
+ "\xC1\x02\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\xCD\x02\x00\x00\x80\x3f"
|
|
|
+ "\xD1\x02\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
+ "\xD8\x02\x01"
|
|
|
+ "\x98\x03\x01",
|
|
|
+ 72),
|
|
|
+ unpackedTestUnpackedTypes_(
|
|
|
+ "\x08\x01"
|
|
|
+ "\x10\x01"
|
|
|
+ "\x18\x01"
|
|
|
+ "\x20\x01"
|
|
|
+ "\x28\x02"
|
|
|
+ "\x30\x02"
|
|
|
+ "\x3D\x01\x00\x00\x00"
|
|
|
+ "\x41\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\x4D\x01\x00\x00\x00"
|
|
|
+ "\x51\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
+ "\x5D\x00\x00\x80\x3f"
|
|
|
+ "\x61\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
+ "\x68\x01"
|
|
|
+ "\x70\x01",
|
|
|
+ 58) {}
|
|
|
template <class Proto>
|
|
|
void SetProto3PrimitiveRepeatedFields(Proto* message) {
|
|
|
message->add_repeated_int32(1);
|
|
@@ -837,8 +901,7 @@ class Proto3PrimitiveRepeatedWireFormatTest
|
|
|
}
|
|
|
|
|
|
template <class Proto>
|
|
|
- void TestProto3PrimitiveRepeatedFields(Proto* message,
|
|
|
- const string& expected) {
|
|
|
+ void TestSerialization(Proto* message, const string& expected) {
|
|
|
SetProto3PrimitiveRepeatedFields(message);
|
|
|
|
|
|
int size = message->ByteSize();
|
|
@@ -851,13 +914,8 @@ class Proto3PrimitiveRepeatedWireFormatTest
|
|
|
message->SerializeWithCachedSizes(&output);
|
|
|
ASSERT_FALSE(output.HadError());
|
|
|
}
|
|
|
-
|
|
|
EXPECT_TRUE(expected == generated_data);
|
|
|
|
|
|
- message->Clear();
|
|
|
- message->ParseFromString(generated_data);
|
|
|
- ExpectProto3PrimitiveRepeatedFieldsSet(*message);
|
|
|
-
|
|
|
// Serialize using the dynamic code.
|
|
|
string dynamic_data;
|
|
|
{
|
|
@@ -866,64 +924,38 @@ class Proto3PrimitiveRepeatedWireFormatTest
|
|
|
WireFormat::SerializeWithCachedSizes(*message, size, &output);
|
|
|
ASSERT_FALSE(output.HadError());
|
|
|
}
|
|
|
-
|
|
|
EXPECT_TRUE(expected == dynamic_data);
|
|
|
+ }
|
|
|
+
|
|
|
+ template <class Proto>
|
|
|
+ void TestParsing(Proto* message, const string& compatible_data) {
|
|
|
+ message->Clear();
|
|
|
+ message->ParseFromString(compatible_data);
|
|
|
+ ExpectProto3PrimitiveRepeatedFieldsSet(*message);
|
|
|
|
|
|
message->Clear();
|
|
|
io::CodedInputStream input(
|
|
|
- reinterpret_cast<const uint8*>(dynamic_data.data()),
|
|
|
- dynamic_data.size());
|
|
|
+ reinterpret_cast<const uint8*>(compatible_data.data()),
|
|
|
+ compatible_data.size());
|
|
|
WireFormat::ParseAndMergePartial(&input, message);
|
|
|
ExpectProto3PrimitiveRepeatedFieldsSet(*message);
|
|
|
}
|
|
|
+
|
|
|
+ const string packedTestAllTypes_;
|
|
|
+ const string packedTestUnpackedTypes_;
|
|
|
+ const string unpackedTestAllTypes_;
|
|
|
+ const string unpackedTestUnpackedTypes_;
|
|
|
};
|
|
|
-INSTANTIATE_TEST_CASE_P(SetPacked,
|
|
|
- Proto3PrimitiveRepeatedWireFormatTest,
|
|
|
- ::testing::Values(false, true));
|
|
|
|
|
|
-TEST_P(Proto3PrimitiveRepeatedWireFormatTest, Proto3PrimitiveRepeated) {
|
|
|
+TEST_F(Proto3PrimitiveRepeatedWireFormatTest, Proto3PrimitiveRepeated) {
|
|
|
proto3_arena_unittest::TestAllTypes packed_message;
|
|
|
proto3_arena_unittest::TestUnpackedTypes unpacked_message;
|
|
|
-
|
|
|
- const string packedExpected(
|
|
|
- "\xFA\x01\x01\x01"
|
|
|
- "\x82\x02\x01\x01"
|
|
|
- "\x8A\x02\x01\x01"
|
|
|
- "\x92\x02\x01\x01"
|
|
|
- "\x9A\x02\x01\x02"
|
|
|
- "\xA2\x02\x01\x02"
|
|
|
- "\xAA\x02\x04\x01\x00\x00\x00"
|
|
|
- "\xB2\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
- "\xBA\x02\x04\x01\x00\x00\x00"
|
|
|
- "\xC2\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
- "\xCA\x02\x04\x00\x00\x80\x3f"
|
|
|
- "\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
- "\xDA\x02\x01\x01"
|
|
|
- "\x9A\x03\x01\x01",
|
|
|
- 86);
|
|
|
-
|
|
|
- const string unpackedExpected(
|
|
|
- "\x08\x01"
|
|
|
- "\x10\x01"
|
|
|
- "\x18\x01"
|
|
|
- "\x20\x01"
|
|
|
- "\x28\x02"
|
|
|
- "\x30\x02"
|
|
|
- "\x3D\x01\x00\x00\x00"
|
|
|
- "\x41\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
- "\x4D\x01\x00\x00\x00"
|
|
|
- "\x51\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
|
- "\x5D\x00\x00\x80\x3f"
|
|
|
- "\x61\x00\x00\x00\x00\x00\x00\xf0\x3f"
|
|
|
- "\x68\x01"
|
|
|
- "\x70\x01",
|
|
|
- 58);
|
|
|
-
|
|
|
- if (GetParam()) {
|
|
|
- TestProto3PrimitiveRepeatedFields(&packed_message, packedExpected);
|
|
|
- } else {
|
|
|
- TestProto3PrimitiveRepeatedFields(&unpacked_message, unpackedExpected);
|
|
|
- }
|
|
|
+ TestSerialization(&packed_message, packedTestAllTypes_);
|
|
|
+ TestParsing(&packed_message, packedTestAllTypes_);
|
|
|
+ TestParsing(&packed_message, unpackedTestAllTypes_);
|
|
|
+ TestSerialization(&unpacked_message, unpackedTestUnpackedTypes_);
|
|
|
+ TestParsing(&unpacked_message, packedTestUnpackedTypes_);
|
|
|
+ TestParsing(&unpacked_message, unpackedTestUnpackedTypes_);
|
|
|
}
|
|
|
|
|
|
class WireFormatInvalidInputTest : public testing::Test {
|