diff options
author | Marco Bubke <marco.bubke@qt.io> | 2021-09-23 14:35:06 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2021-09-27 13:00:25 +0000 |
commit | 9e29b602d4e464d28423904f5ab85ab59028e0b3 (patch) | |
tree | 427e326e705f44d94ed10261565313b59b26d36f /tests | |
parent | 03687c1d0288544b12db64bc7d828d899986075c (diff) |
QmlDesigner: Use ModuleId for Type instead of Module
We already know the module id because it's the source id of the module.
Change-Id: Ice241d38c12c7ca79a525464c53b7d552095a0fc
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/unittest/gtest-creator-printing.cpp | 2 | ||||
-rw-r--r-- | tests/unit/unittest/projectstorage-test.cpp | 1996 | ||||
-rw-r--r-- | tests/unit/unittest/projectstorageupdater-test.cpp | 41 |
3 files changed, 1174 insertions, 865 deletions
diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp index fd496125fc..89577c1f05 100644 --- a/tests/unit/unittest/gtest-creator-printing.cpp +++ b/tests/unit/unittest/gtest-creator-printing.cpp @@ -1101,7 +1101,7 @@ std::ostream &operator<<(std::ostream &out, const QualifiedImportedType &importe std::ostream &operator<<(std::ostream &out, const Type &type) { using Utils::operator<<; - return out << "(module: " << type.module << ", typename: \"" << type.typeName + return out << "(moduleId: " << type.moduleId << ", typename: \"" << type.typeName << "\", prototype: " << type.prototype << ", " << type.accessSemantics << ", source: " << type.sourceId << ", exports: " << type.exportedTypes << ", properties: " << type.propertyDeclarations diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp index a30d44889d..da71b36d31 100644 --- a/tests/unit/unittest/projectstorage-test.cpp +++ b/tests/unit/unittest/projectstorage-test.cpp @@ -84,32 +84,32 @@ MATCHER_P2(IsSourceNameAndSourceContextId, } MATCHER_P5(IsStorageType, - module, + moduleId, typeName, prototype, accessSemantics, sourceId, std::string(negation ? "isn't " : "is ") - + PrintToString(Storage::Type{module, typeName, prototype, accessSemantics, sourceId})) + + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, sourceId})) { const Storage::Type &type = arg; - return type.module == module && type.typeName == typeName + return type.moduleId == moduleId && type.typeName == typeName && type.accessSemantics == accessSemantics && type.sourceId == sourceId && Storage::ImportedTypeName{prototype} == type.prototype; } MATCHER_P4(IsStorageTypeWithInvalidSourceId, - module, + moduleId, typeName, prototype, accessSemantics, std::string(negation ? "isn't " : "is ") - + PrintToString(Storage::Type{module, typeName, prototype, accessSemantics, SourceId{}})) + + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, SourceId{}})) { const Storage::Type &type = arg; - return type.module == module && type.typeName == typeName && type.prototype == prototype + return type.moduleId == moduleId && type.typeName == typeName && type.prototype == prototype && type.accessSemantics == accessSemantics && !type.sourceId.isValid(); } @@ -225,7 +225,7 @@ protected: return Storage::Types{ Storage::Type{ - Storage::Module{"QtQuick"}, + qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -261,7 +261,7 @@ protected: Storage::EnumerationDeclaration{"Type", {Storage::EnumeratorDeclaration{"Foo"}, Storage::EnumeratorDeclaration{"Poo", 12}}}}}, - Storage::Type{Storage::Module{"Qml"}, + Storage::Type{qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -272,7 +272,7 @@ protected: auto createVersionedTypes() { - return Storage::Types{Storage::Type{Storage::Module{"Qml"}, + return Storage::Types{Storage::Type{qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -280,21 +280,21 @@ protected: {Storage::ExportedType{"Object", Storage::Version{1}}, Storage::ExportedType{"Obj", Storage::Version{1, 2}}, Storage::ExportedType{"BuiltInObj", Storage::Version{}}}}, - Storage::Type{Storage::Module{"Qml"}, + Storage::Type{qmlModuleId, "QObject2", Storage::NativeType{}, TypeAccessSemantics::Reference, sourceId1, {Storage::ExportedType{"Object", Storage::Version{2, 0}}, Storage::ExportedType{"Obj", Storage::Version{2, 3}}}}, - Storage::Type{Storage::Module{"Qml"}, + Storage::Type{qmlModuleId, "QObject3", Storage::NativeType{}, TypeAccessSemantics::Reference, sourceId1, {Storage::ExportedType{"Object", Storage::Version{2, 11}}, Storage::ExportedType{"Obj", Storage::Version{2, 11}}}}, - Storage::Type{Storage::Module{"Qml"}, + Storage::Type{qmlModuleId, "QObject4", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -336,7 +336,7 @@ protected: Storage::NativeType{"QObject"}, Storage::PropertyDeclarationTraits::IsList}); - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QAliasItem", Storage::ImportedType{"Item"}, TypeAccessSemantics::Reference, @@ -352,7 +352,7 @@ protected: Storage::PropertyDeclaration{"objects", Storage::ImportedType{"Item"}, "objects"}); types.push_back( - Storage::Type{Storage::Module{"/path/to"}, + Storage::Type{pathToModuleId, "QObject2", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -372,7 +372,7 @@ protected: imports.emplace_back("QtQuick", Storage::Version{}, sourceId5); auto types = createTypesWithAliases(); - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QAliasItem2", Storage::ImportedType{"Object"}, TypeAccessSemantics::Reference, @@ -396,9 +396,9 @@ protected: Storage::Modules createModules() { - return Storage::Modules{Storage::Module{"Qml", moduleSourceId1}, - Storage::Module{"QtQuick", moduleSourceId2}, - Storage::Module{"/path/to", moduleSourceId3}}; + return Storage::Modules{Storage::Module{"Qml", qmlModuleSourceId}, + Storage::Module{"QtQuick", qtQuickModuleSourceId}, + Storage::Module{"/path/to", pathToModuleSourceId}}; } Storage::Imports createImports(SourceId sourceId) @@ -450,16 +450,15 @@ protected: SourceId sourceId4{sourcePathCache.sourceId(path4)}; SourceId sourceId5{sourcePathCache.sourceId(path5)}; SourceIds sourceIds{sourceId1, sourceId2, sourceId3, sourceId4, sourceId5}; - SourceId moduleSourceId1{sourcePathCache.sourceId(modulePath1)}; - SourceId moduleSourceId2{sourcePathCache.sourceId(modulePath2)}; - SourceId moduleSourceId3{sourcePathCache.sourceId(modulePath3)}; + SourceId qmlModuleSourceId{sourcePathCache.sourceId(modulePath1)}; + SourceId qtQuickModuleSourceId{sourcePathCache.sourceId(modulePath2)}; + SourceId pathToModuleSourceId{sourcePathCache.sourceId(modulePath3)}; SourceId moduleSourceId4{sourcePathCache.sourceId(modulePath4)}; SourceId moduleSourceId5{sourcePathCache.sourceId(modulePath5)}; Storage::Modules modules{createModules()}; - QmlDesigner::ModuleIds moduleIds{storage.fetchModuleIds(modules)}; - ModuleId moduleId1{moduleIds[0]}; - ModuleId moduleId2{moduleIds[1]}; - ModuleId moduleId3{moduleIds[2]}; + ModuleId qmlModuleId{&qmlModuleSourceId}; + ModuleId qtQuickModuleId{&qtQuickModuleSourceId}; + ModuleId pathToModuleId{&pathToModuleSourceId}; Storage::Imports imports; Storage::Imports importsSourceId1; Storage::Imports importsSourceId2; @@ -674,14 +673,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypes) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -689,7 +689,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypes) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -703,14 +703,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithExportedPrototypeName) Storage::Types types{createTypes()}; types[0].prototype = Storage::ImportedType{"Object"}; - storage.synchronize(modules, - importsSourceId1, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + importsSourceId1, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -718,7 +719,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithExportedPrototypeName) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -735,7 +736,11 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesThrowsWithWrongPrototypeName) ASSERT_THROW(storage.synchronize(modules, imports, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -743,17 +748,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesThrowsWithWrongPrototypeName) TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithMissingModuleAndPrototypeName) { Storage::Types types{createTypes()}; - types.push_back(Storage::Type{Storage::Module{"/path/to"}, + types.push_back(Storage::Type{pathToModuleId, "QObject2", Storage::NativeType{}, TypeAccessSemantics::Reference, sourceId3, {Storage::ExportedType{"Object2"}, Storage::ExportedType{"Obj2"}}}); - storage.synchronize(modules, - imports, - {}, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + {}, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[1].prototype = Storage::ImportedType{"Object2"}; ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}), @@ -766,13 +772,17 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesWithMissingModule) storage.synchronize(modules, imports, {}, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); ASSERT_THROW(storage.synchronize({}, imports, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::ModuleDoesNotExists); } @@ -782,14 +792,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesReverseOrder) Storage::Types types{createTypes()}; std::reverse(types.begin(), types.end()); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -797,7 +808,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesReverseOrder) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -809,18 +820,19 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsNewTypesReverseOrder) TEST_F(ProjectStorage, SynchronizeTypesOverwritesTypeAccessSemantics) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].accessSemantics = TypeAccessSemantics::Value; types[1].accessSemantics = TypeAccessSemantics::Value; storage.synchronize({}, imports, types, {sourceId1, sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Value, @@ -828,7 +840,7 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesTypeAccessSemantics) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Value, @@ -840,11 +852,12 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesTypeAccessSemantics) TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].sourceId = sourceId3; types[1].sourceId = sourceId4; Storage::Imports newImports; @@ -855,7 +868,7 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources) storage.synchronize({}, newImports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -863,7 +876,7 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -875,13 +888,14 @@ TEST_F(ProjectStorage, SynchronizeTypesOverwritesSources) TEST_F(ProjectStorage, SynchronizeTypesInsertTypeIntoPrototypeChain) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].prototype = Storage::NativeType{"QQuickObject"}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -891,7 +905,7 @@ TEST_F(ProjectStorage, SynchronizeTypesInsertTypeIntoPrototypeChain) storage.synchronize({}, importsSourceId1, {types[0], types[2]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -899,14 +913,14 @@ TEST_F(ProjectStorage, SynchronizeTypesInsertTypeIntoPrototypeChain) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickObject", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, sourceId1), Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QQuickObject"}, TypeAccessSemantics::Reference, @@ -922,21 +936,22 @@ TEST_F(ProjectStorage, SynchronizeTypesAddQualifiedPrototype) Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, sourceId1, {Storage::ExportedType{"Object"}}}); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -944,14 +959,14 @@ TEST_F(ProjectStorage, SynchronizeTypesAddQualifiedPrototype) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickObject", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, sourceId1), Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QQuickObject"}, TypeAccessSemantics::Reference, @@ -963,25 +978,26 @@ TEST_F(ProjectStorage, SynchronizeTypesAddQualifiedPrototype) TEST_F(ProjectStorage, SynchronizeTypesThrowsForMissingPrototype) { sourceId1 = sourcePathCache.sourceId(path1); - Storage::Types types{Storage::Type{Storage::Module{"QtQuick"}, + Storage::Types types{Storage::Type{qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, sourceId1, {Storage::ExportedType{"Item"}}}}; - ASSERT_THROW(storage.synchronize(modules, - imports, - types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize( + modules, + imports, + types, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}), QmlDesigner::TypeNameDoesNotExists); } -TEST_F(ProjectStorage, SynchronizeTypesThrowsForMissingModule) +TEST_F(ProjectStorage, SynchronizeTypesThrowsForInvalidModule) { sourceId1 = sourcePathCache.sourceId(path1); - Storage::Types types{Storage::Type{Storage::Module{"QtQuick"}, + Storage::Types types{Storage::Type{ModuleId{}, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -994,35 +1010,37 @@ TEST_F(ProjectStorage, SynchronizeTypesThrowsForMissingModule) TEST_F(ProjectStorage, TypeWithInvalidSourceIdThrows) { - Storage::Types types{Storage::Type{Storage::Module{"QtQuick"}, + Storage::Types types{Storage::Type{qtQuickModuleId, "QQuickItem", Storage::NativeType{""}, TypeAccessSemantics::Reference, SourceId{}, {Storage::ExportedType{"Item"}}}}; - ASSERT_THROW(storage.synchronize(modules, - imports, - types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize( + modules, + imports, + types, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}), QmlDesigner::TypeHasInvalidSourceId); } TEST_F(ProjectStorage, DeleteTypeIfSourceIdIsSynchronized) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types.erase(types.begin()); storage.synchronize({}, importsSourceId2, types, {sourceId1, sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -1035,17 +1053,18 @@ TEST_F(ProjectStorage, DeleteTypeIfSourceIdIsSynchronized) TEST_F(ProjectStorage, DontDeleteTypeIfSourceIdIsNotSynchronized) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types.pop_back(); storage.synchronize({}, importsSourceId1, types, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -1053,7 +1072,7 @@ TEST_F(ProjectStorage, DontDeleteTypeIfSourceIdIsNotSynchronized) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1065,17 +1084,18 @@ TEST_F(ProjectStorage, DontDeleteTypeIfSourceIdIsNotSynchronized) TEST_F(ProjectStorage, UpdateExportedTypesIfTypeNameChanges) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].typeName = "QQuickItem2"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -1083,7 +1103,7 @@ TEST_F(ProjectStorage, UpdateExportedTypesIfTypeNameChanges) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1095,11 +1115,12 @@ TEST_F(ProjectStorage, UpdateExportedTypesIfTypeNameChanges) TEST_F(ProjectStorage, BreakingPrototypeChainByDeletingBaseComponentThrows) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types.pop_back(); ASSERT_THROW(storage.synchronize({}, importsSourceId1, types, {sourceId1, sourceId2}, {}), @@ -1110,15 +1131,16 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarations) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1143,7 +1165,11 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationsWithMissingImports ASSERT_THROW(storage.synchronize(modules, {}, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1151,11 +1177,12 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationsWithMissingImports TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationsWithMissingImportsForExportedTypes) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"Obj"}; ASSERT_THROW(storage.synchronize({}, {}, {types[0]}, {sourceId1}, {}), @@ -1167,22 +1194,23 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationQualifiedType) Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, sourceId1, {Storage::ExportedType{"Object"}}}); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1202,17 +1230,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddPropertyDeclarationQualifiedType) TEST_F(ProjectStorage, SynchronizeTypesChangesPropertyDeclarationType) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[0].typeName = Storage::NativeType{"QQuickItem"}; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1232,18 +1261,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesPropertyDeclarationType) TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraits) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsPointer; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1263,11 +1293,12 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraits) TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraitsAndType) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsPointer; types[0].propertyDeclarations[0].typeName = Storage::NativeType{"QQuickItem"}; @@ -1275,7 +1306,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraitsAndType) ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1295,17 +1326,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesDeclarationTraitsAndType) TEST_F(ProjectStorage, SynchronizeTypesRemovesAPropertyDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1320,11 +1352,12 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesAPropertyDeclaration) TEST_F(ProjectStorage, SynchronizeTypesAddsAPropertyDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations.push_back( Storage::PropertyDeclaration{"object", Storage::NativeType{"QObject"}, @@ -1335,7 +1368,7 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsAPropertyDeclaration) ASSERT_THAT( storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1357,18 +1390,19 @@ TEST_F(ProjectStorage, SynchronizeTypesAddsAPropertyDeclaration) TEST_F(ProjectStorage, SynchronizeTypesRenameAPropertyDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[1].name = "objects"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1394,7 +1428,11 @@ TEST_F(ProjectStorage, UsingNonExistingNativePropertyTypeThrows) ASSERT_THROW(storage.synchronize(modules, importsSourceId1, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1408,7 +1446,11 @@ TEST_F(ProjectStorage, UsingNonExistingExportedPropertyTypeThrows) ASSERT_THROW(storage.synchronize(modules, importsSourceId1, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1423,7 +1465,11 @@ TEST_F(ProjectStorage, UsingNonExistingQualifiedExportedPropertyTypeWithWrongNam ASSERT_THROW(storage.synchronize(modules, importsSourceId1, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1438,7 +1484,11 @@ TEST_F(ProjectStorage, UsingNonExistingQualifiedExportedPropertyTypeWithWrongMod ASSERT_THROW(storage.synchronize(modules, importsSourceId1, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1446,18 +1496,23 @@ TEST_F(ProjectStorage, UsingNonExistingQualifiedExportedPropertyTypeWithWrongMod TEST_F(ProjectStorage, BreakingPropertyDeclarationTypeDependencyByDeletingTypeThrows) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].prototype = Storage::NativeType{}; types.pop_back(); ASSERT_THROW(storage.synchronize(modules, importsSourceId1, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -1466,14 +1521,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclarations) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1486,17 +1542,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclarations) TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationReturnType) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].returnTypeName = "item"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1509,17 +1566,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationReturnType) TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].name = "name"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1532,17 +1590,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationName) TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationPopParameters) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].parameters.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1555,17 +1614,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationPopParameters) TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationAppendParameters) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].parameters.push_back(Storage::ParameterDeclaration{"arg4", "int"}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1578,17 +1638,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationAppendParameter TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameterName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].parameters[0].name = "other"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1601,17 +1662,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameterTypeName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].parameters[0].name = "long long"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1624,17 +1686,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameterTraits) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations[1].parameters[0].traits = QmlDesigner::Storage::PropertyDeclarationTraits::IsList; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1647,17 +1710,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesFunctionDeclarationChangeParameter TEST_F(ProjectStorage, SynchronizeTypesRemovesFunctionDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1669,18 +1733,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesFunctionDeclaration) TEST_F(ProjectStorage, SynchronizeTypesAddFunctionDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].functionDeclarations.push_back( Storage::FunctionDeclaration{"name", "string", {Storage::ParameterDeclaration{"arg", "int"}}}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1695,14 +1760,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclarations) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1715,17 +1781,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclarations) TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].name = "name"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1738,17 +1805,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationName) TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationPopParameters) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].parameters.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1761,17 +1829,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationPopParameters) TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationAppendParameters) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].parameters.push_back(Storage::ParameterDeclaration{"arg4", "int"}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1784,17 +1853,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationAppendParameters) TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].parameters[0].name = "other"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1807,17 +1877,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterNa TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTypeName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].parameters[0].typeName = "long long"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1830,17 +1901,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTy TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTraits) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations[1].parameters[0].traits = QmlDesigner::Storage::PropertyDeclarationTraits::IsList; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1853,17 +1925,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesSignalDeclarationChangeParameterTr TEST_F(ProjectStorage, SynchronizeTypesRemovesSignalDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1875,18 +1948,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesSignalDeclaration) TEST_F(ProjectStorage, SynchronizeTypesAddSignalDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].signalDeclarations.push_back( Storage::SignalDeclaration{"name", {Storage::ParameterDeclaration{"arg", "int"}}}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1901,14 +1975,15 @@ TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclarations) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1921,17 +1996,18 @@ TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclarations) TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].name = "Name"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1944,17 +2020,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationName) TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationPopEnumeratorDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1967,18 +2044,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationPopEnumerato TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationAppendEnumeratorDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations.push_back( Storage::EnumeratorDeclaration{"Haa", 54}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -1991,17 +2069,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationAppendEnumer TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationChangeEnumeratorDeclarationName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations[0].name = "Hoo"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2014,17 +2093,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationChangeEnumer TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationChangeEnumeratorDeclarationValue) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations[1].value = 11; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2038,18 +2118,19 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationAddThatEnumeratorDeclarationHasValue) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations[0].value = 11; types[0].enumerationDeclarations[1].enumeratorDeclarations[0].hasValue = true; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2063,17 +2144,18 @@ TEST_F(ProjectStorage, SynchronizeTypesChangesEnumerationDeclarationRemoveThatEnumeratorDeclarationHasValue) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations[1].enumeratorDeclarations[0].hasValue = false; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2086,17 +2168,18 @@ TEST_F(ProjectStorage, TEST_F(ProjectStorage, SynchronizeTypesRemovesEnumerationDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2108,18 +2191,19 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovesEnumerationDeclaration) TEST_F(ProjectStorage, SynchronizeTypesAddEnumerationDeclaration) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].enumerationDeclarations.push_back( Storage::EnumerationDeclaration{"name", {Storage::EnumeratorDeclaration{"Foo", 98, true}}}); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -2134,99 +2218,131 @@ TEST_F(ProjectStorage, SynchronizeModulesAddModules) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId5}, {}); + storage.synchronize(modules, {}, {}, {qmlModuleSourceId, qtQuickModuleSourceId, moduleSourceId5}, {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2), - IsModule("/path/to", moduleSourceId3))); + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId), + IsModule("/path/to", pathToModuleSourceId))); } TEST_F(ProjectStorage, SynchronizeModulesAddModulesAgain) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2), - IsModule("/path/to", moduleSourceId3))); + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId), + IsModule("/path/to", pathToModuleSourceId))); } TEST_F(ProjectStorage, SynchronizeModulesUpdateToMoreModules) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); modules.push_back(Storage::Module{"QtQuick.Foo", moduleSourceId4}); storage.synchronize(modules, {}, {}, - {moduleSourceId1, moduleSourceId2, moduleSourceId3, moduleSourceId4}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId, moduleSourceId4}, {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2), - IsModule("/path/to", moduleSourceId3), + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId), + IsModule("/path/to", pathToModuleSourceId), IsModule("QtQuick.Foo", moduleSourceId4))); } TEST_F(ProjectStorage, SynchronizeModulesAddOneMoreModules) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto newModule = Storage::Module{"QtQuick.Foo", moduleSourceId4}; storage.synchronize({newModule}, {}, {}, {moduleSourceId4}, {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2), - IsModule("/path/to", moduleSourceId3), + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId), + IsModule("/path/to", pathToModuleSourceId), IsModule("QtQuick.Foo", moduleSourceId4))); } TEST_F(ProjectStorage, SynchronizeModulesRemoveModule) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); - storage.synchronize({}, {}, {}, {moduleSourceId3}, {}); + storage.synchronize({}, {}, {}, {pathToModuleSourceId}, {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2))); + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId))); } TEST_F(ProjectStorage, SynchronizeModulesChangeSourceId) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); modules[1].sourceId = moduleSourceId4; - storage.synchronize({modules[1]}, {}, {}, {moduleSourceId2, moduleSourceId4}, {}); + storage.synchronize({modules[1]}, {}, {}, {qtQuickModuleSourceId, moduleSourceId4}, {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml", moduleSourceId1), + UnorderedElementsAre(IsModule("Qml", qmlModuleSourceId), IsModule("QtQuick", moduleSourceId4), - IsModule("/path/to", moduleSourceId3))); + IsModule("/path/to", pathToModuleSourceId))); } TEST_F(ProjectStorage, SynchronizeModulesChangeName) { Storage::Modules modules{createModules()}; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); modules[0].name = "Qml2"; - storage.synchronize(modules, {}, {}, {moduleSourceId1, moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize(modules, + {}, + {}, + {qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchAllModules(), - UnorderedElementsAre(IsModule("Qml2", moduleSourceId1), - IsModule("QtQuick", moduleSourceId2), - IsModule("/path/to", moduleSourceId3))); + UnorderedElementsAre(IsModule("Qml2", qmlModuleSourceId), + IsModule("QtQuick", qtQuickModuleSourceId), + IsModule("/path/to", pathToModuleSourceId))); } TEST_F(ProjectStorage, RemovingModuleRemovesDependentTypesToo) @@ -2234,16 +2350,17 @@ TEST_F(ProjectStorage, RemovingModuleRemovesDependentTypesToo) Storage::Types types{createTypes()}; types[0].prototype = Storage::NativeType{""}; types[0].propertyDeclarations.clear(); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); - storage.synchronize({}, {}, {}, {moduleSourceId2, moduleSourceId3}, {}); + storage.synchronize({}, {}, {}, {qtQuickModuleSourceId, pathToModuleSourceId}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -2257,24 +2374,26 @@ TEST_F(ProjectStorage, RemovingModuleThrowsForMissingType) types[0].prototype = Storage::NativeType{""}; types[0].propertyDeclarations.clear(); types[1].prototype = Storage::ImportedType{"Item"}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); - ASSERT_THROW(storage.synchronize({}, {}, {}, {moduleSourceId2, moduleSourceId3}, {}), + ASSERT_THROW(storage.synchronize({}, {}, {}, {qtQuickModuleSourceId, pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } TEST_F(ProjectStorage, FetchTypeIdByModuleIdAndName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto qmlModuleId = storage.fetchModuleId("Qml"); auto typeId = storage.fetchTypeIdByName(qmlModuleId, "QObject"); @@ -2285,11 +2404,12 @@ TEST_F(ProjectStorage, FetchTypeIdByModuleIdAndName) TEST_F(ProjectStorage, FetchTypeIdByExportedName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto qmlModuleId = storage.fetchModuleId("Qml"); auto typeId = storage.fetchTypeIdByExportedName("Object"); @@ -2300,11 +2420,12 @@ TEST_F(ProjectStorage, FetchTypeIdByExportedName) TEST_F(ProjectStorage, FetchTypeIdByImporIdsAndExportedName) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto qmlModuleId = storage.fetchModuleId("Qml"); auto qtQuickModuleId = storage.fetchModuleId("QtQuick"); @@ -2317,11 +2438,12 @@ TEST_F(ProjectStorage, FetchTypeIdByImporIdsAndExportedName) TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAreEmpty) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({}, "Object"); ASSERT_FALSE(typeId.isValid()); @@ -2330,11 +2452,12 @@ TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAre TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAreInvalid) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({ModuleId{}}, "Object"); ASSERT_FALSE(typeId.isValid()); @@ -2343,11 +2466,12 @@ TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfModuleIdsAre TEST_F(ProjectStorage, FetchInvalidTypeIdByImporIdsAndExportedNameIfNotInModule) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); auto qtQuickModuleId = storage.fetchModuleId("QtQuick"); auto typeId = storage.fetchTypeIdByModuleIdsAndExportedName({qtQuickModuleId}, "Object"); @@ -2358,16 +2482,21 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarations) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2389,23 +2518,33 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarations) TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsAgain) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2427,19 +2566,24 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsAgain) TEST_F(ProjectStorage, SynchronizeTypesRemoveAliasDeclarations) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[2].propertyDeclarations.pop_back(); storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2475,12 +2619,17 @@ TEST_F(ProjectStorage, SynchronizeTypesAddAliasDeclarationsThrowsForWrongPropert TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsTypeName) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Obj2"}; importsSourceId3.emplace_back("/path/to", Storage::Version{}, sourceId3); @@ -2488,7 +2637,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsTypeName) ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2510,12 +2659,17 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsTypeName) TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsPropertyName) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[2].propertyDeclarations[2].aliasPropertyName = "children"; storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {}); @@ -2523,7 +2677,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsPropertyName) ASSERT_THAT( storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2546,12 +2700,17 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsPropertyName) TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsToPropertyDeclaration) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[2].propertyDeclarations.pop_back(); types[2].propertyDeclarations.push_back( Storage::PropertyDeclaration{"objects", @@ -2564,7 +2723,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasDeclarationsToPropertyDeclarat ASSERT_THAT( storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2594,18 +2753,23 @@ TEST_F(ProjectStorage, SynchronizeTypesChangePropertyDeclarationsToAliasDeclarat Storage::NativeType{"QQuickItem"}, Storage::PropertyDeclarationTraits::IsList | Storage::PropertyDeclarationTraits::IsReadOnly}); - storage.synchronize( - modules, - imports, - typesChanged, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + typesChanged, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); storage.synchronize({}, imports, types, {sourceId1, sourceId2, sourceId3, sourceId4}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2627,12 +2791,17 @@ TEST_F(ProjectStorage, SynchronizeTypesChangePropertyDeclarationsToAliasDeclarat TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTraits) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[1].propertyDeclarations[0].traits = Storage::PropertyDeclarationTraits::IsList | Storage::PropertyDeclarationTraits::IsReadOnly; @@ -2641,7 +2810,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTrait ASSERT_THAT( storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2664,12 +2833,17 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTrait TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTypeName) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Item"}; importsSourceId2.emplace_back("QtQuick", Storage::Version{}, sourceId2); @@ -2677,7 +2851,7 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTypeN ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2699,12 +2873,17 @@ TEST_F(ProjectStorage, SynchronizeTypesChangeAliasTargetPropertyDeclarationTypeN TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationWithAnAliasThrows) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[1].propertyDeclarations.pop_back(); ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}), @@ -2714,12 +2893,17 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationWithAnAliasThrow TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationAndAlias) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[1].propertyDeclarations.pop_back(); types[2].propertyDeclarations.pop_back(); @@ -2731,7 +2915,7 @@ TEST_F(ProjectStorage, SynchronizeTypesRemovePropertyDeclarationAndAlias) ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2752,12 +2936,17 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeWithAliasTargetPropertyDeclarat Storage::Types types{createTypesWithAliases()}; types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Object2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId3); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -2767,12 +2956,17 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeAndAliasPropertyDeclaration) Storage::Types types{createTypesWithAliases()}; types[2].propertyDeclarations[2].typeName = Storage::ImportedType{"Object2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId3); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[2].propertyDeclarations.pop_back(); storage.synchronize({}, @@ -2783,7 +2977,7 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeAndAliasPropertyDeclaration) ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2802,12 +2996,17 @@ TEST_F(ProjectStorage, SynchronizeTypesRemoveTypeAndAliasPropertyDeclaration) TEST_F(ProjectStorage, UpdateAliasPropertyIfPropertyIsOverloaded) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[0].propertyDeclarations.push_back( Storage::PropertyDeclaration{"objects", Storage::NativeType{"QQuickItem"}, @@ -2819,7 +3018,7 @@ TEST_F(ProjectStorage, UpdateAliasPropertyIfPropertyIsOverloaded) ASSERT_THAT( storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2848,17 +3047,22 @@ TEST_F(ProjectStorage, AliasPropertyIsOverloaded) Storage::PropertyDeclarationTraits::IsList | Storage::PropertyDeclarationTraits::IsReadOnly}); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); ASSERT_THAT( storage.fetchTypes(), Contains( - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2886,19 +3090,24 @@ TEST_F(ProjectStorage, UpdateAliasPropertyIfOverloadedPropertyIsRemoved) Storage::NativeType{"QQuickItem"}, Storage::PropertyDeclarationTraits::IsList | Storage::PropertyDeclarationTraits::IsReadOnly}); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[0].propertyDeclarations.pop_back(); storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2923,19 +3132,24 @@ TEST_F(ProjectStorage, RelinkAliasProperty) types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); imports.emplace_back("QtQuick", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[3].module = Storage::Module{"QtQuick"}; + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); + types[3].moduleId = qtQuickModuleId; storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -2960,13 +3174,18 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForQualifiedImportedTypeName) types[1].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object2", Storage::Import{"/path/to", Storage::Version{}, sourceId2}}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[3].module = Storage::Module{"QtQuick"}; + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); + types[3].moduleId = qtQuickModuleId; importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4); ASSERT_THROW(storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {}), @@ -2980,7 +3199,7 @@ TEST_F(ProjectStorage, types[1].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object2", Storage::Import{"/path/to", Storage::Version{}, sourceId2}}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QObject2", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -2995,14 +3214,14 @@ TEST_F(ProjectStorage, sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -3026,19 +3245,24 @@ TEST_F(ProjectStorage, RelinkAliasPropertyReactToTypeNameChange) Storage::Types types{createTypesWithAliases2()}; types[2].propertyDeclarations.push_back( Storage::PropertyDeclaration{"items", Storage::ImportedType{"Item"}, "children"}); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[0].typeName = "QQuickItem2"; storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), Contains(AllOf( - IsStorageType(Storage::Module{"QtQuick"}, + IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3064,18 +3288,23 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedType) imports.emplace_back("/path/to", Storage::Version{}, sourceId2); imports.emplace_back("QtQuick", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[3].module = Storage::Module{"QtQuick"}; + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); + types[3].moduleId = qtQuickModuleId; storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId3, sourceId4}, {}); ASSERT_THAT(storage.fetchTypes(), - Not(Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Not(Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -3087,12 +3316,17 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyType) Storage::Types types{createTypesWithAliases()}; types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[0].prototype = Storage::NativeType{}; importsSourceId1.emplace_back("/path/to", Storage::Version{}, sourceId1); importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4); @@ -3113,13 +3347,18 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyTypeName Storage::Types types{createTypesWithAliases()}; types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[3].module = Storage::Module{"QtQuick"}; + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); + types[3].moduleId = qtQuickModuleId; types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject"}; importsSourceId4.emplace_back("QtQuick", Storage::Version{}, sourceId4); @@ -3130,7 +3369,7 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyForDeletedTypeAndPropertyTypeName {}); ASSERT_THAT(storage.fetchTypes(), - Not(Contains(IsStorageType(Storage::Module{"QtQuick"}, + Not(Contains(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -3143,12 +3382,17 @@ TEST_F(ProjectStorage, DoNotRelinkPropertyTypeDoesNotExists) types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); imports.emplace_back("QtQuick", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types.pop_back(); ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId4}, {}), QmlDesigner::TypeNameDoesNotExists); @@ -3159,12 +3403,17 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyTypeDoesNotExists) Storage::Types types{createTypesWithAliases2()}; types[1].propertyDeclarations[0].typeName = Storage::NativeType{"QObject2"}; imports.emplace_back("/path/to", Storage::Version{}, sourceId2); - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); ASSERT_THROW(storage.synchronize({}, {}, {}, {sourceId1}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -3172,17 +3421,18 @@ TEST_F(ProjectStorage, DoNotRelinkAliasPropertyTypeDoesNotExists) TEST_F(ProjectStorage, ChangePrototypeTypeName) { Storage::Types types{createTypesWithExportedTypeNamesOnly()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[1].typeName = "QObject3"; storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject3"}, TypeAccessSemantics::Reference, @@ -3192,17 +3442,18 @@ TEST_F(ProjectStorage, ChangePrototypeTypeName) TEST_F(ProjectStorage, ChangePrototypeTypeModuleId) { Storage::Types types{createTypes()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[1].module = Storage::Module{"QtQuick"}; + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + types[1].moduleId = qtQuickModuleId; storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3216,12 +3467,13 @@ TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleIdThows) Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[1].module = Storage::Module{"QtQuick"}; + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + types[1].moduleId = qtQuickModuleId; ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}), QmlDesigner::TypeNameDoesNotExists); @@ -3234,12 +3486,13 @@ TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleId) Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[1].module = Storage::Module{"QtQuick"}; + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + types[1].moduleId = qtQuickModuleId; types[0].prototype = Storage::QualifiedImportedType{"Object", Storage::Import{"QtQuick", Storage::Version{}, @@ -3252,7 +3505,7 @@ TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleId) {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3262,18 +3515,19 @@ TEST_F(ProjectStorage, ChangeQualifiedPrototypeTypeModuleId) TEST_F(ProjectStorage, ChangePrototypeTypeNameAndModuleId) { Storage::Types types{createTypesWithExportedTypeNamesOnly()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[1].module = Storage::Module{"QtQuick"}; + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + types[1].moduleId = qtQuickModuleId; types[1].typeName = "QObject3"; storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject3"}, TypeAccessSemantics::Reference, @@ -3284,11 +3538,12 @@ TEST_F(ProjectStorage, ChangePrototypeTypeNameThrowsForWrongNativePrototupeTypeN { Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::ImportedType{"Object"}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[1].typeName = "QObject3"; ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}), @@ -3299,7 +3554,7 @@ TEST_F(ProjectStorage, ThrowForPrototypeChainCycles) { Storage::Types types{createTypes()}; types[1].prototype = Storage::ImportedType{"Object2"}; - types.push_back(Storage::Type{Storage::Module{"/path/to"}, + types.push_back(Storage::Type{pathToModuleId, "QObject2", Storage::ImportedType{"Item"}, TypeAccessSemantics::Reference, @@ -3309,12 +3564,16 @@ TEST_F(ProjectStorage, ThrowForPrototypeChainCycles) imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); imports.emplace_back("/path/to", Storage::Version{}, sourceId3); - ASSERT_THROW(storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}), QmlDesigner::PrototypeChainCycle); } @@ -3326,7 +3585,11 @@ TEST_F(ProjectStorage, ThrowForTypeIdAndPrototypeIdAreTheSame) ASSERT_THROW(storage.synchronize(modules, imports, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::PrototypeChainCycle); } @@ -3334,11 +3597,12 @@ TEST_F(ProjectStorage, ThrowForTypeIdAndPrototypeIdAreTheSame) TEST_F(ProjectStorage, ThrowForTypeIdAndPrototypeIdAreTheSameForRelinking) { Storage::Types types{createTypesWithExportedTypeNamesOnly()}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[1].prototype = Storage::ImportedType{"Item"}; types[1].typeName = "QObject2"; importsSourceId2.emplace_back("QtQuick", Storage::Version{}, sourceId2); @@ -3359,13 +3623,13 @@ TEST_F(ProjectStorage, RecursiveAliases) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3388,9 +3652,9 @@ TEST_F(ProjectStorage, RecursiveAliasesChangePropertyType) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); types[1].propertyDeclarations[0].typeName = Storage::ImportedType{"Object2"}; importsSourceId2.emplace_back("/path/to", Storage::Version{}, sourceId2); @@ -3398,7 +3662,7 @@ TEST_F(ProjectStorage, RecursiveAliasesChangePropertyType) storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3421,9 +3685,9 @@ TEST_F(ProjectStorage, UpdateAliasesAfterInjectingProperty) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); types[0].propertyDeclarations.push_back( Storage::PropertyDeclaration{"objects", @@ -3434,7 +3698,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterInjectingProperty) storage.synchronize({}, importsSourceId1, {types[0]}, {sourceId1}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3458,9 +3722,9 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangeAliasToProperty) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); types[2].propertyDeclarations.clear(); types[2].propertyDeclarations.push_back( @@ -3472,7 +3736,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangeAliasToProperty) storage.synchronize({}, importsSourceId3, {types[2]}, {sourceId3}, {}); ASSERT_THAT(storage.fetchTypes(), - AllOf(Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3484,7 +3748,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangeAliasToProperty) Storage::PropertyDeclarationTraits::IsList | Storage::PropertyDeclarationTraits::IsReadOnly, "objects"))))), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem", Storage::NativeType{"QQuickItem"}, TypeAccessSemantics::Reference, @@ -3511,9 +3775,9 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangePropertyToAlias) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); types[1].propertyDeclarations.clear(); types[1].propertyDeclarations.push_back( @@ -3523,7 +3787,7 @@ TEST_F(ProjectStorage, UpdateAliasesAfterChangePropertyToAlias) storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QAliasItem2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3553,9 +3817,9 @@ TEST_F(ProjectStorage, CheckForProtoTypeCycleThrows) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::AliasChainCycle); } @@ -3571,9 +3835,9 @@ TEST_F(ProjectStorage, CheckForProtoTypeCycleAfterUpdateThrows) sourceId3, sourceId4, sourceId5, - moduleSourceId1, - moduleSourceId2, - moduleSourceId3}, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}); types[1].propertyDeclarations.clear(); types[1].propertyDeclarations.push_back( @@ -3591,7 +3855,7 @@ TEST_F(ProjectStorage, QualifiedPrototype) Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3599,14 +3863,15 @@ TEST_F(ProjectStorage, QualifiedPrototype) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3624,7 +3889,11 @@ TEST_F(ProjectStorage, QualifiedPrototypeUpperDownTheModuleChainThrows) ASSERT_THROW(storage.synchronize(modules, imports, types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, + sourceId2, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, {}), QmlDesigner::TypeNameDoesNotExists); } @@ -3636,7 +3905,7 @@ TEST_F(ProjectStorage, QualifiedPrototypeUpperInTheModuleChain) Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3644,14 +3913,15 @@ TEST_F(ProjectStorage, QualifiedPrototypeUpperInTheModuleChain) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QQuickObject"}, TypeAccessSemantics::Reference, @@ -3665,7 +3935,7 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithWrongVersionThrows) Storage::Import{"Qml", Storage::Version{4}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3673,12 +3943,16 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithWrongVersionThrows) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - ASSERT_THROW(storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}), QmlDesigner::TypeNameDoesNotExists); } @@ -3687,7 +3961,7 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersion) Storage::Types types{createTypes()}; imports[0].version = Storage::Version{2}; types[0].prototype = Storage::QualifiedImportedType{"Object", imports[0]}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3695,14 +3969,15 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersion) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3715,7 +3990,7 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersionInTheProtoTypeChain) imports[2].version = Storage::Version{2}; types[0].prototype = Storage::QualifiedImportedType{"Object", imports[2]}; types[0].exportedTypes[0].version = Storage::Version{2}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3723,14 +3998,15 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersionInTheProtoTypeChain) {Storage::ExportedType{"Object", Storage::Version{2}}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QQuickObject"}, TypeAccessSemantics::Reference, @@ -3745,12 +4021,16 @@ TEST_F(ProjectStorage, QualifiedPrototypeWithVersionDownTheProtoTypeChainThrows) Storage::Version{2}, sourceId1}}; - ASSERT_THROW(storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}), QmlDesigner::TypeNameDoesNotExists); } @@ -3759,7 +4039,7 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeName) Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3767,11 +4047,12 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeName) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains( @@ -3787,12 +4068,16 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameDownTheModuleChainThr types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - ASSERT_THROW(storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}), + ASSERT_THROW(storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}), QmlDesigner::TypeNameDoesNotExists); } @@ -3801,7 +4086,7 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameInTheModuleChain) Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - types.push_back(Storage::Type{Storage::Module{"QtQuick"}, + types.push_back(Storage::Type{qtQuickModuleId, "QQuickObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -3809,11 +4094,12 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameInTheModuleChain) {Storage::ExportedType{"Object"}}}); imports.emplace_back("QtQuick", Storage::Version{}, sourceId3); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, sourceId3, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains( @@ -3830,11 +4116,12 @@ TEST_F(ProjectStorage, QualifiedPropertyDeclarationTypeNameWithVersion) "Object", Storage::Import{"Qml", Storage::Version{2}, sourceId1}}; imports.emplace_back("Qml", Storage::Version{2}, sourceId1); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_THAT(storage.fetchTypes(), Contains( @@ -3849,12 +4136,13 @@ TEST_F(ProjectStorage, ChangePropertyTypeModuleIdWithQualifiedTypeThrows) Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - types[1].module = Storage::Module{"QtQuick"}; + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + types[1].moduleId = qtQuickModuleId; ASSERT_THROW(storage.synchronize({}, importsSourceId2, {types[1]}, {sourceId2}, {}), QmlDesigner::TypeNameDoesNotExists); @@ -3865,20 +4153,21 @@ TEST_F(ProjectStorage, ChangePropertyTypeModuleIdWithQualifiedType) Storage::Types types{createTypes()}; types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"Qml", Storage::Version{}, sourceId1}}; - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); types[0].propertyDeclarations[0].typeName = Storage::QualifiedImportedType{ "Object", Storage::Import{"QtQuick", Storage::Version{}, sourceId1}}; - types[1].module = Storage::Module{"QtQuick"}; + types[1].moduleId = qtQuickModuleId; imports.emplace_back("QtQuick", Storage::Version{}, sourceId2); storage.synchronize({}, imports, types, {sourceId1, sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"QtQuick"}, + Contains(AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3969,20 +4258,25 @@ TEST_F(ProjectStorage, FetchFileStatus) TEST_F(ProjectStorage, SynchronizeTypesWithoutTypeName) { Storage::Types types{createTypesWithAliases()}; - storage.synchronize( - modules, - imports, - types, - {sourceId1, sourceId2, sourceId3, sourceId4, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize(modules, + imports, + types, + {sourceId1, + sourceId2, + sourceId3, + sourceId4, + qmlModuleSourceId, + qtQuickModuleSourceId, + pathToModuleSourceId}, + {}); types[3].typeName.clear(); - types[3].module.name.clear(); + types[3].moduleId = ModuleId{}; types[3].prototype = Storage::ImportedType{"Object"}; storage.synchronize({}, importsSourceId4, {types[3]}, {sourceId4}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(AllOf(IsStorageType(Storage::Module{"/path/to"}, + Contains(AllOf(IsStorageType(pathToModuleId, "QObject2", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -3998,9 +4292,9 @@ TEST_F(ProjectStorage, FetchByMajorVersionForImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Object"}, TypeAccessSemantics::Reference, @@ -4011,7 +4305,7 @@ TEST_F(ProjectStorage, FetchByMajorVersionForImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4024,10 +4318,10 @@ TEST_F(ProjectStorage, FetchByMajorVersionForQualifiedImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{1}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Object", import}, TypeAccessSemantics::Reference, @@ -4037,7 +4331,7 @@ TEST_F(ProjectStorage, FetchByMajorVersionForQualifiedImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4050,9 +4344,9 @@ TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4063,7 +4357,7 @@ TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4076,10 +4370,10 @@ TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForQualifiedImportedTyp storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{1, 2}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4089,7 +4383,7 @@ TEST_F(ProjectStorage, FetchByMajorVersionAndMinorVersionForQualifiedImportedTyp storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4103,9 +4397,9 @@ TEST_F(ProjectStorage, storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Object"}, TypeAccessSemantics::Reference, @@ -4124,10 +4418,10 @@ TEST_F(ProjectStorage, storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Object", import}, TypeAccessSemantics::Reference, @@ -4144,9 +4438,9 @@ TEST_F(ProjectStorage, FetchLowMinorVersionForImportedTypeThrows) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4164,10 +4458,10 @@ TEST_F(ProjectStorage, FetchLowMinorVersionForQualifiedImportedTypeThrows) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{1, 1}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4184,9 +4478,9 @@ TEST_F(ProjectStorage, FetchHigherMinorVersionForImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4197,7 +4491,7 @@ TEST_F(ProjectStorage, FetchHigherMinorVersionForImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4210,10 +4504,10 @@ TEST_F(ProjectStorage, FetchHigherMinorVersionForQualifiedImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{1, 3}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4223,7 +4517,7 @@ TEST_F(ProjectStorage, FetchHigherMinorVersionForQualifiedImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4236,9 +4530,9 @@ TEST_F(ProjectStorage, FetchDifferentMajorVersionForImportedTypeThrows) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4256,10 +4550,10 @@ TEST_F(ProjectStorage, FetchDifferentMajorVersionForQualifiedImportedTypeThrows) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{3, 1}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4276,9 +4570,9 @@ TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4289,7 +4583,7 @@ TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject2"}, TypeAccessSemantics::Reference, @@ -4302,10 +4596,10 @@ TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForQualifiedImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{2, 3}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4315,7 +4609,7 @@ TEST_F(ProjectStorage, FetchOtherTypeByDifferentVersionForQualifiedImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject2"}, TypeAccessSemantics::Reference, @@ -4328,9 +4622,9 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForImportedType storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4341,7 +4635,7 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForImportedType storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject4"}, TypeAccessSemantics::Reference, @@ -4354,10 +4648,10 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForQualifiedImp storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4367,7 +4661,7 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithoutVersionForQualifiedImp storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject4"}, TypeAccessSemantics::Reference, @@ -4380,9 +4674,9 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForImportedTy storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"Obj"}, TypeAccessSemantics::Reference, @@ -4393,7 +4687,7 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForImportedTy storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject3"}, TypeAccessSemantics::Reference, @@ -4406,10 +4700,10 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForQualifiedI storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{2}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"Obj", import}, TypeAccessSemantics::Reference, @@ -4419,7 +4713,7 @@ TEST_F(ProjectStorage, FetchHighestVersionForImportWithMajorVersionForQualifiedI storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject3"}, TypeAccessSemantics::Reference, @@ -4432,9 +4726,9 @@ TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForImportedType) storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::ImportedType{"BuiltInObj"}, TypeAccessSemantics::Reference, @@ -4445,7 +4739,7 @@ TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForImportedType) storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4458,10 +4752,10 @@ TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForQualifiedImportedT storage.synchronize(modules, imports, types, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); Storage::Import import{"Qml", Storage::Version{}, sourceId2}; - Storage::Type type{Storage::Module{"QtQuick"}, + Storage::Type type{qtQuickModuleId, "Item", Storage::QualifiedImportedType{"BuiltInObj", import}, TypeAccessSemantics::Reference, @@ -4471,7 +4765,7 @@ TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForQualifiedImportedT storage.synchronize({}, {import}, {type}, {sourceId2}, {}); ASSERT_THAT(storage.fetchTypes(), - Contains(IsStorageType(Storage::Module{"QtQuick"}, + Contains(IsStorageType(qtQuickModuleId, "Item", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, @@ -4480,7 +4774,7 @@ TEST_F(ProjectStorage, FetchExportedTypeWithoutVersionFirstForQualifiedImportedT TEST_F(ProjectStorage, EnsureThatPropertiesForRemovedTypesAreNotAnymoreRelinked) { - Storage::Type type{Storage::Module{"Qml"}, + Storage::Type type{qmlModuleId, "QObject", Storage::NativeType{""}, TypeAccessSemantics::Reference, @@ -4493,7 +4787,7 @@ TEST_F(ProjectStorage, EnsureThatPropertiesForRemovedTypesAreNotAnymoreRelinked) storage.synchronize(modules, {import}, {type}, - {sourceId1, moduleSourceId1, moduleSourceId2, moduleSourceId3}, + {sourceId1, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, {}); ASSERT_NO_THROW(storage.synchronize({}, {}, {}, {sourceId1}, {})); @@ -4502,11 +4796,12 @@ TEST_F(ProjectStorage, EnsureThatPropertiesForRemovedTypesAreNotAnymoreRelinked) TEST_F(ProjectStorage, EnsureThatPrototypesForRemovedTypesAreNotAnymoreRelinked) { auto types = createTypes(); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); ASSERT_NO_THROW(storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {})); } @@ -4514,12 +4809,13 @@ TEST_F(ProjectStorage, EnsureThatPrototypesForRemovedTypesAreNotAnymoreRelinked) TEST_F(ProjectStorage, MinimalUpdates) { auto types = createTypes(); - storage.synchronize(modules, - imports, - types, - {sourceId1, sourceId2, moduleSourceId1, moduleSourceId2, moduleSourceId3}, - {}); - Storage::Type quickType{Storage::Module{"QtQuick"}, + storage.synchronize( + modules, + imports, + types, + {sourceId1, sourceId2, qmlModuleSourceId, qtQuickModuleSourceId, pathToModuleSourceId}, + {}); + Storage::Type quickType{qtQuickModuleId, "QQuickItem", {}, TypeAccessSemantics::Reference, @@ -4531,10 +4827,10 @@ TEST_F(ProjectStorage, MinimalUpdates) {}, Storage::ChangeLevel::Minimal}; - storage.synchronize({modules[1]}, {}, {quickType}, {moduleSourceId2}, {}); + storage.synchronize({modules[1]}, {}, {quickType}, {qtQuickModuleSourceId}, {}); ASSERT_THAT(storage.fetchTypes(), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Qml"}, + UnorderedElementsAre(AllOf(IsStorageType(qmlModuleId, "QObject", Storage::NativeType{}, TypeAccessSemantics::Reference, @@ -4542,7 +4838,7 @@ TEST_F(ProjectStorage, MinimalUpdates) Field(&Storage::Type::exportedTypes, UnorderedElementsAre(IsExportedType("Object"), IsExportedType("Obj")))), - AllOf(IsStorageType(Storage::Module{"QtQuick"}, + AllOf(IsStorageType(qtQuickModuleId, "QQuickItem", Storage::NativeType{"QObject"}, TypeAccessSemantics::Reference, diff --git a/tests/unit/unittest/projectstorageupdater-test.cpp b/tests/unit/unittest/projectstorageupdater-test.cpp index 79336faec9..d198587821 100644 --- a/tests/unit/unittest/projectstorageupdater-test.cpp +++ b/tests/unit/unittest/projectstorageupdater-test.cpp @@ -49,17 +49,17 @@ using QmlDesigner::IdPaths; using QmlDesigner::Storage::Version; MATCHER_P5(IsStorageType, - module, + moduleId, typeName, prototype, accessSemantics, sourceId, std::string(negation ? "isn't " : "is ") - + PrintToString(Storage::Type{module, typeName, prototype, accessSemantics, sourceId})) + + PrintToString(Storage::Type{moduleId, typeName, prototype, accessSemantics, sourceId})) { const Storage::Type &type = arg; - return type.module == module && type.typeName == typeName + return type.moduleId == moduleId && type.typeName == typeName && type.accessSemantics == accessSemantics && type.sourceId == sourceId && Storage::ImportedTypeName{prototype} == type.prototype; } @@ -199,18 +199,20 @@ protected: qmlDocumentParserMock, qmlTypesParserMock}; SourceId objectTypeSourceId{sourcePathCache.sourceId("/path/Object")}; - Storage::Type objectType{Storage::Module{"Qml"}, - "QObject", - Storage::NativeType{}, - Storage::TypeAccessSemantics::Reference, - objectTypeSourceId, - {Storage::ExportedType{"Object"}, Storage::ExportedType{"Obj"}}}; + SourceId qmltypesPathSourceId = sourcePathCache.sourceId("/path/example.qmltypes"); SourceId qmltypes2PathSourceId = sourcePathCache.sourceId("/path/example2.qmltypes"); SourceId qmlDirPathSourceId = sourcePathCache.sourceId("/path/qmldir"); + QmlDesigner::ModuleId exampleModuleId{&qmlDirPathSourceId}; SourceId qmlDocumentSourceId1 = sourcePathCache.sourceId("/path/First.qml"); SourceId qmlDocumentSourceId2 = sourcePathCache.sourceId("/path/First.2.qml"); SourceId qmlDocumentSourceId3 = sourcePathCache.sourceId("/path/Second.qml"); + Storage::Type objectType{exampleModuleId, + "QObject", + Storage::NativeType{}, + Storage::TypeAccessSemantics::Reference, + objectTypeSourceId, + {Storage::ExportedType{"Object"}, Storage::ExportedType{"Obj"}}}; QString qmlDocument1{"First{}"}; QString qmlDocument2{"Second{}"}; QString qmlDocument3{"Third{}"}; @@ -417,21 +419,21 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlDocuments) synchronize(ElementsAre(IsModule("Example", qmlDirPathSourceId)), UnorderedElementsAre(import1, import2, import3), UnorderedElementsAre( - AllOf(IsStorageType(Storage::Module{"Example"}, + AllOf(IsStorageType(exampleModuleId, "First.qml", Storage::ImportedType{"Object"}, TypeAccessSemantics::Reference, qmlDocumentSourceId1), Field(&Storage::Type::exportedTypes, ElementsAre(IsExportedType("FirstType", 1, 0)))), - AllOf(IsStorageType(Storage::Module{"Example"}, + AllOf(IsStorageType(exampleModuleId, "First.2.qml", Storage::ImportedType{"Object2"}, TypeAccessSemantics::Reference, qmlDocumentSourceId2), Field(&Storage::Type::exportedTypes, ElementsAre(IsExportedType("FirstType", 2, 2)))), - AllOf(IsStorageType(Storage::Module{"Example"}, + AllOf(IsStorageType(exampleModuleId, "Second.qml", Storage::ImportedType{"Object3"}, TypeAccessSemantics::Reference, @@ -462,14 +464,14 @@ TEST_F(ProjectStorageUpdater, SynchronizeQmlDocumentsDontUpdateIfUpToDate) projectStorageMock, synchronize(ElementsAre(IsModule("Example", qmlDirPathSourceId)), UnorderedElementsAre(import1, import2), - UnorderedElementsAre(AllOf(IsStorageType(Storage::Module{"Example"}, + UnorderedElementsAre(AllOf(IsStorageType(exampleModuleId, "First.qml", Storage::ImportedType{"Object"}, TypeAccessSemantics::Reference, qmlDocumentSourceId1), Field(&Storage::Type::exportedTypes, ElementsAre(IsExportedType("FirstType", 1, 0)))), - AllOf(IsStorageType(Storage::Module{"Example"}, + AllOf(IsStorageType(exampleModuleId, "First.2.qml", Storage::ImportedType{"Object2"}, TypeAccessSemantics::Reference, @@ -509,4 +511,15 @@ TEST_F(ProjectStorageUpdater, SynchronizeModules) updater.update(); } +TEST_F(ProjectStorageUpdater, UpdateQmldirDocuments) +{ + QString qmldir{"module Example\nFirstType 1.1 First.qml\nFirstType 2.2 " + "First.2.qml\nSecondType 2.1 OldSecond.qml\nSecondType 2.2 Second.qml\n"}; + ON_CALL(fileSystemMock, contentAsQString(Eq(QString("/path/qmldir")))).WillByDefault(Return(qmldir)); + ON_CALL(projectStorageMock, fetchFileStatus(Eq(qmlDocumentSourceId3))) + .WillByDefault(Return(FileStatus{qmlDocumentSourceId3, 22, 14})); + + updater.pathsWithIdsChanged({}); +} + } // namespace |