Source release 19.6.0

GitOrigin-RevId: 13a33e34413c19da1bfe76abcc66be519c9ac9d1
This commit is contained in:
Googler
2025-05-30 14:47:25 -07:00
committed by mattfedd
parent f7ec4fdeff
commit 6d36a0c93d
59 changed files with 3327 additions and 1491 deletions

View File

@@ -152,6 +152,31 @@ TEST(SimpleValueTest, NestedSemanticTagEncoding) {
tripleTagged.toString());
}
TEST(SimpleValueTest, ViewByteStringEncodings) {
EXPECT_EQ("\x40", ViewBstr("").toString());
EXPECT_EQ("\x41\x61", ViewBstr("a").toString());
EXPECT_EQ("\x41\x41", ViewBstr("A").toString());
EXPECT_EQ("\x44\x49\x45\x54\x46", ViewBstr("IETF").toString());
EXPECT_EQ("\x42\x22\x5c", ViewBstr("\"\\").toString());
EXPECT_EQ("\x42\xc3\xbc", ViewBstr("\xc3\xbc").toString());
EXPECT_EQ("\x43\xe6\xb0\xb4", ViewBstr("\xe6\xb0\xb4").toString());
EXPECT_EQ("\x44\xf0\x90\x85\x91", ViewBstr("\xf0\x90\x85\x91").toString());
EXPECT_EQ("\x44\x01\x02\x03\x04", ViewBstr("\x01\x02\x03\x04").toString());
EXPECT_EQ("\x44\x40\x40\x40\x40", ViewBstr("@@@@").toString());
}
TEST(SimpleValueTest, ViewTextStringEncodings) {
EXPECT_EQ("\x60"s, ViewTstr("").toString());
EXPECT_EQ("\x61\x61"s, ViewTstr("a").toString());
EXPECT_EQ("\x61\x41"s, ViewTstr("A").toString());
EXPECT_EQ("\x64\x49\x45\x54\x46"s, ViewTstr("IETF").toString());
EXPECT_EQ("\x62\x22\x5c"s, ViewTstr("\"\\").toString());
EXPECT_EQ("\x62\xc3\xbc"s, ViewTstr("\xc3\xbc").toString());
EXPECT_EQ("\x63\xe6\xb0\xb4"s, ViewTstr("\xe6\xb0\xb4").toString());
EXPECT_EQ("\x64\xf0\x90\x85\x91"s, ViewTstr("\xf0\x90\x85\x91").toString());
EXPECT_EQ("\x64\x01\x02\x03\x04"s, ViewTstr("\x01\x02\x03\x04").toString());
}
TEST(IsIteratorPairOverTest, All) {
EXPECT_TRUE((
details::is_iterator_pair_over<pair<string::iterator, string::iterator>, char>::value));
@@ -230,6 +255,13 @@ TEST(MakeEntryTest, StdStrings) {
details::makeItem(std::move(s1))->toString()); // move string
}
TEST(MakeEntryTest, StdStringViews) {
string_view s1("hello");
const string_view s2("hello");
EXPECT_EQ("\x65\x68\x65\x6c\x6c\x6f"s, details::makeItem(s1)->toString());
EXPECT_EQ("\x65\x68\x65\x6c\x6c\x6f"s, details::makeItem(s2)->toString());
}
TEST(MakeEntryTest, CStrings) {
char s1[] = "hello";
const char s2[] = "hello";
@@ -496,6 +528,8 @@ TEST(EqualityTest, Uint) {
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("99"));
}
TEST(EqualityTest, Nint) {
@@ -509,6 +543,8 @@ TEST(EqualityTest, Nint) {
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("99"));
}
TEST(EqualityTest, Tstr) {
@@ -523,6 +559,8 @@ TEST(EqualityTest, Tstr) {
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("99"));
}
TEST(EqualityTest, Bstr) {
@@ -537,6 +575,8 @@ TEST(EqualityTest, Bstr) {
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("99"));
}
TEST(EqualityTest, Bool) {
@@ -551,6 +591,8 @@ TEST(EqualityTest, Bool) {
EXPECT_NE(val, Bool(true));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(EqualityTest, Array) {
@@ -567,6 +609,8 @@ TEST(EqualityTest, Array) {
EXPECT_NE(val, Array(98, 1));
EXPECT_NE(val, Array(99, 1, 2));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(EqualityTest, Map) {
@@ -582,6 +626,8 @@ TEST(EqualityTest, Map) {
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 2));
EXPECT_NE(val, Map(99, 1, 99, 2));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(EqualityTest, Null) {
@@ -597,6 +643,8 @@ TEST(EqualityTest, Null) {
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 2));
EXPECT_NE(val, Map(99, 1, 99, 2));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(EqualityTest, SemanticTag) {
@@ -627,6 +675,40 @@ TEST(EqualityTest, NestedSemanticTag) {
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 2));
EXPECT_NE(val, Null());
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(EqualityTest, ViewTstr) {
ViewTstr val("99");
EXPECT_EQ(val, ViewTstr("99"));
EXPECT_NE(val, Uint(99));
EXPECT_NE(val, Nint(-1));
EXPECT_NE(val, Nint(-4));
EXPECT_NE(val, Tstr("99"));
EXPECT_NE(val, Bstr("99"));
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("98"));
EXPECT_NE(val, ViewBstr("99"));
}
TEST(EqualityTest, ViewBstr) {
ViewBstr val("99");
EXPECT_EQ(val, ViewBstr("99"));
EXPECT_NE(val, Uint(99));
EXPECT_NE(val, Nint(-1));
EXPECT_NE(val, Nint(-4));
EXPECT_NE(val, Tstr("99"));
EXPECT_NE(val, Bstr("99"));
EXPECT_NE(val, Bool(false));
EXPECT_NE(val, Array(99, 1));
EXPECT_NE(val, Map(99, 1));
EXPECT_NE(val, ViewTstr("99"));
EXPECT_NE(val, ViewBstr("98"));
}
TEST(ConvertTest, Uint) {
@@ -641,6 +723,8 @@ TEST(ConvertTest, Uint) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(10, item->asInt()->value());
EXPECT_EQ(10, item->asUint()->value());
@@ -658,6 +742,8 @@ TEST(ConvertTest, Nint) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(-10, item->asInt()->value());
EXPECT_EQ(-10, item->asNint()->value());
@@ -675,6 +761,8 @@ TEST(ConvertTest, Tstr) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ("hello"s, item->asTstr()->value());
}
@@ -692,6 +780,8 @@ TEST(ConvertTest, Bstr) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(vec, item->asBstr()->value());
}
@@ -708,6 +798,8 @@ TEST(ConvertTest, Bool) {
EXPECT_NE(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(cppbor::BOOLEAN, item->asSimple()->simpleType());
EXPECT_NE(nullptr, item->asSimple()->asBool());
@@ -728,6 +820,8 @@ TEST(ConvertTest, Map) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_NE(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(0U, item->asMap()->size());
}
@@ -744,6 +838,8 @@ TEST(ConvertTest, Array) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_NE(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(0U, item->asArray()->size());
}
@@ -759,6 +855,8 @@ TEST(ConvertTest, SemanticTag) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
// Both asTstr() (the contained type) and asSemanticTag() return non-null.
EXPECT_NE(nullptr, item->asTstr());
@@ -785,6 +883,8 @@ TEST(ConvertTest, NestedSemanticTag) {
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
// Both asTstr() (the contained type) and asSemanticTag() return non-null.
EXPECT_NE(nullptr, item->asTstr());
@@ -814,12 +914,52 @@ TEST(ConvertTest, Null) {
EXPECT_NE(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ(NULL_T, item->asSimple()->simpleType());
EXPECT_EQ(nullptr, item->asSimple()->asBool());
EXPECT_NE(nullptr, item->asSimple()->asNull());
}
TEST(ConvertTest, ViewTstr) {
unique_ptr<Item> item = details::makeItem(ViewTstr("hello"));
EXPECT_EQ(TSTR, item->type());
EXPECT_EQ(nullptr, item->asInt());
EXPECT_EQ(nullptr, item->asUint());
EXPECT_EQ(nullptr, item->asNint());
EXPECT_EQ(nullptr, item->asTstr());
EXPECT_EQ(nullptr, item->asBstr());
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_NE(nullptr, item->asViewTstr());
EXPECT_EQ(nullptr, item->asViewBstr());
EXPECT_EQ("hello"sv, item->asViewTstr()->view());
}
TEST(ConvertTest, ViewBstr) {
array<uint8_t, 3> vec{0x23, 0x24, 0x22};
basic_string_view<uint8_t> sv(vec.data(), vec.size());
unique_ptr<Item> item = details::makeItem(ViewBstr(sv));
EXPECT_EQ(BSTR, item->type());
EXPECT_EQ(nullptr, item->asInt());
EXPECT_EQ(nullptr, item->asUint());
EXPECT_EQ(nullptr, item->asNint());
EXPECT_EQ(nullptr, item->asTstr());
EXPECT_EQ(nullptr, item->asBstr());
EXPECT_EQ(nullptr, item->asSimple());
EXPECT_EQ(nullptr, item->asMap());
EXPECT_EQ(nullptr, item->asArray());
EXPECT_EQ(nullptr, item->asViewTstr());
EXPECT_NE(nullptr, item->asViewBstr());
EXPECT_EQ(sv, item->asViewBstr()->view());
}
TEST(CloningTest, Uint) {
Uint item(10);
auto clone = item.clone();
@@ -928,6 +1068,26 @@ TEST(CloningTest, NestedSemanticTag) {
EXPECT_EQ(*clone->asSemanticTag(), copy);
}
TEST(CloningTest, ViewTstr) {
ViewTstr item("qwertyasdfgh");
auto clone = item.clone();
EXPECT_EQ(clone->type(), TSTR);
EXPECT_NE(clone->asViewTstr(), nullptr);
EXPECT_EQ(item, *clone->asViewTstr());
EXPECT_EQ(*clone->asViewTstr(), ViewTstr("qwertyasdfgh"));
}
TEST(CloningTest, ViewBstr) {
array<uint8_t, 5> vec{1, 2, 3, 255, 0};
basic_string_view<uint8_t> sv(vec.data(), vec.size());
ViewBstr item(sv);
auto clone = item.clone();
EXPECT_EQ(clone->type(), BSTR);
EXPECT_NE(clone->asViewBstr(), nullptr);
EXPECT_EQ(item, *clone->asViewBstr());
EXPECT_EQ(*clone->asViewBstr(), ViewBstr(sv));
}
TEST(PrettyPrintingTest, NestedSemanticTag) {
SemanticTag item(20, //
SemanticTag(30, //
@@ -1354,6 +1514,36 @@ TEST(StreamParseTest, Map) {
parse(encoded.data(), encoded.data() + encoded.size(), &mpc);
}
TEST(StreamParseTest, ViewTstr) {
MockParseClient mpc;
ViewTstr val("Hello");
auto encoded = val.encode();
uint8_t* encBegin = encoded.data();
uint8_t* encEnd = encoded.data() + encoded.size();
EXPECT_CALL(mpc, item(MatchesItem(val), encBegin, encBegin + 1, encEnd)).WillOnce(Return(&mpc));
EXPECT_CALL(mpc, itemEnd(_, _, _, _)).Times(0);
EXPECT_CALL(mpc, error(_, _)).Times(0);
parseWithViews(encoded.data(), encoded.data() + encoded.size(), &mpc);
}
TEST(StreamParseTest, ViewBstr) {
MockParseClient mpc;
ViewBstr val("Hello");
auto encoded = val.encode();
uint8_t* encBegin = encoded.data();
uint8_t* encEnd = encoded.data() + encoded.size();
EXPECT_CALL(mpc, item(MatchesItem(val), encBegin, encBegin + 1, encEnd)).WillOnce(Return(&mpc));
EXPECT_CALL(mpc, itemEnd(_, _, _, _)).Times(0);
EXPECT_CALL(mpc, error(_, _)).Times(0);
parseWithViews(encoded.data(), encoded.data() + encoded.size(), &mpc);
}
TEST(FullParserTest, Uint) {
Uint val(10);
@@ -1506,6 +1696,25 @@ TEST(FullParserTest, MapWithTruncatedEntry) {
EXPECT_EQ("Need 4 byte(s) for length field, have 3.", message);
}
TEST(FullParserTest, ViewTstr) {
ViewTstr val("Hello");
auto enc = val.encode();
auto [item, pos, message] = parseWithViews(enc.data(), enc.size());
EXPECT_THAT(item, MatchesItem(val));
}
TEST(FullParserTest, ViewBstr) {
const std::string strVal = "\x00\x01\x02"s;
const ViewBstr val(strVal);
EXPECT_EQ(val.toString(), "\x43\x00\x01\x02"s);
auto enc = val.encode();
auto [item, pos, message] = parseWithViews(enc.data(), enc.size());
EXPECT_THAT(item, MatchesItem(val));
EXPECT_EQ(hexDump(item->toString()), hexDump(val.toString()));
}
TEST(FullParserTest, ReservedAdditionalInformation) {
vector<uint8_t> reservedVal = {0x1D};