diff options
Diffstat (limited to 'src/mongo/unittest/death_test.h')
-rw-r--r-- | src/mongo/unittest/death_test.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/mongo/unittest/death_test.h b/src/mongo/unittest/death_test.h index 35ca96142af..599f3da2faa 100644 --- a/src/mongo/unittest/death_test.h +++ b/src/mongo/unittest/death_test.h @@ -49,6 +49,13 @@ DEATH_TEST_DEFINE_(SUITE_NAME, TEST_NAME, MATCH_EXPR, ::mongo::unittest::Test) /** + * See DEATH_TEST for details. + * Validates output is a partial match using a PCRE regular expression instead of a string match. + */ +#define DEATH_TEST_REGEX(SUITE_NAME, TEST_NAME, REGEX_EXPR) \ + DEATH_TEST_DEFINE_REGEX_(SUITE_NAME, TEST_NAME, REGEX_EXPR, ::mongo::unittest::Test) + +/** * Constructs a single test named TEST_NAME that has access to a common fixture * named `FIXTURE_NAME`, which will be used as the Suite name. * @@ -57,20 +64,38 @@ #define DEATH_TEST_F(FIXTURE_NAME, TEST_NAME, MATCH_EXPR) \ DEATH_TEST_DEFINE_(FIXTURE_NAME, TEST_NAME, MATCH_EXPR, FIXTURE_NAME) +#define DEATH_TEST_REGEX_F(FIXTURE_NAME, TEST_NAME, REGEX_EXPR) \ + DEATH_TEST_DEFINE_REGEX_(FIXTURE_NAME, TEST_NAME, REGEX_EXPR, FIXTURE_NAME) + #define DEATH_TEST_DEFINE_(SUITE_NAME, TEST_NAME, MATCH_EXPR, TEST_BASE) \ DEATH_TEST_DEFINE_PRIMITIVE_(SUITE_NAME, \ TEST_NAME, \ MATCH_EXPR, \ + false, \ UNIT_TEST_DETAIL_TEST_TYPE_NAME(SUITE_NAME, TEST_NAME), \ TEST_BASE) -#define DEATH_TEST_DEFINE_PRIMITIVE_(SUITE_NAME, TEST_NAME, MATCH_EXPR, TEST_TYPE, TEST_BASE) \ +#define DEATH_TEST_DEFINE_REGEX_(SUITE_NAME, TEST_NAME, REGEX_EXPR, TEST_BASE) \ + DEATH_TEST_DEFINE_PRIMITIVE_(SUITE_NAME, \ + TEST_NAME, \ + REGEX_EXPR, \ + true, \ + UNIT_TEST_DETAIL_TEST_TYPE_NAME(SUITE_NAME, TEST_NAME), \ + TEST_BASE) + + +#define DEATH_TEST_DEFINE_PRIMITIVE_( \ + SUITE_NAME, TEST_NAME, MATCH_EXPR, IS_REGEX, TEST_TYPE, TEST_BASE) \ class TEST_TYPE : public TEST_BASE { \ public: \ static std::string getPattern() { \ return MATCH_EXPR; \ } \ \ + static bool isRegex() { \ + return IS_REGEX; \ + } \ + \ private: \ void _doTest() override; \ static inline const RegistrationAgent<::mongo::unittest::DeathTest<TEST_TYPE>> _agent{ \ @@ -78,6 +103,7 @@ }; \ void TEST_TYPE::_doTest() + namespace mongo::unittest { class DeathTestBase : public Test { @@ -91,6 +117,7 @@ private: // Customization points for derived DeathTest classes. virtual std::unique_ptr<Test> _doMakeTest() = 0; virtual std::string _doGetPattern() = 0; + virtual bool _isRegex() = 0; }; template <typename T> @@ -105,6 +132,10 @@ private: return T::getPattern(); } + bool _isRegex() override { + return T::isRegex(); + } + std::unique_ptr<Test> _doMakeTest() override { return _makeTest(); } |