|  | @@ -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 {
 |