Unit test macros use the global suite

fix #1411
This commit is contained in:
Vinnie Falco
2019-01-16 06:39:10 -08:00
parent 72ea142c5c
commit 03bf9144b7
21 changed files with 331 additions and 380 deletions

View File

@ -1,6 +1,7 @@
Version 204 Version 204
* Add basic_timeout_stream * Add basic_timeout_stream
* Unit test macros use the global suite
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -226,7 +227,7 @@ Version 189:
Version 188: Version 188:
* Remove extraneous strand from example * Remove extraneous strand from example
* Add missing include in http/read.ipp * Add missing include in http/read.ipp
* Test for gcc warning bug * Test for gcc warning bug
* Fix a spurious gcc warning * Fix a spurious gcc warning
@ -513,7 +514,7 @@ Version 153:
* Remove BOOST_VERSION checks * Remove BOOST_VERSION checks
* Use make_error_code for setting an error_code from errc * Use make_error_code for setting an error_code from errc
* Use boost::winapi::GetLastError() consistently * Use boost::winapi::GetLastError() consistently
* Update README.md for branches * Update README.md for branches
* Avoid string_view::clear * Avoid string_view::clear
* Fix iterator version of basic_fields::erase * Fix iterator version of basic_fields::erase
@ -1413,7 +1414,7 @@ WebSocket
API Changes: API Changes:
* Add static_buffer * Add static_buffer
Actions Required: Actions Required:
@ -1975,7 +1976,7 @@ Version 54:
API Changes: API Changes:
* basic_fields refactor * basic_fields refactor
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -2054,7 +2055,7 @@ Version 51
API Changes: API Changes:
* Tune up static_buffer * Tune up static_buffer
* multi_buffer implementation change * multi_buffer implementation change
Actions Required: Actions Required:

View File

@ -23,7 +23,6 @@ namespace unit_test {
namespace detail { namespace detail {
template<class String> template<class String>
static
std::string std::string
make_reason(String const& reason, make_reason(String const& reason,
char const* file, int line) char const* file, int line)
@ -610,12 +609,20 @@ run(runner& r)
} }
} }
#ifndef BEAST_PASS
#define BEAST_PASS() ::boost::beast::unit_test::suite::this_suite()->pass()
#endif
#ifndef BEAST_FAIL
#define BEAST_FAIL() ::boost::beast::unit_test::suite::this_suite()->fail("", __FILE__, __LINE__)
#endif
#ifndef BEAST_EXPECT #ifndef BEAST_EXPECT
/** Check a precondition. /** Check a precondition.
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_EXPECT(cond) expect(cond, __FILE__, __LINE__) #define BEAST_EXPECT(cond) ::boost::beast::unit_test::suite::this_suite()->expect(cond, __FILE__, __LINE__)
#endif #endif
#ifndef BEAST_EXPECTS #ifndef BEAST_EXPECTS
@ -623,8 +630,9 @@ 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) ((cond) ? (pass(), true) : \ #define BEAST_EXPECTS(cond, reason) ((cond) ? \
(fail((reason), __FILE__, __LINE__), false)) (::boost::beast::unit_test::suite::this_suite()->pass(), true) : \
(::boost::beast::unit_test::suite::this_suite()->fail((reason), __FILE__, __LINE__), false))
#endif #endif
} // unit_test } // unit_test

View File

@ -429,7 +429,7 @@ public:
} }
// legacy hooks // legacy hooks
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return async_op_base< return async_op_base<
@ -488,7 +488,7 @@ public:
} }
// legacy hooks // legacy hooks
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return stable_async_op_base< return stable_async_op_base<

View File

@ -58,6 +58,7 @@ public:
a.async_accept(s2, a.async_accept(s2,
[](error_code ec) [](error_code ec)
{ {
boost::ignore_unused(ec);
#if 0 #if 0
if(ec == net::error::operation_aborted) if(ec == net::error::operation_aborted)
return; return;
@ -377,20 +378,17 @@ public:
struct match struct match
{ {
suite& suite_;
error_code ec_; error_code ec_;
std::size_t n_; std::size_t n_;
match(suite& s, error_code ec, std::size_t n) match(error_code ec, std::size_t n)
: suite_(s) : ec_(ec)
, ec_(ec)
, n_(n) , n_(n)
{ {
} }
match(match&& other) match(match&& other)
: suite_(other.suite_) : ec_(other.ec_)
, ec_(other.ec_)
, n_(boost::exchange(other.n_, , n_(boost::exchange(other.n_,
(std::numeric_limits<std::size_t>::max)())) (std::numeric_limits<std::size_t>::max)()))
{ {
@ -398,15 +396,15 @@ public:
~match() ~match()
{ {
suite_.BEAST_EXPECT( BEAST_EXPECT(
n_ == (std::numeric_limits<std::size_t>::max)()); n_ == (std::numeric_limits<std::size_t>::max)());
} }
void void
operator()(error_code ec, std::size_t n) operator()(error_code ec, std::size_t n)
{ {
suite_.expect(ec == ec_, ec.message(), __FILE__, __LINE__); BEAST_EXPECTS(ec == ec_, ec.message());
suite_.BEAST_EXPECT(n == n_); BEAST_EXPECT(n == n_);
n_ = (std::numeric_limits<std::size_t>::max)(); n_ = (std::numeric_limits<std::size_t>::max)();
} }
}; };
@ -429,7 +427,7 @@ public:
net::io_context ioc; net::io_context ioc;
stream_t s(ioc); stream_t s(ioc);
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.async_read_some(mb, match{*this, {}, 1}); s.async_read_some(mb, match{{}, 1});
ioc.run_for(std::chrono::seconds(1)); ioc.run_for(std::chrono::seconds(1));
} }
@ -440,7 +438,7 @@ public:
stream_t s(ioc); stream_t s(ioc);
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.expires_after(std::chrono::milliseconds(100)); s.expires_after(std::chrono::milliseconds(100));
s.async_read_some(mb, match{*this, {}, 1}); s.async_read_some(mb, match{{}, 1});
ioc.run_for(std::chrono::seconds(1)); ioc.run_for(std::chrono::seconds(1));
s.expires_never(); s.expires_never();
ioc.run(); ioc.run();
@ -452,7 +450,7 @@ public:
net::io_context ioc; net::io_context ioc;
stream_t s(ioc); stream_t s(ioc);
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.async_read_some(mb, match{*this, s.async_read_some(mb, match{
net::error::operation_aborted, 0}); net::error::operation_aborted, 0});
{ {
error_code ec; error_code ec;
@ -470,7 +468,7 @@ public:
net::io_context ioc; net::io_context ioc;
stream_t s(ioc); stream_t s(ioc);
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.async_read_some(mb, match{*this, s.async_read_some(mb, match{
net::error::operation_aborted, 0}); net::error::operation_aborted, 0});
ioc.run_for(std::chrono::milliseconds(100)); ioc.run_for(std::chrono::milliseconds(100));
s.cancel(); s.cancel();
@ -508,7 +506,7 @@ public:
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.expires_after(std::chrono::milliseconds(100)); s.expires_after(std::chrono::milliseconds(100));
s.async_read_some(mb, s.async_read_some(mb,
match{*this, error::timeout, 0}); match{error::timeout, 0});
ioc.run_for(std::chrono::seconds(1)); ioc.run_for(std::chrono::seconds(1));
} }
@ -522,7 +520,7 @@ public:
std::chrono::steady_clock::now() + std::chrono::steady_clock::now() +
std::chrono::milliseconds(100)); std::chrono::milliseconds(100));
s.async_read_some(mb, s.async_read_some(mb,
match{*this, {}, 1}); match{{}, 1});
ioc.run_for(std::chrono::seconds(1)); ioc.run_for(std::chrono::seconds(1));
} }
@ -595,7 +593,7 @@ public:
stream_t s(ioc); stream_t s(ioc);
s.next_layer().connect(srv.local_endpoint()); s.next_layer().connect(srv.local_endpoint());
s.async_write_some(mb, s.async_write_some(mb,
match{*this, {}, mb.size()}); match{{}, mb.size()});
{ {
error_code ec; error_code ec;
s.next_layer().shutdown( s.next_layer().shutdown(

View File

@ -148,82 +148,65 @@ public:
class test_cb class test_cb
{ {
bind_handler_test& s_;
bool fail_ = true; bool fail_ = true;
public: public:
test_cb() = default;
test_cb(test_cb const&) = delete; test_cb(test_cb const&) = delete;
test_cb(bind_handler_test& s)
: s_(s)
{
}
test_cb(test_cb&& other) test_cb(test_cb&& other)
: s_(other.s_) : fail_(boost::exchange(
, fail_(boost::exchange(
other.fail_, false)) other.fail_, false))
{ {
} }
~test_cb() ~test_cb()
{ {
if(fail_) BEAST_EXPECT(! fail_);
s_.fail("handler not invoked",
__FILE__, __LINE__);
} }
void void
operator()() operator()()
{ {
fail_ = false; fail_ = false;
s_.pass(); BEAST_EXPECT(true);
} }
void void
operator()(int v) operator()(int v)
{ {
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(v == 42);
v == 42, __FILE__, __LINE__);
} }
void void
operator()(int v, string_view s) operator()(int v, string_view s)
{ {
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(v == 42);
v == 42, __FILE__, __LINE__); BEAST_EXPECT(s == "s");
s_.expect(
s == "s", __FILE__, __LINE__);
} }
void void
operator()(int v, string_view s, move_arg<1>) operator()(int v, string_view s, move_arg<1>)
{ {
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(v == 42);
v == 42, __FILE__, __LINE__); BEAST_EXPECT(s == "s");
s_.expect(
s == "s", __FILE__, __LINE__);
} }
void void
operator()(int v, string_view s, move_arg<1>, move_arg<2>) operator()(int v, string_view s, move_arg<1>, move_arg<2>)
{ {
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(v == 42);
v == 42, __FILE__, __LINE__); BEAST_EXPECT(s == "s");
s_.expect(
s == "s", __FILE__, __LINE__);
} }
void void
operator()(error_code, std::size_t n) operator()(error_code, std::size_t n)
{ {
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(n == 256);
n == 256, __FILE__, __LINE__);
} }
void void
@ -232,16 +215,14 @@ public:
{ {
boost::ignore_unused(s); boost::ignore_unused(s);
fail_ = false; fail_ = false;
s_.expect( BEAST_EXPECT(n == 256);
n == 256, __FILE__, __LINE__);
} }
void void
operator()(std::shared_ptr<int> const& sp) operator()(std::shared_ptr<int> const& sp)
{ {
fail_ = false; fail_ = false;
s_.expect(sp.get() != nullptr, BEAST_EXPECT(sp.get() != nullptr);
__FILE__, __LINE__);
} }
}; };
@ -251,19 +232,19 @@ public:
void void
failStdBind() failStdBind()
{ {
std::bind(bind_handler(test_cb{*this})); std::bind(bind_handler(test_cb{}));
} }
void void
failStdBindFront() failStdBindFront()
{ {
std::bind(bind_front_handler(test_cb{*this})); std::bind(bind_front_handler(test_cb{}));
} }
void void
failStdBindBack() failStdBindBack()
{ {
std::bind(bind_back_handler(test_cb{*this})); std::bind(bind_back_handler(test_cb{}));
} }
#endif #endif
@ -300,68 +281,68 @@ public:
using namespace std::placeholders; using namespace std::placeholders;
// 0-ary // 0-ary
bind_handler(test_cb{*this})(); bind_handler(test_cb{})();
// 1-ary // 1-ary
bind_handler(test_cb{*this}, 42)(); bind_handler(test_cb{}, 42)();
bind_handler(test_cb{*this}, _1)(42); bind_handler(test_cb{}, _1)(42);
bind_handler(test_cb{*this}, _2)(0, 42); bind_handler(test_cb{}, _2)(0, 42);
// 2-ary // 2-ary
bind_handler(test_cb{*this}, 42, "s")(); bind_handler(test_cb{}, 42, "s")();
bind_handler(test_cb{*this}, 42, "s")(0); bind_handler(test_cb{}, 42, "s")(0);
bind_handler(test_cb{*this}, _1, "s")(42); bind_handler(test_cb{}, _1, "s")(42);
bind_handler(test_cb{*this}, 42, _1) ("s"); bind_handler(test_cb{}, 42, _1) ("s");
bind_handler(test_cb{*this}, _1, _2)(42, "s"); bind_handler(test_cb{}, _1, _2)(42, "s");
bind_handler(test_cb{*this}, _1, _2)(42, "s", "X"); bind_handler(test_cb{}, _1, _2)(42, "s", "X");
bind_handler(test_cb{*this}, _2, _1)("s", 42); bind_handler(test_cb{}, _2, _1)("s", 42);
bind_handler(test_cb{*this}, _3, _2)("X", "s", 42); bind_handler(test_cb{}, _3, _2)("X", "s", 42);
// 3-ary // 3-ary
bind_handler(test_cb{*this}, 42, "s")(m1{}); bind_handler(test_cb{}, 42, "s")(m1{});
bind_handler(test_cb{*this}, 42, "s", _1)(m1{}); bind_handler(test_cb{}, 42, "s", _1)(m1{});
bind_handler(test_cb{*this}, 42, _1, m1{})("s"); bind_handler(test_cb{}, 42, _1, m1{})("s");
// 4-ary // 4-ary
bind_handler(test_cb{*this}, 42, "s")(m1{}, m2{}); bind_handler(test_cb{}, 42, "s")(m1{}, m2{});
bind_handler(test_cb{*this}, 42, "s", m1{})(m2{}); bind_handler(test_cb{}, 42, "s", m1{})(m2{});
bind_handler(test_cb{*this}, 42, "s", m1{}, m2{})(); bind_handler(test_cb{}, 42, "s", m1{}, m2{})();
bind_handler(test_cb{*this}, 42, _1, m1{})("s", m2{}); bind_handler(test_cb{}, 42, _1, m1{})("s", m2{});
bind_handler(test_cb{*this}, _3, _1, m1{})("s", m2{}, 42); bind_handler(test_cb{}, _3, _1, m1{})("s", m2{}, 42);
} }
{ {
using namespace boost::placeholders; using namespace boost::placeholders;
// 0-ary // 0-ary
bind_handler(test_cb{*this})(); bind_handler(test_cb{})();
// 1-ary // 1-ary
bind_handler(test_cb{*this}, 42)(); bind_handler(test_cb{}, 42)();
bind_handler(test_cb{*this}, _1)(42); bind_handler(test_cb{}, _1)(42);
bind_handler(test_cb{*this}, _2)(0, 42); bind_handler(test_cb{}, _2)(0, 42);
// 2-ary // 2-ary
bind_handler(test_cb{*this}, 42, "s")(); bind_handler(test_cb{}, 42, "s")();
bind_handler(test_cb{*this}, 42, "s")(0); bind_handler(test_cb{}, 42, "s")(0);
bind_handler(test_cb{*this}, _1, "s")(42); bind_handler(test_cb{}, _1, "s")(42);
bind_handler(test_cb{*this}, 42, _1) ("s"); bind_handler(test_cb{}, 42, _1) ("s");
bind_handler(test_cb{*this}, _1, _2)(42, "s"); bind_handler(test_cb{}, _1, _2)(42, "s");
bind_handler(test_cb{*this}, _1, _2)(42, "s", "X"); bind_handler(test_cb{}, _1, _2)(42, "s", "X");
bind_handler(test_cb{*this}, _2, _1)("s", 42); bind_handler(test_cb{}, _2, _1)("s", 42);
bind_handler(test_cb{*this}, _3, _2)("X", "s", 42); bind_handler(test_cb{}, _3, _2)("X", "s", 42);
// 3-ary // 3-ary
bind_handler(test_cb{*this}, 42, "s")(m1{}); bind_handler(test_cb{}, 42, "s")(m1{});
bind_handler(test_cb{*this}, 42, "s", _1)(m1{}); bind_handler(test_cb{}, 42, "s", _1)(m1{});
bind_handler(test_cb{*this}, 42, _1, m1{})("s"); bind_handler(test_cb{}, 42, _1, m1{})("s");
// 4-ary // 4-ary
bind_handler(test_cb{*this}, 42, "s")(m1{}, m2{}); bind_handler(test_cb{}, 42, "s")(m1{}, m2{});
bind_handler(test_cb{*this}, 42, "s", m1{})(m2{}); bind_handler(test_cb{}, 42, "s", m1{})(m2{});
bind_handler(test_cb{*this}, 42, "s", m1{}, m2{})(); bind_handler(test_cb{}, 42, "s", m1{}, m2{})();
bind_handler(test_cb{*this}, 42, _1, m1{})("s", m2{}); bind_handler(test_cb{}, 42, _1, m1{})("s", m2{});
bind_handler(test_cb{*this}, _3, _1, m1{})("s", m2{}, 42); bind_handler(test_cb{}, _3, _1, m1{})("s", m2{}, 42);
} }
// perfect forwarding // perfect forwarding
@ -369,11 +350,11 @@ public:
std::shared_ptr<int> const sp = std::shared_ptr<int> const sp =
std::make_shared<int>(42); std::make_shared<int>(42);
{ {
bind_handler(test_cb{*this}, sp)(); bind_handler(test_cb{}, sp)();
BEAST_EXPECT(sp.get() != nullptr); BEAST_EXPECT(sp.get() != nullptr);
} }
{ {
bind_handler(test_cb{*this})(sp); bind_handler(test_cb{})(sp);
BEAST_EXPECT(sp.get() != nullptr); BEAST_EXPECT(sp.get() != nullptr);
} }
} }
@ -382,7 +363,7 @@ public:
{ {
net::io_context ioc; net::io_context ioc;
testHooks(ioc, bind_handler(net::bind_executor( testHooks(ioc, bind_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}))); test_executor(*this, ioc), test_cb{})));
} }
// asio_handler_invoke // asio_handler_invoke
@ -395,12 +376,12 @@ public:
net::io_context::executor_type> s{ net::io_context::executor_type> s{
ioc.get_executor()}; ioc.get_executor()};
net::post(s, net::post(s,
bind_handler(test_cb{*this}, 42)); bind_handler(test_cb{}, 42));
ioc.run(); ioc.run();
} }
// legacy hooks // legacy hooks
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return bind_handler(h); return bind_handler(h);
@ -414,44 +395,44 @@ public:
using m2 = move_arg<2>; using m2 = move_arg<2>;
// 0-ary // 0-ary
bind_front_handler(test_cb{*this})(); bind_front_handler(test_cb{})();
// 1-ary // 1-ary
bind_front_handler(test_cb{*this}, 42)(); bind_front_handler(test_cb{}, 42)();
bind_front_handler(test_cb{*this})(42); bind_front_handler(test_cb{})(42);
// 2-ary // 2-ary
bind_front_handler(test_cb{*this}, 42, "s")(); bind_front_handler(test_cb{}, 42, "s")();
bind_front_handler(test_cb{*this}, 42)("s"); bind_front_handler(test_cb{}, 42)("s");
bind_front_handler(test_cb{*this})(42, "s"); bind_front_handler(test_cb{})(42, "s");
// 3-ary // 3-ary
bind_front_handler(test_cb{*this}, 42, "s", m1{})(); bind_front_handler(test_cb{}, 42, "s", m1{})();
bind_front_handler(test_cb{*this}, 42, "s")(m1{}); bind_front_handler(test_cb{}, 42, "s")(m1{});
bind_front_handler(test_cb{*this}, 42)("s", m1{}); bind_front_handler(test_cb{}, 42)("s", m1{});
bind_front_handler(test_cb{*this})(42, "s", m1{}); bind_front_handler(test_cb{})(42, "s", m1{});
// 4-ary // 4-ary
bind_front_handler(test_cb{*this}, 42, "s", m1{}, m2{})(); bind_front_handler(test_cb{}, 42, "s", m1{}, m2{})();
bind_front_handler(test_cb{*this}, 42, "s", m1{})(m2{}); bind_front_handler(test_cb{}, 42, "s", m1{})(m2{});
bind_front_handler(test_cb{*this}, 42, "s")(m1{}, m2{}); bind_front_handler(test_cb{}, 42, "s")(m1{}, m2{});
bind_front_handler(test_cb{*this}, 42)("s", m1{}, m2{}); bind_front_handler(test_cb{}, 42)("s", m1{}, m2{});
bind_front_handler(test_cb{*this})(42, "s", m1{}, m2{}); bind_front_handler(test_cb{})(42, "s", m1{}, m2{});
error_code ec; error_code ec;
std::size_t n = 256; std::size_t n = 256;
// void(error_code, size_t) // void(error_code, size_t)
bind_front_handler(test_cb{*this}, ec, n)(); bind_front_handler(test_cb{}, ec, n)();
// void(error_code, size_t)(string_view) // void(error_code, size_t)(string_view)
bind_front_handler(test_cb{*this}, ec, n)("s"); bind_front_handler(test_cb{}, ec, n)("s");
// perfect forwarding // perfect forwarding
{ {
std::shared_ptr<int> const sp = std::shared_ptr<int> const sp =
std::make_shared<int>(42); std::make_shared<int>(42);
bind_front_handler(test_cb{*this}, sp)(); bind_front_handler(test_cb{}, sp)();
BEAST_EXPECT(sp.get() != nullptr); BEAST_EXPECT(sp.get() != nullptr);
} }
@ -460,32 +441,32 @@ public:
net::io_context ioc; net::io_context ioc;
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}) test_executor(*this, ioc), test_cb{})
)); ));
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42)); 42));
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s")); 42, "s"));
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s", m1{})); 42, "s", m1{}));
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s", m1{}, m2{})); 42, "s", m1{}, m2{}));
testHooks(ioc, bind_front_handler(net::bind_executor( testHooks(ioc, bind_front_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
ec, n)); ec, n));
} }
// legacy hooks // legacy hooks
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return bind_front_handler(h); return bind_front_handler(h);
}); });
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return bind_front_handler( return bind_front_handler(
@ -501,44 +482,44 @@ public:
using m2 = move_arg<2>; using m2 = move_arg<2>;
// 0-ary // 0-ary
bind_back_handler(test_cb{*this})(); bind_back_handler(test_cb{})();
// 1-ary // 1-ary
bind_back_handler(test_cb{*this}, 42)(); bind_back_handler(test_cb{}, 42)();
bind_back_handler(test_cb{*this})(42); bind_back_handler(test_cb{})(42);
// 2-ary // 2-ary
bind_back_handler(test_cb{*this}, 42, "s")(); bind_back_handler(test_cb{}, 42, "s")();
bind_back_handler(test_cb{*this}, "s")(42); bind_back_handler(test_cb{}, "s")(42);
bind_back_handler(test_cb{*this})(42, "s"); bind_back_handler(test_cb{})(42, "s");
// 3-ary // 3-ary
bind_back_handler(test_cb{*this}, 42, "s", m1{})(); bind_back_handler(test_cb{}, 42, "s", m1{})();
bind_back_handler(test_cb{*this}, m1{})(42, "s"); bind_back_handler(test_cb{}, m1{})(42, "s");
bind_back_handler(test_cb{*this}, "s", m1{})(42); bind_back_handler(test_cb{}, "s", m1{})(42);
bind_back_handler(test_cb{*this})(42, "s", m1{}); bind_back_handler(test_cb{})(42, "s", m1{});
// 4-ary // 4-ary
bind_back_handler(test_cb{*this}, 42, "s", m1{}, m2{})(); bind_back_handler(test_cb{}, 42, "s", m1{}, m2{})();
bind_back_handler(test_cb{*this}, "s", m1{}, m2{})(42); bind_back_handler(test_cb{}, "s", m1{}, m2{})(42);
bind_back_handler(test_cb{*this}, m1{}, m2{})(42, "s"); bind_back_handler(test_cb{}, m1{}, m2{})(42, "s");
bind_back_handler(test_cb{*this}, "s", m1{}, m2{})(42); bind_back_handler(test_cb{}, "s", m1{}, m2{})(42);
bind_back_handler(test_cb{*this})(42, "s", m1{}, m2{}); bind_back_handler(test_cb{})(42, "s", m1{}, m2{});
error_code ec; error_code ec;
std::size_t n = 256; std::size_t n = 256;
// void(error_code, size_t) // void(error_code, size_t)
bind_back_handler(test_cb{*this}, ec, n)(); bind_back_handler(test_cb{}, ec, n)();
// void(error_code, size_t)(string_view) // void(error_code, size_t)(string_view)
bind_back_handler(test_cb{*this}, "s")(ec, n); bind_back_handler(test_cb{}, "s")(ec, n);
// perfect forwarding // perfect forwarding
{ {
std::shared_ptr<int> const sp = std::shared_ptr<int> const sp =
std::make_shared<int>(42); std::make_shared<int>(42);
bind_back_handler(test_cb{*this}, sp)(); bind_back_handler(test_cb{}, sp)();
BEAST_EXPECT(sp.get() != nullptr); BEAST_EXPECT(sp.get() != nullptr);
} }
@ -547,32 +528,32 @@ public:
net::io_context ioc; net::io_context ioc;
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}) test_executor(*this, ioc), test_cb{})
)); ));
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42)); 42));
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s")); 42, "s"));
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s", m1{})); 42, "s", m1{}));
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
42, "s", m1{}, m2{})); 42, "s", m1{}, m2{}));
testHooks(ioc, bind_back_handler(net::bind_executor( testHooks(ioc, bind_back_handler(net::bind_executor(
test_executor(*this, ioc), test_cb{*this}), test_executor(*this, ioc), test_cb{}),
ec, n)); ec, n));
} }
// legacy hooks // legacy hooks
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return bind_back_handler(h); return bind_back_handler(h);
}); });
legacy_handler::test(*this, legacy_handler::test(
[](legacy_handler h) [](legacy_handler h)
{ {
return bind_back_handler( return bind_back_handler(

View File

@ -26,19 +26,6 @@
namespace boost { namespace boost {
namespace beast { namespace beast {
//------------------------------------------------------------------------------
// VFALCO This is here temporarily
#define SUITE_EXPECT(test, cond) \
((test).expect((cond), __FILE__, __LINE__))
#define SUITE_EXPECTS(test, cond, reason) \
((cond) ? ((test).pass(), true) \
: ((test).fail((reason), __FILE__, __LINE__), false))
//------------------------------------------------------------------------------
/** A MutableBufferSequence for tests, where length is always 3. /** A MutableBufferSequence for tests, where length is always 3.
*/ */
class buffers_triple class buffers_triple
@ -119,7 +106,6 @@ namespace detail {
template<class MutableBufferSequence> template<class MutableBufferSequence>
void test_mutable_buffers( void test_mutable_buffers(
unit_test::suite&,
MutableBufferSequence const&, MutableBufferSequence const&,
net::const_buffer) net::const_buffer)
{ {
@ -127,7 +113,6 @@ void test_mutable_buffers(
template<class MutableBufferSequence> template<class MutableBufferSequence>
void test_mutable_buffers( void test_mutable_buffers(
unit_test::suite& test,
MutableBufferSequence const& b, MutableBufferSequence const& b,
net::mutable_buffer) net::mutable_buffer)
{ {
@ -138,8 +123,7 @@ void test_mutable_buffers(
src = {src.data(), buffer_size(b)}; src = {src.data(), buffer_size(b)};
net::buffer_copy(b, net::const_buffer( net::buffer_copy(b, net::const_buffer(
src.data(), src.size())); src.data(), src.size()));
SUITE_EXPECT(test, BEAST_EXPECT(beast::buffers_to_string(b) == src);
beast::buffers_to_string(b) == src);
} }
} // detail } // detail
@ -149,7 +133,6 @@ void test_mutable_buffers(
template<class ConstBufferSequence> template<class ConstBufferSequence>
void void
test_buffer_sequence( test_buffer_sequence(
beast::unit_test::suite& test,
ConstBufferSequence const& buffers) ConstBufferSequence const& buffers)
{ {
BOOST_STATIC_ASSERT( BOOST_STATIC_ASSERT(
@ -160,28 +143,28 @@ test_buffer_sequence(
using iterator = decltype( using iterator = decltype(
net::buffer_sequence_begin(buffers)); net::buffer_sequence_begin(buffers));
SUITE_EXPECT(test, sizeof(iterator) > 0); BEAST_EXPECT(sizeof(iterator) > 0);
auto const size = buffer_size(buffers); auto const size = buffer_size(buffers);
SUITE_EXPECT(test, size > 0 ); BEAST_EXPECT(size > 0 );
// begin, end // begin, end
auto const length = std::distance( auto const length = std::distance(
net::buffer_sequence_begin(buffers), net::buffer_sequence_begin(buffers),
net::buffer_sequence_end(buffers)); net::buffer_sequence_end(buffers));
SUITE_EXPECT(test, length > 0); BEAST_EXPECT(length > 0);
SUITE_EXPECT(test, BEAST_EXPECT(
net::buffer_sequence_begin(buffers) != net::buffer_sequence_begin(buffers) !=
net::buffer_sequence_end(buffers)); net::buffer_sequence_end(buffers));
// copy construction // copy construction
ConstBufferSequence b1(buffers); ConstBufferSequence b1(buffers);
SUITE_EXPECT(test, buffer_size(b1) == size); BEAST_EXPECT(buffer_size(b1) == size);
// copy assignment // copy assignment
ConstBufferSequence b2(buffers); ConstBufferSequence b2(buffers);
b2 = b1; b2 = b1;
SUITE_EXPECT(test, buffer_size(b2) == size); BEAST_EXPECT(buffer_size(b2) == size);
// iterators // iterators
{ {
@ -191,11 +174,11 @@ test_buffer_sequence(
net::buffer_sequence_begin(buffers); net::buffer_sequence_begin(buffers);
iterator it4 = iterator it4 =
net::buffer_sequence_end(buffers); net::buffer_sequence_end(buffers);
SUITE_EXPECT(test, it1 == it2); BEAST_EXPECT(it1 == it2);
SUITE_EXPECT(test, it1 != it3); BEAST_EXPECT(it1 != it3);
SUITE_EXPECT(test, it3 != it1); BEAST_EXPECT(it3 != it1);
SUITE_EXPECT(test, it1 != it4); BEAST_EXPECT(it1 != it4);
SUITE_EXPECT(test, it4 != it1); BEAST_EXPECT(it4 != it1);
} }
// bidirectional // bidirectional
@ -212,24 +195,24 @@ test_buffer_sequence(
n = length; n = length;
for(it = first; n--; ++it) for(it = first; n--; ++it)
m += net::buffer_size(*it); m += net::buffer_size(*it);
SUITE_EXPECT(test, it == last); BEAST_EXPECT(it == last);
SUITE_EXPECT(test, m == size); BEAST_EXPECT(m == size);
// post-increment // post-increment
m = 0; m = 0;
n = length; n = length;
for(it = first; n--;) for(it = first; n--;)
m += net::buffer_size(*it++); m += net::buffer_size(*it++);
SUITE_EXPECT(test, it == last); BEAST_EXPECT(it == last);
SUITE_EXPECT(test, m == size); BEAST_EXPECT(m == size);
// pre-decrement // pre-decrement
m = 0; m = 0;
n = length; n = length;
for(it = last; n--;) for(it = last; n--;)
m += net::buffer_size(*--it); m += net::buffer_size(*--it);
SUITE_EXPECT(test, it == first); BEAST_EXPECT(it == first);
SUITE_EXPECT(test, m == size); BEAST_EXPECT(m == size);
// post-decrement // post-decrement
m = 0; m = 0;
@ -239,11 +222,11 @@ test_buffer_sequence(
it--; it--;
m += net::buffer_size(*it); m += net::buffer_size(*it);
} }
SUITE_EXPECT(test, it == first); BEAST_EXPECT(it == first);
SUITE_EXPECT(test, m == size); BEAST_EXPECT(m == size);
} }
detail::test_mutable_buffers(test, buffers, detail::test_mutable_buffers(buffers,
buffers_type<ConstBufferSequence>{}); buffers_type<ConstBufferSequence>{});
} }
@ -295,7 +278,6 @@ buffers_fill(
template<class MutableDynamicBuffer> template<class MutableDynamicBuffer>
void void
test_mutable_dynamic_buffer( test_mutable_dynamic_buffer(
unit_test::suite&,
MutableDynamicBuffer const&, MutableDynamicBuffer const&,
std::false_type) std::false_type)
{ {
@ -304,7 +286,6 @@ test_mutable_dynamic_buffer(
template<class MutableDynamicBuffer> template<class MutableDynamicBuffer>
void void
test_mutable_dynamic_buffer( test_mutable_dynamic_buffer(
unit_test::suite& test,
MutableDynamicBuffer const& b0, MutableDynamicBuffer const& b0,
std::true_type) std::true_type)
{ {
@ -327,23 +308,23 @@ test_mutable_dynamic_buffer(
{ {
MutableDynamicBuffer b(b0); MutableDynamicBuffer b(b0);
auto const mb = b.prepare(src.size()); auto const mb = b.prepare(src.size());
SUITE_EXPECT(test, buffer_size(mb) == src.size()); BEAST_EXPECT(buffer_size(mb) == src.size());
buffers_fill(mb, '*'); buffers_fill(mb, '*');
b.commit(src.size()); b.commit(src.size());
SUITE_EXPECT(test, b.size() == src.size()); BEAST_EXPECT(b.size() == src.size());
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.data()) == beast::buffers_to_string(b.data()) ==
std::string(src.size(), '*')); std::string(src.size(), '*'));
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.cdata()) == beast::buffers_to_string(b.cdata()) ==
std::string(src.size(), '*')); std::string(src.size(), '*'));
auto const n = net::buffer_copy( auto const n = net::buffer_copy(
b.data(), net::const_buffer( b.data(), net::const_buffer(
src.data(), src.size())); src.data(), src.size()));
SUITE_EXPECT(test, n == src.size()); BEAST_EXPECT(n == src.size());
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.data()) == src); beast::buffers_to_string(b.data()) == src);
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.cdata()) == src); beast::buffers_to_string(b.cdata()) == src);
} }
@ -357,13 +338,13 @@ test_mutable_dynamic_buffer(
auto cb = static_cast< auto cb = static_cast<
MutableDynamicBuffer const&>(b).data(); MutableDynamicBuffer const&>(b).data();
auto cbc = b.cdata(); auto cbc = b.cdata();
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.data()) == src); beast::buffers_to_string(b.data()) == src);
SUITE_EXPECT(test, BEAST_EXPECT(
beast::buffers_to_string(b.cdata()) == src); beast::buffers_to_string(b.cdata()) == src);
beast::test_buffer_sequence(test, cb); beast::test_buffer_sequence(cb);
beast::test_buffer_sequence(test, cbc); beast::test_buffer_sequence(cbc);
beast::test_buffer_sequence(test, mb); beast::test_buffer_sequence(mb);
{ {
decltype(mb) mb2(mb); decltype(mb) mb2(mb);
mb = mb2; mb = mb2;
@ -388,7 +369,6 @@ test_mutable_dynamic_buffer(
template<class DynamicBuffer> template<class DynamicBuffer>
void void
test_dynamic_buffer( test_dynamic_buffer(
unit_test::suite& test,
DynamicBuffer const& b0) DynamicBuffer const& b0)
{ {
using net::buffer_size; using net::buffer_size;
@ -404,8 +384,8 @@ test_dynamic_buffer(
net::is_mutable_buffer_sequence<typename net::is_mutable_buffer_sequence<typename
DynamicBuffer::mutable_buffers_type>::value); DynamicBuffer::mutable_buffers_type>::value);
SUITE_EXPECT(test, b0.size() == 0); BEAST_EXPECT(b0.size() == 0);
SUITE_EXPECT(test, buffer_size(b0.data()) == 0); BEAST_EXPECT(buffer_size(b0.data()) == 0);
// members // members
{ {
@ -419,8 +399,8 @@ test_dynamic_buffer(
// copy constructor // copy constructor
{ {
DynamicBuffer b2(b1); DynamicBuffer b2(b1);
SUITE_EXPECT(test, b2.size() == b1.size()); BEAST_EXPECT(b2.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b1.data()) == buffers_to_string(b1.data()) ==
buffers_to_string(b2.data())); buffers_to_string(b2.data()));
} }
@ -429,8 +409,8 @@ test_dynamic_buffer(
{ {
DynamicBuffer b2(b1); DynamicBuffer b2(b1);
DynamicBuffer b3(std::move(b2)); DynamicBuffer b3(std::move(b2));
SUITE_EXPECT(test, b3.size() == b1.size()); BEAST_EXPECT(b3.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b3.data()) == buffers_to_string(b3.data()) ==
buffers_to_string(b1.data())); buffers_to_string(b1.data()));
} }
@ -439,15 +419,15 @@ test_dynamic_buffer(
{ {
DynamicBuffer b2(b0); DynamicBuffer b2(b0);
b2 = b1; b2 = b1;
SUITE_EXPECT(test, b2.size() == b1.size()); BEAST_EXPECT(b2.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b1.data()) == buffers_to_string(b1.data()) ==
buffers_to_string(b2.data())); buffers_to_string(b2.data()));
// self assignment // self assignment
b2 = b2; b2 = b2;
SUITE_EXPECT(test, b2.size() == b1.size()); BEAST_EXPECT(b2.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b2.data()) == buffers_to_string(b2.data()) ==
buffers_to_string(b1.data())); buffers_to_string(b1.data()));
} }
@ -457,15 +437,15 @@ test_dynamic_buffer(
DynamicBuffer b2(b1); DynamicBuffer b2(b1);
DynamicBuffer b3(b0); DynamicBuffer b3(b0);
b3 = std::move(b2); b3 = std::move(b2);
SUITE_EXPECT(test, b3.size() == b1.size()); BEAST_EXPECT(b3.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b3.data()) == buffers_to_string(b3.data()) ==
buffers_to_string(b1.data())); buffers_to_string(b1.data()));
// self move // self move
b3 = std::move(b3); b3 = std::move(b3);
SUITE_EXPECT(test, b3.size() == b1.size()); BEAST_EXPECT(b3.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b3.data()) == buffers_to_string(b3.data()) ==
buffers_to_string(b1.data())); buffers_to_string(b1.data()));
} }
@ -474,13 +454,13 @@ test_dynamic_buffer(
{ {
DynamicBuffer b2(b1); DynamicBuffer b2(b1);
DynamicBuffer b3(b0); DynamicBuffer b3(b0);
SUITE_EXPECT(test, b2.size() == b1.size()); BEAST_EXPECT(b2.size() == b1.size());
SUITE_EXPECT(test, b3.size() == b0.size()); BEAST_EXPECT(b3.size() == b0.size());
using std::swap; using std::swap;
swap(b2, b3); swap(b2, b3);
SUITE_EXPECT(test, b2.size() == b0.size()); BEAST_EXPECT(b2.size() == b0.size());
SUITE_EXPECT(test, b3.size() == b1.size()); BEAST_EXPECT(b3.size() == b1.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffers_to_string(b3.data()) == buffers_to_string(b3.data()) ==
buffers_to_string(b1.data())); buffers_to_string(b1.data()));
} }
@ -490,40 +470,40 @@ test_dynamic_buffer(
{ {
DynamicBuffer b(b0); DynamicBuffer b(b0);
b.commit(1); b.commit(1);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
SUITE_EXPECT(test, buffer_size(b.prepare(0)) == 0); BEAST_EXPECT(buffer_size(b.prepare(0)) == 0);
b.commit(0); b.commit(0);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
b.commit(1); b.commit(1);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
b.commit(b.max_size() + 1); b.commit(b.max_size() + 1);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
b.consume(0); b.consume(0);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
b.consume(1); b.consume(1);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
b.consume(b.max_size() + 1); b.consume(b.max_size() + 1);
SUITE_EXPECT(test, b.size() == 0); BEAST_EXPECT(b.size() == 0);
} }
// max_size // max_size
{ {
DynamicBuffer b(b0); DynamicBuffer b(b0);
if(SUITE_EXPECT(test, if(BEAST_EXPECT(
b.max_size() + 1 > b.max_size())) b.max_size() + 1 > b.max_size()))
{ {
try try
{ {
b.prepare(b.max_size() + 1); b.prepare(b.max_size() + 1);
test.fail("no exception", __FILE__, __LINE__); BEAST_FAIL();
} }
catch(std::length_error const&) catch(std::length_error const&)
{ {
test.pass(); BEAST_PASS();
} }
catch(...) catch(...)
{ {
test.fail("wrong exception", __FILE__, __LINE__); BEAST_FAIL();
} }
} }
} }
@ -534,9 +514,9 @@ test_dynamic_buffer(
string_view src(buf, sizeof(buf)); string_view src(buf, sizeof(buf));
if(src.size() > b0.max_size()) if(src.size() > b0.max_size())
src = {src.data(), b0.max_size()}; src = {src.data(), b0.max_size()};
SUITE_EXPECT(test, b0.max_size() >= src.size()); BEAST_EXPECT(b0.max_size() >= src.size());
SUITE_EXPECT(test, b0.size() == 0); BEAST_EXPECT(b0.size() == 0);
SUITE_EXPECT(test, buffer_size(b0.data()) == 0); BEAST_EXPECT(buffer_size(b0.data()) == 0);
auto const make_new_src = auto const make_new_src =
[&buf, &k0, &src] [&buf, &k0, &src]
{ {
@ -551,13 +531,13 @@ test_dynamic_buffer(
DynamicBuffer b(b0); DynamicBuffer b(b0);
auto const& bc(b); auto const& bc(b);
auto const mb = b.prepare(src.size()); auto const mb = b.prepare(src.size());
SUITE_EXPECT(test, buffer_size(mb) == src.size()); BEAST_EXPECT(buffer_size(mb) == src.size());
beast::test_buffer_sequence(test, mb); beast::test_buffer_sequence(mb);
b.commit(net::buffer_copy(mb, b.commit(net::buffer_copy(mb,
net::const_buffer(src.data(), src.size()))); net::const_buffer(src.data(), src.size())));
SUITE_EXPECT(test, BEAST_EXPECT(
buffer_size(bc.data()) == src.size()); buffer_size(bc.data()) == src.size());
beast::test_buffer_sequence(test, bc.data()); beast::test_buffer_sequence(bc.data());
} }
// h = in size // h = in size
@ -587,20 +567,20 @@ test_dynamic_buffer(
b.commit(n); b.commit(n);
cb += n; cb += n;
} }
SUITE_EXPECT(test, b.size() == in.size()); BEAST_EXPECT(b.size() == in.size());
SUITE_EXPECT(test, BEAST_EXPECT(
buffer_size(bc.data()) == in.size()); buffer_size(bc.data()) == in.size());
SUITE_EXPECT(test, beast::buffers_to_string( BEAST_EXPECT(beast::buffers_to_string(
bc.data()) == in); bc.data()) == in);
while(b.size() > 0) while(b.size() > 0)
b.consume(k); b.consume(k);
SUITE_EXPECT(test, buffer_size(bc.data()) == 0); BEAST_EXPECT(buffer_size(bc.data()) == 0);
} }
} } } } } }
} }
// MutableDynamicBuffer refinement // MutableDynamicBuffer refinement
detail::test_mutable_dynamic_buffer(test, b0, detail::test_mutable_dynamic_buffer(b0,
is_mutable_dynamic_buffer<DynamicBuffer>{}); is_mutable_dynamic_buffer<DynamicBuffer>{});
} }

View File

@ -36,7 +36,7 @@ public:
char s[13]; char s[13];
buffers_triple tb(s, sizeof(s)); buffers_triple tb(s, sizeof(s));
buffers_adaptor<buffers_triple> b(tb); buffers_adaptor<buffers_triple> b(tb);
test_dynamic_buffer(*this, b); test_dynamic_buffer(b);
} }
void void

View File

@ -77,8 +77,7 @@ public:
net::const_buffer b1(s.data(), 6); net::const_buffer b1(s.data(), 6);
net::const_buffer b2( net::const_buffer b2(
s.data() + b1.size(), s.size() - b1.size()); s.data() + b1.size(), s.size() - b1.size());
test_buffer_sequence( test_buffer_sequence(buffers_cat(b1, b2));
*this, buffers_cat(b1, b2));
} }
template<class F> template<class F>
@ -199,31 +198,31 @@ public:
auto const b = beast::buffers_cat(b1, b2, b3); auto const b = beast::buffers_cat(b1, b2, b3);
BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!"); BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!");
BEAST_EXPECT(buffers_length(b) == 3); BEAST_EXPECT(buffers_length(b) == 3);
test_buffer_sequence(*this, b); test_buffer_sequence(b);
} }
{ {
auto const b = beast::buffers_cat(b0, b1, b2, b3); auto const b = beast::buffers_cat(b0, b1, b2, b3);
BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!"); BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!");
BEAST_EXPECT(buffers_length(b) == 3); BEAST_EXPECT(buffers_length(b) == 3);
test_buffer_sequence(*this, b); test_buffer_sequence(b);
} }
{ {
auto const b = beast::buffers_cat(b1, b0, b2, b3); auto const b = beast::buffers_cat(b1, b0, b2, b3);
BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!"); BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!");
BEAST_EXPECT(buffers_length(b) == 3); BEAST_EXPECT(buffers_length(b) == 3);
test_buffer_sequence(*this, b); test_buffer_sequence(b);
} }
{ {
auto const b = beast::buffers_cat(b1, b2, b0, b3); auto const b = beast::buffers_cat(b1, b2, b0, b3);
BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!"); BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!");
BEAST_EXPECT(buffers_length(b) == 3); BEAST_EXPECT(buffers_length(b) == 3);
test_buffer_sequence(*this, b); test_buffer_sequence(b);
} }
{ {
auto const b = beast::buffers_cat(b1, b2, b3, b0); auto const b = beast::buffers_cat(b1, b2, b3, b0);
BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!"); BEAST_EXPECT(beast::buffers_to_string(b) == "Hello, world!");
BEAST_EXPECT(buffers_length(b) == 3); BEAST_EXPECT(buffers_length(b) == 3);
test_buffer_sequence(*this, b); test_buffer_sequence(b);
} }
} }

View File

@ -30,7 +30,7 @@ public:
auto const b = auto const b =
buffers_triple(buf, sizeof(buf)); buffers_triple(buf, sizeof(buf));
for(std::size_t i = 1; i <= sizeof(buf); ++i) for(std::size_t i = 1; i <= sizeof(buf); ++i)
test_buffer_sequence(*this, test_buffer_sequence(
buffers_prefix(i, b)); buffers_prefix(i, b));
} }

View File

@ -70,12 +70,12 @@ public:
{ {
{ {
string_view s = "Hello, world!"; string_view s = "Hello, world!";
test_buffer_sequence(*this, buffers_range( test_buffer_sequence(buffers_range(
net::const_buffer{s.data(), s.size()})); net::const_buffer{s.data(), s.size()}));
} }
{ {
char buf[13]; char buf[13];
test_buffer_sequence(*this, test_buffer_sequence(
buffers_range(net::mutable_buffer{ buffers_range(net::mutable_buffer{
buf, sizeof(buf)})); buf, sizeof(buf)}));
} }

View File

@ -31,7 +31,7 @@ public:
char buf[13]; char buf[13];
auto b = buffers_triple(buf, sizeof(buf)); auto b = buffers_triple(buf, sizeof(buf));
buffers_suffix<decltype(b)> bs(b); buffers_suffix<decltype(b)> bs(b);
test_buffer_sequence(*this, bs); test_buffer_sequence(bs);
} }
// const // const
@ -42,7 +42,7 @@ public:
net::const_buffer(src.data() + 3, 4), net::const_buffer(src.data() + 3, 4),
net::const_buffer(src.data() + 7, 6) }}; net::const_buffer(src.data() + 7, 6) }};
buffers_suffix<decltype(b)> bs(b); buffers_suffix<decltype(b)> bs(b);
test_buffer_sequence(*this, bs); test_buffer_sequence(bs);
} }
} }

View File

@ -29,7 +29,7 @@ public:
void void
run() run()
{ {
test_file<file_posix>(*this); test_file<file_posix>();
} }
}; };

View File

@ -27,7 +27,7 @@ public:
void void
run() run()
{ {
test_file<file_stdio>(*this); test_file<file_stdio>();
} }
}; };

View File

@ -23,7 +23,7 @@ namespace beast {
template<class File> template<class File>
void void
test_file(beast::unit_test::suite& test) test_file()
{ {
BOOST_STATIC_ASSERT( BOOST_STATIC_ASSERT(
is_file<File>::value); is_file<File>::value);
@ -58,13 +58,13 @@ test_file(beast::unit_test::suite& test)
}; };
auto const create = auto const create =
[&test](fs::path const& path) [](fs::path const& path)
{ {
auto const s = auto const s =
path.string<std::string>(); path.string<std::string>();
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
FILE* f = ::fopen(s.c_str(), "w"); FILE* f = ::fopen(s.c_str(), "w");
if( test.BEAST_EXPECT(f != nullptr)) if( BEAST_EXPECT(f != nullptr))
::fclose(f); ::fclose(f);
}; };
@ -81,32 +81,32 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
char buf[1]; char buf[1];
test.BEAST_EXPECT(! f.is_open()); BEAST_EXPECT(! f.is_open());
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
{ {
error_code ec; error_code ec;
f.size(ec); f.size(ec);
test.BEAST_EXPECT(ec == errc::bad_file_descriptor); BEAST_EXPECT(ec == errc::bad_file_descriptor);
} }
{ {
error_code ec; error_code ec;
f.pos(ec); f.pos(ec);
test.BEAST_EXPECT(ec == errc::bad_file_descriptor); BEAST_EXPECT(ec == errc::bad_file_descriptor);
} }
{ {
error_code ec; error_code ec;
f.seek(0, ec); f.seek(0, ec);
test.BEAST_EXPECT(ec == errc::bad_file_descriptor); BEAST_EXPECT(ec == errc::bad_file_descriptor);
} }
{ {
error_code ec; error_code ec;
f.read(buf, 0, ec); f.read(buf, 0, ec);
test.BEAST_EXPECT(ec == errc::bad_file_descriptor); BEAST_EXPECT(ec == errc::bad_file_descriptor);
} }
{ {
error_code ec; error_code ec;
f.write(buf, 0, ec); f.write(buf, 0, ec);
test.BEAST_EXPECT(ec == errc::bad_file_descriptor); BEAST_EXPECT(ec == errc::bad_file_descriptor);
} }
} }
@ -117,7 +117,7 @@ test_file(beast::unit_test::suite& test)
error_code ec; error_code ec;
create(path); create(path);
f.open(path, file_mode::read, ec); f.open(path, file_mode::read, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
remove(path); remove(path);
} }
@ -129,7 +129,7 @@ test_file(beast::unit_test::suite& test)
error_code ec; error_code ec;
create(path); create(path);
f.open(path, file_mode::scan, ec); f.open(path, file_mode::scan, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
remove(path); remove(path);
} }
@ -139,18 +139,18 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
} }
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
} }
remove(path); remove(path);
} }
@ -160,17 +160,17 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
f.open(path, file_mode::write_new, ec); f.open(path, file_mode::write_new, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
} }
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
f.open(path, file_mode::write_new, ec); f.open(path, file_mode::write_new, ec);
test.BEAST_EXPECT(ec); BEAST_EXPECT(ec);
} }
remove(path); remove(path);
} }
@ -180,18 +180,18 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
f.open(path, file_mode::write_existing, ec); f.open(path, file_mode::write_existing, ec);
test.BEAST_EXPECT(ec); BEAST_EXPECT(ec);
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
} }
{ {
File f; File f;
error_code ec; error_code ec;
create(path); create(path);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
f.open(path, file_mode::write_existing, ec); f.open(path, file_mode::write_existing, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
remove(path); remove(path);
} }
@ -201,18 +201,18 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
f.open(path, file_mode::append, ec); f.open(path, file_mode::append, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
} }
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
f.open(path, file_mode::append, ec); f.open(path, file_mode::append, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
} }
remove(path); remove(path);
} }
@ -222,19 +222,19 @@ test_file(beast::unit_test::suite& test)
{ {
File f; File f;
error_code ec; error_code ec;
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
f.open(path, file_mode::append_existing, ec); f.open(path, file_mode::append_existing, ec);
test.BEAST_EXPECT(ec); BEAST_EXPECT(ec);
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
} }
remove(path); remove(path);
{ {
File f; File f;
error_code ec; error_code ec;
create(path); create(path);
test.BEAST_EXPECT(fs::exists(path)); BEAST_EXPECT(fs::exists(path));
f.open(path, file_mode::append_existing, ec); f.open(path, file_mode::append_existing, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
remove(path); remove(path);
} }
@ -245,19 +245,19 @@ test_file(beast::unit_test::suite& test)
File f1; File f1;
error_code ec; error_code ec;
f1.open(path, file_mode::write, ec); f1.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(f1.is_open()); BEAST_EXPECT(f1.is_open());
// move constructor // move constructor
File f2(std::move(f1)); File f2(std::move(f1));
test.BEAST_EXPECT(! f1.is_open()); BEAST_EXPECT(! f1.is_open());
test.BEAST_EXPECT(f2.is_open()); BEAST_EXPECT(f2.is_open());
// move assignment // move assignment
File f3; File f3;
f3 = std::move(f2); f3 = std::move(f2);
test.BEAST_EXPECT(! f2.is_open()); BEAST_EXPECT(! f2.is_open());
test.BEAST_EXPECT(f3.is_open()); BEAST_EXPECT(f3.is_open());
} }
remove(path); remove(path);
} }
@ -268,9 +268,9 @@ test_file(beast::unit_test::suite& test)
File f; File f;
error_code ec; error_code ec;
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
remove(path); remove(path);
} }
@ -283,15 +283,15 @@ test_file(beast::unit_test::suite& test)
File f1; File f1;
f1.open(path, file_mode::write, ec); f1.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
File f2; File f2;
f2.open(path2, file_mode::write, ec); f2.open(path2, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
f2 = std::move(f1); f2 = std::move(f1);
test.BEAST_EXPECT(! f1.is_open()); BEAST_EXPECT(! f1.is_open());
test.BEAST_EXPECT(f2.is_open()); BEAST_EXPECT(f2.is_open());
} }
remove(path); remove(path);
remove(path2); remove(path2);
@ -303,9 +303,9 @@ test_file(beast::unit_test::suite& test)
File f; File f;
error_code ec; error_code ec;
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
f = std::move(f); f = std::move(f);
test.BEAST_EXPECT(f.is_open()); BEAST_EXPECT(f.is_open());
} }
remove(path); remove(path);
} }
@ -317,11 +317,11 @@ test_file(beast::unit_test::suite& test)
auto none = f.native_handle(); auto none = f.native_handle();
error_code ec; error_code ec;
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
auto fd = f.native_handle(); auto fd = f.native_handle();
test.BEAST_EXPECT(fd != none); BEAST_EXPECT(fd != none);
f.native_handle(none); f.native_handle(none);
test.BEAST_EXPECT(! f.is_open()); BEAST_EXPECT(! f.is_open());
} }
remove(path); remove(path);
} }
@ -335,21 +335,21 @@ test_file(beast::unit_test::suite& test)
File f; File f;
error_code ec; error_code ec;
f.open(path, file_mode::write, ec); f.open(path, file_mode::write, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
f.write(s.data(), s.size(), ec); f.write(s.data(), s.size(), ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
auto size = f.size(ec); auto size = f.size(ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(size == s.size()); BEAST_EXPECT(size == s.size());
auto pos = f.pos(ec); auto pos = f.pos(ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(pos == size); BEAST_EXPECT(pos == size);
f.close(ec); f.close(ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
} }
// read // read
@ -357,29 +357,29 @@ test_file(beast::unit_test::suite& test)
File f; File f;
error_code ec; error_code ec;
f.open(path, file_mode::read, ec); f.open(path, file_mode::read, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
std::string buf; std::string buf;
buf.resize(s.size()); buf.resize(s.size());
f.read(&buf[0], buf.size(), ec); f.read(&buf[0], buf.size(), ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(buf == s); BEAST_EXPECT(buf == s);
f.seek(1, ec); f.seek(1, ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
buf.resize(3); buf.resize(3);
f.read(&buf[0], buf.size(), ec); f.read(&buf[0], buf.size(), ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(buf == "ell"); BEAST_EXPECT(buf == "ell");
auto pos = f.pos(ec); auto pos = f.pos(ec);
test.BEAST_EXPECT(! ec); BEAST_EXPECT(! ec);
test.BEAST_EXPECT(pos == 4); BEAST_EXPECT(pos == 4);
} }
remove(path); remove(path);
} }
test.BEAST_EXPECT(! fs::exists(path)); BEAST_EXPECT(! fs::exists(path));
} }
} // beast } // beast

View File

@ -27,7 +27,7 @@ public:
void void
run() run()
{ {
test_file<file_win32>(*this); test_file<file_win32>();
} }
}; };

View File

@ -34,7 +34,7 @@ public:
{ {
flat_buffer b(30); flat_buffer b(30);
BEAST_EXPECT(b.max_size() == 30); BEAST_EXPECT(b.max_size() == 30);
test_dynamic_buffer(*this, b); test_dynamic_buffer(b);
} }
void void

View File

@ -34,8 +34,7 @@ public:
void void
testDynamicBuffer() testDynamicBuffer()
{ {
flat_static_buffer<13> b; test_dynamic_buffer(flat_static_buffer<13>{});
test_dynamic_buffer(*this, b);
} }
void void

View File

@ -58,7 +58,7 @@ public:
{ {
multi_buffer b(30); multi_buffer b(30);
BEAST_EXPECT(b.max_size() == 30); BEAST_EXPECT(b.max_size() == 30);
test_dynamic_buffer(*this, b); test_dynamic_buffer(b);
} }
void void

View File

@ -23,29 +23,22 @@ class saved_handler_test : public unit_test::suite
public: public:
class handler class handler
{ {
unit_test::suite& s_;
bool failed_ = true; bool failed_ = true;
bool throw_on_move_ = false; bool throw_on_move_ = false;
public: public:
handler() = default;
handler(handler const&) = delete; handler(handler const&) = delete;
handler& operator=(handler&&) = delete; handler& operator=(handler&&) = delete;
handler& operator=(handler const&) = delete; handler& operator=(handler const&) = delete;
~handler() ~handler()
{ {
s_.BEAST_EXPECT(! failed_); BEAST_EXPECT(! failed_);
}
explicit
handler(unit_test::suite& s)
: s_(s)
{
} }
handler(handler&& other) handler(handler&& other)
: s_(other.s_) : failed_(boost::exchange(
, failed_(boost::exchange(
other.failed_, false)) other.failed_, false))
{ {
if(throw_on_move_) if(throw_on_move_)
@ -61,28 +54,21 @@ public:
class unhandler class unhandler
{ {
unit_test::suite& s_;
bool invoked_ = false; bool invoked_ = false;
public: public:
unhandler() = default;
unhandler(unhandler const&) = delete; unhandler(unhandler const&) = delete;
unhandler& operator=(unhandler&&) = delete; unhandler& operator=(unhandler&&) = delete;
unhandler& operator=(unhandler const&) = delete; unhandler& operator=(unhandler const&) = delete;
~unhandler() ~unhandler()
{ {
s_.BEAST_EXPECT(! invoked_); BEAST_EXPECT(! invoked_);
}
explicit
unhandler(unit_test::suite& s)
: s_(s)
{
} }
unhandler(unhandler&& other) unhandler(unhandler&& other)
: s_(other.s_) : invoked_(boost::exchange(
, invoked_(boost::exchange(
other.invoked_, false)) other.invoked_, false))
{ {
} }
@ -116,17 +102,17 @@ public:
saved_handler sh; saved_handler sh;
BEAST_EXPECT(! sh.has_value()); BEAST_EXPECT(! sh.has_value());
sh.emplace(handler{*this}); sh.emplace(handler{});
BEAST_EXPECT(sh.has_value()); BEAST_EXPECT(sh.has_value());
sh.invoke(); sh.invoke();
BEAST_EXPECT(! sh.has_value()); BEAST_EXPECT(! sh.has_value());
sh.emplace(handler{*this}, std::allocator<char>{}); sh.emplace(handler{}, std::allocator<char>{});
BEAST_EXPECT(sh.has_value()); BEAST_EXPECT(sh.has_value());
sh.invoke(); sh.invoke();
BEAST_EXPECT(! sh.has_value()); BEAST_EXPECT(! sh.has_value());
sh.emplace(unhandler{*this}); sh.emplace(unhandler{});
BEAST_EXPECT(sh.has_value()); BEAST_EXPECT(sh.has_value());
} }

View File

@ -47,8 +47,7 @@ public:
void void
testDynamicBuffer() testDynamicBuffer()
{ {
static_buffer<13> b; test_dynamic_buffer(static_buffer<13>{});
test_dynamic_buffer(*this, b);
} }
void void

View File

@ -114,7 +114,7 @@ struct legacy_handler
template<class F> template<class F>
static static
void void
test(unit_test::suite& suite, F const& f) test(F const& f)
{ {
{ {
bool hook_invoked = false; bool hook_invoked = false;
@ -126,29 +126,29 @@ struct legacy_handler
{ {
lambda_invoked =true; lambda_invoked =true;
}, &h); }, &h);
suite.BEAST_EXPECT(hook_invoked); BEAST_EXPECT(hook_invoked);
suite.BEAST_EXPECT(lambda_invoked); BEAST_EXPECT(lambda_invoked);
} }
{ {
bool hook_invoked = false; bool hook_invoked = false;
auto h = f(legacy_handler{hook_invoked}); auto h = f(legacy_handler{hook_invoked});
using net::asio_handler_allocate; using net::asio_handler_allocate;
asio_handler_allocate(0, &h); asio_handler_allocate(0, &h);
suite.BEAST_EXPECT(hook_invoked); BEAST_EXPECT(hook_invoked);
} }
{ {
bool hook_invoked = false; bool hook_invoked = false;
auto h = f(legacy_handler{hook_invoked}); auto h = f(legacy_handler{hook_invoked});
using net::asio_handler_deallocate; using net::asio_handler_deallocate;
asio_handler_deallocate(nullptr, 0, &h); asio_handler_deallocate(nullptr, 0, &h);
suite.BEAST_EXPECT(hook_invoked); BEAST_EXPECT(hook_invoked);
} }
{ {
bool hook_invoked = false; bool hook_invoked = false;
auto h = f(legacy_handler{hook_invoked}); auto h = f(legacy_handler{hook_invoked});
using net::asio_handler_is_continuation; using net::asio_handler_is_continuation;
asio_handler_is_continuation(&h); asio_handler_is_continuation(&h);
suite.BEAST_EXPECT(hook_invoked); BEAST_EXPECT(hook_invoked);
} }
} }
}; };