summaryrefslogtreecommitdiff
path: root/src/mongo/unittest/death_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/unittest/death_test.h')
-rw-r--r--src/mongo/unittest/death_test.h33
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();
}