| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 // | |
| 5 // Testing utilities that extend gtest. | |
| 6 | |
| 7 #ifndef NET_QUIC_TEST_TOOLS_GTEST_UTIL_H_ | |
| 8 #define NET_QUIC_TEST_TOOLS_GTEST_UTIL_H_ | |
| 9 | |
| 10 #include "net/test/scoped_disable_exit_on_dfatal.h" | |
| 11 #include "net/test/scoped_mock_log.h" | |
| 12 #include "testing/gmock/include/gmock/gmock.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | |
| 14 | |
| 15 namespace net { | |
| 16 namespace test { | |
| 17 | |
| 18 // Internal implementation for the EXPECT_DFATAL and ASSERT_DFATAL | |
| 19 // macros. Do not use this directly. | |
| 20 #define GTEST_DFATAL_(statement, matcher, fail) \ | |
| 21 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ | |
| 22 if (true) { \ | |
| 23 ::net::test::ScopedMockLog gtest_log; \ | |
| 24 ::net::test::ScopedDisableExitOnDFatal gtest_disable_exit; \ | |
| 25 using ::testing::_; \ | |
| 26 EXPECT_CALL(gtest_log, Log(_, _, _, _, _)) \ | |
| 27 .WillRepeatedly(::testing::Return(false)); \ | |
| 28 EXPECT_CALL(gtest_log, Log(logging::LOG_DFATAL, _, _, _, matcher)) \ | |
| 29 .Times(::testing::AtLeast(1)) \ | |
| 30 .WillOnce(::testing::Return(false)); \ | |
| 31 gtest_log.StartCapturingLogs(); \ | |
| 32 { statement; } \ | |
| 33 gtest_log.StopCapturingLogs(); \ | |
| 34 if (!testing::Mock::VerifyAndClear(>est_log)) { \ | |
| 35 goto GTEST_CONCAT_TOKEN_(gtest_label_dfatal_, __LINE__); \ | |
| 36 } \ | |
| 37 } else \ | |
| 38 GTEST_CONCAT_TOKEN_(gtest_label_dfatal_, __LINE__): \ | |
| 39 fail("") | |
| 40 | |
| 41 // The EXPECT_DFATAL and ASSERT_DFATAL macros are lightweight | |
| 42 // alternatives to EXPECT_DEBUG_DEATH and ASSERT_DEBUG_DEATH. They | |
| 43 // are appropriate for testing that your code logs a message at the | |
| 44 // DFATAL level. | |
| 45 // | |
| 46 // Unlike EXPECT_DEBUG_DEATH and ASSERT_DEBUG_DEATH, these macros | |
| 47 // execute the given statement in the current process, not a forked | |
| 48 // one. This works because we disable exiting the program for | |
| 49 // LOG(DFATAL). This makes the tests run more quickly. | |
| 50 // | |
| 51 // The _WITH() variants allow one to specify any matcher for the | |
| 52 // DFATAL log message, whereas the other variants assume a regex. | |
| 53 | |
| 54 #define EXPECT_DFATAL_WITH(statement, matcher) \ | |
| 55 GTEST_DFATAL_(statement, matcher, GTEST_NONFATAL_FAILURE_) | |
| 56 | |
| 57 #define ASSERT_DFATAL_WITH(statement, matcher) \ | |
| 58 GTEST_DFATAL_(statement, matcher, GTEST_FATAL_FAILURE_) | |
| 59 | |
| 60 #define EXPECT_DFATAL(statement, regex) \ | |
| 61 EXPECT_DFATAL_WITH(statement, ::testing::ContainsRegex(regex)) | |
| 62 | |
| 63 #define ASSERT_DFATAL(statement, regex) \ | |
| 64 ASSERT_DFATAL_WITH(statement, ::testing::ContainsRegex(regex)) | |
| 65 | |
| 66 // The EXPECT_DEBUG_DFATAL and ASSERT_DEBUG_DFATAL macros are similar to | |
| 67 // EXPECT_DFATAL and ASSERT_DFATAL. Use them in conjunction with DLOG(DFATAL) | |
| 68 // or similar macros that produce no-op in opt build and DFATAL in dbg build. | |
| 69 | |
| 70 #ifndef NDEBUG | |
| 71 | |
| 72 #define EXPECT_DEBUG_DFATAL(statement, regex) \ | |
| 73 EXPECT_DFATAL(statement, regex) | |
| 74 #define ASSERT_DEBUG_DFATAL(statement, regex) \ | |
| 75 ASSERT_DFATAL(statement, regex) | |
| 76 | |
| 77 #else // NDEBUG | |
| 78 | |
| 79 #define EXPECT_DEBUG_DFATAL(statement, regex) \ | |
| 80 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ | |
| 81 if (true) { \ | |
| 82 (void)(regex); \ | |
| 83 statement; \ | |
| 84 } else \ | |
| 85 GTEST_NONFATAL_FAILURE_("") | |
| 86 #define ASSERT_DEBUG_DFATAL(statement, regex) \ | |
| 87 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ | |
| 88 if (true) { \ | |
| 89 (void)(regex); \ | |
| 90 statement; \ | |
| 91 } else \ | |
| 92 GTEST_NONFATAL_FAILURE_("") | |
| 93 | |
| 94 #endif // NDEBUG | |
| 95 | |
| 96 } // namespace test | |
| 97 } // namespace net | |
| 98 | |
| 99 #endif // NET_QUIC_TEST_TOOLS_GTEST_UTIL_H_ | |
| OLD | NEW |