aboutsummaryrefslogtreecommitdiff
path: root/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs')
-rw-r--r--src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs b/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs
new file mode 100644
index 00000000..2f32a30f
--- /dev/null
+++ b/src/test/WixToolsetTest.Sdk/MsbuildHeatFixture.cs
@@ -0,0 +1,150 @@
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.Sdk
4{
5 using System;
6 using System.Collections.Generic;
7 using System.IO;
8 using System.Linq;
9 using WixBuildTools.TestSupport;
10 using WixToolset.Core.TestPackage;
11 using WixToolset.Data;
12 using WixToolset.Data.Symbols;
13 using Xunit;
14
15 public class MsbuildHeatFixture
16 {
17 [Theory]
18 [InlineData(BuildSystem.DotNetCoreSdk)]
19 [InlineData(BuildSystem.MSBuild)]
20 [InlineData(BuildSystem.MSBuild64)]
21 public void CanBuildHeatFilePackage(BuildSystem buildSystem)
22 {
23 var sourceFolder = TestData.Get(@"TestData\HeatFilePackage");
24
25 using (var fs = new TestDataFolderFileSystem())
26 {
27 fs.Initialize(sourceFolder);
28 var baseFolder = fs.BaseFolder;
29 var binFolder = Path.Combine(baseFolder, @"bin\");
30 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
31 var projectPath = Path.Combine(baseFolder, "HeatFilePackage.wixproj");
32
33 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath);
34 result.AssertSuccess();
35
36 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true);
37 Assert.Single(heatCommandLines);
38
39 var warnings = result.Output.Where(line => line.Contains(": warning"));
40 Assert.Empty(warnings);
41
42 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_ProductComponents_INSTALLFOLDER_HeatFilePackage.wixproj_file.wxs");
43 Assert.True(File.Exists(generatedFilePath));
44
45 var generatedContents = File.ReadAllText(generatedFilePath);
46 var testXml = generatedContents.GetTestXml();
47 Assert.Equal(@"<Wix>" +
48 "<Fragment>" +
49 "<DirectoryRef Id='INSTALLFOLDER'>" +
50 "<Component Id='HeatFilePackage.wixproj' Guid='*'>" +
51 "<File Id='HeatFilePackage.wixproj' KeyPath='yes' Source='SourceDir\\HeatFilePackage.wixproj' />" +
52 "</Component>" +
53 "</DirectoryRef>" +
54 "</Fragment>" +
55 "<Fragment>" +
56 "<ComponentGroup Id='ProductComponents'>" +
57 "<ComponentRef Id='HeatFilePackage.wixproj' />" +
58 "</ComponentGroup>" +
59 "</Fragment>" +
60 "</Wix>", testXml);
61
62 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatFilePackage.wixpdb");
63 Assert.True(File.Exists(pdbPath));
64
65 var intermediate = Intermediate.Load(pdbPath);
66 var section = intermediate.Sections.Single();
67
68 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
69 Assert.Equal(@"SourceDir\HeatFilePackage.wixproj", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
70 }
71 }
72
73 [Theory]
74 [InlineData(BuildSystem.DotNetCoreSdk)]
75 [InlineData(BuildSystem.MSBuild)]
76 [InlineData(BuildSystem.MSBuild64)]
77 public void CanBuildHeatFileWithMultipleFilesPackage(BuildSystem buildSystem)
78 {
79 var sourceFolder = TestData.Get(@"TestData\HeatFileMultipleFilesSameFileName");
80
81 using (var fs = new TestDataFolderFileSystem())
82 {
83 fs.Initialize(sourceFolder);
84 var baseFolder = fs.BaseFolder;
85 var binFolder = Path.Combine(baseFolder, @"bin\");
86 var intermediateFolder = Path.Combine(baseFolder, @"obj\");
87 var projectPath = Path.Combine(baseFolder, "HeatFileMultipleFilesSameFileName.wixproj");
88
89 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath);
90 result.AssertSuccess();
91
92 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true);
93 Assert.Equal(2, heatCommandLines.Count());
94
95 var warnings = result.Output.Where(line => line.Contains(": warning"));
96 Assert.Empty(warnings);
97
98 var generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_TxtProductComponents_INSTALLFOLDER_MyProgram.txt_file.wxs");
99 Assert.True(File.Exists(generatedFilePath));
100
101 var generatedContents = File.ReadAllText(generatedFilePath);
102 var testXml = generatedContents.GetTestXml();
103 Assert.Equal("<Wix>" +
104 "<Fragment>" +
105 "<DirectoryRef Id='INSTALLFOLDER'>" +
106 "<Component Id='MyProgram.txt' Guid='*'>" +
107 @"<File Id='MyProgram.txt' KeyPath='yes' Source='SourceDir\MyProgram.txt' />" +
108 "</Component>" +
109 "</DirectoryRef>" +
110 "</Fragment>" +
111 "<Fragment>" +
112 "<ComponentGroup Id='TxtProductComponents'>" +
113 "<ComponentRef Id='MyProgram.txt' />" +
114 "</ComponentGroup>" +
115 "</Fragment>" +
116 "</Wix>", testXml);
117
118 generatedFilePath = Path.Combine(intermediateFolder, "x86", "Release", "_JsonProductComponents_INSTALLFOLDER_MyProgram.json_file.wxs");
119 Assert.True(File.Exists(generatedFilePath));
120
121 generatedContents = File.ReadAllText(generatedFilePath);
122 testXml = generatedContents.GetTestXml();
123 Assert.Equal("<Wix>" +
124 "<Fragment>" +
125 "<DirectoryRef Id='INSTALLFOLDER'>" +
126 "<Component Id='MyProgram.json' Guid='*'>" +
127 @"<File Id='MyProgram.json' KeyPath='yes' Source='SourceDir\MyProgram.json' />" +
128 "</Component>" +
129 "</DirectoryRef>" +
130 "</Fragment>" +
131 "<Fragment>" +
132 "<ComponentGroup Id='JsonProductComponents'>" +
133 "<ComponentRef Id='MyProgram.json' />" +
134 "</ComponentGroup>" +
135 "</Fragment>" +
136 "</Wix>", testXml);
137
138 var pdbPath = Path.Combine(binFolder, "x86", "Release", "HeatFileMultipleFilesSameFileName.wixpdb");
139 Assert.True(File.Exists(pdbPath));
140
141 var intermediate = Intermediate.Load(pdbPath);
142 var section = intermediate.Sections.Single();
143
144 var fileSymbols = section.Symbols.OfType<FileSymbol>().ToArray();
145 Assert.Equal(@"SourceDir\MyProgram.txt", fileSymbols[0][FileSymbolFields.Source].PreviousValue.AsPath().Path);
146 Assert.Equal(@"SourceDir\MyProgram.json", fileSymbols[1][FileSymbolFields.Source].PreviousValue.AsPath().Path);
147 }
148 }
149 }
150}