Add move-only handler tests

This commit is contained in:
Vinnie Falco
2018-02-28 13:36:47 -08:00
parent 5a53bd449a
commit dfc5a2ff67
9 changed files with 74 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
Version 161:
* Don't copy the handler in write_some_op
* Add move-only handler tests
--------------------------------------------------------------------------------

View File

@@ -731,8 +731,8 @@ read(
The object must remain valid at least until the
handler is called; ownership is not transferred.
@param handler The handler to be called when the operation
completes. Copies will be made of the handler as required.
@param handler Invoked when the operation completes.
The handler may be moved or copied as needed.
The equivalent function signature of the handler must be:
@code void handler(
error_code const& error, // result of operation,

View File

@@ -610,10 +610,19 @@ public:
);
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_accept(move_only_handler{});
}
void
run() override
{
testAccept();
testMoveOnly();
}
};

View File

@@ -622,12 +622,21 @@ public:
asio_handler_is_continuation(&op);
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_close({}, move_only_handler{});
}
void
run() override
{
testClose();
testSuspend();
testContHook();
testMoveOnly();
}
};

View File

@@ -484,6 +484,14 @@ public:
"permessage-deflate");
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_handshake("", "", move_only_handler{});
}
void
run() override
{
@@ -491,6 +499,7 @@ public:
testExtRead();
testExtWrite();
testExtNegotiate();
testMoveOnly();
}
};

View File

@@ -435,12 +435,21 @@ public:
asio_handler_is_continuation(&op);
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_ping({}, move_only_handler{});
}
void
run() override
{
testPing();
testSuspend();
testContHook();
testMoveOnly();
}
};

View File

@@ -639,6 +639,16 @@ public:
}
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_read_some(
boost::asio::mutable_buffer{},
move_only_handler{});
}
void
run() override
{
@@ -649,6 +659,7 @@ public:
testIssue954();
testIssueBF1();
testIssueBF2();
testMoveOnly();
}
};

View File

@@ -42,6 +42,19 @@ public:
using ws_type =
websocket::stream<test::stream&>;
struct move_only_handler
{
move_only_handler() = default;
move_only_handler(move_only_handler&&) = default;
move_only_handler(move_only_handler const&) = delete;
template<class... Args>
void
operator()(Args&&...) const
{
}
};
enum class kind
{
sync,

View File

@@ -631,6 +631,16 @@ public:
asio_handler_is_continuation(&op);
}
void
testMoveOnly()
{
boost::asio::io_context ioc;
stream<test::stream> ws{ioc};
ws.async_write_some(
true, boost::asio::const_buffer{},
move_only_handler{});
}
void
run() override
{
@@ -639,6 +649,7 @@ public:
testAsyncWriteFrame();
testIssue300();
testContHook();
testMoveOnly();
}
};