summaryrefslogtreecommitdiff
path: root/googletest/test/gtest_environment_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'googletest/test/gtest_environment_test.cc')
-rw-r--r--googletest/test/gtest_environment_test.cc96
1 files changed, 52 insertions, 44 deletions
diff --git a/googletest/test/gtest_environment_test.cc b/googletest/test/gtest_environment_test.cc
index 122eaf3ca802..03657c7d89f1 100644
--- a/googletest/test/gtest_environment_test.cc
+++ b/googletest/test/gtest_environment_test.cc
@@ -40,16 +40,21 @@ namespace {
enum FailureType { NO_FAILURE, NON_FATAL_FAILURE, FATAL_FAILURE };
+// Was SetUp run?
+bool set_up_was_run;
+// Was TearDown run?
+bool tear_down_was_run;
+// Was the TEST run?
+bool test_was_run;
+
// For testing using global test environments.
class MyEnvironment : public testing::Environment {
public:
- MyEnvironment() { Reset(); }
-
// Depending on the value of failure_in_set_up_, SetUp() will
// generate a non-fatal failure, generate a fatal failure, or
// succeed.
void SetUp() override {
- set_up_was_run_ = true;
+ set_up_was_run = true;
switch (failure_in_set_up_) {
case NON_FATAL_FAILURE:
@@ -65,36 +70,18 @@ class MyEnvironment : public testing::Environment {
// Generates a non-fatal failure.
void TearDown() override {
- tear_down_was_run_ = true;
+ tear_down_was_run = true;
ADD_FAILURE() << "Expected non-fatal failure in global tear-down.";
}
- // Resets the state of the environment s.t. it can be reused.
- void Reset() {
- failure_in_set_up_ = NO_FAILURE;
- set_up_was_run_ = false;
- tear_down_was_run_ = false;
- }
-
// We call this function to set the type of failure SetUp() should
// generate.
void set_failure_in_set_up(FailureType type) { failure_in_set_up_ = type; }
- // Was SetUp() run?
- bool set_up_was_run() const { return set_up_was_run_; }
-
- // Was TearDown() run?
- bool tear_down_was_run() const { return tear_down_was_run_; }
-
private:
FailureType failure_in_set_up_;
- bool set_up_was_run_;
- bool tear_down_was_run_;
};
-// Was the TEST run?
-bool test_was_run;
-
// The sole purpose of this TEST is to enable us to check whether it
// was run.
TEST(FooTest, Bar) { test_was_run = true; }
@@ -112,67 +99,88 @@ void Check(bool condition, const char* msg) {
// The 'failure' parameter specifies the type of failure that should
// be generated by the global set-up.
int RunAllTests(MyEnvironment* env, FailureType failure) {
- env->Reset();
- env->set_failure_in_set_up(failure);
+ set_up_was_run = false;
+ tear_down_was_run = false;
test_was_run = false;
+ env->set_failure_in_set_up(failure);
testing::internal::GetUnitTestImpl()->ClearAdHocTestResult();
return RUN_ALL_TESTS();
}
-} // namespace
-
-int main(int argc, char** argv) {
- testing::InitGoogleTest(&argc, argv);
-
- // Registers a global test environment, and verifies that the
- // registration function returns its argument.
+// Registers a global test environment, and verifies that the
+// registration function returns its argument.
+MyEnvironment* RegisterTestEnv() {
MyEnvironment* const env = new MyEnvironment;
Check(testing::AddGlobalTestEnvironment(env) == env,
"AddGlobalTestEnvironment() should return its argument.");
+ return env;
+}
- // Verifies that RUN_ALL_TESTS() runs the tests when the global
- // set-up is successful.
+// Verifies that RUN_ALL_TESTS() runs the tests when the global
+// set-up is successful.
+void TestGlobalSetUp() {
+ MyEnvironment* const env = RegisterTestEnv();
Check(RunAllTests(env, NO_FAILURE) != 0,
"RUN_ALL_TESTS() should return non-zero, as the global tear-down "
"should generate a failure.");
Check(test_was_run,
"The tests should run, as the global set-up should generate no "
"failure");
- Check(env->tear_down_was_run(),
+ Check(tear_down_was_run,
"The global tear-down should run, as the global set-up was run.");
+}
- // Verifies that RUN_ALL_TESTS() runs the tests when the global
- // set-up generates no fatal failure.
+// Verifies that RUN_ALL_TESTS() runs the tests when the global
+// set-up generates no fatal failure.
+void TestTestsRun() {
+ MyEnvironment* const env = RegisterTestEnv();
Check(RunAllTests(env, NON_FATAL_FAILURE) != 0,
"RUN_ALL_TESTS() should return non-zero, as both the global set-up "
"and the global tear-down should generate a non-fatal failure.");
Check(test_was_run,
"The tests should run, as the global set-up should generate no "
"fatal failure.");
- Check(env->tear_down_was_run(),
+ Check(tear_down_was_run,
"The global tear-down should run, as the global set-up was run.");
+}
- // Verifies that RUN_ALL_TESTS() runs no test when the global set-up
- // generates a fatal failure.
+// Verifies that RUN_ALL_TESTS() runs no test when the global set-up
+// generates a fatal failure.
+void TestNoTestsRunSetUpFailure() {
+ MyEnvironment* const env = RegisterTestEnv();
Check(RunAllTests(env, FATAL_FAILURE) != 0,
"RUN_ALL_TESTS() should return non-zero, as the global set-up "
"should generate a fatal failure.");
Check(!test_was_run,
"The tests should not run, as the global set-up should generate "
"a fatal failure.");
- Check(env->tear_down_was_run(),
+ Check(tear_down_was_run,
"The global tear-down should run, as the global set-up was run.");
+}
- // Verifies that RUN_ALL_TESTS() doesn't do global set-up or
- // tear-down when there is no test to run.
+// Verifies that RUN_ALL_TESTS() doesn't do global set-up or
+// tear-down when there is no test to run.
+void TestNoTestsSkipsSetUp() {
+ MyEnvironment* const env = RegisterTestEnv();
GTEST_FLAG_SET(filter, "-*");
Check(RunAllTests(env, NO_FAILURE) == 0,
"RUN_ALL_TESTS() should return zero, as there is no test to run.");
- Check(!env->set_up_was_run(),
+ Check(!set_up_was_run,
"The global set-up should not run, as there is no test to run.");
- Check(!env->tear_down_was_run(),
+ Check(!tear_down_was_run,
"The global tear-down should not run, "
"as the global set-up was not run.");
+}
+
+} // namespace
+
+int main(int argc, char** argv) {
+ testing::InitGoogleTest(&argc, argv);
+
+ TestGlobalSetUp();
+ TestTestsRun();
+ TestNoTestsRunSetUpFailure();
+ TestNoTestsSkipsSetUp();
printf("PASS\n");
return 0;