public void PopulatesEnvironmentTable() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Environment", "Environment.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Environment" }); WixAssert.CompareLineByLine(new[] { "Environment:PATH\t=-*PATH\t[INSTALLFOLDER]; ;[~]\tWixEnvironmentTest", "Environment:WixEnvironmentTest1\t=-WixEnvTest1\t\tWixEnvironmentTest", "Environment:WixEnvironmentTest2\t+-WixEnvTest1\t\tWixEnvironmentTest", "Environment:WixEnvironmentTest3\t!-WixEnvTest1\t\tWixEnvironmentTest", "Environment:WixEnvironmentTest4\t=-*WIX\t[INSTALLFOLDER]\tWixEnvironmentTest", }, results); } }
public void PopulatesRegistryTableFromRemoveRegistryKey() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Registry", "RemoveRegistryKey.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Registry" }); WixAssert.CompareLineByLine(new[] { "Registry:RemoveAKeyName\t2\tAKeyName\t-\t\tRemoveRegistryKeyComp", }, results); } }
public void CanBuildSimpleModule() { var folder = TestData.Get(@"TestData\SimpleModule"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Module.wxs"), "-loc", Path.Combine(folder, "Module.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msm") }); result.AssertSuccess(); var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm"); Assert.True(File.Exists(msmPath)); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb"))); var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var dirSymbols = section.Symbols.OfType <DirectorySymbol>().OrderBy(d => d.Id.Id).ToList(); WixAssert.CompareLineByLine(new[] { "MergeRedirectFolder\tTARGETDIR\t.", "NotTheMergeRedirectFolder\tTARGETDIR\t.", "TARGETDIR\t\tSourceDir" }, dirSymbols.Select(d => String.Join("\t", d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray()); var fileSymbols = section.Symbols.OfType <FileSymbol>().OrderBy(d => d.Id.Id).ToList(); WixAssert.CompareLineByLine(new[] { $"File1\t{Path.Combine(folder, @"data\test.txt")}\ttest.txt", $"File2\t{Path.Combine(folder, @"data\test.txt")}\ttest.txt", }, fileSymbols.Select(fileSymbol => String.Join("\t", fileSymbol.Id.Id, fileSymbol[FileSymbolFields.Source].AsPath().Path, fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path)).ToArray()); var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var fileRows = data.Tables["File"].Rows; Assert.Equal(new[] { "File1.243FB739_4D05_472F_9CFB_EF6B1017B6DE", "File2.243FB739_4D05_472F_9CFB_EF6B1017B6DE", }, fileRows.Select(r => r.FieldAsString(0)).ToArray()); var cabPath = Path.Combine(intermediateFolder, "msm-test.cab"); Query.ExtractStream(msmPath, "MergeModule.CABinet", cabPath); var files = Query.GetCabinetFiles(cabPath); Assert.Equal(new[] { "File1.243FB739_4D05_472F_9CFB_EF6B1017B6DE", "File2.243FB739_4D05_472F_9CFB_EF6B1017B6DE", }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray()); } }
public void DoesntFixFormattedTypeFromV4() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>", " <Fragment>", " <Variable Name='ImplicitString' Value='implicit' />", " <Variable Name='ExplicitString' Type='string' Value='explicit' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment>", " <Variable Name=\"ImplicitString\" Value=\"implicit\" />", " <Variable Name=\"ExplicitString\" Type=\"string\" Value=\"explicit\" />", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(0, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesRegistryTableFromRegistryValue() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Registry", "RegistryValue.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Registry" }); WixAssert.CompareLineByLine(new[] { "Registry:reg04OIwIchl.9ZTjisTT6NzGSsQSM\t2\tPath\\To\\AnotherKey\tSecret\t#x\tMiscComponent", "Registry:regEblTuusqFNSUQNy88zaP_UA5kIY\t2\tPath\\To\\Key\t\t1.0.1234.123\tMiscComponent", }, results); } }
public void KeepsDpiAwarenessFromV4() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>", " <Fragment>", " <BootstrapperApplication Id='ba' SourceFile='ba.dll' DpiAwareness='system' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment>", " <BootstrapperApplication Id=\"ba\">", "<BootstrapperApplicationDll SourceFile=\"ba.dll\" DpiAwareness=\"system\" />", "</BootstrapperApplication>", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(1, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void ConvertDotNetCoreBootstrapperApplicationRefWithoutExistingElement() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs' xmlns:bal='http://wixtoolset.org/schemas/v4/wxs/bal'>", " <Fragment>", " <BootstrapperApplicationRef Id='DotNetCoreBootstrapperApplicationHost' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.org/schemas/v4/wxs/bal\">", " <Fragment>", " <BootstrapperApplication>", "<bal:WixDotNetCoreBootstrapperApplicationHost />", "</BootstrapperApplication>", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(1, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesServiceTables() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "ServiceInstall", "OwnProcess.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "ServiceInstall", "ServiceControl" }); WixAssert.CompareLineByLine(new[] { "ServiceControl:SampleService\tSampleService\t161\t\t1\ttest.txt", "ServiceInstall:SampleService\tSampleService\t\t16\t4\t0\t\t\t\t\t\ttest.txt\t", }, results); } }
public void PopulatesTextStyleTableWhenColorIsNull() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "TextStyle", "ColorNull.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "TextStyle" }); WixAssert.CompareLineByLine(new[] { "TextStyle:FirstTextStyle\tArial\t2\t\t", }, results); } }
public void PopulatesMsiShortcutPropertyTable() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Shortcut", "ShortcutProperty.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "MsiShortcutProperty", "Shortcut" }); WixAssert.CompareLineByLine(new[] { "MsiShortcutProperty:scp4GOCIx4Eskci4nBG1MV_vSUOZt4\tTheShortcut\tCustomShortcutKey\tCustomShortcutValue", "Shortcut:TheShortcut\tINSTALLFOLDER\td\tShortcutComp\t[#filcV1yrx0x8wJWj4qMzcH21jwkPko]\t\t\t\t\t\t\t\t\t\t\t", }, results); } }
public void PopulatesReserveCostTable() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "ReserveCost", "ReserveCost.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "ReserveCost" }); WixAssert.CompareLineByLine(new[] { "ReserveCost:TestCost\tReserveCostComp\tINSTALLFOLDER\t100\t200", }, results); } }
public void PopulatesMsiAssemblyTables() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Assembly", "Win32Assembly.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "Assembly", "data"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "MsiAssembly", "MsiAssemblyName" }); WixAssert.CompareLineByLine(new[] { "MsiAssembly:test.txt\tProductFeature\ttest.dll.manifest\t\t1", "MsiAssemblyName:test.txt\tname\tMyApplication.app", "MsiAssemblyName:test.txt\tversion\t1.0.0.0", }, results); } }
public void PopulatesLockPermissionsTableWithEmptyPermissions() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "LockPermissions", "EmptyPermissions.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "LockPermissions" }); WixAssert.CompareLineByLine(new[] { "LockPermissions:INSTALLFOLDER\tCreateFolder\t\tAdministrator\t0", }, results); } }
public void PopulatesFeatureTableWithParent() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "FeatureGroup", "FeatureGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Feature" }); WixAssert.CompareLineByLine(new[] { "Feature:ChildFeature\tParentFeature\tChildFeatureTitle\t\t2\t1\t\t0", "Feature:ParentFeature\t\tParentFeatureTitle\t\t2\t1\t\t0", "Feature:ProductFeature\t\tMsiPackageTitle\t\t2\t1\t\t0", }, results); } }
public void CantCreateBootstrapperApplicationDllFromV3PayloadGroupRef() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>", " <Fragment>", " <BootstrapperApplication Id='ba'>", " <PayloadGroupRef Id='baPayloads' />", " </BootstrapperApplication>", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment>", " <BootstrapperApplication Id=\"ba\">", " <PayloadGroupRef Id=\"baPayloads\" />", " </BootstrapperApplication>", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(2, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesAppSearchTablesFromDirectorySearch() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "AppSearch", "DirectorySearch.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "DrLocator" }); WixAssert.CompareLineByLine(new[] { "AppSearch:SAMPLEDIRFOUND\tSampleDirSearch", "DrLocator:SampleDirSearch\t\tC:\\SampleDir\t", }, results); } }
public void ConvertStandardBootstrapperApplicationRefWithoutExistingElement() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:bal='http://schemas.microsoft.com/wix/BalExtension'>", " <Fragment>", " <BootstrapperApplicationRef Id='WixStandardBootstrapperApplication.RtfLicense' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.org/schemas/v4/wxs/bal\">", " <Fragment>", " <BootstrapperApplication>", "<bal:WixStandardBootstrapperApplication Theme=\"rtfLicense\" />", "</BootstrapperApplication>", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(3, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesTextStyleTableWhenSizeIsLocalized() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "TextStyle", "SizeLocalized.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-loc", Path.Combine(folder, "TextStyle", "SizeLocalized.en-us.wxl"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath, }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "TextStyle" }); WixAssert.CompareLineByLine(new[] { "TextStyle:CustomFont\tTahoma\t8\t\t", }, results); } }
public void RemovesBalUseUILanguages() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:bal='http://schemas.microsoft.com/wix/BalExtension'>", " <Fragment>", " <BootstrapperApplication Id='ba' bal:UseUILanguages='true' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment>", " <BootstrapperApplication Id=\"ba\" />", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(5, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesTypeLibTableWhenLanguageIsZero() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "TypeLib", "Language0.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "TypeLib" }); WixAssert.CompareLineByLine(new[] { "TypeLib:{765BE8EE-BD7F-491E-90D2-C5A972462B50}\t0\tTypeLibComp\t\t\t\tProductFeature\t", }, results); } }
public void FixNamespace() { var parse = String.Join(Environment.NewLine, "<Include xmlns='http://schemas.microsoft.com/wix/2006/wi'>", " <Fragment />", "</Include>"); var expected = new[] { "<Include xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment />", "</Include>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(1, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesUpgradeTableFromManualUpgrade() { var folder = TestData.Get(@"TestData\ManualUpgrade"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }, out var messages); Assert.Equal(0, result); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Upgrade" }); WixAssert.CompareLineByLine(new[] { "Upgrade:{01120000-00E0-0000-0000-0000000FF1CE}\t12.0.0\t13.0.0\t\t260\t\tBLAHBLAHBLAH", }, results); } }
public void PopulatesRegistryTableWithoutExtraBackslash() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Registry", "RegistryKeyEndingWithBackslash.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Registry" }); WixAssert.CompareLineByLine(new[] { "Registry:reg1\t2\tSoftware\\WBM\\WB\t*\t\tMiscComponent", "Registry:reg2\t2\tSoftware\\WBM\\WB\tInstallationPath\t[INSTALLFOLDER]\tMiscComponent", }, results); } }
public void FixCondition() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>", " <Fragment>", " <InstallUISequence>", " <Custom Action='ExampleCA' After='InstallFiles'>NOT Installed</Custom>", " </InstallUISequence>", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", " <Fragment>", " <InstallUISequence>", " <Custom Action=\"ExampleCA\" After=\"InstallFiles\" Condition=\"NOT Installed\" />", " </InstallUISequence>", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(2, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void PopulatesRegistryTableFromRegistryValueMultiString() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Registry", "RegistryValueMultiString.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); var results = Query.QueryDatabase(msiPath, new[] { "Registry" }); WixAssert.CompareLineByLine(new[] { "Registry:regitq_Wx9LfvJuNSc2un6gIHAzr4A\t2\tPath\\To\\AnotherKey\tSecret\t#x\tMultiStringComponent", "Registry:regmeTJMpOD41igfxhTcUVZ7kNG1Mo\t2\tPath\\To\\Key\t\ta[~]b[~][~]c[~]\tMultiStringComponent", }, results); } }
public void CanBuildSimpleMergeModule(BuildSystem buildSystem) { var sourceFolder = TestData.Get(@"TestData\MergeModule\SimpleMergeModule"); using (var fs = new TestDataFolderFileSystem()) { fs.Initialize(sourceFolder); var baseFolder = fs.BaseFolder; var binFolder = Path.Combine(baseFolder, @"bin\"); var projectPath = Path.Combine(baseFolder, "SimpleMergeModule.wixproj"); var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); result.AssertSuccess(); var warnings = result.Output.Where(line => line.Contains(": warning")); Assert.Empty(warnings); var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .OrderBy(s => s) .ToArray(); WixAssert.CompareLineByLine(new[] { @"bin\x86\Release\SimpleMergeModule.msm", @"bin\x86\Release\SimpleMergeModule.wixpdb", }, paths); } }
public void FixUtilRegistrySearchBitness() { var parse = String.Join(Environment.NewLine, "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'>", " <Fragment>", " <util:RegistrySearch Id='RegValue' Root='HKLM' Key='Converter' Variable='Test' />", " <util:RegistrySearch Id='RegValue2' Root='HKLM' Key='Converter' Variable='Test' Result='value' Win64='no' />", " <util:RegistrySearch Id='RegValue3' Root='HKLM' Key='Converter' Variable='Test' Result='exists' Win64='yes' />", " </Fragment>", "</Wix>"); var expected = new[] { "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:util=\"http://wixtoolset.org/schemas/v4/wxs/util\">", " <Fragment>", " <util:RegistrySearch Id=\"RegValue\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" />", " <util:RegistrySearch Id=\"RegValue2\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" Result=\"value\" Bitness=\"always32\" />", " <util:RegistrySearch Id=\"RegValue3\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" Result=\"exists\" Bitness=\"always64\" />", " </Fragment>", "</Wix>" }; var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); var messaging = new MockMessaging(); var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); Assert.Equal(6, errors); var actualLines = UnformattedDocumentLines(document); WixAssert.CompareLineByLine(expected, actualLines); }
public void CanBuildSimpleMsiPackage(BuildSystem buildSystem) { var sourceFolder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); using (var fs = new TestDataFolderFileSystem()) { fs.Initialize(sourceFolder); var baseFolder = fs.BaseFolder; var binFolder = Path.Combine(baseFolder, @"bin\"); var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj"); var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); result.AssertSuccess(); var platformSwitches = result.Output.Where(line => line.Contains("-platform x86")); Assert.Single(platformSwitches); var warnings = result.Output.Where(line => line.Contains(": warning")); Assert.Equal(4, warnings.Count()); var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) .OrderBy(s => s) .ToArray(); WixAssert.CompareLineByLine(new[] { @"bin\x86\Release\en-US\cab1.cab", @"bin\x86\Release\en-US\MsiPackage.msi", @"bin\x86\Release\en-US\MsiPackage.wixpdb", }, paths); } }
public void CanSuppressModularization() { var folder = TestData.Get(@"TestData\SuppressModularization"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Module.wxs"), "-loc", Path.Combine(folder, "Module.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-sw1079", "-sw1086", "-o", Path.Combine(intermediateFolder, @"bin\test.msm") }); result.AssertSuccess(); var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm"); var rows = Query.QueryDatabase(msmPath, new[] { "CustomAction", "Property" }); WixAssert.CompareLineByLine(new[] { "CustomAction:Test\t11265\tFakeCA.243FB739_4D05_472F_9CFB_EF6B1017B6DE\tTestEntry\t", "Property:MsiHiddenProperties\tTest" }, rows); } }
public void PopulatesCreateFolderTableForNullKeypathComponents() { var folder = TestData.Get(@"TestData\Components"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "CreateFolder" }); WixAssert.CompareLineByLine(new[] { "CreateFolder:INSTALLFOLDER\tNullKeypathComponent", }, results); } }