/**************************************************************************** ** ** 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 #include #include #include #include #include #include #include #include #include #include using ClangBackEnd::FilePathIds; using ClangBackEnd::SourceEntries; using ClangBackEnd::SourceEntry; using ClangBackEnd::SourceTimeStamp; using ClangBackEnd::SourceTimeStamps; using ClangRefactoring::SourceLocation; using ClangRefactoring::SourceLocations; using std::int64_t; namespace Sources = ClangBackEnd::Sources; using ClangBackEnd::PrecompiledHeaderTimeStamps; using ClangBackEnd::UsedMacros; using ClangBackEnd::Internal::ProjectPartNameId; using ClangBackEnd::Internal::ProjectPartNameIds; using ClangRefactoring::Symbol; using ClangRefactoring::Symbols; 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(SourceLocations, valuesReturnSourceLocations, (std::size_t, int, int, int), ()); MOCK_METHOD(CppTools::Usages, valuesReturnSourceUsages, (std::size_t, int, int, int), ()); MOCK_METHOD(CppTools::Usages, valuesReturnSourceUsages, (std::size_t, int, int, int, int), ()); MOCK_METHOD(std::vector, valuesReturnStdVectorDirectory, (std::size_t), ()); MOCK_METHOD(std::vector, valuesReturnStdVectorSource, (std::size_t), ()); MOCK_METHOD(SourceEntries, valuesReturnSourceEntries, (std::size_t, int, int), ()); MOCK_METHOD(UsedMacros, valuesReturnUsedMacros, (std::size_t, int), ()); MOCK_METHOD(FilePathIds, valuesReturnFilePathIds, (std::size_t, int), ()); MOCK_METHOD(ProjectPartNameIds, valuesReturnProjectPartNameIds, (std::size_t), ()); 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, valueReturnFilePath, (int), ()); MOCK_METHOD(ClangBackEnd::FilePaths, valuesReturnFilePaths, (std::size_t), ()); MOCK_METHOD(Utils::optional, valueReturnSmallString, (int), ()); MOCK_METHOD(Utils::optional, valueReturnSourceNameAndDirectoryId, (int) ); MOCK_METHOD(Utils::optional, valueReturnProjectPartArtefact, (int) ); MOCK_METHOD(Utils::optional, valueReturnProjectPartArtefact, (Utils::SmallStringView)); MOCK_METHOD(ClangBackEnd::ProjectPartArtefacts, valuesReturnProjectPartArtefacts, (std::size_t), ()); MOCK_METHOD(Utils::optional, valueReturnProjectPartContainer, (int) ); MOCK_METHOD(ClangBackEnd::ProjectPartContainers, valuesReturnProjectPartContainers, (std::size_t), ()); MOCK_METHOD(Utils::optional, valueReturnProjectPartPch, (int), ()); MOCK_METHOD(Utils::optional, valueReturnPchPaths, (int), ()); MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, Utils::SmallStringView), ()); MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, int, Utils::SmallStringView), ()); MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, int, int, Utils::SmallStringView), ()); MOCK_METHOD(SourceLocation, valueReturnSourceLocation, (long long, int), ()); MOCK_METHOD(Utils::optional, valueReturnProjectPartId, (Utils::SmallStringView)); MOCK_METHOD(SourceTimeStamps, valuesReturnSourceTimeStamps, (std::size_t), ()); MOCK_METHOD(SourceTimeStamps, valuesReturnSourceTimeStamps, (std::size_t, int sourcePathId), ()); MOCK_METHOD(Utils::optional, valuesReturnPrecompiledHeaderTimeStamps, (int projectPartId)); MOCK_METHOD(QmlDesigner::TypeId, valueReturnsTypeId, (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(QmlDesigner::SourceContextId, valueReturnsSourceContextId, (Utils::SmallStringView), ()); MOCK_METHOD(QmlDesigner::SourceContextId, valueWithTransactionReturnsSourceContextId, (int), ()); MOCK_METHOD(QmlDesigner::SourceId, valueReturnsSourceId, (int, Utils::SmallStringView), ()); template auto optionalValue(const QueryTypes &...queryValues) { if constexpr (std::is_same_v) return valueReturnBlob(queryValues...); else if constexpr (std::is_same_v) return valueReturnProjectPartId(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 valueReturnFilePath(queryValues...); else if constexpr (std::is_same_v) return valueReturnProjectPartArtefact(queryValues...); else if constexpr (std::is_same_v) return valueReturnProjectPartContainer(queryValues...); else if constexpr (std::is_same_v) return valueReturnProjectPartPch(queryValues...); else if constexpr (std::is_same_v) return valueReturnPchPaths(queryValues...); else if constexpr (std::is_same_v) return valueReturnSmallString(queryValues...); else if constexpr (std::is_same_v) return valueReturnSourceLocation(queryValues...); else if constexpr (std::is_same_v) return valueReturnSourceNameAndDirectoryId(queryValues...); else if constexpr (std::is_same_v) return valuesReturnPrecompiledHeaderTimeStamps(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 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 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 valuesReturnSourceLocations(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnSourceUsages(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnSymbols(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnUsedMacros(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnFilePathIds(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnFilePaths(reserveSize); else if constexpr (std::is_same_v) return valuesReturnStdVectorDirectory(reserveSize); else if constexpr (std::is_same_v) return valuesReturnStdVectorSource(reserveSize); else if constexpr (std::is_same_v) return valuesReturnProjectPartNameIds(reserveSize); else if constexpr (std::is_same_v) return valuesReturnProjectPartContainers(reserveSize); else if constexpr (std::is_same_v) return valuesReturnSourceEntries(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnSourceTimeStamps(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnCacheSourceContexts(reserveSize); else if constexpr (std::is_same_v) return valuesReturnCacheSources(reserveSize); else static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); } template auto range(const QueryTypes &...queryValues) { 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!"); } public: Utils::SmallString sqlStatement; }; template class SqliteReadStatementMock : public SqliteReadStatementMockBase { public: using SqliteReadStatementMockBase::SqliteReadStatementMockBase; };