/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #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(Utils::optional, valueReturnInt64, (), ()); MOCK_METHOD(Utils::optional, valueReturnBlob, (Utils::SmallStringView, long long), ()); MOCK_METHOD(Utils::optional, valueReturnInt32, (Utils::SmallStringView), ()); MOCK_METHOD(Utils::optional, valueReturnInt32, (int, Utils::SmallStringView), ()); MOCK_METHOD(Utils::optional, valueReturnInt32, (int), ()); MOCK_METHOD(Utils::optional, valueReturnInt64, (int), ()); MOCK_METHOD(Utils::optional, valueReturnPathString, (int), ()); MOCK_METHOD(Utils::optional, valueReturnPathString, (Utils::SmallStringView), ()); MOCK_METHOD(Utils::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::Type, valueReturnsStorageType, (int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::Types, valuesReturnsStorageTypes, (std::size_t), ()); MOCK_METHOD(QmlDesigner::Storage::ExportedTypes, valuesReturnsStorageExportedTypes, (std::size_t, int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::PropertyDeclarations, valuesReturnsStoragePropertyDeclarations, (std::size_t, int typeId), ()); MOCK_METHOD(QmlDesigner::Storage::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::ParameterDeclarations, valuesReturnsStorageParameterDeclarations, (std::size_t, long long), ()); MOCK_METHOD(QmlDesigner::Storage::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(const QueryTypes &...queryValues) { static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); } template void readCallback(Callable &&callable, const QueryTypes &...queryValues) {} public: Utils::SmallString sqlStatement; }; template class SqliteReadStatementMock : public SqliteReadStatementMockBase { public: using SqliteReadStatementMockBase::SqliteReadStatementMockBase; };