mirror of
https://github.com/cuberite/SQLiteCpp.git
synced 2025-08-06 02:36:04 -04:00
add unit test for variadic bind
This commit is contained in:
parent
3022d50b38
commit
808a9c894e
@ -99,6 +99,7 @@ set(SQLITECPP_TESTS
|
|||||||
tests/Database_test.cpp
|
tests/Database_test.cpp
|
||||||
tests/Statement_test.cpp
|
tests/Statement_test.cpp
|
||||||
tests/Backup_test.cpp
|
tests/Backup_test.cpp
|
||||||
|
tests/VariadicBind_test.cpp
|
||||||
)
|
)
|
||||||
source_group(tests FILES ${SQLITECPP_TESTS})
|
source_group(tests FILES ${SQLITECPP_TESTS})
|
||||||
|
|
||||||
|
77
tests/VariadicBind_test.cpp
Normal file
77
tests/VariadicBind_test.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* @file VariadicBind_test.cpp
|
||||||
|
* @ingroup tests
|
||||||
|
* @brief Test of variadic bind
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 Paul Dreik (github@pauldreik.se)
|
||||||
|
*
|
||||||
|
* Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt
|
||||||
|
* or copy at http://opensource.org/licenses/MIT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <SQLiteCpp/Database.h>
|
||||||
|
#include <SQLiteCpp/Statement.h>
|
||||||
|
#include <SQLiteCpp/VariadicBind.h>
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
//this requires c++14. seems like visual studio 2015 should work (yet untested).
|
||||||
|
#if ( __cplusplus>= 201402L) || ( defined(_MSC_VER) && (_MSC_VER >= 1900) )
|
||||||
|
|
||||||
|
TEST(VariadicBind, invalid) {
|
||||||
|
// Create a new database
|
||||||
|
#if 0
|
||||||
|
SQLite::Database db("variadic_bind_test.db3", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
|
||||||
|
#else
|
||||||
|
SQLite::Database db(":memory:", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXPECT_EQ(0, db.exec("DROP TABLE IF EXISTS test"));
|
||||||
|
EXPECT_EQ(0,
|
||||||
|
db.exec(
|
||||||
|
"CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT DEFAULT 'default') "));
|
||||||
|
EXPECT_TRUE(db.tableExists("test"));
|
||||||
|
|
||||||
|
{
|
||||||
|
SQLite::Statement query(db, "INSERT INTO test VALUES (?, ?)");
|
||||||
|
|
||||||
|
//zero arguments - should give compile time error through a static assert
|
||||||
|
//SQLite::bind(query);
|
||||||
|
|
||||||
|
//bind one argument less than expected - should be fine.
|
||||||
|
//the unspecified argument should be set to null, not the default.
|
||||||
|
SQLite::bind(query, 1);
|
||||||
|
EXPECT_EQ(1, query.exec());
|
||||||
|
query.reset();
|
||||||
|
|
||||||
|
//bind all arguments - should work just fine
|
||||||
|
SQLite::bind(query, 2, "two");
|
||||||
|
EXPECT_EQ(1, query.exec());
|
||||||
|
query.reset();
|
||||||
|
|
||||||
|
//bind too many arguments - should throw.
|
||||||
|
EXPECT_THROW(SQLite::bind(query, 3, "three", 0), SQLite::Exception);
|
||||||
|
EXPECT_EQ(1, query.exec());
|
||||||
|
}
|
||||||
|
|
||||||
|
//make sure the content is as expected
|
||||||
|
{
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
SQLite::Statement query(db, "SELECT id, value FROM test ORDER BY id"s);
|
||||||
|
std::vector<std::pair<int, std::string> > results;
|
||||||
|
while (query.executeStep()) {
|
||||||
|
const int id = query.getColumn(0);
|
||||||
|
std::string value = query.getColumn(1);
|
||||||
|
results.emplace_back( id, std::move(value) );
|
||||||
|
}
|
||||||
|
EXPECT_EQ(std::size_t(3), results.size());
|
||||||
|
|
||||||
|
EXPECT_EQ(std::make_pair(1,""s), results.at(0));
|
||||||
|
EXPECT_EQ(std::make_pair(2,"two"s), results.at(1));
|
||||||
|
EXPECT_EQ(std::make_pair(3,"three"s), results.at(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // c++14
|
Loading…
x
Reference in New Issue
Block a user