diff options
Diffstat (limited to 'pw_unit_test/framework_test.cc')
-rw-r--r-- | pw_unit_test/framework_test.cc | 176 |
1 files changed, 168 insertions, 8 deletions
diff --git a/pw_unit_test/framework_test.cc b/pw_unit_test/framework_test.cc index 939c818e0..211c665ce 100644 --- a/pw_unit_test/framework_test.cc +++ b/pw_unit_test/framework_test.cc @@ -57,6 +57,46 @@ TEST(PigweedTest, ExpectBasicComparisons) { ASSERT_LE(-2, -2); } +TEST(PigweedTest, ExpectNearComparisons) { + EXPECT_NEAR(1, 2, 1); + ASSERT_NEAR(1, 2, 1); + + EXPECT_NEAR(-5, 5, 10); + ASSERT_NEAR(-5, 5, 10); + + int x = 17; + int epsilon = 5; + + EXPECT_NEAR(x, 15, epsilon); + ASSERT_NEAR(x, 15, epsilon); +} + +TEST(PigweedTest, ExpectFloatComparisons) { + EXPECT_FLOAT_EQ(5.0f, 10.0f / 2); + ASSERT_FLOAT_EQ(5.0f, 10.0f / 2); + + EXPECT_FLOAT_EQ(-0.5f, -5.0f / 10); + ASSERT_FLOAT_EQ(-0.5f, -5.0f / 10); + + float x = 17.0f / 20.0f; + + EXPECT_FLOAT_EQ(x, 17.0f / 20.0f); + ASSERT_FLOAT_EQ(x, 17.0f / 20.0f); +} + +TEST(PigweedTest, ExpectDoubleComparisons) { + EXPECT_DOUBLE_EQ(5.0, 10.0 / 2); + ASSERT_DOUBLE_EQ(5.0, 10.0 / 2); + + EXPECT_DOUBLE_EQ(-0.5, -5.0 / 10); + ASSERT_DOUBLE_EQ(-0.5, -5.0 / 10); + + double x = 17.0 / 20.0; + + EXPECT_DOUBLE_EQ(x, 17.0 / 20.0); + ASSERT_DOUBLE_EQ(x, 17.0 / 20.0); +} + TEST(PigweedTest, ExpectStringEquality) { EXPECT_STREQ("", ""); EXPECT_STREQ("Yes", "Yes"); @@ -66,6 +106,9 @@ TEST(PigweedTest, ExpectStringEquality) { EXPECT_STRNE("NO", "no"); ASSERT_STRNE("yes", no); + + EXPECT_STREQ(nullptr, nullptr); + EXPECT_STRNE("abc", nullptr); } TEST(PigweedTest, SucceedAndFailMacros) { @@ -85,6 +128,37 @@ TEST(PigweedTest, SkipMacro) { EXPECT_TRUE(false); } +TEST(PigweedTest, Logs) { + EXPECT_TRUE(true) << "This message is ignored"; + EXPECT_FALSE(false) << "This message is ignored"; + EXPECT_EQ(0, 0) << "This message is ignored"; + EXPECT_NE(0, 1) << "This message is ignored"; + EXPECT_GT(1, 0) << "This message is ignored"; + EXPECT_GE(0, 0) << "This message is ignored"; + EXPECT_LT(0, 1) << "This message is ignored"; + EXPECT_LE(0, 0) << "This message is ignored"; + EXPECT_STREQ("", "") << "This message is ignored"; + EXPECT_STRNE("", "?") << "This message is ignored"; + + ASSERT_TRUE(true) << "This message is ignored"; + ASSERT_FALSE(false) << "This message is ignored"; + ASSERT_EQ(0, 0) << "This message is ignored"; + ASSERT_NE(0, 1) << "This message is ignored"; + ASSERT_GT(1, 0) << "This message is ignored"; + ASSERT_GE(0, 0) << "This message is ignored"; + ASSERT_LT(0, 1) << "This message is ignored"; + ASSERT_LE(0, 0) << "This message is ignored"; + ASSERT_STREQ("", "") << "This message is ignored"; + ASSERT_STRNE("", "?") << "This message is ignored"; + + if (false) { + ADD_FAILURE() << "This failed!" << 123; + GTEST_FAIL() << "This failed!" << 123 << '?'; + GTEST_SKIP() << 1.0f << " skips!"; + } + GTEST_SUCCEED() << "This message is ignored"; +} + class SkipOnSetUpTest : public ::testing::Test { public: void SetUp() override { GTEST_SKIP(); } @@ -144,6 +218,13 @@ TEST(PigweedTest, MacroArgumentsOnlyAreEvaluatedOnce) { EXPECT_EQ(i, 4); } +class ClassWithPrivateMethod { + FRIEND_TEST(FixtureTest, FriendClass); + + private: + int Return314() { return 314; } +}; + class FixtureTest : public ::testing::Test { public: FixtureTest() : string_("hello world") {} @@ -160,6 +241,10 @@ TEST_F(FixtureTest, CustomFixture) { EXPECT_EQ(StringLength(), 11); } +TEST_F(FixtureTest, FriendClass) { + EXPECT_EQ(ClassWithPrivateMethod().Return314(), 314); +} + class PigweedTestFixture : public ::testing::Test { protected: PigweedTestFixture() : cool_number_(35) {} @@ -191,21 +276,96 @@ class Expectations : public ::testing::Test { TEST_F(Expectations, SetCoolNumber) { cool_number_ = 14159; } class SetUpAndTearDown : public ::testing::Test { - protected: - SetUpAndTearDown() : value_(0) { EXPECT_EQ(value_, 0); } + public: + static int value; - ~SetUpAndTearDown() override { EXPECT_EQ(value_, 1); } + static void SetUpTestSuite() { + value = 1; + EXPECT_EQ(value, 1); + value++; + } - void SetUp() override { value_ = 1337; } + static void TearDownTestSuite() { + EXPECT_EQ(value, 7); + value++; + } - void TearDown() override { value_ = 1; } + protected: + SetUpAndTearDown() { + EXPECT_EQ(value, 2); + value++; + } - int value_; + ~SetUpAndTearDown() override { + EXPECT_EQ(value, 6); + value++; + } + + void SetUp() override { + EXPECT_EQ(value, 3); + value++; + } + + void TearDown() override { + EXPECT_EQ(value, 5); + value++; + } }; +int SetUpAndTearDown::value = 1; + TEST_F(SetUpAndTearDown, MakeSureItIsSet) { - EXPECT_EQ(value_, 1337); - value_ = 3210; + EXPECT_EQ(value, 4); + value++; +} + +TEST(TestSuiteTearDown, MakeSureItRan) { + EXPECT_EQ(SetUpAndTearDown::value, 8); +} + +TEST(UnknownTypeToString, SmallObject) { + struct { + char a = 0xa1; + } object; + + StringBuffer<64> expected; + expected << "<1-byte object at 0x" << &object << '>'; + ASSERT_EQ(OkStatus(), expected.status()); + + StringBuffer<64> actual; + actual << object; + ASSERT_EQ(OkStatus(), actual.status()); + EXPECT_STREQ(expected.c_str(), actual.c_str()); +} + +TEST(UnknownTypeToString, NineByteObject) { + struct { + char a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + } object; + + StringBuffer<64> expected; + expected << "<9-byte object at 0x" << &object << '>'; + ASSERT_EQ(OkStatus(), expected.status()); + + StringBuffer<64> actual; + actual << object; + ASSERT_EQ(OkStatus(), actual.status()); + EXPECT_STREQ(expected.c_str(), actual.c_str()); +} + +TEST(UnknownTypeToString, TenByteObject) { + struct { + char a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + } object; + + StringBuffer<72> expected; + expected << "<10-byte object at 0x" << &object << '>'; + ASSERT_EQ(OkStatus(), expected.status()); + + StringBuffer<72> actual; + actual << object; + ASSERT_EQ(OkStatus(), actual.status()); + EXPECT_STREQ(expected.c_str(), actual.c_str()); } } // namespace |