summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-11-23 17:23:26 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-01-06 11:26:29 +0200
commit403e610e6b867dc840c4e78a344cac52bbe751c2 (patch)
tree746f263da474c1603ce14820d164cd37c97e95bc /tests
parent8985801a4e61fad34914ed04480d0240ece53c15 (diff)
Add support for moving child components with <TreeName>
Add new optional "moveChildren" attribute to <TreeName> 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 <katja.marttila@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/installer/componentmodel/tst_componentmodel.cpp2
-rw-r--r--tests/auto/installer/treename/data/invalid_repository/Updates.xml25
-rw-r--r--tests/auto/installer/treename/data/repository_children/Updates.xml229
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7zbin0 -> 231 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7zbin0 -> 171 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7zbin0 -> 231 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7zbin0 -> 171 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7zbin0 -> 231 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7zbin0 -> 171 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7zbin0 -> 231 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7zbin0 -> 171 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7zbin0 -> 227 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7zbin0 -> 137 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7zbin0 -> 223 bytes
-rw-r--r--tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7zbin0 -> 109 bytes
-rw-r--r--tests/auto/installer/treename/settings.qrc37
-rw-r--r--tests/auto/installer/treename/tst_treename.cpp241
41 files changed, 531 insertions, 3 deletions
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<QPair<QString, bool>>().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 @@
<SortingPriority>40</SortingPriority>
<TreeName>componentA.sub1</TreeName>
</PackageUpdate>
+ <PackageUpdate>
+ <Name>componentC.sub1</Name>
+ <DisplayName>Component C subcomponent1</DisplayName>
+ <Description>Component</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>40</SortingPriority>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentD</Name>
+ <DisplayName>Component D</DisplayName>
+ <Description>Component</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>40</SortingPriority>
+ <TreeName moveChildren="true">componentC</TreeName>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentD.sub1</Name>
+ <DisplayName>Component D subcomponent 1</DisplayName>
+ <Description>Component</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>40</SortingPriority>
+ </PackageUpdate>
</Updates>
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 @@
+<Updates>
+ <ApplicationName>{AnyApplication}</ApplicationName>
+ <ApplicationVersion>1.0.0</ApplicationVersion>
+ <Checksum>false</Checksum>
+ <PackageUpdate>
+ <Name>componentA</Name>
+ <DisplayName>Component A</DisplayName>
+ <Description>This component does not depend on any other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <TreeName moveChildren="true">componentANew</TreeName>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>8148a84c9a52eb989525f4807482f42c49c743a4</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentA.subcomponent1</Name>
+ <DisplayName>Subcomponent 1</DisplayName>
+ <Description>This component does not have leaf components.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>c0c5d273b9c413db07fbd1ffee58759f0059d668</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentB</Name>
+ <DisplayName>Component B (automatic dependency to componentA.subcomponent1)</DisplayName>
+ <Description>This component has an automatic dependency, If the dependency is marked for installation, this component is also installed.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>90</SortingPriority>
+ <AutoDependOn>componentA.subcomponent1</AutoDependOn>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>c517b08c40ef5c5984f6bf34a626060dcbab6ba5</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentE</Name>
+ <DisplayName>Component E</DisplayName>
+ <Description>This is a component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>60</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>2833ea6d508925e64f00fb6b699532992b923ab2</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF</Name>
+ <DisplayName>Component F</DisplayName>
+ <Description>This component contains 2 subcomponents.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>40</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>21ca242b83ce32dfe066348cbb453080b5967e30</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent1</Name>
+ <DisplayName>Subcomponent 1</DisplayName>
+ <Description>This component contains 2 leaf components.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <TreeName moveChildren="true">FSub1ToRoot</TreeName>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>e2745196bceaae476cac330f0af0ce6e564d2d3d</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent1.subsubcomponent1</Name>
+ <DisplayName>Subsubcomponent 1</DisplayName>
+ <Description>This component does not depend on any other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="271" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>8af98107adadb1fda37c1c086c53ed289cc77661</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent1.subsubcomponent2</Name>
+ <DisplayName>Subsubcomponent 2</DisplayName>
+ <Description>This component does not depend on any other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>50</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="271" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>69458b616989a44e52b480dd9133721bc52b1558</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent2</Name>
+ <DisplayName>Subcomponent 2</DisplayName>
+ <Description>This component contains 2 leaf components.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>50</SortingPriority>
+ <TreeName moveChildren="true">componentE.sub1</TreeName>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>9d985ee35442e6e621f8ec24dc41be9f6cab9dad</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent2.subsubcomponent1</Name>
+ <DisplayName>Subsubcomponent 1</DisplayName>
+ <Description>This component does not depend on any other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="271" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>43223427efd8c2a428ead343a79709cd1bfc5618</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentF.subcomponent2.subsubcomponent2</Name>
+ <DisplayName>Subsubcomponent 2</DisplayName>
+ <Description>This component does not depend on any other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>50</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="271" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>d76690fb2f41aab262d7d8621c46fa464f35a550</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentH</Name>
+ <DisplayName>Component H</DisplayName>
+ <Description>An example component without dependencies.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>30</SortingPriority>
+ <TreeName moveChildren="true">componentI</TreeName>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>04426aec311900e8d74ae42cc6fe49282d314841</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentH.subcomponent1</Name>
+ <DisplayName>Subcomponent 1</DisplayName>
+ <Description>This component does not contain leaf components.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>100</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>065a901fd86d4e7fd86200da47079c97070178c7</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentI.subcomponent2</Name>
+ <DisplayName>Subcomponent 1</DisplayName>
+ <Description>Subcomponent without original parent.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>30</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>3d2d928ed10455fe884cab96498a3fc826505406</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentJ</Name>
+ <DisplayName>Component J</DisplayName>
+ <Description>An example component without dependencies.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>30</SortingPriority>
+ <TreeName moveChildren="true">componentJNew</TreeName>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>1a46e58cd1824b2c0a4a93d6b27050eb0f6feb29</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentJ.subcomponent1</Name>
+ <DisplayName>Subcomponent 1</DisplayName>
+ <Description>Subcomponent with parent.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>30</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="267" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>dd1cfaa8f6cd14f81635e8917f348006ca7ffdce</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentK</Name>
+ <DisplayName>Component K (depends on componentJ.subcomponent1)</DisplayName>
+ <Description>This component depends on Component J subcomponent.</Description>
+ <Dependencies>componentJ.subcomponent1</Dependencies>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2014-08-25</ReleaseDate>
+ <SortingPriority>80</SortingPriority>
+ <UpdateFile UncompressedSize="99" CompressedSize="263" OS="Any"/>
+ <DownloadableArchives>content.7z</DownloadableArchives>
+ <SHA1>98253c1ab872c9baa64d2fe3525f86a65e73d1f2</SHA1>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentL</Name>
+ <DisplayName>Component L</DisplayName>
+ <Description>Component with tree name, is replaced by other component.</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2022-01-01</ReleaseDate>
+ <TreeName moveChildren="true">LToNewRoot</TreeName>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentL.sub1</Name>
+ <DisplayName>Component L subcomponent 1</DisplayName>
+ <Description>Child of component L</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2022-01-01</ReleaseDate>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentL.sub2</Name>
+ <DisplayName>Component L subcomponent 2</DisplayName>
+ <Description>Child of component L</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2022-01-01</ReleaseDate>
+ </PackageUpdate>
+ <PackageUpdate>
+ <Name>componentM</Name>
+ <DisplayName>Component M</DisplayName>
+ <Description>Component that replaces other component</Description>
+ <Version>1.0.0</Version>
+ <ReleaseDate>2022-01-01</ReleaseDate>
+ <Replaces>componentL</Replaces>
+ </PackageUpdate>
+</Updates>
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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentA.subcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentA/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentB/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentE/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF.subcomponent2/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentF/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentH.subcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentH/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentI.subcomponent2/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentJ.subcomponent1/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentJ/1.0.0meta.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0content.7z
Binary files 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
--- /dev/null
+++ b/tests/auto/installer/treename/data/repository_children/componentK/1.0.0meta.7z
Binary files 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 @@
<file>data/repository/componentC/1.0.0content.7z</file>
<file>data/repository/componentD/1.0.0meta.7z</file>
<file>data/repository/componentD/1.0.0content.7z</file>
+
<file>data/invalid_repository/Updates.xml</file>
+
+ <file>data/repository_children/componentA/1.0.0content.7z</file>
+ <file>data/repository_children/componentA/1.0.0meta.7z</file>
+ <file>data/repository_children/componentA.subcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentA.subcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentB/1.0.0content.7z</file>
+ <file>data/repository_children/componentB/1.0.0meta.7z</file>
+ <file>data/repository_children/componentE/1.0.0content.7z</file>
+ <file>data/repository_children/componentE/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF/1.0.0content.7z</file>
+ <file>data/repository_children/componentF/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent1.subsubcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent1.subsubcomponent2/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent2/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent2/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent2.subsubcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z</file>
+ <file>data/repository_children/componentF.subcomponent2.subsubcomponent2/1.0.0meta.7z</file>
+ <file>data/repository_children/componentH/1.0.0content.7z</file>
+ <file>data/repository_children/componentH/1.0.0meta.7z</file>
+ <file>data/repository_children/componentH.subcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentH.subcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentI.subcomponent2/1.0.0content.7z</file>
+ <file>data/repository_children/componentI.subcomponent2/1.0.0meta.7z</file>
+ <file>data/repository_children/componentJ/1.0.0content.7z</file>
+ <file>data/repository_children/componentJ/1.0.0meta.7z</file>
+ <file>data/repository_children/componentJ.subcomponent1/1.0.0content.7z</file>
+ <file>data/repository_children/componentJ.subcomponent1/1.0.0meta.7z</file>
+ <file>data/repository_children/componentK/1.0.0content.7z</file>
+ <file>data/repository_children/componentK/1.0.0meta.7z</file>
+ <file>data/repository_children/Updates.xml</file>
</qresource>
</RCC>
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<PackageManagerCore> 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<PackageManagerCore> 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<PackageManagerCore> 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<PackageManagerCore> 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<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository_children"));
+ QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(
+ QStringList() << "componentF.subcomponent1"));
+ const QList<Component*> 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<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository_children"));
+ QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(
+ QStringList() << "componentF.subcomponent2"));
+ const QList<Component*> 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<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository_children"));
+ QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(
+ QStringList() << "componentH"));
+ const QList<Component*> 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<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository_children"));
+ QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(
+ QStringList() << "componentK"));
+ const QList<Component*> 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<PackageManagerCore> core(PackageManager::getPackageManagerWithInit
+ (m_installDir, ":///data/repository_children"));
+ QCOMPARE(PackageManagerCore::Success, core->installSelectedComponentsSilently(
+ QStringList() << "componentA.subcomponent1"));
+ const QList<Component*> 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();