aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/unittest
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/unittest')
-rw-r--r--tests/unit/unittest/mocksqlitestatement.h3
-rw-r--r--tests/unit/unittest/sqlitestatement-test.cpp59
2 files changed, 61 insertions, 1 deletions
diff --git a/tests/unit/unittest/mocksqlitestatement.h b/tests/unit/unittest/mocksqlitestatement.h
index 767840ee8f4..141eb9520ba 100644
--- a/tests/unit/unittest/mocksqlitestatement.h
+++ b/tests/unit/unittest/mocksqlitestatement.h
@@ -41,9 +41,10 @@ public:
MOCK_CONST_METHOD1(fetchLongValue, long (int));
MOCK_CONST_METHOD1(fetchLongLongValue, long long (int));
MOCK_CONST_METHOD1(fetchDoubleValue, double (int));
- MOCK_CONST_METHOD1(fetchSmallStringValue, Utils::SmallString (int));
+ MOCK_CONST_METHOD1(fetchSmallStringValue, Utils::SmallString(int));
MOCK_CONST_METHOD1(fetchSmallStringViewValue, Utils::SmallStringView(int));
MOCK_CONST_METHOD1(fetchPathStringValue, Utils::PathString (int));
+ MOCK_CONST_METHOD1(fetchValueView, Sqlite::ValueView(int));
template<typename Type>
Type fetchValue(int column) const;
diff --git a/tests/unit/unittest/sqlitestatement-test.cpp b/tests/unit/unittest/sqlitestatement-test.cpp
index 6749742b77b..9f14f5b852b 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