37 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 38 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 52 #if GTEST_HAS_DEATH_TEST 77 static bool Create(
const char* statement,
const RE* regex,
80 virtual ~DeathTest() { }
83 class ReturnSentinel {
85 explicit ReturnSentinel(DeathTest* test) :
test_(test) { }
86 ~ReturnSentinel() {
test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
88 DeathTest*
const test_;
97 enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
100 enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_DID_NOT_DIE };
103 virtual TestRole AssumeRole() = 0;
106 virtual int Wait() = 0;
115 virtual bool Passed(
bool exit_status_ok) = 0;
122 static const char* LastMessage();
124 static void set_last_death_test_message(
const String&
message);
128 static String last_death_test_message_;
134 class DeathTestFactory {
136 virtual ~DeathTestFactory() { }
137 virtual bool Create(
const char* statement,
const RE* regex,
142 class DefaultDeathTestFactory :
public DeathTestFactory {
144 virtual bool Create(
const char* statement,
const RE* regex,
150 GTEST_API_ bool ExitedUnsuccessfully(
int exit_status);
154 #define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ 155 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 156 if (::testing::internal::AlwaysTrue()) { \ 157 const ::testing::internal::RE& gtest_regex = (regex); \ 158 ::testing::internal::DeathTest* gtest_dt; \ 159 if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ 160 __FILE__, __LINE__, >est_dt)) { \ 161 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 163 if (gtest_dt != NULL) { \ 164 ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ 165 gtest_dt_ptr(gtest_dt); \ 166 switch (gtest_dt->AssumeRole()) { \ 167 case ::testing::internal::DeathTest::OVERSEE_TEST: \ 168 if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ 169 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 172 case ::testing::internal::DeathTest::EXECUTE_TEST: { \ 173 ::testing::internal::DeathTest::ReturnSentinel \ 174 gtest_sentinel(gtest_dt); \ 175 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 176 gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ 182 GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ 183 fail(::testing::internal::DeathTest::LastMessage()) 190 class InternalRunDeathTestFlag {
192 InternalRunDeathTestFlag(
const String& a_file,
196 : file_(a_file), line_(a_line), index_(an_index),
197 write_fd_(a_write_fd) {}
199 ~InternalRunDeathTestFlag() {
205 int line()
const {
return line_; }
206 int index()
const {
return index_; }
207 int write_fd()
const {
return write_fd_; }
221 InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
223 #else // GTEST_HAS_DEATH_TEST 257 #define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ 258 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 259 if (::testing::internal::AlwaysTrue()) { \ 260 GTEST_LOG_(WARNING) \ 261 << "Death tests are not supported on this platform.\n" \ 262 << "Statement '" #statement "' cannot be verified."; \ 263 } else if (::testing::internal::AlwaysFalse()) { \ 264 ::testing::internal::RE::PartialMatch(".*", (regex)); \ 265 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 270 #endif // GTEST_HAS_DEATH_TEST 275 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ line
Definition: buildtests.py:37
Definition: testutils.h:40
class GTEST_API_ testing::internal::ScopedTrace GTEST_ATTRIBUTE_UNUSED_
const char kDeathTestUseFork[]
Definition: gtest-death-test-internal.h:49
#define GTEST_API_
Definition: gtest-port.h:615
AbortReason
Definition: AbortReason.h:34
const char kInternalRunDeathTestFlag[]
Definition: gtest-death-test-internal.h:50
VoEFile * file
Definition: voe_cmd_test.cc:59
const char kDeathTestStyleFlag[]
Definition: gtest-death-test-internal.h:48
GLuint index
Definition: gl2.h:383
GTEST_DECLARE_string_(internal_run_death_test)
Definition: gtest-string.h:81
void test(int32_t count, function< MediaTime(int32_t)> generator)
Definition: main.cpp:57
Definition: gtest-port.h:694
USVString reason
Definition: CloseEvent.idl:43
rtc::scoped_refptr< RTCStatsCollectorTestHelper > test_
Definition: rtcstatscollector_unittest.cc:657
Definition: document.h:393
int Close(int fd)
Definition: gtest-port.h:1396
void Abort()
Definition: gtest-port.h:1423
#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)
Definition: gtest-port.h:573
GLuint GLsizei const GLchar * message
Definition: gl2ext.h:137