main
cs 174 lines 7.26 KB
Raw
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
3 namespace WixToolsetTest.CoreIntegration
4 {
5 using System.IO;
6 using System.Linq;
7 using System.Xml;
8 using WixInternal.Core.TestPackage;
9 using WixInternal.TestSupport;
10 using Xunit;
11
12 public class WixVariableFixture
13 {
14 [Fact]
15 public void CanBuildMsiWithBindVariable()
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", "test1.msi");
24
25 var result = WixRunner.Execute(new[]
26 {
27 "build",
28 Path.Combine(folder, "WixVariable", "PackageWithReplaceableVersion.wxs"),
29 "-bindpath", Path.Combine(folder, "SingleFile"/*, this part of the path is added as a bind variable: "data"*/),
30 "-bindvariable", "DataBindVariable=data",
31 "-bindvariable", "VersionVar=4.3.2.1",
32 "-intermediateFolder", intermediateFolder,
33 "-o", msiPath
34 });
35
36 result.AssertSuccess();
37
38 var productVersion = GetProductVersionFromMsi(msiPath);
39 Assert.Equal("4.3.2.1", productVersion);
40 }
41 }
42
43 [Fact]
44 public void CanBuildMsiWithDefaultedBindVariable()
45 {
46 var folder = TestData.Get(@"TestData");
47
48 using (var fs = new DisposableFileSystem())
49 {
50 var baseFolder = fs.GetFolder();
51 var intermediateFolder = Path.Combine(baseFolder, "obj");
52 var msiPath = Path.Combine(baseFolder, "bin", "test1.msi");
53
54 var result = WixRunner.Execute(new[]
55 {
56 "build",
57 Path.Combine(folder, "WixVariable", "PackageWithBindVariableVersion.wxs"),
58 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
59 "-intermediateFolder", intermediateFolder,
60 "-o", msiPath
61 });
62
63 result.AssertSuccess();
64
65 var productVersion = GetProductVersionFromMsi(msiPath);
66 Assert.Equal("1.1.1.1", productVersion);
67
68 var directoryTable = Query.QueryDatabase(msiPath, new[] { "Directory" }).OrderBy(s => s).ToArray();
69 WixAssert.CompareLineByLine(new[]
70 {
71 "Directory:DesktopFolder\tTARGETDIR\tDesktop",
72 "Directory:INSTALLFOLDER\tDesktopFolder\tfcuah1wu|MsiPackage v1.1.1.1 and 1.1.1.1",
73 "Directory:TARGETDIR\t\tSourceDir"
74 }, directoryTable);
75 }
76 }
77
78 [Fact]
79 public void CanBuildMsiWithPrefixedVersionBindVariable()
80 {
81 var folder = TestData.Get(@"TestData");
82
83 using (var fs = new DisposableFileSystem())
84 {
85 var baseFolder = fs.GetFolder();
86 var intermediateFolder = Path.Combine(baseFolder, "obj");
87 var msiPath = Path.Combine(baseFolder, "bin", "test1.msi");
88
89 var result = WixRunner.Execute(new[]
90 {
91 "build",
92 Path.Combine(folder, "WixVariable", "PackageWithBindVariableVersion.wxs"),
93 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
94 "-intermediateFolder", intermediateFolder,
95 "-bindvariable", "VersionVar=v9.8.7.6",
96 "-o", msiPath
97 });
98
99 result.AssertSuccess();
100
101 var productVersion = GetProductVersionFromMsi(msiPath);
102 Assert.Equal("9.8.7.6", productVersion);
103
104 var directoryTable = Query.QueryDatabase(msiPath, new[] { "Directory" }).OrderBy(s => s).ToArray();
105 WixAssert.CompareLineByLine(new[]
106 {
107 "Directory:DesktopFolder\tTARGETDIR\tDesktop",
108 "Directory:INSTALLFOLDER\tDesktopFolder\tpja2bznq|MsiPackage v9.8.7.6 and 9.8.7.6",
109 "Directory:TARGETDIR\t\tSourceDir"
110 }, directoryTable);
111 }
112 }
113
114 [Fact]
115 public void CanBuildBundleWithBindVariable()
116 {
117 var folder = TestData.Get(@"TestData");
118
119 using (var fs = new DisposableFileSystem())
120 {
121 var baseFolder = fs.GetFolder();
122 var intermediateFolder = Path.Combine(baseFolder, "obj");
123 var msiPath = Path.Combine(baseFolder, "bin", "test1.msi");
124 var msi2Path = Path.Combine(baseFolder, "bin", "test2.msi");
125 var bundlePath = Path.Combine(baseFolder, "bin", "bundle.exe");
126
127 var result = WixRunner.Execute(new[]
128 {
129 "build",
130 Path.Combine(folder, "WixVariable", "PackageWithReplaceableVersion.wxs"),
131 "-bindpath", Path.Combine(folder, "SingleFile"/*, this part of the path is added as a bind variable: "data"*/),
132 "-bv", "DataBindVariable=data",
133 "-bv", "VersionVar=255.255.65535",
134 "-intermediateFolder", intermediateFolder,
135 "-o", msiPath
136 });
137
138 result.AssertSuccess();
139
140 var result3 = WixRunner.Execute(new[]
141 {
142 "build",
143 Path.Combine(folder, "WixVariable", "Bundle.wxs"),
144 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
145 "-bindpath", Path.Combine(baseFolder, "bin"),
146 "-intermediateFolder", intermediateFolder,
147 "-bv", "VersionVar=2022.3.9-preview.0-build.5+0987654321abcdef1234567890",
148 "-o", bundlePath
149 });
150
151 result3.AssertSuccess();
152
153 var productVersion = GetProductVersionFromMsi(msiPath);
154 WixAssert.StringEqual("255.255.65535", productVersion);
155
156 var extractResult = BundleExtractor.ExtractAllContainers(null, bundlePath, Path.Combine(baseFolder, "ba"), Path.Combine(baseFolder, "attached"), Path.Combine(baseFolder, "extract"));
157 extractResult.AssertSuccess();
158
159 var bundleVersion = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration/@Version")
160 .Cast<XmlAttribute>()
161 .Single();
162 WixAssert.StringEqual("2022.3.9-preview.0-build.5+0987654321abcdef1234567890", bundleVersion.Value);
163 }
164 }
165
166 private static string GetProductVersionFromMsi(string msiPath)
167 {
168 var propertyTable = Query.QueryDatabase(msiPath, new[] { "Property" }).Select(r => r.Split('\t')).ToDictionary(r => r[0].Substring("Property:".Length), r => r[1]);
169 Assert.True(propertyTable.TryGetValue("ProductVersion", out var productVersion));
170
171 return productVersion;
172 }
173 }
174 }