summaryrefslogtreecommitdiff
path: root/tests/unit/unittest/pchmanagerserver-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/unittest/pchmanagerserver-test.cpp')
-rw-r--r--tests/unit/unittest/pchmanagerserver-test.cpp72
1 files changed, 53 insertions, 19 deletions
diff --git a/tests/unit/unittest/pchmanagerserver-test.cpp b/tests/unit/unittest/pchmanagerserver-test.cpp
index 4657051fc5..bf14b628b8 100644
--- a/tests/unit/unittest/pchmanagerserver-test.cpp
+++ b/tests/unit/unittest/pchmanagerserver-test.cpp
@@ -27,6 +27,7 @@
#include "mockbuilddependenciesstorage.h"
#include "mockclangpathwatcher.h"
+#include "mockfilepathcaching.h"
#include "mockgeneratedfiles.h"
#include "mockpchmanagerclient.h"
#include "mockpchtaskgenerator.h"
@@ -59,7 +60,7 @@ class PchManagerServer : public ::testing::Test
server.setClient(&mockPchManagerClient);
ON_CALL(mockProjectPartsManager, update(projectParts))
- .WillByDefault(Return(UpToDataProjectParts{{}, projectParts}));
+ .WillByDefault(Return(UpToDataProjectParts{{}, projectParts, projectParts4}));
ON_CALL(mockGeneratedFiles, isValid()).WillByDefault(Return(true));
}
@@ -77,11 +78,13 @@ protected:
Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory};
ClangBackEnd::RefactoringDatabaseInitializer<Sqlite::Database> initializer{database};
ClangBackEnd::FilePathCaching filePathCache{database};
+ NiceMock<MockFilePathCaching> mockFilePathCache;
ClangBackEnd::PchManagerServer server{mockClangPathWatcher,
mockPchTaskGenerator,
mockProjectPartsManager,
mockGeneratedFiles,
- mockBuildDependenciesStorage};
+ mockBuildDependenciesStorage,
+ mockFilePathCache};
NiceMock<MockPchManagerClient> mockPchManagerClient;
ClangBackEnd::ProjectPartId projectPartId1{1};
ClangBackEnd::ProjectPartId projectPartId2{2};
@@ -98,7 +101,7 @@ protected:
projectPartId1,
{"-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header"},
{{"DEFINE", "1", 1}},
- {{"/includes", 1, ClangBackEnd::IncludeSearchPathType::BuiltIn}},
+ {{TESTDATA_DIR "/symbolscollector/include", 1, ClangBackEnd::IncludeSearchPathType::BuiltIn}},
{{"/project/includes", 1, ClangBackEnd::IncludeSearchPathType::User}},
{id(header1Path)},
{id(main1Path)},
@@ -110,7 +113,7 @@ protected:
{"-x", "c++-header", "-Wno-pragma-once-outside-header"},
{{"DEFINE", "1", 1}},
{{"/includes", 1, ClangBackEnd::IncludeSearchPathType::BuiltIn}},
- {{"/project/includes", 1, ClangBackEnd::IncludeSearchPathType::User}},
+ {{TESTDATA_DIR "/builddependencycollector", 1, ClangBackEnd::IncludeSearchPathType::User}},
{id(header2Path)},
{id(main2Path)},
Utils::Language::C,
@@ -163,7 +166,9 @@ protected:
std::vector<ProjectPartContainer> projectParts{projectPart1, projectPart2};
std::vector<ProjectPartContainer> projectParts1{projectPart1};
std::vector<ProjectPartContainer> projectParts2{projectPart2};
- FileContainer generatedFile{{"/path/to/", "file"}, "content", {}};
+ std::vector<ProjectPartContainer> projectParts3{projectPart3};
+ std::vector<ProjectPartContainer> projectParts4{projectPart3, projectPart4};
+ FileContainer generatedFile{{"/path/to/", "file"}, id("/path/to/file"), "content", {}};
ClangBackEnd::UpdateProjectPartsMessage updateProjectPartsMessage{
Utils::clone(projectParts), {"toolChainArgument"}};
ClangBackEnd::RemoveProjectPartsMessage removeProjectPartsMessage{
@@ -175,9 +180,11 @@ TEST_F(PchManagerServer, FilterProjectPartsAndSendThemToQueue)
InSequence s;
EXPECT_CALL(mockProjectPartsManager, update(updateProjectPartsMessage.projectsParts))
- .WillOnce(Return(UpToDataProjectParts{{}, projectParts2}));
+ .WillOnce(Return(UpToDataProjectParts{{}, projectParts2, projectParts4}));
EXPECT_CALL(
mockPchTaskGenerator, addProjectParts(Eq(projectParts2), ElementsAre("toolChainArgument")));
+ EXPECT_CALL(mockPchTaskGenerator,
+ addNonSystemProjectParts(Eq(projectParts4), ElementsAre("toolChainArgument")));
server.updateProjectParts(updateProjectPartsMessage.clone());
}
@@ -222,7 +229,8 @@ TEST_F(PchManagerServer, SetPathWatcherNotifier)
mockPchTaskGenerator,
mockProjectPartsManager,
mockGeneratedFiles,
- mockBuildDependenciesStorage};
+ mockBuildDependenciesStorage,
+ filePathCache};
}
TEST_F(PchManagerServer, UpdateProjectPartQueueByPathIds)
@@ -267,6 +275,7 @@ TEST_F(PchManagerServer, DontUpdateProjectPartQueueByPathIdsIfItUserFile)
EXPECT_CALL(mockProjectPartsManager, projects(_)).Times(0);
EXPECT_CALL(mockPchTaskGenerator, addProjectParts(_, _)).Times(0);
+ EXPECT_CALL(mockPchTaskGenerator, addNonSystemProjectParts(_, _)).Times(0);
server.pathsWithIdsChanged({{{projectPartId1, ClangBackEnd::SourceType::UserInclude}, {}},
{{projectPartId2, ClangBackEnd::SourceType::Source}, {}}});
@@ -290,7 +299,7 @@ TEST_F(PchManagerServer, ResetTimeStampForChangedFilesInDatabase)
{
EXPECT_CALL(mockBuildDependenciesStorage,
insertOrUpdateIndexingTimeStamps(ElementsAre(FilePathId{1}, FilePathId{3}, FilePathId{5}),
- TypedEq<ClangBackEnd::TimeStamp>(0)));
+ TypedEq<ClangBackEnd::TimeStamp>(-1)));
server.pathsChanged({1, 3, 5});
}
@@ -323,6 +332,7 @@ TEST_F(PchManagerServer, RemoveToolChainsArguments)
ClangBackEnd::UpdateProjectPartsMessage{{projectPart1}, {"toolChainArgument"}});
EXPECT_CALL(mockPchTaskGenerator, addProjectParts(_, _)).Times(0);
+ EXPECT_CALL(mockPchTaskGenerator, addNonSystemProjectParts(_, _)).Times(0);
server.removeProjectParts(removeProjectPartsMessage.clone());
server.pathsWithIdsChanged({{{projectPart1.projectPartId, ClangBackEnd::SourceType::Source}, {}}});
@@ -333,10 +343,12 @@ TEST_F(PchManagerServer, DontGeneratePchIfGeneratedFilesAreNotValid)
InSequence s;
EXPECT_CALL(mockProjectPartsManager, update(ElementsAre(projectPart1)))
- .WillOnce(Return(UpToDataProjectParts{{}, ProjectPartContainers{projectPart1}}));
+ .WillOnce(Return(UpToDataProjectParts{{}, {projectPart1}, {projectPart2}}));
EXPECT_CALL(mockGeneratedFiles, isValid()).WillOnce(Return(false));
EXPECT_CALL(mockPchTaskGenerator, addProjectParts(_, _)).Times(0);
- EXPECT_CALL(mockProjectPartsManager, updateDeferred(ElementsAre(projectPart1)));
+ EXPECT_CALL(mockPchTaskGenerator, addNonSystemProjectParts(_, _)).Times(0);
+ EXPECT_CALL(mockProjectPartsManager,
+ updateDeferred(ElementsAre(projectPart1), ElementsAre(projectPart2)));
server.updateProjectParts(
ClangBackEnd::UpdateProjectPartsMessage{{projectPart1}, {"toolChainArgument"}});
@@ -347,10 +359,11 @@ TEST_F(PchManagerServer, GeneratePchIfGeneratedFilesAreValid)
InSequence s;
EXPECT_CALL(mockProjectPartsManager, update(ElementsAre(projectPart1)))
- .WillOnce(Return(UpToDataProjectParts{{}, ProjectPartContainers{projectPart1}}));
+ .WillOnce(Return(UpToDataProjectParts{{}, {projectPart1}, {projectPart2}}));
EXPECT_CALL(mockGeneratedFiles, isValid()).WillOnce(Return(true));
EXPECT_CALL(mockPchTaskGenerator, addProjectParts(_, _));
- EXPECT_CALL(mockProjectPartsManager, updateDeferred(_)).Times(0);
+ EXPECT_CALL(mockPchTaskGenerator, addNonSystemProjectParts(_, _));
+ EXPECT_CALL(mockProjectPartsManager, updateDeferred(_, _)).Times(0);
server.updateProjectParts(
ClangBackEnd::UpdateProjectPartsMessage{{projectPart1}, {"toolChainArgument"}});
@@ -361,15 +374,19 @@ TEST_F(PchManagerServer, AfterUpdatingGeneratedFilesAreValidSoGeneratePchs)
InSequence s;
ClangBackEnd::UpdateGeneratedFilesMessage updateGeneratedFilesMessage{{generatedFile}};
ON_CALL(mockGeneratedFiles, isValid()).WillByDefault(Return(false));
- server.updateProjectParts(
- ClangBackEnd::UpdateProjectPartsMessage{{projectPart1}, {"toolChainArgument"}});
+ server.updateProjectParts(ClangBackEnd::UpdateProjectPartsMessage{{projectPart1, projectPart2},
+ {"toolChainArgument"}});
EXPECT_CALL(mockGeneratedFiles, update(updateGeneratedFilesMessage.generatedFiles));
EXPECT_CALL(mockGeneratedFiles, isValid()).WillOnce(Return(true));
- EXPECT_CALL(mockProjectPartsManager, deferredUpdates())
+ EXPECT_CALL(mockProjectPartsManager, deferredSystemUpdates())
.WillOnce(Return(ClangBackEnd::ProjectPartContainers{projectPart1}));
EXPECT_CALL(mockPchTaskGenerator,
addProjectParts(ElementsAre(projectPart1), ElementsAre("toolChainArgument")));
+ EXPECT_CALL(mockProjectPartsManager, deferredProjectUpdates())
+ .WillOnce(Return(ClangBackEnd::ProjectPartContainers{projectPart2}));
+ EXPECT_CALL(mockPchTaskGenerator,
+ addNonSystemProjectParts(ElementsAre(projectPart2), ElementsAre("toolChainArgument")));
server.updateGeneratedFiles(updateGeneratedFilesMessage.clone());
}
@@ -379,13 +396,14 @@ TEST_F(PchManagerServer, AfterUpdatingGeneratedFilesAreStillInvalidSoNoPchsGener
InSequence s;
ClangBackEnd::UpdateGeneratedFilesMessage updateGeneratedFilesMessage{{generatedFile}};
ON_CALL(mockGeneratedFiles, isValid()).WillByDefault(Return(false));
- server.updateProjectParts(
- ClangBackEnd::UpdateProjectPartsMessage{{projectPart1}, {"toolChainArgument"}});
+ server.updateProjectParts(ClangBackEnd::UpdateProjectPartsMessage{{projectPart1, projectPart2},
+ {"toolChainArgument"}});
EXPECT_CALL(mockGeneratedFiles, update(updateGeneratedFilesMessage.generatedFiles));
EXPECT_CALL(mockGeneratedFiles, isValid()).WillOnce(Return(false));
- EXPECT_CALL(mockProjectPartsManager, deferredUpdates()).Times(0);
+ EXPECT_CALL(mockProjectPartsManager, deferredSystemUpdates()).Times(0);
EXPECT_CALL(mockPchTaskGenerator, addProjectParts(_, _)).Times(0);
+ EXPECT_CALL(mockPchTaskGenerator, addNonSystemProjectParts(_, _)).Times(0);
server.updateGeneratedFiles(updateGeneratedFilesMessage.clone());
}
@@ -395,7 +413,7 @@ TEST_F(PchManagerServer, SentUpToDateProjectPartIdsToClient)
InSequence s;
EXPECT_CALL(mockProjectPartsManager, update(updateProjectPartsMessage.projectsParts))
- .WillOnce(Return(UpToDataProjectParts{projectParts1, projectParts2}));
+ .WillOnce(Return(UpToDataProjectParts{projectParts1, projectParts2, projectParts3}));
EXPECT_CALL(mockPchTaskGenerator,
addProjectParts(Eq(projectParts2), ElementsAre("toolChainArgument")));
EXPECT_CALL(mockPchManagerClient,
@@ -405,4 +423,20 @@ TEST_F(PchManagerServer, SentUpToDateProjectPartIdsToClient)
server.updateProjectParts(updateProjectPartsMessage.clone());
}
+
+TEST_F(PchManagerServer, AddingIncludesToFileCacheForProjectUpdates)
+{
+ InSequence s;
+
+ EXPECT_CALL(mockFilePathCache, populateIfEmpty());
+ EXPECT_CALL(mockFilePathCache,
+ addFilePaths(AllOf(
+ Contains(Eq(TESTDATA_DIR "/symbolscollector/include/unmodified_header.h")),
+ Contains(Eq(TESTDATA_DIR "/symbolscollector/include/unmodified_header2.h")),
+ Contains(Eq(TESTDATA_DIR "/builddependencycollector/project/header2.h")),
+ Contains(Eq(TESTDATA_DIR "/builddependencycollector/external/external3.h")))));
+ EXPECT_CALL(mockProjectPartsManager, update(_));
+
+ server.updateProjectParts(updateProjectPartsMessage.clone());
+}
} // namespace