Fix handling of suppress modularization
Partially fixes wixtoolset/issues#5944
Rob Mensching committed
Mar 1, 2021 at 10:14 UTC
3eb3c26c796984b64365fda077f173af8bf31559
8 files changed
+143
-55
src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
+1
-1
@@ -21,7 +21,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
21
this.ModularizationSuffix = modularizationSuffix;
22
23
// Gather all the unique suppress modularization identifiers.
24
- this.SuppressModularizationIdentifiers = new HashSet<string>(suppressSymbols.Select(s => s.Id.Id));
24
+ this.SuppressModularizationIdentifiers = new HashSet<string>(suppressSymbols.Select(s => s.SuppressIdentifier));
25
}
26
27
private WindowsInstallerData Output { get; }
src/WixToolset.Core/Compiler.cs
+9
-3
@@ -728,14 +728,17 @@ namespace WixToolset.Core
728
729
if (!this.Core.EncounteredError)
730
{
731
- var symbol = this.Core.AddSymbol(new BinarySymbol(sourceLineNumbers, id)
731
+ this.Core.AddSymbol(new BinarySymbol(sourceLineNumbers, id)
732
{
733
Data = new IntermediateFieldPathValue { Path = sourceFile }
734
});
735
736
if (YesNoType.Yes == suppressModularization)
737
{
738
- this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
738
+ this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers)
739
+ {
740
+ SuppressIdentifier = id.Id
741
+ });
742
}
743
}
744
@@ -3502,7 +3505,10 @@ namespace WixToolset.Core
3505
3506
if (YesNoType.Yes == suppressModularization)
3507
{
3505
- this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
3508
+ this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers)
3509
+ {
3510
+ SuppressIdentifier = id.Id
3511
+ });
3512
}
3513
}
3514
}
src/WixToolset.Core/Compiler_Package.cs
+4
-1
@@ -1515,7 +1515,10 @@ namespace WixToolset.Core
1515
{
1516
this.Core.Write(WarningMessages.PropertyModularizationSuppressed(sourceLineNumbers));
1517
1518
- this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
1518
+ this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers)
1519
+ {
1520
+ SuppressIdentifier = id.Id
1521
+ });
1522
}
1523
}
1524
src/test/WixToolsetTest.CoreIntegration/ModuleFixture.cs
new
+108
@@ -0,0 +1,108 @@
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;
6
+ using System.IO;
7
+ using System.Linq;
8
+ using WixBuildTools.TestSupport;
9
+ using WixToolset.Core.TestPackage;
10
+ using WixToolset.Data;
11
+ using WixToolset.Data.Symbols;
12
+ using WixToolset.Data.WindowsInstaller;
13
+ using Xunit;
14
+
15
+ public class ModuleFixture
16
+ {
17
+ [Fact]
18
+ public void CanBuildSimpleModule()
19
+ {
20
+ var folder = TestData.Get(@"TestData\SimpleModule");
21
+
22
+ using (var fs = new DisposableFileSystem())
23
+ {
24
+ var intermediateFolder = fs.GetFolder();
25
+
26
+ var result = WixRunner.Execute(new[]
27
+ {
28
+ "build",
29
+ Path.Combine(folder, "Module.wxs"),
30
+ "-loc", Path.Combine(folder, "Module.en-us.wxl"),
31
+ "-bindpath", Path.Combine(folder, "data"),
32
+ "-intermediateFolder", intermediateFolder,
33
+ "-o", Path.Combine(intermediateFolder, @"bin\test.msm")
34
+ });
35
+
36
+ result.AssertSuccess();
37
+
38
+ var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm");
39
+ Assert.True(File.Exists(msmPath));
40
+ Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb")));
41
+
42
+ var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
43
+ var section = intermediate.Sections.Single();
44
+
45
+ var dirSymbols = section.Symbols.OfType<DirectorySymbol>().OrderBy(d => d.Id.Id).ToList();
46
+ WixAssert.CompareLineByLine(new[]
47
+ {
48
+ "MergeRedirectFolder\tTARGETDIR\t.",
49
+ "TARGETDIR\t\tSourceDir"
50
+ }, dirSymbols.Select(d => String.Join("\t", d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray());
51
+
52
+ var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
53
+ Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileSymbol.Id.Id);
54
+ Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
55
+ Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
56
+
57
+ var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
58
+ var fileRows = data.Tables["File"].Rows;
59
+ Assert.Equal(new[]
60
+ {
61
+ "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
62
+ }, fileRows.Select(r => r.FieldAsString(0)).ToArray());
63
+
64
+ var cabPath = Path.Combine(intermediateFolder, "msm-test.cab");
65
+ Query.ExtractStream(msmPath, "MergeModule.CABinet", cabPath);
66
+ var files = Query.GetCabinetFiles(cabPath);
67
+ Assert.Equal(new[]
68
+ {
69
+ "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
70
+ }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray());
71
+ }
72
+ }
73
+
74
+ [Fact]
75
+ public void CanSuppressModularization()
76
+ {
77
+ var folder = TestData.Get(@"TestData\SuppressModularization");
78
+
79
+ using (var fs = new DisposableFileSystem())
80
+ {
81
+ var intermediateFolder = fs.GetFolder();
82
+
83
+ var result = WixRunner.Execute(new[]
84
+ {
85
+ "build",
86
+ Path.Combine(folder, "Module.wxs"),
87
+ "-loc", Path.Combine(folder, "Module.en-us.wxl"),
88
+ "-bindpath", Path.Combine(folder, "data"),
89
+ "-intermediateFolder", intermediateFolder,
90
+ "-sw1079",
91
+ "-sw1086",
92
+ "-o", Path.Combine(intermediateFolder, @"bin\test.msm")
93
+ });
94
+
95
+ result.AssertSuccess();
96
+
97
+ var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm");
98
+
99
+ var rows = Query.QueryDatabase(msmPath, new[] { "CustomAction", "Property" });
100
+ WixAssert.CompareLineByLine(new[]
101
+ {
102
+ "CustomAction:Test\t11265\tFakeCA.243FB739_4D05_472F_9CFB_EF6B1017B6DE\tTestEntry\t",
103
+ "Property:MsiHiddenProperties\tTest"
104
+ }, rows);
105
+ }
106
+ }
107
+ }
108
+}
src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
-50
@@ -326,56 +326,6 @@ namespace WixToolsetTest.CoreIntegration
326
}
327
}
328
329
- [Fact]
330
- public void CanBuildSimpleModule()
331
- {
332
- var folder = TestData.Get(@"TestData\SimpleModule");
333
-
334
- using (var fs = new DisposableFileSystem())
335
- {
336
- var intermediateFolder = fs.GetFolder();
337
-
338
- var result = WixRunner.Execute(new[]
339
- {
340
- "build",
341
- Path.Combine(folder, "Module.wxs"),
342
- "-loc", Path.Combine(folder, "Module.en-us.wxl"),
343
- "-bindpath", Path.Combine(folder, "data"),
344
- "-intermediateFolder", intermediateFolder,
345
- "-o", Path.Combine(intermediateFolder, @"bin\test.msm")
346
- });
347
-
348
- result.AssertSuccess();
349
-
350
- var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm");
351
- Assert.True(File.Exists(msmPath));
352
- Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb")));
353
-
354
- var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
355
- var section = intermediate.Sections.Single();
356
-
357
- var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
358
- Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileSymbol.Id.Id);
359
- Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
360
- Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
361
-
362
- var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
363
- var fileRows = data.Tables["File"].Rows;
364
- Assert.Equal(new[]
365
- {
366
- "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
367
- }, fileRows.Select(r => r.FieldAsString(0)).ToArray());
368
-
369
- var cabPath = Path.Combine(intermediateFolder, "msm-test.cab");
370
- Query.ExtractStream(msmPath, "MergeModule.CABinet", cabPath);
371
- var files = Query.GetCabinetFiles(cabPath);
372
- Assert.Equal(new[]
373
- {
374
- "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
375
- }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray());
376
- }
377
- }
378
-
329
[Fact]
330
public void CanBuildManualUpgrade()
331
{
src/test/WixToolsetTest.CoreIntegration/TestData/SuppressModularization/Module.en-us.wxl
new
+10
@@ -0,0 +1,10 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+
3
+<!--
4
+This file contains the declaration of all the localizable strings.
5
+-->
6
+<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
+
8
+ <String Id="Manufacturer">Example Company</String>
9
+
10
+</WixLocalization>
src/test/WixToolsetTest.CoreIntegration/TestData/SuppressModularization/Module.wxs
new
+10
@@ -0,0 +1,10 @@
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2
+ <Module Id="MergeModule1" Language="1033" Version="1.0.0.0" Guid="243FB739-4D05-472F-9CFB-EF6B1017B6DE">
3
+ <SummaryInformation Manufacturer="!(loc.Manufacturer)" />
4
+
5
+ <Property Id="Test" Hidden="true" SuppressModularization="true" />
6
+ <CustomAction Id="Test" DllEntry="TestEntry" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" BinaryRef="FakeCA" />
7
+
8
+ <Binary Id="FakeCA" SourceFile="test.txt" />
9
+ </Module>
10
+</Wix>
src/test/WixToolsetTest.CoreIntegration/TestData/SuppressModularization/data/test.txt
new
+1
@@ -0,0 +1 @@
1
+This is test.txt.
\ No newline at end of file