#include #include #include #include #include #include "Pgsql_Params.h" #include "PrintTo_Qt.h" using namespace testing; using namespace Pgsql; namespace { void expectValues(const Params &p, const std::vector &expected) { ASSERT_EQ(p.size(), static_cast(expected.size())); for (int i = 0; i < p.size(); ++i) { ASSERT_NE(p.values()[i], nullptr); EXPECT_STREQ(p.values()[i], expected[i].c_str()); } } } TEST(Pgsql_Params, CopyAssignIntoNonEmpty) { Params src; src.add("a"); src.add("bb"); Params dst; dst.add("x"); dst.add("y"); dst.add("z"); dst = src; expectValues(dst, {"a", "bb"}); expectValues(src, {"a", "bb"}); } TEST(Pgsql_Params, CopyAssignIntoEmpty) { Params src; src.add("a"); src.add("bb"); Params dst; dst = src; expectValues(dst, {"a", "bb"}); } TEST(Pgsql_Params, MoveAssignIntoNonEmpty) { Params src; src.add("a"); src.add("bb"); Params dst; dst.add("x"); dst.add("y"); dst.add("z"); dst = std::move(src); expectValues(dst, {"a", "bb"}); } TEST(Pgsql_Params, CopyConstructorDoesNotAliasSource) { Params src; src.add("abc"); Params dst(src); src.clear(); expectValues(dst, {"abc"}); } TEST(Pgsql_Params, CopyPreservesNull) { Params src; src.add(std::optional{}); src.add("v"); Params dst(src); ASSERT_EQ(dst.size(), 2); EXPECT_EQ(dst.values()[0], nullptr); EXPECT_STREQ(dst.values()[1], "v"); }