From 3e7bd26b7fbb5cac86ed2df000a11710a7b9c521 Mon Sep 17 00:00:00 2001 From: rbock Date: Wed, 7 Oct 2015 20:48:20 +0200 Subject: [PATCH] Added tests for insert's dynamic_set, too --- test_static_asserts/insert.cpp | 73 +++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/test_static_asserts/insert.cpp b/test_static_asserts/insert.cpp index ced14550..6090c2f3 100644 --- a/test_static_asserts/insert.cpp +++ b/test_static_asserts/insert.cpp @@ -30,8 +30,8 @@ namespace { - static constexpr auto t = test::TabBar{}; - static constexpr auto f = test::TabFoo{}; + constexpr auto t = test::TabBar{}; + constexpr auto f = test::TabFoo{}; template void print_type_on_error(std::true_type) @@ -59,6 +59,22 @@ namespace print_type_on_error(ExpectedReturnType{}); } + template + void set_dynamic_check(const Assignments&... assignments) + { + static auto db = MockDb{}; + using CheckResult = sqlpp::check_insert_dynamic_set_t; + using ExpectedCheckResult = std::is_same; + static_assert(ExpectedCheckResult::value, "Unexpected check result"); + print_type_on_error(ExpectedCheckResult{}); + + using ReturnType = decltype(dynamic_insert_into(db, t).dynamic_set(assignments...)); + using ExpectedReturnType = + sqlpp::logic::all_t::value>; + static_assert(ExpectedReturnType::value, "Unexpected return type"); + print_type_on_error(ExpectedReturnType{}); + } + // column alpha is not allowed, column gamma is required void static_set() { @@ -98,9 +114,62 @@ namespace // Try multiple tables set_static_check(f.omega = 41, t.gamma = true); } + + // column alpha is not allowed, column gamma is required + void dynamic_set() + { + // OK + set_dynamic_check(t.gamma = true); + set_dynamic_check(t.beta = "fortytwo", t.gamma = true); + set_dynamic_check(t.beta = "fortytwo", t.gamma = true, t.delta = 42); + set_dynamic_check(t.delta = 42, t.beta = "fortytwo", t.gamma = true); + set_dynamic_check(t.delta = 42, t.gamma = true, t.beta = "fortytwo"); + set_dynamic_check(t.gamma = true, t.delta = 42, t.beta = "fortytwo"); + + // Try setting alpha + set_dynamic_check(t.alpha = 17, t.beta = "whatever"); + set_dynamic_check(t.beta = "whatever", t.alpha = 17); + + // Omitting gamma is OK in the dynamic case, since we have to assume that it gets added later + set_dynamic_check(t.delta = 42); + set_dynamic_check(t.beta = "whatever"); + + // Same with no arguments + set_dynamic_check(); + + // Try none-assignment arguments + set_dynamic_check(t.delta == 42, t.delta = 42, t.beta = "fortytwo", + t.gamma = true); + set_dynamic_check(17, t.delta = 42, t.beta = "fortytwo", t.gamma = true); + set_dynamic_check(t.delta = 42, t.beta = "fortytwo", t.gamma = true, + "EEEK"); + + // Try duplicates + set_dynamic_check(t.delta = 41, t.delta = 42, t.beta = "fortytwo", + t.gamma = true); + set_dynamic_check(t.beta = "fortyone", t.delta = 41, t.beta = "fortytwo", + t.gamma = true); + set_dynamic_check(t.gamma = false, t.delta = 41, t.beta = "fortytwo", + t.gamma = true); + + // Try multiple tables + set_dynamic_check(f.omega = 41, t.gamma = true); + + // Try dynamic_set on a non-dynamic insert + using CheckResult = sqlpp::check_insert_dynamic_set_t; + using ExpectedCheckResult = std::is_same; + static_assert(ExpectedCheckResult::value, "Unexpected check result"); + print_type_on_error(ExpectedCheckResult{}); + + using ReturnType = decltype(insert_into(t).dynamic_set()); + using ExpectedReturnType = std::is_same; + static_assert(ExpectedReturnType::value, "Unexpected return type"); + print_type_on_error(ExpectedReturnType{}); + } } int main(int, char**) { static_set(); + dynamic_set(); }