forked from qt-creator/qt-creator
Clang: Do not work on unspecified values in ProjectParts::remove
Change-Id: Icc322bc64988cbc1b5ec4e6d6474b1b6b956c667 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
@@ -46,11 +46,16 @@ void ProjectParts::remove(const Utf8StringVector &projectPartIds)
|
|||||||
{
|
{
|
||||||
Utf8StringVector processedProjectPartFilePaths = projectPartIds;
|
Utf8StringVector processedProjectPartFilePaths = projectPartIds;
|
||||||
|
|
||||||
auto removeBeginIterator = std::remove_if(projects_.begin(), projects_.end(), [&processedProjectPartFilePaths] (const ProjectPart &project) {
|
const auto removeBeginIterator = std::remove_if(projects_.begin(), projects_.end(),
|
||||||
return processedProjectPartFilePaths.removeFast(project.projectPartId());
|
[&processedProjectPartFilePaths] (ProjectPart &project) {
|
||||||
});
|
const bool isRemoved = processedProjectPartFilePaths.removeFast(project.projectPartId());
|
||||||
|
|
||||||
|
if (isRemoved)
|
||||||
|
project.clearProjectPartId();
|
||||||
|
|
||||||
|
return isRemoved;
|
||||||
|
});
|
||||||
|
|
||||||
std::for_each(removeBeginIterator, projects_.end(), [](ProjectPart &project) { project.clearProjectPartId(); });
|
|
||||||
projects_.erase(removeBeginIterator, projects_.end());
|
projects_.erase(removeBeginIterator, projects_.end());
|
||||||
|
|
||||||
if (!processedProjectPartFilePaths.isEmpty())
|
if (!processedProjectPartFilePaths.isEmpty())
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ TEST(ProjectPart, ProjectPartProjectPartIdIsEmptyfterRemoving)
|
|||||||
ASSERT_TRUE(project.projectPartId().isEmpty());
|
ASSERT_TRUE(project.projectPartId().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Project, ThrowsForNotExistingProjectPartButRemovesAllExistingProject)
|
TEST(ProjectPart, ThrowsForNotExistingProjectPartButRemovesAllExistingProject)
|
||||||
{
|
{
|
||||||
ClangBackEnd::ProjectPartContainer projectContainer(Utf8StringLiteral("pathToProjectPart.pro"));
|
ClangBackEnd::ProjectPartContainer projectContainer(Utf8StringLiteral("pathToProjectPart.pro"));
|
||||||
ClangBackEnd::ProjectParts projects;
|
ClangBackEnd::ProjectParts projects;
|
||||||
@@ -165,6 +165,18 @@ TEST(Project, ThrowsForNotExistingProjectPartButRemovesAllExistingProject)
|
|||||||
ASSERT_THAT(projects.projects(), Not(Contains(project)));
|
ASSERT_THAT(projects.projects(), Not(Contains(project)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ProjectPart, ProjectPartIdIsEmptyAfterRemove)
|
||||||
|
{
|
||||||
|
ClangBackEnd::ProjectPartContainer projectContainer(Utf8StringLiteral("pathToProjectPart.pro"));
|
||||||
|
ClangBackEnd::ProjectParts projects;
|
||||||
|
projects.createOrUpdate({projectContainer});
|
||||||
|
ClangBackEnd::ProjectPart project = *projects.findProjectPart(projectContainer.projectPartId());
|
||||||
|
|
||||||
|
projects.remove({projectContainer.projectPartId()});
|
||||||
|
|
||||||
|
ASSERT_THAT(project.projectPartId(), Utf8String());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(ProjectPart, HasProjectPart)
|
TEST(ProjectPart, HasProjectPart)
|
||||||
{
|
{
|
||||||
ClangBackEnd::ProjectPartContainer projectContainer(Utf8StringLiteral("pathToProjectPart.pro"));
|
ClangBackEnd::ProjectPartContainer projectContainer(Utf8StringLiteral("pathToProjectPart.pro"));
|
||||||
|
|||||||
Reference in New Issue
Block a user