aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-01-06 15:15:35 -0800
committerRob Mensching <rob@firegiant.com>2021-01-06 15:24:56 -0800
commit093e1dd144b260b58a0ae46d722d1dbc4019d9d5 (patch)
tree6fd63241e2b196b040d26b3b1749d4c3ecbc531c /src/test
parentbf30546113c5f1ffc4cf917b560c5a0451eda37d (diff)
downloadwix-093e1dd144b260b58a0ae46d722d1dbc4019d9d5.tar.gz
wix-093e1dd144b260b58a0ae46d722d1dbc4019d9d5.tar.bz2
wix-093e1dd144b260b58a0ae46d722d1dbc4019d9d5.zip
Implement improved file sequence optimization
First ensures files are grouped by DiskId. Then files are sequenced by target directory order to optimize MSI installation behavior. Finally, files are alphabetized in the directory. Additional optimizations could be considered in the future from here. Fixes wixtoolset/issues#4409 Fixes wixtoolset/issues#4708
Diffstat (limited to 'src/test')
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/CabFixture.cs2
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MediaFixture.cs62
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Media/MultiMedia.wxs28
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a1.txt1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a2.txt1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b1.txt1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b2.txt1
7 files changed, 95 insertions, 1 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/CabFixture.cs b/src/test/WixToolsetTest.CoreIntegration/CabFixture.cs
index 5aef148e..ad62dea6 100644
--- a/src/test/WixToolsetTest.CoreIntegration/CabFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/CabFixture.cs
@@ -42,7 +42,7 @@ namespace WixToolsetTest.CoreIntegration
42 var fileRows = fileTable.Select(r => new FileRow(r)).OrderBy(f => f.Sequence).ToList(); 42 var fileRows = fileTable.Select(r => new FileRow(r)).OrderBy(f => f.Sequence).ToList();
43 43
44 Assert.Equal(new[] { 1, 2 }, fileRows.Select(f => f.Sequence).ToArray()); 44 Assert.Equal(new[] { 1, 2 }, fileRows.Select(f => f.Sequence).ToArray());
45 Assert.Equal(new[] { "test.txt", "Notepad.exe" }, fileRows.Select(f => f.Name).ToArray()); 45 Assert.Equal(new[] { "Notepad.exe", "test.txt" }, fileRows.Select(f => f.Name).ToArray());
46 46
47 var files = Query.GetCabinetFiles(cabPath); 47 var files = Query.GetCabinetFiles(cabPath);
48 Assert.Equal(fileRows.Select(f => f.Id).ToArray(), files.Select(f => f.Name).ToArray()); 48 Assert.Equal(fileRows.Select(f => f.Id).ToArray(), files.Select(f => f.Name).ToArray());
diff --git a/src/test/WixToolsetTest.CoreIntegration/MediaFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MediaFixture.cs
new file mode 100644
index 00000000..de18e30c
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/MediaFixture.cs
@@ -0,0 +1,62 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.CoreIntegration
4{
5 using System.IO;
6 using System.Linq;
7 using WixBuildTools.TestSupport;
8 using WixToolset.Core.TestPackage;
9 using WixToolset.Data;
10 using Xunit;
11
12 public class MediaFixture
13 {
14 [Fact]
15 public void CanBuildMultiMedia()
16 {
17 var folder = TestData.Get(@"TestData");
18
19 using (var fs = new DisposableFileSystem())
20 {
21 var baseFolder = fs.GetFolder();
22 var intermediateFolder = Path.Combine(baseFolder, "obj");
23 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
24
25 var result = WixRunner.Execute(new[]
26 {
27 "build",
28 Path.Combine(folder, "Media", "MultiMedia.wxs"),
29 "-bindpath", Path.Combine(folder, "Media", "data"),
30 "-intermediateFolder", intermediateFolder,
31 "-o", msiPath
32 });
33
34 result.AssertSuccess();
35
36 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
37 var section = intermediate.Sections.Single();
38
39 var mediaSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.MediaSymbol>().OrderBy(m => m.DiskId).ToList();
40 var fileSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.FileSymbol>().OrderBy(f => f.Sequence).ToList();
41 Assert.Equal(1, mediaSymbols[0].DiskId);
42 Assert.Equal(2, mediaSymbols[0].LastSequence);
43 Assert.Equal(2, mediaSymbols[1].DiskId);
44 Assert.Equal(4, mediaSymbols[1].LastSequence);
45 Assert.Equal(new[]
46 {
47 "a1.txt",
48 "a2.txt",
49 "b1.txt",
50 "b2.txt",
51 }, fileSymbols.Select(f => f.Name).ToArray());
52 Assert.Equal(new[]
53 {
54 1,
55 2,
56 3,
57 4,
58 }, fileSymbols.Select(f => f.Sequence).ToArray());
59 }
60 }
61 }
62}
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Media/MultiMedia.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/MultiMedia.wxs
new file mode 100644
index 00000000..8a555bda
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/MultiMedia.wxs
@@ -0,0 +1,28 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Name="~MultiMedia" Codepage="1252" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation"
3 UpgradeCode="12E4699F-E774-4D05-8A01-5BDD41BBA127">
4
5 <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
6
7 <Media Id="1" Cabinet="cab1.cab" />
8 <Media Id="2" Cabinet="cab2.cab" />
9
10 <Feature Id="ProductFeature" Title="MsiPackageTitle">
11 <Component Directory="ProgramFilesFolder:\~MultiMedia" DiskId="1">
12 <File Source="a1.txt" />
13 </Component>
14
15 <Component Directory="ProgramFilesFolder:\~MultiMedia" DiskId="1">
16 <File Source="a2.txt" />
17 </Component>
18
19 <Component Directory="ProgramFilesFolder:\~MultiMedia" DiskId="2">
20 <File Source="b2.txt" />
21 </Component>
22
23 <Component Directory="ProgramFilesFolder:\~MultiMedia" DiskId="2">
24 <File Source="b1.txt" />
25 </Component>
26 </Feature>
27 </Package>
28</Wix>
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a1.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a1.txt
new file mode 100644
index 00000000..ad9cdcb5
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a1.txt
@@ -0,0 +1 @@
This is a1.txt \ No newline at end of file
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a2.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a2.txt
new file mode 100644
index 00000000..d5de23de
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/a2.txt
@@ -0,0 +1 @@
This is a2.txt \ No newline at end of file
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b1.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b1.txt
new file mode 100644
index 00000000..88bc4a56
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b1.txt
@@ -0,0 +1 @@
This is b1.txt \ No newline at end of file
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b2.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b2.txt
new file mode 100644
index 00000000..38525276
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Media/data/b2.txt
@@ -0,0 +1 @@
This is b2.txt \ No newline at end of file