You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
4.1 KiB
196 lines
4.1 KiB
// Copyright 2019 The Pigweed Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
// use this file except in compliance with the License. You may obtain a copy of
|
|
// the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing permissions and limitations under
|
|
// the License.
|
|
|
|
#include "pw_unit_test/framework.h"
|
|
|
|
#include <cstring>
|
|
|
|
namespace pw {
|
|
namespace {
|
|
|
|
TEST(PigweedTest, ExpectBool) {
|
|
EXPECT_TRUE(true);
|
|
EXPECT_FALSE(false);
|
|
|
|
EXPECT_TRUE(1);
|
|
EXPECT_TRUE(1203492);
|
|
EXPECT_TRUE(-1);
|
|
EXPECT_TRUE(0.1f);
|
|
|
|
EXPECT_FALSE(0);
|
|
EXPECT_FALSE(0.0f);
|
|
EXPECT_FALSE(-0.0f);
|
|
}
|
|
|
|
TEST(PigweedTest, ExpectBasicComparisons) {
|
|
EXPECT_EQ(1, 1 + 0);
|
|
ASSERT_EQ(1, 1 + 0);
|
|
|
|
EXPECT_EQ(0.0f, -0.0f);
|
|
ASSERT_EQ(0.0f, -0.0f);
|
|
|
|
EXPECT_NE(-1, 0);
|
|
ASSERT_NE(-1, 0);
|
|
|
|
EXPECT_GT(2, 1);
|
|
ASSERT_GT(3, 0);
|
|
|
|
EXPECT_GE(1, 1);
|
|
ASSERT_GE(3, 0);
|
|
|
|
EXPECT_LT(0, 1);
|
|
ASSERT_LT(-2, 1209);
|
|
|
|
EXPECT_LE(-1, 0);
|
|
ASSERT_LE(-2, -2);
|
|
}
|
|
|
|
TEST(PigweedTest, ExpectStringEquality) {
|
|
EXPECT_STREQ("", "");
|
|
EXPECT_STREQ("Yes", "Yes");
|
|
|
|
char no[] = {'N', 'o', '\0'};
|
|
ASSERT_STREQ("No", no);
|
|
|
|
EXPECT_STRNE("NO", "no");
|
|
ASSERT_STRNE("yes", no);
|
|
}
|
|
|
|
TEST(PigweedTest, SucceedAndFailMacros) {
|
|
SUCCEED();
|
|
|
|
// The ADD_FAILURE() and FAIL() macros cause a test to fail if they are
|
|
// reached. Use them, but don't let them run so that this test still passes.
|
|
if (false) {
|
|
ADD_FAILURE();
|
|
FAIL();
|
|
}
|
|
}
|
|
|
|
class NonCopyable {
|
|
public:
|
|
NonCopyable(int value) : value_(value) {}
|
|
|
|
NonCopyable(const NonCopyable&) = delete;
|
|
NonCopyable& operator=(const NonCopyable&) = delete;
|
|
|
|
bool operator==(const NonCopyable& rhs) const { return value_ == rhs.value_; }
|
|
bool operator!=(const NonCopyable& rhs) const { return value_ != rhs.value_; }
|
|
|
|
operator bool() const { return value_ > 0; }
|
|
|
|
private:
|
|
const int value_;
|
|
};
|
|
|
|
TEST(PigweedTest, NonCopyableType) {
|
|
EXPECT_TRUE(NonCopyable(6));
|
|
EXPECT_FALSE(NonCopyable(-1));
|
|
|
|
const NonCopyable this_one(100);
|
|
EXPECT_EQ(this_one, this_one);
|
|
EXPECT_TRUE(this_one);
|
|
|
|
EXPECT_EQ(NonCopyable(5), NonCopyable(5));
|
|
EXPECT_NE(NonCopyable(5), NonCopyable(6));
|
|
}
|
|
|
|
bool Increment(int* i) {
|
|
(*i)++;
|
|
return true;
|
|
}
|
|
|
|
TEST(PigweedTest, MacroArgumentsOnlyAreEvaluatedOnce) {
|
|
int i = 1;
|
|
|
|
EXPECT_TRUE(Increment(&i));
|
|
EXPECT_EQ(i, 2);
|
|
ASSERT_TRUE(Increment(&i));
|
|
EXPECT_EQ(i, 3);
|
|
|
|
EXPECT_EQ(0x600dbeef, [&i]() {
|
|
i += 1;
|
|
return 0x600dbeef;
|
|
}());
|
|
|
|
EXPECT_EQ(i, 4);
|
|
}
|
|
|
|
class FixtureTest : public ::testing::Test {
|
|
public:
|
|
FixtureTest() : string_("hello world") {}
|
|
|
|
bool ReturnTrue() { return true; }
|
|
int StringLength() { return std::strlen(string_); }
|
|
|
|
protected:
|
|
const char* string_;
|
|
};
|
|
|
|
TEST_F(FixtureTest, CustomFixture) {
|
|
EXPECT_TRUE(ReturnTrue());
|
|
EXPECT_EQ(StringLength(), 11);
|
|
}
|
|
|
|
class PigweedTestFixture : public ::testing::Test {
|
|
protected:
|
|
PigweedTestFixture() : cool_number_(35) {}
|
|
|
|
int cool_number_;
|
|
};
|
|
|
|
TEST_F(PigweedTestFixture, TheNumberIs35) {
|
|
EXPECT_EQ(cool_number_, 35);
|
|
cool_number_ += 1;
|
|
EXPECT_EQ(cool_number_, 36);
|
|
}
|
|
|
|
TEST_F(PigweedTestFixture, YupTheNumberIs35) {
|
|
EXPECT_EQ(cool_number_, 35);
|
|
cool_number_ *= 100;
|
|
EXPECT_EQ(cool_number_, 3500);
|
|
}
|
|
|
|
class Expectations : public ::testing::Test {
|
|
protected:
|
|
Expectations() : cool_number_(3) { ASSERT_EQ(cool_number_, 3); }
|
|
|
|
~Expectations() { ASSERT_EQ(cool_number_, 14159); }
|
|
|
|
int cool_number_;
|
|
};
|
|
|
|
TEST_F(Expectations, SetCoolNumber) { cool_number_ = 14159; }
|
|
|
|
class SetUpAndTearDown : public ::testing::Test {
|
|
protected:
|
|
SetUpAndTearDown() : value_(0) { EXPECT_EQ(value_, 0); }
|
|
|
|
~SetUpAndTearDown() { EXPECT_EQ(value_, 1); }
|
|
|
|
void SetUp() override { value_ = 1337; }
|
|
|
|
void TearDown() override { value_ = 1; }
|
|
|
|
int value_;
|
|
};
|
|
|
|
TEST_F(SetUpAndTearDown, MakeSureItIsSet) {
|
|
EXPECT_EQ(value_, 1337);
|
|
value_ = 3210;
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace pw
|