aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2020-05-27 00:09:19 +0200
committerMarco Bubke <marco.bubke@qt.io>2020-05-27 13:26:07 +0000
commita9a205486d734fcdbba561f5fac248ca530b6d14 (patch)
tree7aa9ccdc6bd1564ae8c212d6cbdcece2da9530e0 /tests/unit
parent9f9140b196bb28d0b4fcb13b1a37ea4e6e14fe56 (diff)
Sqlite: Improve SqliteStatement column check
We have done it for every getter. Now we do it only once as we ask for the values. It simplifies the code and the test and could even improve performance. Change-Id: Ia7d4a33a77ec7c0a5fda548424fbf8b192f07511 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/unittest/mocksqlitestatement.h4
-rw-r--r--tests/unit/unittest/sqlitestatement-test.cpp78
2 files changed, 48 insertions, 34 deletions
diff --git a/tests/unit/unittest/mocksqlitestatement.h b/tests/unit/unittest/mocksqlitestatement.h
index 351c6708a5..7be7f3f05e 100644
--- a/tests/unit/unittest/mocksqlitestatement.h
+++ b/tests/unit/unittest/mocksqlitestatement.h
@@ -53,7 +53,9 @@ public:
MOCK_METHOD2(bind, void (int, Utils::SmallStringView));
MOCK_METHOD2(bind, void (int, long));
- MOCK_METHOD1(prepare, void (Utils::SmallStringView sqlStatement));
+ MOCK_METHOD1(prepare, void(Utils::SmallStringView sqlStatement));
+
+ MOCK_METHOD1(checkColumnCount, void(int));
};
template<>
diff --git a/tests/unit/unittest/sqlitestatement-test.cpp b/tests/unit/unittest/sqlitestatement-test.cpp
index 2b8942dbf1..4b59d52af2 100644
--- a/tests/unit/unittest/sqlitestatement-test.cpp
+++ b/tests/unit/unittest/sqlitestatement-test.cpp
@@ -178,37 +178,6 @@ TEST_F(SqliteStatement, Value)
ASSERT_THAT(statement.fetchValueView(2), Eq(2));
}
-TEST_F(SqliteStatement, ThrowNoValuesToFetchForNotSteppedStatement)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.fetchValue<int>(0), Sqlite::NoValuesToFetch);
-}
-
-TEST_F(SqliteStatement, ThrowNoValuesToFetchForDoneStatement)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
- while (statement.next()) {}
-
- ASSERT_THROW(statement.fetchValue<int>(0), Sqlite::NoValuesToFetch);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNegativeColumn)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
- statement.next();
-
- ASSERT_THROW(statement.fetchValue<int>(-1), Sqlite::InvalidColumnFetched);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNotExistingColumn)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
- statement.next();
-
- ASSERT_THROW(statement.fetchValue<int>(2), Sqlite::InvalidColumnFetched);
-}
-
TEST_F(SqliteStatement, ToIntegerValue)
{
auto value = ReadStatement::toValue<int>("SELECT number FROM test WHERE name='foo'", database);
@@ -567,7 +536,7 @@ TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndContainerQueryValues)
TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryValues)
{
std::vector<double> queryValues = {40, 23.3};
- ReadStatement statement("SELECT name, number FROM test WHERE number=?", database);
+ ReadStatement statement("SELECT name FROM test WHERE number=?", database);
std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3, queryValues);
@@ -591,7 +560,7 @@ TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryTupleValu
{
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString>;
std::vector<Tuple> queryValues = {{"poo", "40"}, {"bar", "blah"}};
- ReadStatement statement("SELECT name, number FROM test WHERE name= ? AND number=?", database);
+ ReadStatement statement("SELECT name FROM test WHERE name= ? AND number=?", database);
std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3, queryValues);
@@ -855,4 +824,47 @@ TEST_F(SqliteStatement, ResetIfExecuteThrowsException)
ASSERT_ANY_THROW(mockStatement.execute());
}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValue)
+{
+ SqliteTestStatement statement("SELECT name, number FROM test", database);
+
+ ASSERT_THROW(statement.value<int>(), Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValues)
+{
+ SqliteTestStatement statement("SELECT name, number FROM test", database);
+
+ ASSERT_THROW(statement.values<int>(1), Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithArguments)
+{
+ SqliteTestStatement statement("SELECT name, number FROM test WHERE name=?", database);
+
+ ASSERT_THROW(statement.values<int>(1, 2), Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithVectorArguments)
+{
+ SqliteTestStatement statement("SELECT name, number FROM test", database);
+
+ ASSERT_THROW(statement.values<int>(1, std::vector<int>{}), Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithTupleArguments)
+{
+ SqliteTestStatement statement("SELECT name, number FROM test", database);
+
+ ASSERT_THROW(statement.values<int>(1, std::vector<std::tuple<int>>{}),
+ Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForToValues)
+{
+ ASSERT_THROW(SqliteTestStatement::toValue<int>("SELECT name, number FROM test", database),
+ Sqlite::ColumnCountDoesNotMatch);
+}
+
} // namespace