UnitTests: Add fixture for global type annotations

Improves the clarity, readability, and overall understanding of the
tests, making them easier to maintain and work with.

Change-Id: Ia25862c4134afa964db603720c0709c0ed27a015
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-05-15 14:26:46 +02:00
parent 4b7318fa3b
commit b713c76608

View File

@@ -415,8 +415,7 @@ public:
secondSourceId, secondSourceId,
thirdSourceId, thirdSourceId,
qmltypes1SourceId, qmltypes1SourceId,
qmltypes2SourceId, qmltypes2SourceId});
itemLibraryPathSourceId});
setFilesNotExistsUnchanged({createDirectorySourceId("/path/designer"), setFilesNotExistsUnchanged({createDirectorySourceId("/path/designer"),
createDirectorySourceId("/root/designer"), createDirectorySourceId("/root/designer"),
createDirectorySourceId("/path/one/designer"), createDirectorySourceId("/path/one/designer"),
@@ -484,15 +483,7 @@ protected:
SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml"); SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml");
SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First2.qml"); SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First2.qml");
SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml"); SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml");
const QString itemLibraryPath = QDir::cleanPath(
UNITTEST_DIR "/../../../../share/qtcreator/qmldesigner/itemLibrary/");
DirectoryPathId itemLibraryPathDirectoryPathId = sourcePathCache.directoryPathId(
Utils::PathString{itemLibraryPath});
SourceId itemLibraryPathSourceId = SourceId::create(itemLibraryPathDirectoryPathId, FileNameId{});
const QString qmlImportsPath = QDir::cleanPath(UNITTEST_DIR "/projectstorage/data/qml");
DirectoryPathId qmlImportsPathDirectoryPathId = sourcePathCache.directoryPathId(
Utils::PathString{itemLibraryPath});
SourceId qmlImportsPathSourceId = SourceId::create(qmlImportsPathDirectoryPathId, FileNameId{});
ModuleId qmlModuleId{storage.moduleId("Qml", ModuleKind::QmlLibrary)}; ModuleId qmlModuleId{storage.moduleId("Qml", ModuleKind::QmlLibrary)};
ModuleId qmlCppNativeModuleId{storage.moduleId("Qml", ModuleKind::CppLibrary)}; ModuleId qmlCppNativeModuleId{storage.moduleId("Qml", ModuleKind::CppLibrary)};
ModuleId exampleModuleId{storage.moduleId("Example", ModuleKind::QmlLibrary)}; ModuleId exampleModuleId{storage.moduleId("Example", ModuleKind::QmlLibrary)};
@@ -4593,17 +4584,52 @@ TEST_F(ProjectStorageUpdater_property_editor_panes, is_empty_if_directory_has_no
updater.update(update); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_type_annotations) class ProjectStorageUpdater_global_type_annotations : public BaseProjectStorageUpdater
{ {
auto qtQuickSourceId = sourcePathCache.sourceId( public:
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"}); ProjectStorageUpdater_global_type_annotations()
auto qtQuickControlSourceId = sourcePathCache.sourceId( {
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"}); ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) {
setFilesAdded({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId}); return FileStatus{sourceId, 1, 21};
auto qtQuickModuleId = moduleId("QtQuick", ModuleKind::QmlLibrary); });
auto qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic", ModuleKind::QmlLibrary); ON_CALL(projectStorageMock, fetchFileStatus(_)).WillByDefault([](SourceId sourceId) {
QmlDesigner::Storage::TypeTraits itemTraits; return FileStatus{sourceId, 1, 21};
});
ON_CALL(projectStorageMock, typeAnnotationDirectoryIds())
.WillByDefault(Return(QmlDesigner::SmallDirectoryPathIds<64>{
itemLibraryPathDirectoryPathId,
}));
ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathDirectoryPathId))
.WillByDefault(
Return(QmlDesigner::SmallSourceIds<4>{qtQuickSourceId, qtQuickControlSourceId}));
itemTraits.canBeContainer = QmlDesigner::FlagIs::True; itemTraits.canBeContainer = QmlDesigner::FlagIs::True;
}
public:
const QString itemLibraryPath = QDir::cleanPath(
UNITTEST_DIR "/../../../../share/qtcreator/qmldesigner/itemLibrary/");
DirectoryPathId itemLibraryPathDirectoryPathId = sourcePathCache.directoryPathId(
Utils::PathString{itemLibraryPath});
SourceId itemLibraryPathSourceId = SourceId::create(itemLibraryPathDirectoryPathId, FileNameId{});
const QString qmlImportsPath = QDir::cleanPath(UNITTEST_DIR "/projectstorage/data/qml");
DirectoryPathId qmlImportsPathDirectoryPathId = sourcePathCache.directoryPathId(
Utils::PathString{itemLibraryPath});
SourceId qmlImportsPathSourceId = SourceId::create(qmlImportsPathDirectoryPathId, FileNameId{});
SourceId qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
SourceId qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
ModuleId qtQuickModuleId = moduleId("QtQuick", ModuleKind::QmlLibrary);
ModuleId qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic", ModuleKind::QmlLibrary);
QmlDesigner::Storage::TypeTraits itemTraits;
Update update = {.typeAnnotationPaths = {itemLibraryPath}};
};
TEST_F(ProjectStorageUpdater_global_type_annotations, update)
{
setFilesAdded({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId});
EXPECT_CALL(projectStorageMock, EXPECT_CALL(projectStorageMock,
synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations", synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations",
@@ -4628,21 +4654,13 @@ TEST_F(ProjectStorageUpdater, update_type_annotations)
&SynchronizationPackage::updatedTypeAnnotationSourceIds, &SynchronizationPackage::updatedTypeAnnotationSourceIds,
IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId}))))); IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId})))));
updater.update({.typeAnnotationPaths = {itemLibraryPath}}); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_added_type_annotation) TEST_F(ProjectStorageUpdater_global_type_annotations, add)
{ {
auto qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
auto qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
setFilesUnchanged({itemLibraryPathSourceId}); setFilesUnchanged({itemLibraryPathSourceId});
setFilesAdded({qtQuickSourceId, qtQuickControlSourceId}); setFilesAdded({qtQuickSourceId, qtQuickControlSourceId});
auto qtQuickModuleId = moduleId("QtQuick", ModuleKind::QmlLibrary);
auto qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic", ModuleKind::QmlLibrary);
QmlDesigner::Storage::TypeTraits itemTraits;
itemTraits.canBeContainer = QmlDesigner::FlagIs::True;
EXPECT_CALL(projectStorageMock, EXPECT_CALL(projectStorageMock,
synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations", synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations",
@@ -4667,21 +4685,13 @@ TEST_F(ProjectStorageUpdater, update_added_type_annotation)
&SynchronizationPackage::updatedTypeAnnotationSourceIds, &SynchronizationPackage::updatedTypeAnnotationSourceIds,
IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId}))))); IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId})))));
updater.update({.typeAnnotationPaths = {itemLibraryPath}}); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_changed_type_annotation) TEST_F(ProjectStorageUpdater_global_type_annotations, changed)
{ {
auto qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
auto qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
setFilesUnchanged({itemLibraryPathSourceId}); setFilesUnchanged({itemLibraryPathSourceId});
setFilesChanged({qtQuickSourceId, qtQuickControlSourceId}); setFilesChanged({qtQuickSourceId, qtQuickControlSourceId});
auto qtQuickModuleId = moduleId("QtQuick", ModuleKind::QmlLibrary);
auto qtQuickControlsModuleId = moduleId("QtQuick.Controls.Basic", ModuleKind::QmlLibrary);
QmlDesigner::Storage::TypeTraits itemTraits;
itemTraits.canBeContainer = QmlDesigner::FlagIs::True;
EXPECT_CALL(projectStorageMock, EXPECT_CALL(projectStorageMock,
synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations", synchronize(AllOf(Field("SynchronizationPackage::typeAnnotations",
@@ -4706,15 +4716,11 @@ TEST_F(ProjectStorageUpdater, update_changed_type_annotation)
&SynchronizationPackage::updatedTypeAnnotationSourceIds, &SynchronizationPackage::updatedTypeAnnotationSourceIds,
IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId}))))); IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId})))));
updater.update({.typeAnnotationPaths = {itemLibraryPath}}); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_removed_type_annotations) TEST_F(ProjectStorageUpdater_global_type_annotations, remove)
{ {
auto qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
auto qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
setFilesRemoved({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId}); setFilesRemoved({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId});
EXPECT_CALL(projectStorageMock, EXPECT_CALL(projectStorageMock,
@@ -4725,25 +4731,11 @@ TEST_F(ProjectStorageUpdater, update_removed_type_annotations)
&SynchronizationPackage::updatedTypeAnnotationSourceIds, &SynchronizationPackage::updatedTypeAnnotationSourceIds,
IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId}))))); IsSupersetOf({qtQuickSourceId, qtQuickControlSourceId})))));
updater.update({.typeAnnotationPaths = {itemLibraryPath}}); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_type_annotations_removed_meta_info_file) TEST_F(ProjectStorageUpdater_global_type_annotations, removed_meta_info_file)
{ {
ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) {
return FileStatus{sourceId, 1, 21};
});
ON_CALL(projectStorageMock, fetchFileStatus(_)).WillByDefault([](SourceId sourceId) {
return FileStatus{sourceId, 1, 21};
});
auto qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
auto qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
ON_CALL(projectStorageMock, typeAnnotationDirectoryIds())
.WillByDefault(Return(QmlDesigner::SmallDirectoryPathIds<64>{itemLibraryPathDirectoryPathId}));
ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathDirectoryPathId))
.WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{qtQuickSourceId, qtQuickControlSourceId}));
setFilesChanged({itemLibraryPathSourceId}); setFilesChanged({itemLibraryPathSourceId});
setFilesRemoved({qtQuickSourceId}); setFilesRemoved({qtQuickSourceId});
setFilesUnchanged({qtQuickControlSourceId}); setFilesUnchanged({qtQuickControlSourceId});
@@ -4757,27 +4749,11 @@ TEST_F(ProjectStorageUpdater, update_type_annotations_removed_meta_info_file)
AllOf(IsSupersetOf({qtQuickSourceId}), AllOf(IsSupersetOf({qtQuickSourceId}),
Not(Contains(qtQuickControlSourceId))))))); Not(Contains(qtQuickControlSourceId)))))));
updater.update({.typeAnnotationPaths = {itemLibraryPath}}); updater.update(update);
} }
TEST_F(ProjectStorageUpdater, update_type_annotations_removed_directory) TEST_F(ProjectStorageUpdater_global_type_annotations, removed_directory)
{ {
ON_CALL(fileSystemMock, fileStatus(_)).WillByDefault([](SourceId sourceId) {
return FileStatus{sourceId, 1, 21};
});
ON_CALL(projectStorageMock, fetchFileStatus(_)).WillByDefault([](SourceId sourceId) {
return FileStatus{sourceId, 1, 21};
});
auto qtQuickSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/quick.metainfo"});
auto qtQuickControlSourceId = sourcePathCache.sourceId(
QmlDesigner::SourcePath{itemLibraryPath + "/qtquickcontrols2.metainfo"});
ON_CALL(projectStorageMock, typeAnnotationDirectoryIds())
.WillByDefault(Return(QmlDesigner::SmallDirectoryPathIds<64>{
itemLibraryPathDirectoryPathId,
}));
ON_CALL(projectStorageMock, typeAnnotationSourceIds(itemLibraryPathDirectoryPathId))
.WillByDefault(Return(QmlDesigner::SmallSourceIds<4>{qtQuickSourceId, qtQuickControlSourceId}));
setFilesRemoved({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId}); setFilesRemoved({itemLibraryPathSourceId, qtQuickSourceId, qtQuickControlSourceId});
EXPECT_CALL(projectStorageMock, EXPECT_CALL(projectStorageMock,