main
cs 219 lines 10.1 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 WixInternal.TestSupport;
7 using WixInternal.Core.TestPackage;
8 using Xunit;
9
10 public class ClassFixture
11 {
12 [Fact]
13 public void ClassWithoutContextDoesNotCrash()
14 {
15 var folder = TestData.Get(@"TestData");
16
17 using (var fs = new DisposableFileSystem())
18 {
19 var baseFolder = fs.GetFolder();
20 var intermediateFolder = Path.Combine(baseFolder, "obj");
21 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
22
23 var result = WixRunner.Execute(new[]
24 {
25 "build",
26 Path.Combine(folder, "Class", "ClassWithoutContext.wxs"),
27 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
28 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
29 "-bindpath", Path.Combine(folder, ".Data"),
30 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
31 "-intermediateFolder", intermediateFolder,
32 "-o", msiPath
33 });
34
35 result.AssertSuccess();
36
37 var results = Query.QueryDatabase(msiPath, new[] { "Class", "Registry" });
38 Assert.Empty(results);
39 }
40 }
41
42 [Fact]
43 public void PopulatesClassTablesWhenIconIndexIsZero()
44 {
45 var folder = TestData.Get(@"TestData");
46
47 using (var fs = new DisposableFileSystem())
48 {
49 var baseFolder = fs.GetFolder();
50 var intermediateFolder = Path.Combine(baseFolder, "obj");
51 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
52
53 var result = WixRunner.Execute(new[]
54 {
55 "build",
56 Path.Combine(folder, "Class", "IconIndex0.wxs"),
57 Path.Combine(folder, "Icon", "SampleIcon.wxs"),
58 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
59 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
60 "-bindpath", Path.Combine(folder, ".Data"),
61 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
62 "-intermediateFolder", intermediateFolder,
63 "-o", msiPath
64 });
65
66 result.AssertSuccess();
67
68 Assert.True(File.Exists(msiPath));
69 var results = Query.QueryDatabase(msiPath, new[] { "Class" });
70 WixAssert.CompareLineByLine(new[]
71 {
72 "Class:{3FAED4CC-C473-4B8A-BE8B-303871377A4A}\tLocalServer32\tClassComp\t\tFakeClass3FAE\t\t\tSampleIcon\t0\t\t\tProductFeature\t",
73 }, results);
74 }
75 }
76
77 [Fact]
78 public void PopulatesClassTablesWhenProgIdIsNestedUnderAdvertisedClass()
79 {
80 var folder = TestData.Get(@"TestData");
81
82 using (var fs = new DisposableFileSystem())
83 {
84 var baseFolder = fs.GetFolder();
85 var intermediateFolder = Path.Combine(baseFolder, "obj");
86 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
87
88 var result = WixRunner.Execute(new[]
89 {
90 "build",
91 Path.Combine(folder, "ProgId", "NestedUnderClass.wxs"),
92 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
93 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
94 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
95 "-intermediateFolder", intermediateFolder,
96 "-o", msiPath
97 });
98
99 result.AssertSuccess();
100
101 Assert.True(File.Exists(msiPath));
102 var results = Query.QueryDatabase(msiPath, new[] { "Class", "ProgId", "Registry" });
103 WixAssert.CompareLineByLine(new[]
104 {
105 "Class:{F12A6F69-117F-471F-AE73-F8E74218F498}\tLocalServer32\tProgIdComp\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tFakeClassF12A\t\t\t\t\t\t\tProductFeature\t",
106 "ProgId:73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\t\t{F12A6F69-117F-471F-AE73-F8E74218F498}\tFakeClassF12A\t\t",
107 "Registry:regUIIK326nDZpkWHuexeF58EikQvA\t0\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tNoOpen\tNoOpen73E7\tProgIdComp",
108 "Registry:regvrhMurMp98anbQJkpgA8yJCefdM\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\Version\t\t0.0.0.1\tProgIdComp",
109 "Registry:regY1F4E2lvu_Up6gV6c3jeN5ukn8s\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\LocalServer32\tThreadingModel\tApartment\tProgIdComp",
110 }, results);
111 }
112 }
113
114 [Fact]
115 public void PopulatesModuleClassTablesWhenProgIdIsNestedUnderAdvertisedClass()
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", "test.msm");
124
125 var result = WixRunner.Execute(new[]
126 {
127 "build",
128 Path.Combine(folder, "ProgId", "NestedUnderClass.wxs"),
129 Path.Combine(folder, "ProgId", "Module.wxs"),
130 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
131 "-intermediateFolder", intermediateFolder,
132 "-o", msiPath
133 });
134
135 result.AssertSuccess();
136
137 Assert.True(File.Exists(msiPath));
138 var results = Query.QueryDatabase(msiPath, new[] { "Class", "ProgId", "Registry" });
139 WixAssert.CompareLineByLine(new[]
140 {
141 "Class:{F12A6F69-117F-471F-AE73-F8E74218F498}\tLocalServer32\tProgIdComp.047730A5_30FE_4A62_A520_DA9381B8226A\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tFakeClassF12A\t\t\t\t\t\t\t{00000000-0000-0000-0000-000000000000}\t",
142 "ProgId:73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\t\t{F12A6F69-117F-471F-AE73-F8E74218F498}\tFakeClassF12A\t\t",
143 "Registry:regUIIK326nDZpkWHuexeF58EikQvA.047730A5_30FE_4A62_A520_DA9381B8226A\t0\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tNoOpen\tNoOpen73E7\tProgIdComp.047730A5_30FE_4A62_A520_DA9381B8226A",
144 "Registry:regvrhMurMp98anbQJkpgA8yJCefdM.047730A5_30FE_4A62_A520_DA9381B8226A\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\Version\t\t0.0.0.1\tProgIdComp.047730A5_30FE_4A62_A520_DA9381B8226A",
145 "Registry:regY1F4E2lvu_Up6gV6c3jeN5ukn8s.047730A5_30FE_4A62_A520_DA9381B8226A\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\LocalServer32\tThreadingModel\tApartment\tProgIdComp.047730A5_30FE_4A62_A520_DA9381B8226A",
146 }, results);
147 }
148 }
149
150 [Fact]
151 public void CanBuildProductWithProgIdExtensionVerb()
152 {
153 var folder = TestData.Get(@"TestData");
154
155 using (var fs = new DisposableFileSystem())
156 {
157 var baseFolder = fs.GetFolder();
158 var intermediateFolder = Path.Combine(baseFolder, "obj");
159 var msiPath = Path.Combine(baseFolder, @"bin", "test.msi");
160
161 var result = WixRunner.Execute(new[]
162 {
163 "build",
164 Path.Combine(folder, "ProgId", "ProgIdExtensionVerb.wxs"),
165 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
166 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
167 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
168 "-intermediateFolder", intermediateFolder,
169 "-o", msiPath
170 });
171
172 result.AssertSuccess();
173
174 Assert.True(File.Exists(msiPath));
175 var results = Query.QueryDatabase(msiPath, new[] { "Extension", "ProgId", "Verb" });
176 WixAssert.CompareLineByLine(new[]
177 {
178 "Extension:foo\tfilTki4JQ2gSapF7wK4K1vd.4mDSFQ\tExample.Foo\t\tProductFeature",
179 "ProgId:Example.Foo\t\t\t\t\t0",
180 "Verb:foo\tOpenVerb\t\topen\t\"%1\""
181 }, results);
182 }
183 }
184
185 [Fact]
186 public void CanBuildModuleWithProgIdExtensionVerb()
187 {
188 var folder = TestData.Get(@"TestData");
189
190 using (var fs = new DisposableFileSystem())
191 {
192 var baseFolder = fs.GetFolder();
193 var intermediateFolder = Path.Combine(baseFolder, "obj");
194 var msmPath = Path.Combine(baseFolder, @"bin", "test.msm");
195
196 var result = WixRunner.Execute(new[]
197 {
198 "build",
199 Path.Combine(folder, "ProgId", "ProgIdExtensionVerb.wxs"),
200 Path.Combine(folder, "ProgId", "Module.wxs"),
201 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
202 "-intermediateFolder", intermediateFolder,
203 "-o", msmPath
204 });
205
206 result.AssertSuccess();
207
208 Assert.True(File.Exists(msmPath));
209 var results = Query.QueryDatabase(msmPath, new[] { "Extension", "ProgId", "Verb" });
210 WixAssert.CompareLineByLine(new[]
211 {
212 "Extension:foo\tfilTki4JQ2gSapF7wK4K1vd.4mDSFQ.047730A5_30FE_4A62_A520_DA9381B8226A\tExample.Foo\t\t{00000000-0000-0000-0000-000000000000}",
213 "ProgId:Example.Foo\t\t\t\t\t0",
214 "Verb:foo\tOpenVerb\t\topen\t\"%1\""
215 }, results);
216 }
217 }
218 }
219 }