From 4268a60b05955d72b349bce8fff36b9ed390c6dc Mon Sep 17 00:00:00 2001 From: Shawn Willden Date: Fri, 27 May 2022 12:51:02 -0600 Subject: Make bool and null easier to use. (Cherry pick from aosp/2032527) Bug: 219076736 Test: cppbor_test_external Change-Id: I7d11b0853042b7e6701b5d8ff9bfead9e8436834 --- include/cppbor/cppbor.h | 12 +++++++----- tests/cppbor_test.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/include/cppbor/cppbor.h b/include/cppbor/cppbor.h index 8338441..f7a2af0 100644 --- a/include/cppbor/cppbor.h +++ b/include/cppbor/cppbor.h @@ -142,6 +142,11 @@ class Item { const Bstr* asBstr() const { return const_cast(this)->asBstr(); } virtual Simple* asSimple() { return nullptr; } const Simple* asSimple() const { return const_cast(this)->asSimple(); } + virtual Bool* asBool() { return nullptr; } + const Bool* asBool() const { return const_cast(this)->asBool(); } + virtual Null* asNull() { return nullptr; } + const Null* asNull() const { return const_cast(this)->asNull(); } + virtual Map* asMap() { return nullptr; } const Map* asMap() const { return const_cast(this)->asMap(); } virtual Array* asArray() { return nullptr; } @@ -859,9 +864,6 @@ class Simple : public Item { MajorType type() const override { return kMajorType; } Simple* asSimple() override { return this; } - - virtual const Bool* asBool() const { return nullptr; }; - virtual const Null* asNull() const { return nullptr; }; }; /** @@ -877,7 +879,7 @@ class Bool : public Simple { bool operator==(const Bool& other) const& { return mValue == other.mValue; } SimpleType simpleType() const override { return kSimpleType; } - const Bool* asBool() const override { return this; } + Bool* asBool() override { return this; } size_t encodedSize() const override { return 1; } @@ -907,7 +909,7 @@ class Null : public Simple { explicit Null() {} SimpleType simpleType() const override { return kSimpleType; } - const Null* asNull() const override { return this; } + Null* asNull() override { return this; } size_t encodedSize() const override { return 1; } diff --git a/tests/cppbor_test.cpp b/tests/cppbor_test.cpp index 68778dc..b9a2f35 100644 --- a/tests/cppbor_test.cpp +++ b/tests/cppbor_test.cpp @@ -721,6 +721,8 @@ TEST(ConvertTest, Uint) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -740,6 +742,8 @@ TEST(ConvertTest, Nint) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -759,6 +763,8 @@ TEST(ConvertTest, Tstr) { EXPECT_NE(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -778,6 +784,8 @@ TEST(ConvertTest, Bstr) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_NE(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -796,15 +804,20 @@ TEST(ConvertTest, Bool) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_NE(nullptr, item->asSimple()); + EXPECT_NE(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); 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->asBool()); EXPECT_NE(nullptr, item->asSimple()->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asSimple()->asNull()); + EXPECT_FALSE(item->asBool()->value()); EXPECT_FALSE(item->asSimple()->asBool()->value()); } @@ -818,6 +831,8 @@ TEST(ConvertTest, Map) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_NE(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -836,6 +851,8 @@ TEST(ConvertTest, Array) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_NE(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -853,6 +870,8 @@ TEST(ConvertTest, SemanticTag) { EXPECT_EQ(nullptr, item->asNint()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -881,6 +900,8 @@ TEST(ConvertTest, NestedSemanticTag) { EXPECT_EQ(nullptr, item->asNint()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -912,13 +933,17 @@ TEST(ConvertTest, Null) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_NE(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_NE(nullptr, item->asNull()); 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->asBool()); EXPECT_EQ(nullptr, item->asSimple()->asBool()); + EXPECT_NE(nullptr, item->asNull()); EXPECT_NE(nullptr, item->asSimple()->asNull()); } @@ -932,6 +957,8 @@ TEST(ConvertTest, ViewTstr) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_NE(nullptr, item->asViewTstr()); @@ -952,6 +979,8 @@ TEST(ConvertTest, ViewBstr) { EXPECT_EQ(nullptr, item->asTstr()); EXPECT_EQ(nullptr, item->asBstr()); EXPECT_EQ(nullptr, item->asSimple()); + EXPECT_EQ(nullptr, item->asBool()); + EXPECT_EQ(nullptr, item->asNull()); EXPECT_EQ(nullptr, item->asMap()); EXPECT_EQ(nullptr, item->asArray()); EXPECT_EQ(nullptr, item->asViewTstr()); @@ -1024,8 +1053,11 @@ TEST(CloningTest, Bool) { EXPECT_EQ(clone->type(), SIMPLE); EXPECT_NE(clone->asSimple(), nullptr); EXPECT_EQ(clone->asSimple()->simpleType(), cppbor::BOOLEAN); + EXPECT_NE(clone->asBool(), nullptr); EXPECT_NE(clone->asSimple()->asBool(), nullptr); + EXPECT_EQ(item, *clone->asBool()); EXPECT_EQ(item, *clone->asSimple()->asBool()); + EXPECT_EQ(*clone->asBool(), Bool(true)); EXPECT_EQ(*clone->asSimple()->asBool(), Bool(true)); } -- cgit v1.2.3