aboutsummaryrefslogtreecommitdiff
path: root/src/test/WixToolsetTest.CoreIntegration
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2020-08-24 17:25:00 -0400
committerBob Arnson <bob@firegiant.com>2020-08-24 18:57:49 -0400
commitc237bb3bb00d36c50271a70baac68f49890e35e1 (patch)
tree25f90ddb7b74180fc3ef299c899585f24e88809f /src/test/WixToolsetTest.CoreIntegration
parent2c040e2d5b401af3607cf6e482cffeaa511d167a (diff)
downloadwix-c237bb3bb00d36c50271a70baac68f49890e35e1.tar.gz
wix-c237bb3bb00d36c50271a70baac68f49890e35e1.tar.bz2
wix-c237bb3bb00d36c50271a70baac68f49890e35e1.zip
Update decompiler to use XDocument rather than generated classes.
- Use CompareXml for diffing. - Change CustomAction/@ScriptFile to @ScriptSourceFile.
Diffstat (limited to 'src/test/WixToolsetTest.CoreIntegration')
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/CustomTableFixture.cs15
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs140
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable-Expected.wxs8
3 files changed, 22 insertions, 141 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/CustomTableFixture.cs b/src/test/WixToolsetTest.CoreIntegration/CustomTableFixture.cs
index 0a45c914..4a5cf544 100644
--- a/src/test/WixToolsetTest.CoreIntegration/CustomTableFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/CustomTableFixture.cs
@@ -3,6 +3,7 @@
3namespace WixToolsetTest.CoreIntegration 3namespace WixToolsetTest.CoreIntegration
4{ 4{
5 using System.IO; 5 using System.IO;
6 using System.Xml.Linq;
6 using WixBuildTools.TestSupport; 7 using WixBuildTools.TestSupport;
7 using WixToolset.Core.TestPackage; 8 using WixToolset.Core.TestPackage;
8 using Xunit; 9 using Xunit;
@@ -224,20 +225,8 @@ namespace WixToolsetTest.CoreIntegration
224 225
225 result.AssertSuccess(); 226 result.AssertSuccess();
226 227
227 CompareLineByLine(expectedFile, decompiledWxsPath); 228 WixAssert.CompareXml(expectedFile, decompiledWxsPath);
228 } 229 }
229 } 230 }
230
231 private static void CompareLineByLine(string expectedFile, string actualFile)
232 {
233 var expectedLines = File.ReadAllLines(expectedFile);
234 var actualLines = File.ReadAllLines(actualFile);
235 for (var i = 0; i < expectedLines.Length; ++i)
236 {
237 Assert.True(actualLines.Length > i, $"{i}: Expected file longer than actual file");
238 Assert.Equal($"{i}: {expectedLines[i]}", $"{i}: {actualLines[i]}");
239 }
240 Assert.True(expectedLines.Length == actualLines.Length, "Actual file longer than expected file");
241 }
242 } 231 }
243} 232}
diff --git a/src/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs b/src/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs
index 9893a525..15082f2b 100644
--- a/src/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs
@@ -6,14 +6,14 @@ namespace WixToolsetTest.CoreIntegration
6 using System.Xml.Linq; 6 using System.Xml.Linq;
7 using WixBuildTools.TestSupport; 7 using WixBuildTools.TestSupport;
8 using WixToolset.Core.TestPackage; 8 using WixToolset.Core.TestPackage;
9 using WixToolset.Extensibility.Services;
9 using Xunit; 10 using Xunit;
10 11
11 public class DecompileFixture 12 public class DecompileFixture
12 { 13 {
13 [Fact] 14 private static void DecompileAndCompare(string sourceFolder, string msiName, string expectedWxsName)
14 public void CanDecompileSingleFileCompressed()
15 { 15 {
16 var folder = TestData.Get(@"TestData\DecompileSingleFileCompressed"); 16 var folder = TestData.Get(sourceFolder);
17 17
18 using (var fs = new DisposableFileSystem()) 18 using (var fs = new DisposableFileSystem())
19 { 19 {
@@ -23,75 +23,33 @@ namespace WixToolsetTest.CoreIntegration
23 var result = WixRunner.Execute(new[] 23 var result = WixRunner.Execute(new[]
24 { 24 {
25 "decompile", 25 "decompile",
26 Path.Combine(folder, "example.msi"), 26 Path.Combine(folder, msiName),
27 "-intermediateFolder", intermediateFolder, 27 "-intermediateFolder", intermediateFolder,
28 "-o", outputPath 28 "-o", outputPath
29 }); 29 });
30 30
31 result.AssertSuccess(); 31 result.AssertSuccess();
32 32
33 var actual = File.ReadAllText(outputPath); 33 WixAssert.CompareXml(Path.Combine(folder, expectedWxsName), outputPath);
34 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
35 var expected = XDocument.Load(Path.Combine(folder, "Expected.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
36
37 Assert.Equal(expected, actualFormatted);
38 } 34 }
39 } 35 }
40 36
41 [Fact] 37 [Fact]
42 public void CanDecompile64BitSingleFileCompressed() 38 public void CanDecompileSingleFileCompressed()
43 { 39 {
44 var folder = TestData.Get(@"TestData\DecompileSingleFileCompressed64"); 40 DecompileAndCompare(@"TestData\DecompileSingleFileCompressed", "example.msi", "Expected.wxs");
45 41 }
46 using (var fs = new DisposableFileSystem())
47 {
48 var intermediateFolder = fs.GetFolder();
49 var outputPath = Path.Combine(intermediateFolder, @"Actual.wxs");
50
51 var result = WixRunner.Execute(new[]
52 {
53 "decompile",
54 Path.Combine(folder, "example.msi"),
55 "-intermediateFolder", intermediateFolder,
56 "-o", outputPath
57 });
58
59 result.AssertSuccess();
60
61 var actual = File.ReadAllText(outputPath);
62 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
63 var expected = XDocument.Load(Path.Combine(folder, "Expected.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
64 42
65 Assert.Equal(expected, actualFormatted); 43 [Fact]
66 } 44 public void CanDecompile64BitSingleFileCompressed()
45 {
46 DecompileAndCompare(@"TestData\DecompileSingleFileCompressed64", "example.msi", "Expected.wxs");
67 } 47 }
68 48
69 [Fact] 49 [Fact]
70 public void CanDecompileNestedDirSearchUnderRegSearch() 50 public void CanDecompileNestedDirSearchUnderRegSearch()
71 { 51 {
72 var folder = TestData.Get(@"TestData\AppSearch"); 52 DecompileAndCompare(@"TestData\AppSearch", "NestedDirSearchUnderRegSearch.msi", "DecompiledNestedDirSearchUnderRegSearch.wxs");
73
74 using (var fs = new DisposableFileSystem())
75 {
76 var intermediateFolder = fs.GetFolder();
77 var outputPath = Path.Combine(intermediateFolder, @"Actual.wxs");
78
79 var result = WixRunner.Execute(new[]
80 {
81 "decompile",
82 Path.Combine(folder, "NestedDirSearchUnderRegSearch.msi"),
83 "-intermediateFolder", intermediateFolder,
84 "-o", outputPath
85 });
86
87 result.AssertSuccess();
88
89 var actual = File.ReadAllText(outputPath);
90 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
91 var expected = XDocument.Load(Path.Combine(folder, "DecompiledNestedDirSearchUnderRegSearch.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
92
93 Assert.Equal(expected, actualFormatted);
94 }
95 } 53 }
96 54
97 [Fact] 55 [Fact]
@@ -100,85 +58,19 @@ namespace WixToolsetTest.CoreIntegration
100 // The input MSI was not created using standard methods, it is an example of a real world database that needs to be decompiled. 58 // The input MSI was not created using standard methods, it is an example of a real world database that needs to be decompiled.
101 // The Class/@Feature_ column has length of 32, the File/@Attributes has length of 2, 59 // The Class/@Feature_ column has length of 32, the File/@Attributes has length of 2,
102 // and numerous foreign key relationships are missing. 60 // and numerous foreign key relationships are missing.
103 var folder = TestData.Get(@"TestData\Class"); 61 DecompileAndCompare(@"TestData\Class", "OldClassTableDef.msi", "DecompiledOldClassTableDef.wxs");
104
105 using (var fs = new DisposableFileSystem())
106 {
107 var intermediateFolder = fs.GetFolder();
108 var outputPath = Path.Combine(intermediateFolder, @"Actual.wxs");
109
110 var result = WixRunner.Execute(new[]
111 {
112 "decompile",
113 Path.Combine(folder, "OldClassTableDef.msi"),
114 "-intermediateFolder", intermediateFolder,
115 "-o", outputPath
116 });
117
118 result.AssertSuccess();
119
120 var actual = File.ReadAllText(outputPath);
121 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
122 var expected = XDocument.Load(Path.Combine(folder, "DecompiledOldClassTableDef.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
123
124 Assert.Equal(expected, actualFormatted);
125 }
126 } 62 }
127 63
128 [Fact] 64 [Fact]
129 public void CanDecompileSequenceTables() 65 public void CanDecompileSequenceTables()
130 { 66 {
131 var folder = TestData.Get(@"TestData\SequenceTables"); 67 DecompileAndCompare(@"TestData\SequenceTables", "SequenceTables.msi", "DecompiledSequenceTables.wxs");
132
133 using (var fs = new DisposableFileSystem())
134 {
135 var intermediateFolder = fs.GetFolder();
136 var outputPath = Path.Combine(intermediateFolder, @"Actual.wxs");
137
138 var result = WixRunner.Execute(new[]
139 {
140 "decompile",
141 Path.Combine(folder, "SequenceTables.msi"),
142 "-intermediateFolder", intermediateFolder,
143 "-o", outputPath
144 });
145
146 result.AssertSuccess();
147
148 var actual = File.ReadAllText(outputPath);
149 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
150 var expected = XDocument.Load(Path.Combine(folder, "DecompiledSequenceTables.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
151
152 Assert.Equal(expected, actualFormatted);
153 }
154 } 68 }
155 69
156 [Fact] 70 [Fact]
157 public void CanDecompileShortcuts() 71 public void CanDecompileShortcuts()
158 { 72 {
159 var folder = TestData.Get(@"TestData\Shortcut"); 73 DecompileAndCompare(@"TestData\Shortcut", "shortcuts.msi", "DecompiledShortcuts.wxs");
160
161 using (var fs = new DisposableFileSystem())
162 {
163 var intermediateFolder = fs.GetFolder();
164 var outputPath = Path.Combine(intermediateFolder, @"Actual.wxs");
165
166 var result = WixRunner.Execute(new[]
167 {
168 "decompile",
169 Path.Combine(folder, "shortcuts.msi"),
170 "-intermediateFolder", intermediateFolder,
171 "-o", outputPath
172 });
173
174 result.AssertSuccess();
175
176 var actual = File.ReadAllText(outputPath);
177 var actualFormatted = XDocument.Parse(actual, LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
178 var expected = XDocument.Load(Path.Combine(folder, "DecompiledShortcuts.wxs"), LoadOptions.PreserveWhitespace | LoadOptions.SetBaseUri | LoadOptions.SetLineInfo).ToString();
179
180 Assert.Equal(expected, actualFormatted);
181 }
182 } 74 }
183 } 75 }
184} 76}
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable-Expected.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable-Expected.wxs
index c55f4ed0..22036ae5 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable-Expected.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomTable/CustomTable-Expected.wxs
@@ -6,12 +6,12 @@
6 <Column Id="Column1" PrimaryKey="yes" Type="string" Width="0" Category="text" Description="The first custom column." /> 6 <Column Id="Column1" PrimaryKey="yes" Type="string" Width="0" Category="text" Description="The first custom column." />
7 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" Description="The custom table's Component reference" /> 7 <Column Id="Component_" Type="string" Width="72" KeyTable="Component" KeyColumn="1" Description="The custom table's Component reference" />
8 <Row> 8 <Row>
9 <Data Column="Column1">Row1</Data> 9 <Data Column="Column1" Value="Row1" />
10 <Data Column="Component_">test.txt</Data> 10 <Data Column="Component_" Value="test.txt" />
11 </Row> 11 </Row>
12 <Row> 12 <Row>
13 <Data Column="Column1">Row2</Data> 13 <Data Column="Column1" Value="Row2" />
14 <Data Column="Component_">test.txt</Data> 14 <Data Column="Component_" Value="test.txt" />
15 </Row> 15 </Row>
16 </CustomTable> 16 </CustomTable>
17 <Directory Id="TARGETDIR" Name="SourceDir"> 17 <Directory Id="TARGETDIR" Name="SourceDir">