mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-14 00:42:53 +00:00
statement unit tests
This commit is contained in:
@@ -26,7 +26,7 @@ public:
|
||||
statement(const statement&) = delete;
|
||||
statement(statement&& other) noexcept : statement_base(other) { other.reset(); }
|
||||
statement& operator=(const statement&) = delete;
|
||||
statement& operator=(statement&& rhs) noexcept { swap(std::move(rhs)); return *this; }
|
||||
statement& operator=(statement&& rhs) noexcept { swap(rhs); return *this; }
|
||||
~statement() = default;
|
||||
|
||||
using executor_type = typename Stream::executor_type;
|
||||
|
||||
@@ -37,6 +37,9 @@ add_executable(
|
||||
unit/detail/auxiliar/static_string.cpp
|
||||
unit/detail/auxiliar/rows_iterator.cpp
|
||||
unit/detail/auxiliar/field_type_traits.cpp
|
||||
unit/detail/network_algorithms/read_one_row.cpp
|
||||
unit/detail/network_algorithms/read_some_rows.cpp
|
||||
unit/detail/network_algorithms/read_all_rows.cpp
|
||||
unit/detail/protocol/capabilities.cpp
|
||||
# unit/detail/protocol/date.cpp
|
||||
unit/detail/protocol/null_bitmap_traits.cpp
|
||||
@@ -45,10 +48,6 @@ add_executable(
|
||||
unit/detail/protocol/deserialize_binary_field.cpp
|
||||
unit/detail/protocol/deserialize_row.cpp
|
||||
|
||||
unit/detail/network_algorithms/read_one_row.cpp
|
||||
unit/detail/network_algorithms/read_some_rows.cpp
|
||||
unit/detail/network_algorithms/read_all_rows.cpp
|
||||
|
||||
unit/field_view.cpp
|
||||
unit/field.cpp
|
||||
unit/row_view.cpp
|
||||
@@ -59,7 +58,7 @@ add_executable(
|
||||
unit/metadata_collection_view.cpp
|
||||
unit/error.cpp
|
||||
unit/execute_params.cpp
|
||||
# unit/prepared_statement.cpp
|
||||
unit/statement.cpp
|
||||
# unit/resultset.cpp
|
||||
# unit/connection.cpp
|
||||
unit/entry_point.cpp
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019-2022 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#include <boost/mysql/detail/protocol/channel.hpp>
|
||||
#include <boost/mysql/tcp.hpp>
|
||||
#include "test_common.hpp"
|
||||
#include "test_stream.hpp"
|
||||
#include <boost/mysql/statement_base.hpp>
|
||||
#include <boost/asio/ip/tcp.hpp>
|
||||
#include <boost/asio/strand.hpp>
|
||||
#include <boost/test/unit_test_suite.hpp>
|
||||
|
||||
using namespace boost::mysql::detail;
|
||||
using boost::mysql::statement_base;
|
||||
|
||||
using chan_t = boost::mysql::detail::channel<boost::mysql::test::test_stream>;
|
||||
using stmt_t = statement_base<boost::mysql::test::test_stream>;
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(test_prepared_statement)
|
||||
|
||||
// default ctor
|
||||
BOOST_AUTO_TEST_CASE(default_ctor)
|
||||
{
|
||||
stmt_t s;
|
||||
BOOST_TEST(!s.valid());
|
||||
}
|
||||
|
||||
// init ctor
|
||||
BOOST_AUTO_TEST_CASE(init_ctor)
|
||||
{
|
||||
chan_t chan;
|
||||
stmt_t s (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
|
||||
BOOST_TEST(s.valid());
|
||||
BOOST_TEST(s.id() == 10u);
|
||||
BOOST_TEST(s.num_params() == 8u);
|
||||
}
|
||||
|
||||
// move ctor
|
||||
BOOST_AUTO_TEST_CASE(move_ctor_from_invalid)
|
||||
{
|
||||
stmt_t s1;
|
||||
stmt_t s2 {std::move(s1)};
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(!s2.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_ctor_from_valid)
|
||||
{
|
||||
chan_t chan;
|
||||
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
|
||||
stmt_t s2 (std::move(s1));
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(s2.valid());
|
||||
BOOST_TEST(s2.id() == 10u);
|
||||
BOOST_TEST(s2.num_params() == 8u);
|
||||
}
|
||||
|
||||
// move assign
|
||||
BOOST_AUTO_TEST_CASE(move_assign_invalid_to_invalid)
|
||||
{
|
||||
stmt_t s1;
|
||||
stmt_t s2;
|
||||
s2 = std::move(s1);
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(!s2.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_assign_invalid_to_valid)
|
||||
{
|
||||
chan_t chan;
|
||||
stmt_t s1;
|
||||
stmt_t s2 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
|
||||
s2 = std::move(s1);
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(!s2.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_assign_valid_to_invalid)
|
||||
{
|
||||
chan_t chan;
|
||||
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
|
||||
stmt_t s2;
|
||||
s2 = std::move(s1);
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(s2.valid());
|
||||
BOOST_TEST(s2.id() == 10u);
|
||||
BOOST_TEST(s2.num_params() == 8u);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_assign_valid_to_valid)
|
||||
{
|
||||
chan_t chan;
|
||||
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
|
||||
stmt_t s2 (chan, com_stmt_prepare_ok_packet{1, 2, 3, 4});
|
||||
s2 = std::move(s1);
|
||||
BOOST_TEST(!s1.valid());
|
||||
BOOST_TEST(s2.valid());
|
||||
BOOST_TEST(s2.id() == 10u);
|
||||
BOOST_TEST(s2.num_params() == 8u);
|
||||
}
|
||||
|
||||
// rebind executor
|
||||
BOOST_AUTO_TEST_CASE(rebind_executor)
|
||||
{
|
||||
using other_executor = boost::asio::strand<boost::asio::io_context::executor_type>;
|
||||
using rebound_type = boost::mysql::tcp_prepared_statement::rebind_executor<other_executor>::other;
|
||||
using expected_type = boost::mysql::statement_base<
|
||||
boost::asio::basic_stream_socket<
|
||||
boost::asio::ip::tcp,
|
||||
other_executor
|
||||
>
|
||||
>;
|
||||
BOOST_TEST((std::is_same<rebound_type, expected_type>::value));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END() // test_prepared_statement
|
||||
86
test/unit/statement.cpp
Normal file
86
test/unit/statement.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// Copyright (c) 2019-2022 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#include <boost/mysql/statement.hpp>
|
||||
#include <boost/mysql/detail/protocol/prepared_statement_messages.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
#include "test_common.hpp"
|
||||
#include "test_channel.hpp"
|
||||
#include "test_stream.hpp"
|
||||
|
||||
using namespace boost::mysql::test;
|
||||
using boost::mysql::detail::com_stmt_prepare_ok_packet;
|
||||
using statement_t = boost::mysql::statement<test_stream>;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(test_statement)
|
||||
|
||||
test_channel chan = create_channel();
|
||||
|
||||
BOOST_AUTO_TEST_CASE(default_ctor)
|
||||
{
|
||||
statement_t stmt;
|
||||
BOOST_TEST(!stmt.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(member_fns)
|
||||
{
|
||||
statement_t stmt;
|
||||
stmt.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
|
||||
|
||||
BOOST_TEST(stmt.valid());
|
||||
BOOST_TEST(stmt.id() == 1);
|
||||
BOOST_TEST(stmt.num_params() == 3);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_ctor_from_invalid)
|
||||
{
|
||||
statement_t stmt1;
|
||||
statement_t stmt2 (std::move(stmt1));
|
||||
|
||||
BOOST_TEST(!stmt2.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_ctor_from_valid)
|
||||
{
|
||||
statement_t stmt1;
|
||||
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
|
||||
statement_t stmt2 (std::move(stmt1));
|
||||
|
||||
BOOST_TEST(stmt2.valid());
|
||||
BOOST_TEST(stmt2.id() == 1);
|
||||
BOOST_TEST(stmt2.num_params() == 3);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_assign_from_invalid)
|
||||
{
|
||||
statement_t stmt1;
|
||||
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
|
||||
statement_t stmt2;
|
||||
|
||||
stmt1 = std::move(stmt2);
|
||||
BOOST_TEST(!stmt1.valid());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(move_assign_from_valid)
|
||||
{
|
||||
statement_t stmt1;
|
||||
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 4, 8, 3, 9 });
|
||||
statement_t stmt2;
|
||||
stmt2.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
|
||||
|
||||
stmt1 = std::move(stmt2);
|
||||
BOOST_TEST(stmt1.valid());
|
||||
BOOST_TEST(stmt1.id() == 1);
|
||||
BOOST_TEST(stmt1.num_params() == 3);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user