aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/unittest/sqlitestatement-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/unittest/sqlitestatement-test.cpp')
-rw-r--r--tests/unit/unittest/sqlitestatement-test.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/unit/unittest/sqlitestatement-test.cpp b/tests/unit/unittest/sqlitestatement-test.cpp
index 6749742b77..9f14f5b852 100644
--- a/tests/unit/unittest/sqlitestatement-test.cpp
+++ b/tests/unit/unittest/sqlitestatement-test.cpp
@@ -37,6 +37,7 @@
#include <QDir>
+#include <deque>
#include <vector>
namespace {
@@ -1032,4 +1033,62 @@ TEST_F(SqliteStatement, ReadCallbackCallsResetIfExceptionIsThrown)
Sqlite::StatementHasError);
}
+TEST_F(SqliteStatement, ReadToContainer)
+{
+ std::deque<FooValue> values;
+ ReadStatement statement("SELECT number FROM test", database);
+
+ statement.readTo<1>(values);
+
+ ASSERT_THAT(values, UnorderedElementsAre(Eq("blah"), Eq(23.3), Eq(40)));
+}
+
+TEST_F(SqliteStatement, ReadToContainerCallCallbackWithArguments)
+{
+ std::deque<FooValue> values;
+ ReadStatement statement("SELECT number FROM test WHERE value=?", database);
+
+ statement.readTo(values, 2);
+
+ ASSERT_THAT(values, ElementsAre(Eq(23.3)));
+}
+
+TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForReadTo)
+{
+ std::deque<FooValue> values;
+ SqliteTestStatement statement("SELECT name, number FROM test", database);
+
+ ASSERT_THROW(statement.readTo<1>(values, 2), Sqlite::ColumnCountDoesNotMatch);
+}
+
+TEST_F(SqliteStatement, ReadToCallsResetAfterPushingAllValuesBack)
+{
+ std::deque<FooValue> values;
+ MockSqliteStatement mockStatement;
+
+ EXPECT_CALL(mockStatement, reset());
+
+ mockStatement.readTo(values);
+}
+
+TEST_F(SqliteStatement, ReadToThrowsForError)
+{
+ std::deque<FooValue> values;
+ MockSqliteStatement mockStatement;
+ ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
+
+ ASSERT_THROW(mockStatement.readTo(values), Sqlite::StatementHasError);
+}
+
+TEST_F(SqliteStatement, ReadToCallsResetIfExceptionIsThrown)
+{
+ std::deque<FooValue> values;
+ MockSqliteStatement mockStatement;
+ ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
+
+ EXPECT_CALL(mockStatement, reset());
+
+ EXPECT_THROW(mockStatement.readTo(values), Sqlite::StatementHasError);
+}
+
} // namespace