forked from boostorg/beast
unit_test improvements:
* New overload of fail() specifies file and line * BEAST_EXPECTS only evaluates the reason string on a failure - This speeds up tests that call BEAST_EXPECTS
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
1.0.0-b18
|
1.0.0-b18
|
||||||
|
|
||||||
* Clean up message docs
|
* Clean up message docs
|
||||||
|
* unit_test::suite fixes:
|
||||||
|
- New overload of fail() specifies file and line
|
||||||
|
- BEAST_EXPECTS only evaluates the reason string on a failure
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -17,6 +17,27 @@
|
|||||||
namespace beast {
|
namespace beast {
|
||||||
namespace unit_test {
|
namespace unit_test {
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class String>
|
||||||
|
static
|
||||||
|
std::string
|
||||||
|
make_reason(String const& reason,
|
||||||
|
char const* file, int line)
|
||||||
|
{
|
||||||
|
std::string s(reason);
|
||||||
|
if(! s.empty())
|
||||||
|
s.append(": ");
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
s.append(fs::path{file}.filename().string());
|
||||||
|
s.append("(");
|
||||||
|
s.append(std::to_string(line));
|
||||||
|
s.append(")");
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // detail
|
||||||
|
|
||||||
class thread;
|
class thread;
|
||||||
|
|
||||||
enum abort_t
|
enum abort_t
|
||||||
@@ -178,11 +199,21 @@ public:
|
|||||||
|
|
||||||
/** Record a failure.
|
/** Record a failure.
|
||||||
|
|
||||||
@param reason
|
@param reason Optional text added to the output on a failure.
|
||||||
|
|
||||||
|
@param file The source code file where the test failed.
|
||||||
|
|
||||||
|
@param line The source code line number where the test failed.
|
||||||
*/
|
*/
|
||||||
|
/** @{ */
|
||||||
|
template<class String>
|
||||||
|
void
|
||||||
|
fail(String const& reason, char const* file, int line);
|
||||||
|
|
||||||
template<class = void>
|
template<class = void>
|
||||||
void
|
void
|
||||||
fail(std::string const& reason = "");
|
fail(std::string const& reason = "");
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/** Evaluate a test condition.
|
/** Evaluate a test condition.
|
||||||
|
|
||||||
@@ -206,25 +237,25 @@ public:
|
|||||||
bool
|
bool
|
||||||
expect(Condition const& shouldBeTrue)
|
expect(Condition const& shouldBeTrue)
|
||||||
{
|
{
|
||||||
return expect(shouldBeTrue, {});
|
return expect(shouldBeTrue, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Condition>
|
template<class Condition, class String>
|
||||||
bool
|
bool
|
||||||
expect(Condition const& shouldBeTrue, std::string const& reason);
|
expect(Condition const& shouldBeTrue, String const& reason);
|
||||||
|
|
||||||
template<class Condition>
|
template<class Condition>
|
||||||
bool
|
bool
|
||||||
expect(Condition const& shouldBeTrue,
|
expect(Condition const& shouldBeTrue,
|
||||||
char const* file, int line)
|
char const* file, int line)
|
||||||
{
|
{
|
||||||
return expect(shouldBeTrue, {}, file, line);
|
return expect(shouldBeTrue, "", file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Condition>
|
template<class Condition, class String>
|
||||||
bool
|
bool
|
||||||
expect(Condition const& shouldBeTrue,
|
expect(Condition const& shouldBeTrue,
|
||||||
std::string const& reason, char const* file, int line);
|
String const& reason, char const* file, int line);
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -402,11 +433,11 @@ operator()(runner& r)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Condition>
|
template<class Condition, class String>
|
||||||
bool
|
bool
|
||||||
suite::
|
suite::
|
||||||
expect(
|
expect(
|
||||||
Condition const& shouldBeTrue, std::string const& reason)
|
Condition const& shouldBeTrue, String const& reason)
|
||||||
{
|
{
|
||||||
if(shouldBeTrue)
|
if(shouldBeTrue)
|
||||||
{
|
{
|
||||||
@@ -417,26 +448,18 @@ expect(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Condition>
|
template<class Condition, class String>
|
||||||
bool
|
bool
|
||||||
suite::
|
suite::
|
||||||
expect(Condition const& shouldBeTrue,
|
expect(Condition const& shouldBeTrue,
|
||||||
std::string const& reason, char const* file, int line)
|
String const& reason, char const* file, int line)
|
||||||
{
|
{
|
||||||
if(shouldBeTrue)
|
if(shouldBeTrue)
|
||||||
{
|
{
|
||||||
pass();
|
pass();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
std::string s;
|
fail(detail::make_reason(reason, file, line));
|
||||||
if(! reason.empty())
|
|
||||||
{
|
|
||||||
s += reason;
|
|
||||||
s += " ";
|
|
||||||
}
|
|
||||||
s += boost::filesystem::path{file}.filename().string() +
|
|
||||||
"(" + std::to_string(line) + ")";
|
|
||||||
fail(s);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -535,6 +558,14 @@ fail(std::string const& reason)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class String>
|
||||||
|
void
|
||||||
|
suite::
|
||||||
|
fail(String const& reason, char const* file, int line)
|
||||||
|
{
|
||||||
|
fail(detail::make_reason(reason, file, line));
|
||||||
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
void
|
void
|
||||||
suite::
|
suite::
|
||||||
@@ -583,7 +614,8 @@ run(runner& r)
|
|||||||
|
|
||||||
If the condition is false, the file and line number are reported.
|
If the condition is false, the file and line number are reported.
|
||||||
*/
|
*/
|
||||||
#define BEAST_EXPECTS(cond, reason) expect(cond, reason, __FILE__, __LINE__)
|
#define BEAST_EXPECTS(cond, reason) ((cond) ? (pass(), true) : \
|
||||||
|
(fail((reason), __FILE__, __LINE__), false))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // unit_test
|
} // unit_test
|
||||||
|
Reference in New Issue
Block a user