2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 12:52:17 +00:00
Files
mysql/test/unit/metadata_collection_view.cpp
2022-10-05 18:46:55 +02:00

123 lines
3.1 KiB
C++

//
// 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/common_messages.hpp>
#include <boost/mysql/metadata.hpp>
#include <boost/mysql/metadata_collection_view.hpp>
#include <boost/test/unit_test.hpp>
#include <stdexcept>
using boost::mysql::metadata;
using boost::mysql::metadata_collection_view;
using boost::mysql::detail::column_definition_packet;
namespace
{
BOOST_AUTO_TEST_SUITE(test_metadata_collection_view)
metadata makemeta(const char* table_name)
{
column_definition_packet p;
p.table.value = table_name;
return metadata(p, true);
}
std::vector<metadata> makemetas(const std::vector<const char*>& tables)
{
std::vector<metadata> res;
for (const char* t : tables)
res.push_back(makemeta(t));
return res;
}
// This is done via raw pointers, so no exhaustive checking
BOOST_AUTO_TEST_SUITE(range_iteration)
BOOST_AUTO_TEST_CASE(empty)
{
metadata_collection_view v;
BOOST_TEST(v.begin() == nullptr);
BOOST_TEST(v.end() == nullptr);
std::vector<metadata> vec (v.begin(), v.end());
BOOST_TEST(vec.empty());
}
BOOST_AUTO_TEST_CASE(non_empty)
{
auto metas = makemetas({ "table1", "table2" });
metadata_collection_view v (metas.data(), metas.size());
BOOST_TEST(v.begin() != nullptr);
BOOST_TEST(v.end() != nullptr);
std::vector<metadata> vec (v.begin(), v.end());
BOOST_TEST(vec.size() == 2);
BOOST_TEST(vec[0].table() == "table1");
BOOST_TEST(vec[1].table() == "table2");
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(at)
BOOST_AUTO_TEST_CASE(empty)
{
metadata_collection_view v;
BOOST_CHECK_THROW(v.at(0), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(non_empty)
{
auto metas = makemetas({ "table1", "table2" });
metadata_collection_view v (metas.data(), metas.size());
BOOST_TEST(v.at(0).table() == "table1");
BOOST_TEST(v.at(1).table() == "table2");
BOOST_CHECK_THROW(v.at(2), std::out_of_range);
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(operator_square_brackets)
{
auto metas = makemetas({ "table1", "table2", "table3" });
metadata_collection_view v (metas.data(), metas.size());
BOOST_TEST(v[0].table() == "table1");
BOOST_TEST(v[1].table() == "table2");
BOOST_TEST(v[2].table() == "table3");
}
BOOST_AUTO_TEST_SUITE(empty_and_size)
BOOST_AUTO_TEST_CASE(empty)
{
metadata_collection_view v;
BOOST_TEST(v.empty());
BOOST_TEST(v.size() == 0);
}
BOOST_AUTO_TEST_CASE(one_element)
{
auto metas = makemetas({ "table1" });
metadata_collection_view v (metas.data(), metas.size());
BOOST_TEST(!v.empty());
BOOST_TEST(v.size() == 1);
}
BOOST_AUTO_TEST_CASE(several_elements)
{
auto metas = makemetas({ "table1", "table2", "table3" });
metadata_collection_view v (metas.data(), metas.size());
BOOST_TEST(!v.empty());
BOOST_TEST(v.size() == 3);
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()
} // anon namespace