the Compartmented Robust Posix C++ Unit Test system |
|
---|
A specific crpcut predicate inherits from
crpcut::predicate,
has an operator
()(T) accepting one
parameter and returning a boolean value, and has a stream
insertion operator for error reporting. The stream insertion
operator os only called if
operator
()(T) returns
false
.
crpcut implements a pseudo operator =~()[3]
to create match expressions with predicates, for use in
ASSERT_TRUE(expr)
,
VERIFY_TRUE(expr)
,
ASSERT_FALSE(expr)
and
VERIFY_FALSE(expr)
.
The following program implements a specific crpcut predicate used to match the end of a string.
#include <crpcut.hpp> #include <string> class ends_with : public crpcut::predicate { public: ends_with(std::string s) : s_(s) {} bool operator()(const std::string &p) { return p.length() >= s_.length() && p.compare(p.length() - s_.length(), s_.length(), s_) == 0; } friend std::ostream &operator<<(std::ostream &os, const ends_with& b) { return os << "ends_with(\"" << b.s_ << "\")"; } private: std::string s_; }; TEST(not_an_awk_file) { ASSERT_FALSE(__FILE__ =~ ends_with(".awk")); } TEST(is_a_c_file) { ASSERT_TRUE(__FILE__ =~ ends_with(".c")); } int main(int argc, char *argv[]) { return crpcut::run(argc, argv); }
When run, the output stream insertion operator is used to provide information about the predicate if the matching fails:
FAILED!: is_a_c_file phase="running" -------------------------------------------------------------- samples/match-operator-example.cpp:54 ASSERT_TRUE("samples/match-operator-example.cpp" =~ ends_with(".c")) is evaluated as: samples/match-operator-example.cpp =~ ends_with(".c") ------------------------------------------------------------------------------- =============================================================================== 2 test cases selected Sum Critical Non-critical PASSED : 1 1 0 FAILED : 1 1 0
[3]
No, there is no such operator; this is an ugly trick using
operator~
() for things inheriting from
crpcut::predicate and
assignment to an expression.