From 403e610e6b867dc840c4e78a344cac52bbe751c2 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Tue, 23 Nov 2021 17:23:26 +0200 Subject: Add support for moving child components with Add new optional "moveChildren" attribute to element. Children of components declaring "moveChildren=true" attribute are calculated a value for an automatic tree name element. Multiple components in a single tree branch can declare a tree name, the order which the relocation happens is from leaf components to root components. Components may be moved under another tree name target. Components may be moved to an existing identifier part that does not have a component, for example in the following repository structure: rootA.childA rootB rootB.childB the "rootB" component can legally declare a "rootA" tree name. The tree names of components become static after installed. If a repository declares a new tree name for a component that is installed, it is only applied after updating in maintenance tool. Child components, which have an automatic tree name, are moved if the parent component is updated with a new tree name, however. Task-number: QTIFW-2380 Change-Id: I9c44a114d3c1248b7e2dd4f0b5cda0739af102f3 Reviewed-by: Katja Marttila --- .../componentmodel/tst_componentmodel.cpp | 2 +- .../treename/data/invalid_repository/Updates.xml | 25 +++ .../treename/data/repository_children/Updates.xml | 229 ++++++++++++++++++++ .../componentA.subcomponent1/1.0.0content.7z | Bin 0 -> 227 bytes .../componentA.subcomponent1/1.0.0meta.7z | Bin 0 -> 137 bytes .../repository_children/componentA/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentA/1.0.0meta.7z | Bin 0 -> 109 bytes .../repository_children/componentB/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentB/1.0.0meta.7z | Bin 0 -> 109 bytes .../repository_children/componentE/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentE/1.0.0meta.7z | Bin 0 -> 109 bytes .../1.0.0content.7z | Bin 0 -> 231 bytes .../1.0.0meta.7z | Bin 0 -> 171 bytes .../1.0.0content.7z | Bin 0 -> 231 bytes .../1.0.0meta.7z | Bin 0 -> 171 bytes .../componentF.subcomponent1/1.0.0content.7z | Bin 0 -> 227 bytes .../componentF.subcomponent1/1.0.0meta.7z | Bin 0 -> 137 bytes .../1.0.0content.7z | Bin 0 -> 231 bytes .../1.0.0meta.7z | Bin 0 -> 171 bytes .../1.0.0content.7z | Bin 0 -> 231 bytes .../1.0.0meta.7z | Bin 0 -> 171 bytes .../componentF.subcomponent2/1.0.0content.7z | Bin 0 -> 227 bytes .../componentF.subcomponent2/1.0.0meta.7z | Bin 0 -> 137 bytes .../repository_children/componentF/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentF/1.0.0meta.7z | Bin 0 -> 109 bytes .../componentH.subcomponent1/1.0.0content.7z | Bin 0 -> 227 bytes .../componentH.subcomponent1/1.0.0meta.7z | Bin 0 -> 137 bytes .../repository_children/componentH/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentH/1.0.0meta.7z | Bin 0 -> 109 bytes .../componentI.subcomponent1/1.0.0content.7z | Bin 0 -> 227 bytes .../componentI.subcomponent1/1.0.0meta.7z | Bin 0 -> 137 bytes .../componentI.subcomponent2/1.0.0content.7z | Bin 0 -> 227 bytes .../componentI.subcomponent2/1.0.0meta.7z | Bin 0 -> 137 bytes .../componentJ.subcomponent1/1.0.0content.7z | Bin 0 -> 227 bytes .../componentJ.subcomponent1/1.0.0meta.7z | Bin 0 -> 137 bytes .../repository_children/componentJ/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentJ/1.0.0meta.7z | Bin 0 -> 109 bytes .../repository_children/componentK/1.0.0content.7z | Bin 0 -> 223 bytes .../repository_children/componentK/1.0.0meta.7z | Bin 0 -> 109 bytes tests/auto/installer/treename/settings.qrc | 37 ++++ tests/auto/installer/treename/tst_treename.cpp | 241 ++++++++++++++++++++- 41 files changed, 531 insertions(+), 3 deletions(-) create mode 100644 tests/auto/installer/treename/data/repository_children/Updates.xml create mode 100644 tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7z create mode 100644 tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7z (limited to 'tests') diff --git a/tests/auto/installer/componentmodel/tst_componentmodel.cpp b/tests/auto/installer/componentmodel/tst_componentmodel.cpp index 0672a03ec..3aef34fe4 100644 --- a/tests/auto/installer/componentmodel/tst_componentmodel.cpp +++ b/tests/auto/installer/componentmodel/tst_componentmodel.cpp @@ -521,7 +521,7 @@ private: // we need at least these to be able to test the model component->setValue("Name", info.data.value("Name").toString()); - component->setValue("TreeName", info.data.value("TreeName").toString()); + component->setValue("TreeName", info.data.value("TreeName").value>().first); QString isDefault = info.data.value("Default").toString(); if (m_core.noDefaultInstallation()) isDefault = scFalse; diff --git a/tests/auto/installer/treename/data/invalid_repository/Updates.xml b/tests/auto/installer/treename/data/invalid_repository/Updates.xml index 282e3a43f..b329bb223 100644 --- a/tests/auto/installer/treename/data/invalid_repository/Updates.xml +++ b/tests/auto/installer/treename/data/invalid_repository/Updates.xml @@ -27,4 +27,29 @@ 40 componentA.sub1 + + componentC.sub1 + Component C subcomponent1 + Component + 1.0.0 + 2014-08-25 + 40 + + + componentD + Component D + Component + 1.0.0 + 2014-08-25 + 40 + componentC + + + componentD.sub1 + Component D subcomponent 1 + Component + 1.0.0 + 2014-08-25 + 40 + diff --git a/tests/auto/installer/treename/data/repository_children/Updates.xml b/tests/auto/installer/treename/data/repository_children/Updates.xml new file mode 100644 index 000000000..a17f481d6 --- /dev/null +++ b/tests/auto/installer/treename/data/repository_children/Updates.xml @@ -0,0 +1,229 @@ + + {AnyApplication} + 1.0.0 + false + + componentA + Component A + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + componentANew + + content.7z + 8148a84c9a52eb989525f4807482f42c49c743a4 + + + componentA.subcomponent1 + Subcomponent 1 + This component does not have leaf components. + 1.0.0 + 2014-08-25 + 100 + + content.7z + c0c5d273b9c413db07fbd1ffee58759f0059d668 + + + componentB + Component B (automatic dependency to componentA.subcomponent1) + This component has an automatic dependency, If the dependency is marked for installation, this component is also installed. + 1.0.0 + 2014-08-25 + 90 + componentA.subcomponent1 + + content.7z + c517b08c40ef5c5984f6bf34a626060dcbab6ba5 + + + componentE + Component E + This is a component. + 1.0.0 + 2014-08-25 + 60 + + content.7z + 2833ea6d508925e64f00fb6b699532992b923ab2 + + + componentF + Component F + This component contains 2 subcomponents. + 1.0.0 + 2014-08-25 + 40 + + content.7z + 21ca242b83ce32dfe066348cbb453080b5967e30 + + + componentF.subcomponent1 + Subcomponent 1 + This component contains 2 leaf components. + 1.0.0 + 2014-08-25 + 100 + FSub1ToRoot + + content.7z + e2745196bceaae476cac330f0af0ce6e564d2d3d + + + componentF.subcomponent1.subsubcomponent1 + Subsubcomponent 1 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + + content.7z + 8af98107adadb1fda37c1c086c53ed289cc77661 + + + componentF.subcomponent1.subsubcomponent2 + Subsubcomponent 2 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 50 + + content.7z + 69458b616989a44e52b480dd9133721bc52b1558 + + + componentF.subcomponent2 + Subcomponent 2 + This component contains 2 leaf components. + 1.0.0 + 2014-08-25 + 50 + componentE.sub1 + + content.7z + 9d985ee35442e6e621f8ec24dc41be9f6cab9dad + + + componentF.subcomponent2.subsubcomponent1 + Subsubcomponent 1 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + + content.7z + 43223427efd8c2a428ead343a79709cd1bfc5618 + + + componentF.subcomponent2.subsubcomponent2 + Subsubcomponent 2 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 50 + + content.7z + d76690fb2f41aab262d7d8621c46fa464f35a550 + + + componentH + Component H + An example component without dependencies. + 1.0.0 + 2014-08-25 + 30 + componentI + + content.7z + 04426aec311900e8d74ae42cc6fe49282d314841 + + + componentH.subcomponent1 + Subcomponent 1 + This component does not contain leaf components. + 1.0.0 + 2014-08-25 + 100 + + content.7z + 065a901fd86d4e7fd86200da47079c97070178c7 + + + componentI.subcomponent2 + Subcomponent 1 + Subcomponent without original parent. + 1.0.0 + 2014-08-25 + 30 + + content.7z + 3d2d928ed10455fe884cab96498a3fc826505406 + + + componentJ + Component J + An example component without dependencies. + 1.0.0 + 2014-08-25 + 30 + componentJNew + + content.7z + 1a46e58cd1824b2c0a4a93d6b27050eb0f6feb29 + + + componentJ.subcomponent1 + Subcomponent 1 + Subcomponent with parent. + 1.0.0 + 2014-08-25 + 30 + + content.7z + dd1cfaa8f6cd14f81635e8917f348006ca7ffdce + + + componentK + Component K (depends on componentJ.subcomponent1) + This component depends on Component J subcomponent. + componentJ.subcomponent1 + 1.0.0 + 2014-08-25 + 80 + + content.7z + 98253c1ab872c9baa64d2fe3525f86a65e73d1f2 + + + componentL + Component L + Component with tree name, is replaced by other component. + 1.0.0 + 2022-01-01 + LToNewRoot + + + componentL.sub1 + Component L subcomponent 1 + Child of component L + 1.0.0 + 2022-01-01 + + + componentL.sub2 + Component L subcomponent 2 + Child of component L + 1.0.0 + 2022-01-01 + + + componentM + Component M + Component that replaces other component + 1.0.0 + 2022-01-01 + componentL + + diff --git a/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7z new file mode 100644 index 000000000..095fd7e30 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..5dcce5d73 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7z new file mode 100644 index 000000000..21d62e629 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7z new file mode 100644 index 000000000..094ae8806 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7z new file mode 100644 index 000000000..2cb5dfee9 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7z new file mode 100644 index 000000000..d3ed0961e Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7z new file mode 100644 index 000000000..cfdef213e Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7z new file mode 100644 index 000000000..466926547 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z new file mode 100644 index 000000000..3e9297acc Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..7adec9a82 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z new file mode 100644 index 000000000..b715e5587 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z new file mode 100644 index 000000000..69406b1b2 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7z new file mode 100644 index 000000000..f2d2141d7 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..1f5c58d2d Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z new file mode 100644 index 000000000..5307b3de4 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..1b44385ab Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z new file mode 100644 index 000000000..7e83e996e Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z new file mode 100644 index 000000000..c89ac2b7b Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7z new file mode 100644 index 000000000..9c97e4a99 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7z new file mode 100644 index 000000000..258b3905f Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7z new file mode 100644 index 000000000..12c4c1248 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7z new file mode 100644 index 000000000..88ec39233 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7z new file mode 100644 index 000000000..4b2747235 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..ab120d4c3 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7z new file mode 100644 index 000000000..767f789ff Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7z new file mode 100644 index 000000000..e5c9b47c9 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7z new file mode 100644 index 000000000..2000479c9 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..8ecfeaca8 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7z new file mode 100644 index 000000000..09a8e921a Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7z new file mode 100644 index 000000000..acaccd042 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7z new file mode 100644 index 000000000..25247bad4 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7z new file mode 100644 index 000000000..c45a63b41 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7z new file mode 100644 index 000000000..aa3354b8c Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7z new file mode 100644 index 000000000..14b41bdfe Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7z b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7z new file mode 100644 index 000000000..e28bb9ea7 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7z differ diff --git a/tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7z b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7z new file mode 100644 index 000000000..9112f88c3 Binary files /dev/null and b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7z differ diff --git a/tests/auto/installer/treename/settings.qrc b/tests/auto/installer/treename/settings.qrc index 3837d4440..eab771bee 100644 --- a/tests/auto/installer/treename/settings.qrc +++ b/tests/auto/installer/treename/settings.qrc @@ -21,6 +21,43 @@ data/repository/componentC/1.0.0content.7z data/repository/componentD/1.0.0meta.7z data/repository/componentD/1.0.0content.7z + data/invalid_repository/Updates.xml + + data/repository_children/componentA/1.0.0content.7z + data/repository_children/componentA/1.0.0meta.7z + data/repository_children/componentA.subcomponent1/1.0.0content.7z + data/repository_children/componentA.subcomponent1/1.0.0meta.7z + data/repository_children/componentB/1.0.0content.7z + data/repository_children/componentB/1.0.0meta.7z + data/repository_children/componentE/1.0.0content.7z + data/repository_children/componentE/1.0.0meta.7z + data/repository_children/componentF/1.0.0content.7z + data/repository_children/componentF/1.0.0meta.7z + data/repository_children/componentF.subcomponent1/1.0.0content.7z + data/repository_children/componentF.subcomponent1/1.0.0meta.7z + data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z + data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z + data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z + data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z + data/repository_children/componentF.subcomponent2/1.0.0content.7z + data/repository_children/componentF.subcomponent2/1.0.0meta.7z + data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z + data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z + data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z + data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z + data/repository_children/componentH/1.0.0content.7z + data/repository_children/componentH/1.0.0meta.7z + data/repository_children/componentH.subcomponent1/1.0.0content.7z + data/repository_children/componentH.subcomponent1/1.0.0meta.7z + data/repository_children/componentI.subcomponent2/1.0.0content.7z + data/repository_children/componentI.subcomponent2/1.0.0meta.7z + data/repository_children/componentJ/1.0.0content.7z + data/repository_children/componentJ/1.0.0meta.7z + data/repository_children/componentJ.subcomponent1/1.0.0content.7z + data/repository_children/componentJ.subcomponent1/1.0.0meta.7z + data/repository_children/componentK/1.0.0content.7z + data/repository_children/componentK/1.0.0meta.7z + data/repository_children/Updates.xml diff --git a/tests/auto/installer/treename/tst_treename.cpp b/tests/auto/installer/treename/tst_treename.cpp index 2945d499a..974bc08cc 100644 --- a/tests/auto/installer/treename/tst_treename.cpp +++ b/tests/auto/installer/treename/tst_treename.cpp @@ -44,10 +44,20 @@ private slots: void moveToSubItem(); void dependencyToMovedItem(); void autodependOnMovedItem(); - void moveToExistingItemAllowUnstableComponents(); + + void moveToExistingAllowUnstableComponents(); void moveToExistingItemNoUnstableComponents(); + void moveWithChildrenChildConflictsAllowUnstable(); + void moveWithChildrenChildConflictsNoUnstable(); + + void moveToRootWithChildren(); + void moveToSubItemWithChildren(); + void moveToAvailableParentItemWithChilren(); + void dependencyToMovedSubItem(); + void autoDependOnMovedSubItem(); void replaceComponentWithTreeName(); + void replaceComponentWithTreeNameMoveChildren(); void init(); void cleanup(); @@ -114,7 +124,7 @@ void tst_TreeName::autodependOnMovedItem() << "componentASub2.txt" << "componentD.txt"); } -void tst_TreeName::moveToExistingItemAllowUnstableComponents() +void tst_TreeName::moveToExistingAllowUnstableComponents() { QScopedPointer core(PackageManager::getPackageManagerWithInit (m_installDir, ":///data/invalid_repository")); @@ -144,6 +154,233 @@ void tst_TreeName::replaceComponentWithTreeName() QVERIFY(!core->componentByName("componentE")); } +void tst_TreeName::replaceComponentWithTreeNameMoveChildren() +{ + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(QStringList() << "componentM")); + QVERIFY(core->componentByName("componentM")->value(scTreeName).isEmpty()); + QVERIFY(!core->componentByName("componentL")); + + Component *component1 = core->componentByName("componentL.sub1"); + QCOMPARE(component1->treeName(), component1->name()); + + Component *component2 = core->componentByName("componentL.sub2"); + QCOMPARE(component2->treeName(), component2->name()); +} + +void tst_TreeName::moveWithChildrenChildConflictsAllowUnstable() +{ + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/invalid_repository")); + core->settings().setAllowUnstableComponents(true); + + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(QStringList() << "componentD")); + Component *const component = core->componentByName("componentD.sub1"); + QVERIFY(component && component->isUnstable() && !component->isInstalled()); +} + +void tst_TreeName::moveWithChildrenChildConflictsNoUnstable() +{ + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/invalid_repository")); + core->settings().setAllowUnstableComponents(false); + + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(QStringList() << "componentD")); + QVERIFY(!core->componentByName("componentD.sub1")); +} + +void tst_TreeName::moveToRootWithChildren() +{ + // componentF.subcomponent1 moved from sub item to root (FSub1ToRoot) + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently( + QStringList() << "componentF.subcomponent1")); + const QList installedComponents = core->orderedComponentsToInstall(); + + QCOMPARE(installedComponents.count(), 3); + + Component const *parent = installedComponents.at(0); + QCOMPARE(parent->name(), "componentF.subcomponent1"); + QCOMPARE(parent->treeName(), "FSub1ToRoot"); + QVERIFY(parent->value(scAutoTreeName).isEmpty()); + + Component const *child1 = installedComponents.at(1); + QCOMPARE(child1->name(), "componentF.subcomponent1.subsubcomponent1"); + QCOMPARE(child1->treeName(), "FSub1ToRoot.subsubcomponent1"); + QCOMPARE(child1->treeName(), child1->value(scAutoTreeName)); + + Component const *child2 = installedComponents.at(2); + QCOMPARE(child2->name(), "componentF.subcomponent1.subsubcomponent2"); + QCOMPARE(child2->treeName(), "FSub1ToRoot.subsubcomponent2"); + QCOMPARE(child2->treeName(), child2->value(scAutoTreeName)); + + QVERIFY(core->componentByName("componentF.subcomponent1")); + QVERIFY(!core->componentByName("FSub1ToRoot")); + QVERIFY(core->componentByName("componentF.subcomponent1.subsubcomponent1")); + QVERIFY(!core->componentByName("FSub1ToRoot.subsubcomponent1")); + QVERIFY(core->componentByName("componentF.subcomponent1.subsubcomponent2")); + QVERIFY(!core->componentByName("FSub1ToRoot.subsubcomponent2")); + + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent1.subsubcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent1.subsubcomponent2", "1.0.0content.txt"); + VerifyInstaller::verifyFileExistence(m_installDir, QStringList() << "components.xml" + << "installcontentF_1.txt" << "installcontentF_1_1.txt" << "installcontentF_1_2.txt"); +} + +void tst_TreeName::moveToSubItemWithChildren() +{ + // componentF.subcomponent2 moved under componentE (componentE.sub1) + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently( + QStringList() << "componentF.subcomponent2")); + const QList installedComponents = core->orderedComponentsToInstall(); + + QCOMPARE(installedComponents.count(), 4); + + Component const *parent = installedComponents.at(1); + QCOMPARE(parent->name(), "componentF.subcomponent2"); + QCOMPARE(parent->treeName(), "componentE.sub1"); + QVERIFY(parent->value(scAutoTreeName).isEmpty()); + + Component const *child1 = installedComponents.at(2); + QCOMPARE(child1->name(), "componentF.subcomponent2.subsubcomponent1"); + QCOMPARE(child1->treeName(), "componentE.sub1.subsubcomponent1"); + QCOMPARE(child1->treeName(), child1->value(scAutoTreeName)); + + Component const *child2 = installedComponents.at(3); + QCOMPARE(child2->name(), "componentF.subcomponent2.subsubcomponent2"); + QCOMPARE(child2->treeName(), "componentE.sub1.subsubcomponent2"); + QCOMPARE(child2->treeName(), child2->value(scAutoTreeName)); + + QVERIFY(core->componentByName("componentF.subcomponent2")); + QVERIFY(!core->componentByName("componentE.sub1")); + QVERIFY(core->componentByName("componentF.subcomponent2.subsubcomponent1")); + QVERIFY(!core->componentByName("componentE.sub1.subsubcomponent1")); + QVERIFY(core->componentByName("componentF.subcomponent2.subsubcomponent2")); + QVERIFY(!core->componentByName("componentE.sub1.subsubcomponent2")); + + VerifyInstaller::verifyInstallerResources(m_installDir, "componentE", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent2", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent2.subsubcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentF.subcomponent2.subsubcomponent2", "1.0.0content.txt"); + VerifyInstaller::verifyFileExistence(m_installDir, QStringList() << "components.xml" + << "installcontentE.txt" << "installcontentF_2.txt" << "installcontentF_2_1.txt" + << "installcontentF_2_2.txt"); +} + +void tst_TreeName::moveToAvailableParentItemWithChilren() +{ + // componentH moved to componentI + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently( + QStringList() << "componentH")); + const QList installedComponents = core->orderedComponentsToInstall(); + + QCOMPARE(installedComponents.count(), 3); + + Component const *parent = installedComponents.at(0); + QCOMPARE(parent->name(), "componentH"); + QCOMPARE(parent->treeName(), "componentI"); + QVERIFY(parent->value(scAutoTreeName).isEmpty()); + + Component const *child1 = installedComponents.at(1); + QCOMPARE(child1->name(), "componentH.subcomponent1"); + QCOMPARE(child1->treeName(), "componentI.subcomponent1"); + QCOMPARE(child1->treeName(), child1->value(scAutoTreeName)); + + Component const *child2 = installedComponents.at(2); + QCOMPARE(child2->name(), "componentI.subcomponent2"); + QCOMPARE(child2->treeName(), child2->name()); + QVERIFY(child2->value(scAutoTreeName).isEmpty()); + + QVERIFY(core->componentByName("componentH")); + QVERIFY(!core->componentByName("componentI")); + QVERIFY(core->componentByName("componentH.subcomponent1")); + QVERIFY(!core->componentByName("componentI.subcomponent1")); + QVERIFY(core->componentByName("componentI.subcomponent2")); + + VerifyInstaller::verifyInstallerResources(m_installDir, "componentH", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentH.subcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentI.subcomponent2", "1.0.0content.txt"); + VerifyInstaller::verifyFileExistence(m_installDir, QStringList() << "components.xml" + << "installcontentH.txt" << "installcontentH_1.txt" << "installcontentI_2.txt"); +} + +void tst_TreeName::dependencyToMovedSubItem() +{ + // componentK has dependency to componentJ.subcomponent1, which has a parent with treename + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently( + QStringList() << "componentK")); + const QList installedComponents = core->orderedComponentsToInstall(); + + QCOMPARE(installedComponents.count(), 2); + + Component const *component1 = installedComponents.at(0); + QCOMPARE(component1->name(), "componentJ.subcomponent1"); + QCOMPARE(component1->treeName(), "componentJNew.subcomponent1"); + QCOMPARE(component1->treeName(), component1->value(scAutoTreeName)); + + Component const *component2 = installedComponents.at(1); + QCOMPARE(component2->name(), "componentK"); + QCOMPARE(component2->treeName(), component2->name()); + QVERIFY(component2->value(scAutoTreeName).isEmpty()); + + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentJ.subcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, "componentK", "1.0.0content.txt"); + VerifyInstaller::verifyFileExistence(m_installDir, QStringList() << "components.xml" + << "installcontentJ_1.txt" << "installcontentK.txt"); +} + +void tst_TreeName::autoDependOnMovedSubItem() +{ + // componentB auto-depends on componentA.subcomponent1, which has a parent with treename + QScopedPointer core(PackageManager::getPackageManagerWithInit + (m_installDir, ":///data/repository_children")); + QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently( + QStringList() << "componentA.subcomponent1")); + const QList installedComponents = core->orderedComponentsToInstall(); + + QCOMPARE(installedComponents.count(), 3); + + Component const *component1 = installedComponents.at(0); + QCOMPARE(component1->name(), "componentA"); + QCOMPARE(component1->treeName(), "componentANew"); + QVERIFY(component1->value(scAutoTreeName).isEmpty()); + + Component const *component2 = installedComponents.at(1); + QCOMPARE(component2->name(), "componentA.subcomponent1"); + QCOMPARE(component2->treeName(), "componentANew.subcomponent1"); + QCOMPARE(component2->treeName(), component2->value(scAutoTreeName)); + + Component const *component3 = installedComponents.at(2); + QCOMPARE(component3->name(), "componentB"); + QCOMPARE(component3->treeName(), component3->name()); + + VerifyInstaller::verifyInstallerResources(m_installDir, "componentA", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, + "componentA.subcomponent1", "1.0.0content.txt"); + VerifyInstaller::verifyInstallerResources(m_installDir, "componentB", "1.0.0content.txt"); + VerifyInstaller::verifyFileExistence(m_installDir, QStringList() << "components.xml" + << "installcontentA.txt" << "installcontentA_1.txt" << "installcontentB.txt"); +} + void tst_TreeName::init() { m_installDir = QInstaller::generateTemporaryFileName(); -- cgit v1.2.3