// Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "googletest.h" #include #include #include #include #include #include #include #include #include #include #include #include using std::int64_t; class SqliteDatabaseMock; class SqliteReadStatementMockBase { public: SqliteReadStatementMockBase() = default; SqliteReadStatementMockBase(Utils::SmallStringView sqlStatement, SqliteDatabaseMock &databaseMock); MOCK_METHOD(std::vector, valuesReturnStringVector, (std::size_t), ()); MOCK_METHOD(std::vector, valuesReturnRowIds, (std::size_t), ()); MOCK_METHOD(std::optional, valueReturnInt64, (), ()); MOCK_METHOD(std::optional, valueReturnBlob, (Utils::SmallStringView, long long), ()); MOCK_METHOD(std::optional, valueReturnInt32, (Utils::SmallStringView), ()); MOCK_METHOD(std::optional, valueReturnInt32, (int, Utils::SmallStringView), ()); MOCK_METHOD(std::optional, valueReturnInt32, (int), ()); MOCK_METHOD(std::optional, valueReturnInt64, (int), ()); MOCK_METHOD(std::optional, valueReturnPathString, (int), ()); MOCK_METHOD(std::optional, valueReturnPathString, (Utils::SmallStringView), ()); MOCK_METHOD(std::optional, valueReturnSmallString, (int), ()); MOCK_METHOD(QmlDesigner::TypeId, valueReturnsTypeId, (long long, Utils::SmallStringView name), ()); MOCK_METHOD(QmlDesigner::TypeId, valueWithTransactionReturnsTypeId, (long long, long long), ()); MOCK_METHOD(QmlDesigner::PropertyDeclarationId, valueWithTransactionReturnsPropertyDeclarationId, (long long, Utils::SmallStringView), ()); MOCK_METHOD((std::tuple), valueReturnsPropertyDeclaration, (long long, Utils::SmallStringView), ()); MOCK_METHOD(std::vector, valuesReturnCacheSourceContexts, (std::size_t), ()); MOCK_METHOD(std::vector, valuesReturnCacheSources, (std::size_t), ()); MOCK_METHOD(QmlDesigner::Cache::SourceNameAndSourceContextId, valueReturnCacheSourceNameAndSourceContextId, (int) ); MOCK_METHOD(Sqlite::TimeStamp, valueWithTransactionReturnsTimeStamp, (Utils::SmallStringView), ()); MOCK_METHOD(int, valueWithTransactionReturnsInt, (Utils::SmallStringView), ()); MOCK_METHOD(QmlDesigner::SourceContextId, valueReturnsSourceContextId, (Utils::SmallStringView), ()); MOCK_METHOD(QmlDesigner::SourceContextId, valueWithTransactionReturnsSourceContextId, (int), ()); MOCK_METHOD(QmlDesigner::SourceId, valueReturnsSourceId, (int, Utils::SmallStringView), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::Type, valueReturnsStorageType, (int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::Types, valuesReturnsStorageTypes, (std::size_t), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::ExportedTypes, valuesReturnsStorageExportedTypes, (std::size_t, int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::PropertyDeclarations, valuesReturnsStoragePropertyDeclarations, (std::size_t, int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::EnumerationDeclarations, valuesReturnsStorageEnumerationDeclarations, (std::size_t, int typeId), ()); MOCK_METHOD(std::vector, rangeReturnStoragePropertyDeclarationViews, (int typeId), ()); MOCK_METHOD(std::vector, rangeReturnStorageFunctionDeclarationViews, (int typeId), ()); MOCK_METHOD(std::vector, rangeReturnStorageSignalDeclarationViews, (int typeId), ()); MOCK_METHOD(std::vector, rangeReturnStorageEnumerationDeclarationViews, (int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::ParameterDeclarations, valuesReturnsStorageParameterDeclarations, (std::size_t, long long), ()); MOCK_METHOD(QmlDesigner::Storage::Synchronization::EnumeratorDeclarations, valuesReturnsStorageEnumeratorDeclarations, (std::size_t, long long), ()); MOCK_METHOD(QmlDesigner::FileStatuses, rangesReturnsFileStatuses, (Utils::span), ()); template auto optionalValue(const QueryTypes &...queryValues) { if constexpr (std::is_same_v) return valueReturnBlob(queryValues...); else if constexpr (std::is_same_v) return valueReturnInt32(queryValues...); else if constexpr (std::is_same_v) return valueReturnInt64(queryValues...); else if constexpr (std::is_same_v) return valueReturnPathString(queryValues...); else if constexpr (std::is_same_v) return valueReturnSmallString(queryValues...); else static_assert(!std::is_same_v, "SqliteReadStatementMock::value does not handle result type!"); } template auto value(const QueryTypes &...queryValues) { if constexpr (std::is_same_v) return valueReturnsTypeId(queryValues...); else if constexpr (std::is_same_v) return valueReturnsPropertyDeclarationId(queryValues...); else if constexpr (std::is_same_v>) return valueReturnsPropertyDeclaration(queryValues...); else if constexpr (std::is_same_v) return valueReturnCacheSourceNameAndSourceContextId(queryValues...); else if constexpr (std::is_same_v) return valueReturnsSourceContextId(queryValues...); else if constexpr (std::is_same_v) return valueReturnsSourceId(queryValues...); else if constexpr (std::is_same_v) return valueReturnsStorageType(queryValues...); else static_assert(!std::is_same_v, "SqliteReadStatementMock::value does not handle result type!"); } template auto valueWithTransaction(const QueryTypes &...queryValues) { if constexpr (std::is_same_v) return valueWithTransactionReturnsTypeId(queryValues...); else if constexpr (std::is_same_v) return valueWithTransactionReturnsPropertyDeclarationId(queryValues...); else if constexpr (std::is_same_v>) return valueReturnsPropertyDeclaration(queryValues...); else if constexpr (std::is_same_v) return valueWithTransactionReturnsSourceContextId(queryValues...); else if constexpr (std::is_same_v) return valueWithTransactionReturnsTimeStamp(queryValues...); else if constexpr (std::is_same_v) return valueWithTransactionReturnsInt(queryValues...); else static_assert(!std::is_same_v, "SqliteReadStatementMock::value does not handle result type!"); } template auto optionalValueWithTransaction(const QueryTypes &...queryValues) { return optionalValue(queryValues...); } template auto values(std::size_t reserveSize, const QueryType &...queryValues) { if constexpr (std::is_same_v) return valuesReturnStringVector(reserveSize); else if constexpr (std::is_same_v) return valuesReturnRowIds(reserveSize); else if constexpr (std::is_same_v) return valuesReturnCacheSourceContexts(reserveSize); else if constexpr (std::is_same_v) return valuesReturnCacheSources(reserveSize); else if constexpr (std::is_same_v) return valuesReturnsStorageTypes(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnsStorageExportedTypes(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnsStoragePropertyDeclarations(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnsStorageParameterDeclarations(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnsStorageEnumerationDeclarations(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnsStorageEnumeratorDeclarations(reserveSize, queryValues...); else static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); } template auto range(const QueryTypes &...queryValues) { if constexpr (std::is_same_v) return rangeReturnStoragePropertyDeclarationViews(queryValues...); else if constexpr (std::is_same_v) return rangeReturnStorageFunctionDeclarationViews(queryValues...); else if constexpr (std::is_same_v) return rangeReturnStorageSignalDeclarationViews(queryValues...); else if constexpr (std::is_same_v) return rangeReturnStorageEnumerationDeclarationViews(queryValues...); else if constexpr (std::is_same_v) return rangesReturnsFileStatuses(queryValues...); else static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); } template auto rangeWithTransaction([[maybe_unused]] const QueryTypes &...queryValues) { static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); } template void readCallback([[maybe_unused]] Callable &&callable, [[maybe_unused]] const QueryTypes &...queryValues) {} public: Utils::SmallString sqlStatement; }; template class SqliteReadStatementMock : public SqliteReadStatementMockBase { public: using SqliteReadStatementMockBase::SqliteReadStatementMockBase; };