main
cs 143 lines 5.4 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 WixInternal.TestSupport;
8 using WixInternal.Core.TestPackage;
9 using WixToolset.Data.WindowsInstaller;
10 using Xunit;
11
12 public class TransformFixture
13 {
14 [Fact]
15 public void CanBuildTransformFromEnuToJpn()
16 {
17 var folder = TestData.Get(@"TestData", "Language");
18
19 using (var fs = new DisposableFileSystem())
20 {
21 var baseFolder = fs.GetFolder();
22 var enuMsiPath = Path.Combine(baseFolder, @"bin\enu.msi");
23 var jpnMsiPath = Path.Combine(baseFolder, @"bin\jpn.msi");
24 var mstPath = Path.Combine(baseFolder, @"bin\test.mst");
25
26 var result = WixRunner.Execute(new[]
27 {
28 "build",
29 Path.Combine(folder, "Package.wxs"),
30 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
31 "-bindpath", Path.Combine(folder, "data"),
32 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
33 "-o", enuMsiPath
34 });
35 result.AssertSuccess();
36
37
38 result = WixRunner.Execute(new[]
39 {
40 "build",
41 Path.Combine(folder, "Package.wxs"),
42 "-loc", Path.Combine(folder, "Package.ja-jp.wxl"),
43 "-bindpath", Path.Combine(folder, "data"),
44 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
45 "-o", jpnMsiPath
46 });
47 result.AssertSuccess();
48
49 result = WixRunner.Execute(new[]
50 {
51 "msi", "transform",
52 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
53 "-serr", "f",
54 "-o", mstPath,
55 enuMsiPath,
56 jpnMsiPath
57 });
58 result.AssertSuccess();
59
60 Assert.True(File.Exists(mstPath));
61 }
62 }
63
64 [Fact]
65 public void CanBuildWixoutTransform()
66 {
67 var folder = TestData.Get(@"TestData", "Language");
68
69 using (var fs = new DisposableFileSystem())
70 {
71 var baseFolder = fs.GetFolder();
72 var enuMsiPath = Path.Combine(baseFolder, @"bin\enu.msi");
73 var jpnMsiPath = Path.Combine(baseFolder, @"bin\jpn.msi");
74 var wixmstPath = Path.Combine(baseFolder, @"bin\test.wixmst");
75 var mstPath = Path.Combine(baseFolder, @"bin\test.mst");
76
77 var result = WixRunner.Execute(new[]
78 {
79 "build",
80 Path.Combine(folder, "Package.wxs"),
81 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
82 "-bindpath", Path.Combine(folder, "data"),
83 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
84 "-o", enuMsiPath
85 });
86 result.AssertSuccess();
87
88 result = WixRunner.Execute(new[]
89 {
90 "build",
91 Path.Combine(folder, "Package.wxs"),
92 "-loc", Path.Combine(folder, "Package.ja-jp.wxl"),
93 "-bindpath", Path.Combine(folder, "data"),
94 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
95 "-o", jpnMsiPath
96 });
97 result.AssertSuccess();
98
99 result = WixRunner.Execute(new[]
100 {
101 "msi", "transform",
102 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
103 "-serr", "f",
104 "-xo",
105 "-o", wixmstPath,
106 enuMsiPath,
107 jpnMsiPath
108 });
109 result.AssertSuccess();
110
111 var wixmst = WindowsInstallerData.Load(wixmstPath);
112 var rows = wixmst.Tables.SelectMany(t => t.Rows).Where(r => r.Operation == RowOperation.Modify).ToDictionary(r => r.GetPrimaryKey());
113
114 WixAssert.CompareLineByLine(new[]
115 {
116 "NOT WIX_DOWNGRADE_DETECTED",
117 "ProductCode",
118 "ProductFeature",
119 "ProductLanguage"
120 }, rows.Keys.OrderBy(s => s).ToArray());
121
122 Assert.True(rows.TryGetValue("ProductFeature", out var productFeatureRow));
123 WixAssert.StringEqual("MsiPackage ja-jp", productFeatureRow.FieldAsString(2));
124
125 Assert.True(rows.TryGetValue("ProductLanguage", out var productLanguageRow));
126 WixAssert.StringEqual("1041", productLanguageRow.FieldAsString(1));
127
128 Assert.False(File.Exists(mstPath));
129
130 result = WixRunner.Execute(new[]
131 {
132 "msi", "transform",
133 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
134 "-o", mstPath,
135 wixmstPath
136 });
137 result.AssertSuccess();
138
139 Assert.True(File.Exists(mstPath));
140 }
141 }
142 }
143 }