Lines Matching defs:DeathCause
87 enum class DeathCause {
99 bool IsValidCause(DeathCause cause) {
101 case DeathCause::VerboseAbort:
102 case DeathCause::StdAbort:
103 case DeathCause::StdTerminate:
104 case DeathCause::Trap:
111 std::string ToString(DeathCause cause) {
113 case DeathCause::VerboseAbort:
115 case DeathCause::StdAbort:
117 case DeathCause::StdTerminate:
119 case DeathCause::Trap:
121 case DeathCause::DidNotDie:
123 case DeathCause::SetupFailure:
125 case DeathCause::Unknown:
133 std::string ToString(std::array<DeathCause, N> const& causes) {
145 [[noreturn]] void StopChildProcess(DeathCause cause) { std::exit(static_cast<int>(cause)); }
147 DeathCause ConvertToDeathCause(int val) {
148 if (val < static_cast<int>(DeathCause::VerboseAbort) || val > static_cast<int>(DeathCause::Unknown)) {
149 return DeathCause::Unknown;
151 return static_cast<DeathCause>(val);
179 DeathTestResult(Outcome set_outcome, DeathCause set_cause, const std::string& set_failure_description = "")
184 DeathCause cause() const { return cause_; }
189 DeathCause cause_ = DeathCause::Unknown;
200 DeathTestResult Run(const std::array<DeathCause, N>& expected_causes, Func&& func, const Matcher& matcher) {
201 std::signal(SIGABRT, [](int) { StopChildProcess(DeathCause::StdAbort); });
202 std::set_terminate([] { StopChildProcess(DeathCause::StdTerminate); });
204 DeathCause cause = Run(func);
228 void PrintFailureDetails(std::string_view failure_description, std::string_view stmt, DeathCause cause) const {
232 if (cause != DeathCause::Unknown) {
247 DeathCause Run(Func&& f) {
269 StopChildProcess(DeathCause::SetupFailure);
275 StopChildProcess(DeathCause::DidNotDie);
300 DeathCause RunForParent() {
316 return DeathCause::Trap;
320 return DeathCause::Unknown;
347 StopChildProcess(DeathCause::VerboseAbort);
353 const std::array<DeathCause, N>& expected_causes, const char* stmt, Func&& func, const Matcher& matcher) {
367 bool ExpectDeath(DeathCause expected_cause, const char* stmt, Func&& func, const Matcher& matcher) {
368 return ExpectDeath(std::array<DeathCause, 1>{expected_cause}, stmt, func, matcher);
372 bool ExpectDeath(const std::array<DeathCause, N>& expected_causes, const char* stmt, Func&& func) {
377 bool ExpectDeath(DeathCause expected_cause, const char* stmt, Func&& func) {
378 return ExpectDeath(std::array<DeathCause, 1>{expected_cause}, stmt, func, MakeAnyMatcher());
385 assert(( ExpectDeath(std::array<DeathCause, 4>{DeathCause::VerboseAbort, DeathCause::StdAbort, DeathCause::StdTerminate, DeathCause::Trap}, #__VA_ARGS__, [&]() { __VA_ARGS__; } ) ))
387 assert(( ExpectDeath(DeathCause::VerboseAbort, #__VA_ARGS__, [&]() { __VA_ARGS__; } ) ))
389 assert(( ExpectDeath(DeathCause::VerboseAbort, #__VA_ARGS__, [&]() { __VA_ARGS__; }, matcher) ))
391 assert( ExpectDeath(DeathCause::StdAbort, #__VA_ARGS__, [&]() { __VA_ARGS__; }) )
393 assert( ExpectDeath(DeathCause::StdTerminate, #__VA_ARGS__, __VA_ARGS__) )
397 assert(( ExpectDeath(DeathCause::VerboseAbort, #expr, [&]() { (void)(expr); }, MakeAssertionMessageMatcher(message)) ))
400 assert(( ExpectDeath(DeathCause::Trap, #expr, [&]() { (void)(expr); }) ))