main
cs 171 lines 7.27 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;
6 using System.Collections.Generic;
7 using System.IO;
8 using System.Linq;
9 using System.Xml;
10 using WixInternal.TestSupport;
11 using WixInternal.Core.TestPackage;
12 using Xunit;
13
14 public class DependencyExtensionFixture
15 {
16 [Fact]
17 public void CanBuildBundleUsingExePackageWithProvides()
18 {
19 var folder = TestData.Get(@"TestData");
20
21 using (var fs = new DisposableFileSystem())
22 {
23 var baseFolder = fs.GetFolder();
24 var intermediateFolder = Path.Combine(baseFolder, "obj");
25 var binFolder = Path.Combine(baseFolder, "bin");
26 var bundlePath = Path.Combine(binFolder, "test.exe");
27 var baFolderPath = Path.Combine(baseFolder, "ba");
28 var extractFolderPath = Path.Combine(baseFolder, "extract");
29
30 var result = WixRunner.Execute(new[]
31 {
32 "build",
33 Path.Combine(folder, "Dependency", "ExePackageProvidesBundle.wxs"),
34 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
35 "-bindpath", Path.Combine(folder, ".Data"),
36 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
37 "-intermediateFolder", intermediateFolder,
38 "-o", bundlePath,
39 });
40
41 result.AssertSuccess();
42
43 Assert.True(File.Exists(bundlePath));
44
45 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
46 extractResult.AssertSuccess();
47
48 var provides = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Chain/burn:ExePackage/burn:Provides");
49 WixAssert.CompareLineByLine(new[]
50 {
51 "<Provides Key='DependencyTests_ExeA,v1.0' Version='1.0.0.0' DisplayName='Windows Installer XML Toolset' />",
52 }, provides);
53 }
54 }
55
56 [Fact]
57 public void CanBuildBundleUsingMsiWithProvides()
58 {
59 var folder = TestData.Get(@"TestData");
60
61 using (var fs = new DisposableFileSystem())
62 {
63 var baseFolder = fs.GetFolder();
64 var intermediateFolder = Path.Combine(baseFolder, "obj");
65 var binFolder = Path.Combine(baseFolder, "bin");
66 var bundlePath = Path.Combine(binFolder, "test.exe");
67 var baFolderPath = Path.Combine(baseFolder, "ba");
68 var extractFolderPath = Path.Combine(baseFolder, "extract");
69
70 var result = WixRunner.Execute(new[]
71 {
72 "build",
73 Path.Combine(folder, "UsingProvides", "Package.wxs"),
74 Path.Combine(folder, "UsingProvides", "PackageComponents.wxs"),
75 "-loc", Path.Combine(folder, "UsingProvides", "Package.en-us.wxl"),
76 "-bindpath", Path.Combine(folder, "UsingProvides"),
77 "-intermediateFolder", intermediateFolder,
78 "-o", Path.Combine(binFolder, "UsingProvides.msi"),
79 });
80
81 result.AssertSuccess();
82
83 result = WixRunner.Execute(new[]
84 {
85 "build",
86 Path.Combine(folder, "Dependency", "UsingProvidesBundle.wxs"),
87 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
88 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
89 "-bindpath", binFolder,
90 "-intermediateFolder", intermediateFolder,
91 "-o", bundlePath,
92 });
93
94 result.AssertSuccess();
95
96 Assert.True(File.Exists(bundlePath));
97
98 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
99 extractResult.AssertSuccess();
100
101 var provides = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Chain/burn:MsiPackage/burn:Provides");
102 WixAssert.CompareLineByLine(new[]
103 {
104 "<Provides Key='UsingProvides' Version='1.0.0.0' DisplayName='MsiPackage' Imported='yes' />",
105 }, provides);
106 }
107 }
108
109 [Fact]
110 public void CanBuildBundleWithCustomProviderKey()
111 {
112 var folder = TestData.Get(@"TestData");
113
114 using (var fs = new DisposableFileSystem())
115 {
116 var baseFolder = fs.GetFolder();
117 var intermediateFolder = Path.Combine(baseFolder, "obj");
118 var binFolder = Path.Combine(baseFolder, "bin");
119 var bundlePath = Path.Combine(binFolder, "test.exe");
120 var baFolderPath = Path.Combine(baseFolder, "ba");
121 var extractFolderPath = Path.Combine(baseFolder, "extract");
122
123 var result = WixRunner.Execute(new[]
124 {
125 "build",
126 Path.Combine(folder, "Dependency", "CustomProviderKeyBundle.wxs"),
127 Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"),
128 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
129 "-intermediateFolder", intermediateFolder,
130 "-o", bundlePath,
131 });
132
133 result.AssertSuccess();
134
135 Assert.True(File.Exists(bundlePath));
136
137 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
138 extractResult.AssertSuccess();
139
140 var ignoreAttributesByElementName = new Dictionary<string, List<string>>
141 {
142 { "Registration", new List<string> { "Id" } },
143 };
144 var registration = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Registration", ignoreAttributesByElementName);
145 WixAssert.CompareLineByLine(new string[]
146 {
147 "<Registration Id='*' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='MyProviderKey,v1.0'><Arp DisplayName='BurnBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' /></Registration>",
148 }, registration);
149 }
150 }
151
152 [Fact]
153 public void CanBuildPackageUsingProvides()
154 {
155 var folder = TestData.Get(@"TestData\UsingProvides");
156 var build = new Builder(folder, new Type[] { }, new[] { folder });
157
158 var results = build.BuildAndQuery(Build, "Wix4DependencyProvider");
159 WixAssert.CompareLineByLine(new[]
160 {
161 "Wix4DependencyProvider:dep74OfIcniaqxA7EprRGBw4Oyy3r8\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tUsingProvides\t\t\t",
162 }, results);
163 }
164
165 private static void Build(string[] args)
166 {
167 var result = WixRunner.Execute(args);
168 result.AssertSuccess();
169 }
170 }
171 }