aboutsummaryrefslogtreecommitdiffstats
path: root/src/gtest-internal-inl.h
diff options
context:
space:
mode:
authorshiqian <shiqian@861a406c-534a-0410-8894-cb66d6ee9925>2008-09-12 04:01:37 +0000
committershiqian <shiqian@861a406c-534a-0410-8894-cb66d6ee9925>2008-09-12 04:01:37 +0000
commit019d19af978f05b774407e0d46a3bda2c18c67c6 (patch)
tree8522f2db6e168ee4e829c2e7f2cf6dfbaaab30c7 /src/gtest-internal-inl.h
parent29d8235540f1983c3dbd53a23783530017be80e7 (diff)
downloadgoogletest-019d19af978f05b774407e0d46a3bda2c18c67c6.tar.gz
googletest-019d19af978f05b774407e0d46a3bda2c18c67c6.tar.bz2
googletest-019d19af978f05b774407e0d46a3bda2c18c67c6.zip
Improves thread-safe death tests by changing to the original working directory before they are executed; also fixes out-dated comments about death tests.
Diffstat (limited to 'src/gtest-internal-inl.h')
-rw-r--r--src/gtest-internal-inl.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/gtest-internal-inl.h b/src/gtest-internal-inl.h
index 6aafc7bf..d4889483 100644
--- a/src/gtest-internal-inl.h
+++ b/src/gtest-internal-inl.h
@@ -1003,6 +1003,21 @@ class UnitTestImpl : public TestPartResultReporterInterface {
void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc,
Test::TearDownTestCaseFunc tear_down_tc,
TestInfo * test_info) {
+ // In order to support thread-safe death tests, we need to
+ // remember the original working directory when the test program
+ // was first invoked. We cannot do this in RUN_ALL_TESTS(), as
+ // the user may have changed the current directory before calling
+ // RUN_ALL_TESTS(). Therefore we capture the current directory in
+ // AddTestInfo(), which is called to register a TEST or TEST_F
+ // before main() is reached.
+ if (original_working_dir_.IsEmpty()) {
+ original_working_dir_.Set(FilePath::GetCurrentDir());
+ if (original_working_dir_.IsEmpty()) {
+ printf("%s\n", "Failed to get the current working directory.");
+ abort();
+ }
+ }
+
GetTestCase(test_info->test_case_name(),
test_info->test_case_comment(),
set_up_tc,
@@ -1083,9 +1098,15 @@ class UnitTestImpl : public TestPartResultReporterInterface {
#endif // GTEST_HAS_DEATH_TEST
private:
+ friend class ::testing::UnitTest;
+
// The UnitTest object that owns this implementation object.
UnitTest* const parent_;
+ // The working directory when the first TEST() or TEST_F() was
+ // executed.
+ internal::FilePath original_working_dir_;
+
// Points to (but doesn't own) the test part result reporter.
TestPartResultReporterInterface* test_part_result_reporter_;