Path: blob/master/test/jdk/tools/jpackage/windows/WinL10nTest.java
41149 views
/*1* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.io.IOException;24import java.nio.file.Path;25import jdk.jpackage.test.TKit;26import jdk.jpackage.test.PackageTest;27import jdk.jpackage.test.PackageType;28import jdk.jpackage.test.Annotations.Test;29import jdk.jpackage.test.Annotations.Parameters;30import java.util.List;31import java.util.function.Predicate;32import java.util.stream.Stream;33import java.util.stream.Collectors;34import jdk.jpackage.test.Executor;3536/*37* @test38* @summary Custom l10n of msi installers in jpackage39* @library ../helpers40* @key jpackagePlatformPackage41* @requires (jpackage.test.SQETest == null)42* @build jdk.jpackage.test.*43* @requires (os.family == "windows")44* @modules jdk.jpackage/jdk.jpackage.internal45* @compile WinL10nTest.java46* @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.Main47* --jpt-run=WinL10nTest48*/4950public class WinL10nTest {5152public WinL10nTest(WixFileInitializer wxlFileInitializers[],53String expectedCulture, String expectedErrorMessage) {54this.wxlFileInitializers = wxlFileInitializers;55this.expectedCulture = expectedCulture;56this.expectedErrorMessage = expectedErrorMessage;57}5859@Parameters60public static List<Object[]> data() {61return List.of(new Object[][]{62{null, "en-us", null},63{new WixFileInitializer[] {64WixFileInitializer.create("a.wxl", "en-us")65}, "en-us", null},66{new WixFileInitializer[] {67WixFileInitializer.create("a.wxl", "fr")68}, "fr;en-us", null},69{new WixFileInitializer[] {70WixFileInitializer.create("a.wxl", "fr"),71WixFileInitializer.create("b.wxl", "fr")72}, "fr;en-us", null},73{new WixFileInitializer[] {74WixFileInitializer.create("a.wxl", "it"),75WixFileInitializer.create("b.wxl", "fr")76}, "it;fr;en-us", null},77{new WixFileInitializer[] {78WixFileInitializer.create("c.wxl", "it"),79WixFileInitializer.create("b.wxl", "fr")80}, "fr;it;en-us", null},81{new WixFileInitializer[] {82WixFileInitializer.create("a.wxl", "fr"),83WixFileInitializer.create("b.wxl", "it"),84WixFileInitializer.create("c.wxl", "fr"),85WixFileInitializer.create("d.wxl", "it")86}, "fr;it;en-us", null},87{new WixFileInitializer[] {88WixFileInitializer.create("c.wxl", "it"),89WixFileInitializer.createMalformed("b.wxl")90}, null, null}91});92}9394private final static Stream<String> getLightCommandLine(95Executor.Result result) {96return result.getOutput().stream()97.filter(s -> s.trim().startsWith("light.exe"));98}99100@Test101public void test() throws IOException {102103final boolean allWxlFilesValid;104if (wxlFileInitializers != null) {105allWxlFilesValid = Stream.of(wxlFileInitializers).allMatch(106WixFileInitializer::isValid);107} else {108allWxlFilesValid = true;109}110111PackageTest test = new PackageTest()112.forTypes(PackageType.WINDOWS)113.configureHelloApp()114.addInitializer(cmd -> {115// 1. Set fake run time to save time by skipping jlink step of jpackage.116// 2. Instruct test to save jpackage output.117cmd.setFakeRuntime().saveConsoleOutput(true);118})119.addBundleVerifier((cmd, result) -> {120if (expectedCulture != null) {121TKit.assertTextStream("-cultures:" + expectedCulture).apply(122getLightCommandLine(result));123}124125if (expectedErrorMessage != null) {126TKit.assertTextStream(expectedErrorMessage)127.apply(result.getOutput().stream());128}129130if (wxlFileInitializers != null) {131if (allWxlFilesValid) {132for (var v : wxlFileInitializers) {133v.createCmdOutputVerifier(resourceDir).apply(134getLightCommandLine(result));135}136} else {137Stream.of(wxlFileInitializers)138.filter(Predicate.not(WixFileInitializer::isValid))139.forEach(v -> v.createCmdOutputVerifier(140resourceDir).apply(result.getOutput().stream()));141TKit.assertFalse(142getLightCommandLine(result).findAny().isPresent(),143"Check light.exe was not invoked");144}145}146});147148if (wxlFileInitializers != null) {149test.addInitializer(cmd -> {150resourceDir = TKit.createTempDirectory("resources");151152cmd.addArguments("--resource-dir", resourceDir);153154for (var v : wxlFileInitializers) {155v.apply(resourceDir);156}157});158}159160if (expectedErrorMessage != null || !allWxlFilesValid) {161test.setExpectedExitCode(1);162}163164test.run();165}166167final private WixFileInitializer wxlFileInitializers[];168final private String expectedCulture;169final private String expectedErrorMessage;170private Path resourceDir;171172private static class WixFileInitializer {173static WixFileInitializer create(String name, String culture) {174return new WixFileInitializer(name, culture);175}176177static WixFileInitializer createMalformed(String name) {178return new WixFileInitializer(name, null) {179@Override180public void apply(Path root) throws IOException {181TKit.createTextFile(root.resolve(name), List.of(182"<?xml version=\"1.0\" encoding=\"utf-8\"?>",183"<WixLocalization>"));184}185186@Override187public String toString() {188return String.format("name=%s; malformed xml", name);189}190191@Override192boolean isValid() {193return false;194}195196@Override197TKit.TextStreamVerifier createCmdOutputVerifier(Path root) {198return TKit.assertTextStream(String.format(199"Failed to parse %s file",200root.resolve("b.wxl").toAbsolutePath()));201}202};203}204205private WixFileInitializer(String name, String culture) {206this.name = name;207this.culture = culture;208}209210void apply(Path root) throws IOException {211TKit.createTextFile(root.resolve(name), List.of(212"<?xml version=\"1.0\" encoding=\"utf-8\"?>",213culture == null ? "<WixLocalization/>" : "<WixLocalization Culture=\""214+ culture215+ "\" xmlns=\"http://schemas.microsoft.com/wix/2006/localization\" Codepage=\"1252\"/>"));216}217218TKit.TextStreamVerifier createCmdOutputVerifier(Path root) {219return TKit.assertTextStream(220root.resolve(name).toAbsolutePath().toString());221}222223boolean isValid() {224return true;225}226227@Override228public String toString() {229return String.format("name=%s; culture=%s", name, culture);230}231232private final String name;233private final String culture;234}235}236237238