From 4449fcc5b8d104817c67135229682c66c3d892ca Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Fri, 2 Apr 2021 14:41:49 -0700 Subject: Enable codepages and languages to be set via .wxl files Fixes wixtoolset/issues#5801 --- .../LanguageFixture.cs | 155 +++++++++++++++++++++ .../LinkerFixture.cs | 4 +- .../WixToolsetTest.CoreIntegration/ParseFixture.cs | 2 +- .../TestData/Language/Package.en-us.wxl | 7 + .../TestData/Language/Package.ja-jp.wxl | 7 + .../TestData/Language/Package.wxl | 7 + .../TestData/Language/Package.wxs | 16 +++ .../Language/PackageWithEnSummaryInfo.ja-jp.wxl | 7 + .../TestData/Language/data/test.txt | 1 + .../VariableResolverFixture.cs | 2 +- 10 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 src/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.en-us.wxl create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.ja-jp.wxl create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxl create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxs create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/PackageWithEnSummaryInfo.ja-jp.wxl create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Language/data/test.txt (limited to 'src/test') diff --git a/src/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs new file mode 100644 index 00000000..319b0788 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs @@ -0,0 +1,155 @@ +// 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. + +namespace WixToolsetTest.CoreIntegration +{ + using System.IO; + using System.Linq; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using WixToolset.Data; + using WixToolset.Data.Symbols; + using Xunit; + + public class LanguageFixture + { + [Fact] + public void CanBuildWithDefaultProductLanguage() + { + var folder = TestData.Get(@"TestData", "Language"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + "-loc", Path.Combine(folder, "Package.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", Path.Combine(baseFolder, "obj"), + "-o", Path.Combine(baseFolder, @"bin\test.msi") + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var section = intermediate.Sections.Single(); + + var propertySymbol = section.Symbols.OfType().Single(p => p.Id.Id == "ProductLanguage"); + Assert.Equal("0", propertySymbol.Value); + + var summaryPlatform = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); + Assert.Equal("Intel;0", summaryPlatform.Value); + + var summaryCodepage = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.Codepage); + Assert.Equal("1252", summaryCodepage.Value); + } + } + + [Fact] + public void CanBuildEnuWxl() + { + var folder = TestData.Get(@"TestData", "Language"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + "-loc", Path.Combine(folder, "Package.en-us.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", Path.Combine(baseFolder, "obj"), + "-o", Path.Combine(baseFolder, @"bin\test.msi") + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var section = intermediate.Sections.Single(); + + var propertySymbol = section.Symbols.OfType().Single(p => p.Id.Id == "ProductLanguage"); + Assert.Equal("1033", propertySymbol.Value); + + var summaryPlatform = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); + Assert.Equal("Intel;1033", summaryPlatform.Value); + + var summaryCodepage = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.Codepage); + Assert.Equal("1252", summaryCodepage.Value); + } + } + + [Fact] + public void CanBuildJpnWxl() + { + var folder = TestData.Get(@"TestData", "Language"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + "-loc", Path.Combine(folder, "Package.ja-jp.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", Path.Combine(baseFolder, "obj"), + "-o", Path.Combine(baseFolder, @"bin\test.msi") + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var section = intermediate.Sections.Single(); + + var propertySymbol = section.Symbols.OfType().Single(p => p.Id.Id == "ProductLanguage"); + Assert.Equal("1041", propertySymbol.Value); + + var summaryPlatform = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); + Assert.Equal("Intel;1041", summaryPlatform.Value); + + var summaryCodepage = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.Codepage); + Assert.Equal("932", summaryCodepage.Value); + } + } + + [Fact] + public void CanBuildJpnWxlWithEnuSummaryInfo() + { + var folder = TestData.Get(@"TestData", "Language"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + "-loc", Path.Combine(folder, "PackageWithEnSummaryInfo.ja-jp.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", Path.Combine(baseFolder, "obj"), + "-o", Path.Combine(baseFolder, @"bin\test.msi") + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var section = intermediate.Sections.Single(); + + var propertySymbol = section.Symbols.OfType().Single(p => p.Id.Id == "ProductLanguage"); + Assert.Equal("1041", propertySymbol.Value); + + var summaryPlatform = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); + Assert.Equal("Intel;1041", summaryPlatform.Value); + + var summaryCodepage = section.Symbols.OfType().Single(s => s.PropertyId == SummaryInformationType.Codepage); + Assert.Equal("1252", summaryCodepage.Value); + } + } + } +} diff --git a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs index 41c1d773..f73a57d0 100644 --- a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs @@ -19,8 +19,8 @@ namespace WixToolsetTest.CoreIntegration [Fact] public void MustCompileBeforeLinking() { - var intermediate1 = new Intermediate("TestIntermediate1", new[] { new IntermediateSection("test1", SectionType.Product, 65001) }, null); - var intermediate2 = new Intermediate("TestIntermediate2", new[] { new IntermediateSection("test2", SectionType.Fragment, 65001) }, null); + var intermediate1 = new Intermediate("TestIntermediate1", new[] { new IntermediateSection("test1", SectionType.Product) }, null); + var intermediate2 = new Intermediate("TestIntermediate2", new[] { new IntermediateSection("test2", SectionType.Fragment) }, null); var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var listener = new TestMessageListener(); diff --git a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs index 2d98a66c..cdba85de 100644 --- a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs @@ -16,7 +16,7 @@ namespace WixToolsetTest.CoreIntegration public void GeneratesCorrectCustomActionIdentifiers() { var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); - var section = new IntermediateSection("section", SectionType.Fragment, 0); + var section = new IntermediateSection("section", SectionType.Fragment); var parseHelper = serviceProvider.GetService(); parseHelper.CreateCustomActionReference(null, section, "CustomAction32", Platform.X86, CustomActionPlatforms.X86); diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.en-us.wxl b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.en-us.wxl new file mode 100644 index 00000000..f7453566 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.en-us.wxl @@ -0,0 +1,7 @@ + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.ja-jp.wxl b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.ja-jp.wxl new file mode 100644 index 00000000..ef287da7 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.ja-jp.wxl @@ -0,0 +1,7 @@ + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxl b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxl new file mode 100644 index 00000000..10ebf2c5 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxl @@ -0,0 +1,7 @@ + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxs new file mode 100644 index 00000000..2bbc14f9 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/Package.wxs @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/PackageWithEnSummaryInfo.ja-jp.wxl b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/PackageWithEnSummaryInfo.ja-jp.wxl new file mode 100644 index 00000000..596ee077 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/PackageWithEnSummaryInfo.ja-jp.wxl @@ -0,0 +1,7 @@ + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Language/data/test.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/data/test.txt new file mode 100644 index 00000000..cd0db0e1 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Language/data/test.txt @@ -0,0 +1 @@ +This is test.txt. \ No newline at end of file diff --git a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs index 28c68e99..15e5d334 100644 --- a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs @@ -25,7 +25,7 @@ namespace WixToolsetTest.CoreIntegration { "ProductNameEditionVersion", new BindVariable() { Id = "ProductNameEditionVersion", Value = "!(loc.ProductNameEdition) v1.2.3" } }, }; - var localization = new Localization(0, "x-none", variables, new Dictionary()); + var localization = new Localization(0, null, "x-none", variables, new Dictionary()); variableResolver.AddLocalization(localization); -- cgit v1.2.3-55-g6feb