Use c++ template to reduce duped code.
Bug: 77342154
Test: atest libprotoutil_test
Change-Id: I6cf165c2214a8a627722a156b7498d0d8f5d1e18
diff --git a/libs/protoutil/tests/ProtoOutputStream_test.cpp b/libs/protoutil/tests/ProtoOutputStream_test.cpp
index e8e1557..5c25787 100644
--- a/libs/protoutil/tests/ProtoOutputStream_test.cpp
+++ b/libs/protoutil/tests/ProtoOutputStream_test.cpp
@@ -132,17 +132,31 @@
EXPECT_TRUE(proto.write(FIELD_TYPE_INT32 | ComplexProto::kIntsFieldNumber, 15));
EXPECT_EQ(proto.bytesWritten(), 4);
EXPECT_EQ(proto.size(), 4);
+ // Can't write to proto after compact
+ EXPECT_FALSE(proto.write(FIELD_TYPE_INT32 | ComplexProto::kIntsFieldNumber, 94));
+
+ ComplexProto beforeClear;
+ ASSERT_TRUE(beforeClear.ParseFromString(flushToString(&proto)));
+ EXPECT_EQ(beforeClear.ints_size(), 2);
+ EXPECT_EQ(beforeClear.ints(0), 32);
+ EXPECT_EQ(beforeClear.ints(1), 15);
+
proto.clear();
EXPECT_EQ(proto.bytesWritten(), 0);
- EXPECT_EQ(proto.size(), 0);
+ EXPECT_TRUE(proto.write(FIELD_TYPE_INT32 | ComplexProto::kIntsFieldNumber, 1076));
+
+ ComplexProto afterClear;
+ ASSERT_TRUE(afterClear.ParseFromString(flushToString(&proto)));
+ EXPECT_EQ(afterClear.ints_size(), 1);
+ EXPECT_EQ(afterClear.ints(0), 1076);
}
TEST(ProtoOutputStreamTest, AdvancedEncoding) {
ProtoOutputStream proto;
- proto.writeRawVarint(ComplexProto::kIntsFieldNumber << FIELD_ID_SHIFT);
+ proto.writeRawVarint((ComplexProto::kIntsFieldNumber << FIELD_ID_SHIFT) + WIRE_TYPE_VARINT);
proto.writeRawVarint(UINT64_C(-123809234));
proto.writeLengthDelimitedHeader(ComplexProto::kLogsFieldNumber, 8);
- proto.writeRawByte((ComplexProto::Log::kDataFieldNumber << FIELD_ID_SHIFT) + 2);
+ proto.writeRawByte((ComplexProto::Log::kDataFieldNumber << FIELD_ID_SHIFT) + WIRE_TYPE_LENGTH_DELIMITED);
proto.writeRawByte(6);
proto.writeRawByte('b');
proto.writeRawByte('a');
@@ -168,3 +182,11 @@
EXPECT_FALSE(log2.has_name());
EXPECT_FALSE(log2.has_data());
}
+
+TEST(ProtoOutputStreamTest, InvalidTypes) {
+ ProtoOutputStream proto;
+ EXPECT_FALSE(proto.write(FIELD_TYPE_UNKNOWN | PrimitiveProto::kValInt32FieldNumber, 790));
+ EXPECT_FALSE(proto.write(FIELD_TYPE_ENUM | PrimitiveProto::kValEnumFieldNumber, 234.34));
+ EXPECT_FALSE(proto.write(FIELD_TYPE_BOOL | PrimitiveProto::kValBoolFieldNumber, 18.73f));
+ EXPECT_EQ(proto.size(), 0);
+}
\ No newline at end of file