From db42a48dc5d49783545757bd34aeead851f9288e Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Fri, 14 Feb 2025 13:12:30 +0000 Subject: [PATCH] 8350011: Convert jpackage test lib tests in JUnit format Reviewed-by: almatvee --- .../jpackage/helpers-test/TEST.properties | 9 +++ .../jdk/jpackage/test/AnnotationsTest.java | 55 +++++++------ .../test/DirectoryContentVerifierTest.java | 49 +++++------- .../jdk/jpackage/test/JUnitAdapter.java | 79 +++++++++++++++++++ .../jdk/jpackage/test/JavaAppDescTest.java | 15 +--- .../jdk/jpackage/test/TKitTest.java | 51 +++--------- .../jdk/jpackage/test/TestSuite.java | 63 --------------- .../helpers/jdk/jpackage/test/Main.java | 7 +- .../jdk/jpackage/test/TestBuilder.java | 44 +++++++++-- .../jdk/jpackage/test/TestInstance.java | 12 +-- 10 files changed, 199 insertions(+), 185 deletions(-) create mode 100644 test/jdk/tools/jpackage/helpers-test/TEST.properties create mode 100644 test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JUnitAdapter.java delete mode 100644 test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TestSuite.java diff --git a/test/jdk/tools/jpackage/helpers-test/TEST.properties b/test/jdk/tools/jpackage/helpers-test/TEST.properties new file mode 100644 index 00000000000..1830ea05443 --- /dev/null +++ b/test/jdk/tools/jpackage/helpers-test/TEST.properties @@ -0,0 +1,9 @@ +JUnit.dirs = . + +lib.dirs = /test/jdk/tools/jpackage/helpers /test/jdk/tools/jpackage/helpers-test + +modules=jdk.jpackage/jdk.jpackage.internal:+open \ + jdk.jpackage/jdk.jpackage.internal.util:+open \ + jdk.jpackage/jdk.jpackage.internal.util.function:+open \ + java.base/jdk.internal.util \ + jdk.jlink/jdk.tools.jlink.internal diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java index d439452ffa0..cd7914b917b 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java @@ -23,6 +23,9 @@ package jdk.jpackage.test; import static java.lang.StackWalker.Option.RETAIN_CLASS_REFERENCE; +import static java.util.stream.Collectors.toMap; +import static jdk.jpackage.internal.util.function.ThrowingSupplier.toSupplier; + import java.lang.reflect.Method; import java.nio.file.Path; import java.time.LocalDate; @@ -32,34 +35,34 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; -import static java.util.stream.Collectors.toMap; import java.util.stream.Stream; import jdk.internal.util.OperatingSystem; import jdk.jpackage.test.Annotations.Parameter; import jdk.jpackage.test.Annotations.ParameterSupplier; import jdk.jpackage.test.Annotations.Parameters; import jdk.jpackage.test.Annotations.Test; -import static jdk.jpackage.internal.util.function.ThrowingSupplier.toSupplier; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.ValueSource; -/* - * @test - * @summary Test jpackage test library's annotation processor - * @library /test/jdk/tools/jpackage/helpers - * @build jdk.jpackage.test.* - * @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.AnnotationsTest - */ -public class AnnotationsTest { +public class AnnotationsTest extends JUnitAdapter { - public static void main(String... args) { - runTests(List.of(BasicTest.class, ParameterizedInstanceTest.class)); - for (var os : OperatingSystem.values()) { - try { - TestBuilderConfig.setOperatingSystem(os); - TKit.log("Current operating system: " + os); - runTests(List.of(IfOSTest.class)); - } finally { - TestBuilderConfig.setDefaults(); - } + @ParameterizedTest + @ValueSource(classes = {BasicTest.class, ParameterizedInstanceTest.class}) + public void test(Class clazz, @TempDir Path workDir) { + runTest(clazz, workDir); + } + + @ParameterizedTest + @EnumSource(OperatingSystem.class) + public void testIfOSTest(OperatingSystem os, @TempDir Path workDir) { + try { + TestBuilderConfig.setOperatingSystem(os); + TKit.log("Current operating system: " + os); + runTest(IfOSTest.class, workDir); + } finally { + TestBuilderConfig.setDefaults(); } } @@ -300,22 +303,18 @@ public class AnnotationsTest { }); } - private static void runTests(List> tests) { + private static void runTest(Class test, Path workDir) { ACTUAL_TEST_DESCS.get().clear(); - var expectedTestDescs = tests.stream() - .map(AnnotationsTest::getExpectedTestDescs) - .flatMap(x -> x) + var expectedTestDescs = getExpectedTestDescs(test) // Collect in the map to check for collisions for free .collect(toMap(x -> x, x -> "")) .keySet(); - var args = tests.stream().map(test -> { - return String.format("--jpt-run=%s", test.getName()); - }).toArray(String[]::new); + var args = new String[] { String.format("--jpt-run=%s", test.getName()) }; try { - Main.main(args); + Main.main(TestBuilder.build().workDirRoot(workDir), args); assertRecordedTestDescs(expectedTestDescs); } catch (Throwable t) { t.printStackTrace(System.err); diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/DirectoryContentVerifierTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/DirectoryContentVerifierTest.java index f7471988051..ea69a525df9 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/DirectoryContentVerifierTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/DirectoryContentVerifierTest.java @@ -22,7 +22,11 @@ */ package jdk.jpackage.test; -import java.io.IOException; +import static java.util.stream.Collectors.toSet; +import static jdk.jpackage.test.DirectoryContentVerifierTest.AssertType.CONTAINS; +import static jdk.jpackage.test.DirectoryContentVerifierTest.AssertType.MATCH; +import static jdk.jpackage.test.TKit.assertAssert; + import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -30,16 +34,12 @@ import java.util.Collection; import java.util.List; import java.util.Set; import java.util.function.BiConsumer; -import static java.util.stream.Collectors.toSet; import java.util.stream.Stream; -import jdk.jpackage.test.Annotations.Parameters; +import jdk.jpackage.test.Annotations.ParameterSupplier; import jdk.jpackage.test.Annotations.Test; -import static jdk.jpackage.test.DirectoryContentVerifierTest.AssertType.CONTAINS; -import static jdk.jpackage.test.DirectoryContentVerifierTest.AssertType.MATCH; import jdk.jpackage.test.TKit.DirectoryContentVerifier; -import static jdk.jpackage.test.TKit.assertAssert; -public class DirectoryContentVerifierTest { +public class DirectoryContentVerifierTest extends JUnitAdapter { enum AssertType { MATCH(DirectoryContentVerifier::match), @@ -105,7 +105,6 @@ public class DirectoryContentVerifierTest { private boolean success = true; } - @Parameters public static Collection input() { List data = new ArrayList<>(); buildArgs().applyVariantsTo(data); @@ -127,35 +126,23 @@ public class DirectoryContentVerifierTest { return data; } - public DirectoryContentVerifierTest(String[] expectedPaths, String[] actualPaths, - AssertType assertOp, Boolean success) { - this.expectedPaths = conv(expectedPaths); - this.actualPaths = conv(actualPaths); - this.assertOp = assertOp; - this.success = success; - } - @Test - public void test() { - TKit.withTempDirectory("basedir", this::test); - } + @ParameterSupplier("input") + public void test(String[] expectedPaths, String[] actualPaths, AssertType assertOp, Boolean success) { + final var expectedPathsAsSet = conv(expectedPaths); + final var actualPathsAsSet = conv(actualPaths); + TKit.withTempDirectory("basedir", basedir -> { + for (var path : actualPathsAsSet) { + Files.createFile(basedir.resolve(path)); + } - private void test(Path basedir) throws IOException { - for (var path : actualPaths) { - Files.createFile(basedir.resolve(path)); - } + var testee = TKit.assertDirectoryContent(basedir); - var testee = TKit.assertDirectoryContent(basedir); - - assertAssert(success, () -> assertOp.assertFunc.accept(testee, expectedPaths)); + assertAssert(success, () -> assertOp.assertFunc.accept(testee, expectedPathsAsSet)); + }); } private static Set conv(String... paths) { return Stream.of(paths).map(Path::of).collect(toSet()); } - - private final Set expectedPaths; - private final Set actualPaths; - private final AssertType assertOp; - private final boolean success; } diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JUnitAdapter.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JUnitAdapter.java new file mode 100644 index 00000000000..7bf1f57a254 --- /dev/null +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JUnitAdapter.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.jpackage.test; + +import static jdk.jpackage.internal.util.function.ThrowingRunnable.toRunnable; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.List; +import jdk.jpackage.internal.util.function.ThrowingRunnable; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +public class JUnitAdapter { + + JUnitAdapter() { + if (System.getProperty("test.src") == null) { + // Was called by somebody else but not by jtreg + System.setProperty("test.src", Path.of("@@openJdkDir@@/test/jdk/tools/jpackage").toString()); + } + } + + @Test + void runJPackageTests(@TempDir Path workDir) throws Throwable { + if (!getClass().equals(JUnitAdapter.class)) { + Main.main(TestBuilder.build().workDirRoot(workDir), new String [] { + "--jpt-before-run=jdk.jpackage.test.JPackageCommand.useToolProviderByDefault", + "--jpt-run=" + getClass().getName() + }); + } + } + + static List captureJPackageTestLog(ThrowingRunnable runnable) { + final var buf = new ByteArrayOutputStream(); + try (PrintStream ps = new PrintStream(buf, true, StandardCharsets.UTF_8)) { + TKit.withExtraLogStream(runnable, ps); + } + + try (final var in = new ByteArrayInputStream(buf.toByteArray()); + final var reader = new InputStreamReader(in, StandardCharsets.UTF_8); + final var bufReader = new BufferedReader(reader)) { + return bufReader.lines().map(line -> { + // Skip timestamp + return line.substring(LOG_MSG_TIMESTAMP_LENGTH); + }).toList(); + } catch (IOException ex) { + throw new UncheckedIOException(ex); + } + } + + private static final int LOG_MSG_TIMESTAMP_LENGTH = "[HH:mm:ss.SSS] ".length(); +} diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JavaAppDescTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JavaAppDescTest.java index a2cde44f009..50f1992f796 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JavaAppDescTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/JavaAppDescTest.java @@ -26,18 +26,14 @@ import java.nio.file.Path; import java.util.List; import java.util.function.UnaryOperator; import jdk.jpackage.test.Annotations.Parameter; +import jdk.jpackage.test.Annotations.ParameterSupplier; import jdk.jpackage.test.Annotations.Test; -import jdk.jpackage.test.Annotations.Parameters; -public class JavaAppDescTest { - - public JavaAppDescTest(JavaAppDesc expectedAppDesc, JavaAppDesc actualAppDesc) { - this.expectedAppDesc = expectedAppDesc; - this.actualAppDesc = actualAppDesc; - } +public class JavaAppDescTest extends JUnitAdapter { @Test - public void test() { + @ParameterSupplier("input") + public void test(JavaAppDesc expectedAppDesc, JavaAppDesc actualAppDesc) { TKit.assertEquals(expectedAppDesc.toString(), actualAppDesc.toString(), null); TKit.assertTrue(expectedAppDesc.equals(actualAppDesc), null); } @@ -53,7 +49,6 @@ public class JavaAppDescTest { appDesc).classFilePath().toString(), null); } - @Parameters public static List input() { return List.of(new Object[][] { createTestCase("", "hello.jar:Hello"), @@ -93,6 +88,4 @@ public class JavaAppDescTest { return new JavaAppDesc[] {expectedAppDesc, actualAppDesc}; } - private final JavaAppDesc expectedAppDesc; - private final JavaAppDesc actualAppDesc; } diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TKitTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TKitTest.java index 98a7d873190..4cddb1eb912 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TKitTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TKitTest.java @@ -22,28 +22,22 @@ */ package jdk.jpackage.test; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStreamReader; -import java.io.PrintStream; +import static jdk.jpackage.internal.util.function.ThrowingRunnable.toRunnable; +import static jdk.jpackage.internal.util.function.ThrowingSupplier.toSupplier; + import java.lang.reflect.Method; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.Stream; -import jdk.jpackage.test.Annotations.Parameters; -import jdk.jpackage.test.Annotations.Test; import jdk.jpackage.internal.util.function.ThrowingRunnable; -import static jdk.jpackage.internal.util.function.ThrowingRunnable.toRunnable; -import static jdk.jpackage.internal.util.function.ThrowingSupplier.toSupplier; +import jdk.jpackage.test.Annotations.ParameterSupplier; +import jdk.jpackage.test.Annotations.Test; -public class TKitTest { +public class TKitTest extends JUnitAdapter { - @Parameters public static Collection assertTestsData() { List data = new ArrayList<>(); @@ -191,12 +185,9 @@ public class TKitTest { } } - public TKitTest(MethodCallConfig methodCall) { - this.methodCall = methodCall; - } - @Test - public void test() { + @ParameterSupplier("assertTestsData") + public void test(MethodCallConfig methodCall) { runAssertWithExpectedLogOutput(() -> { methodCall.method.invoke(null, methodCall.args); }, methodCall.expectFail, methodCall.expectLog); @@ -211,23 +202,11 @@ public class TKitTest { private static void runWithExpectedLogOutput(ThrowingRunnable action, String... expectLogStrings) { - final var buf = new ByteArrayOutputStream(); - try (PrintStream ps = new PrintStream(buf, true, StandardCharsets.UTF_8)) { - TKit.withExtraLogStream(action, ps); - } finally { - toRunnable(() -> { - var output = new BufferedReader(new InputStreamReader( - new ByteArrayInputStream(buf.toByteArray()), - StandardCharsets.UTF_8)).lines().map(line -> { - // Skip timestamp - return line.substring(LOG_MSG_TIMESTAMP_LENGTH); - }).toList(); - if (output.size() == 1 && expectLogStrings.length == 1) { - TKit.assertEquals(expectLogStrings[0], output.get(0), null); - } else { - TKit.assertStringListEquals(List.of(expectLogStrings), output, null); - } - }).run(); + final var output = JUnitAdapter.captureJPackageTestLog(action); + if (output.size() == 1 && expectLogStrings.length == 1) { + TKit.assertEquals(expectLogStrings[0], output.get(0), null); + } else { + TKit.assertStringListEquals(List.of(expectLogStrings), output, null); } } @@ -237,8 +216,4 @@ public class TKitTest { } return msg; } - - private final MethodCallConfig methodCall; - - private static final int LOG_MSG_TIMESTAMP_LENGTH = "[HH:mm:ss.SSS] ".length(); } diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TestSuite.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TestSuite.java deleted file mode 100644 index f9dda851414..00000000000 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/TestSuite.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package jdk.jpackage.test; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; - -/* - * @test - * @summary Unit tests for jpackage test library - * @library /test/jdk/tools/jpackage/helpers - * @library /test/jdk/tools/jpackage/helpers-test - * @build jdk.jpackage.test.* - * @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.TestSuite - */ - -public final class TestSuite { - public static void main(String args[]) throws Throwable { - final var pkgName = TestSuite.class.getPackageName(); - final var javaSuffix = ".java"; - final var testSrcNameSuffix = "Test" + javaSuffix; - - final var unitTestDir = TKit.TEST_SRC_ROOT.resolve(Path.of("helpers-test", pkgName.split("\\."))); - - final List runTestArgs = new ArrayList<>(); - runTestArgs.addAll(List.of(args)); - - try (var javaSources = Files.list(unitTestDir)) { - runTestArgs.addAll(javaSources.filter(path -> { - return path.getFileName().toString().endsWith(testSrcNameSuffix); - }).map(path -> { - var filename = path.getFileName().toString(); - return String.join(".", pkgName, filename.substring(0, filename.length() - javaSuffix.length())); - }).map(testClassName -> { - return "--jpt-run=" + testClassName; - }).toList()); - } - - Main.main(runTestArgs.toArray(String[]::new)); - } -} diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Main.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Main.java index 5919d8361c4..439479a666e 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Main.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Main.java @@ -38,10 +38,15 @@ import static jdk.jpackage.test.TestBuilder.CMDLINE_ARG_PREFIX; public final class Main { + public static void main(String args[]) throws Throwable { + main(TestBuilder.build(), args); + } + + public static void main(TestBuilder.Builder builder, String args[]) throws Throwable { boolean listTests = false; List tests = new ArrayList<>(); - try (TestBuilder testBuilder = new TestBuilder(tests::add)) { + try (TestBuilder testBuilder = builder.testConsumer(tests::add).create()) { Deque argsAsList = new ArrayDeque<>(List.of(args)); while (!argsAsList.isEmpty()) { var arg = argsAsList.pop(); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestBuilder.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestBuilder.java index 195d1ea3936..17c0f131af3 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestBuilder.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestBuilder.java @@ -23,9 +23,13 @@ package jdk.jpackage.test; +import static jdk.jpackage.internal.util.function.ThrowingConsumer.toConsumer; +import static jdk.jpackage.test.TestMethodSupplier.MethodQuery.fromQualifiedMethodName; + import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; @@ -38,14 +42,12 @@ import java.util.function.Consumer; import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; +import jdk.jpackage.internal.util.function.ThrowingConsumer; +import jdk.jpackage.internal.util.function.ThrowingFunction; import jdk.jpackage.test.Annotations.AfterEach; import jdk.jpackage.test.Annotations.BeforeEach; import jdk.jpackage.test.Annotations.Test; -import jdk.jpackage.internal.util.function.ThrowingConsumer; -import static jdk.jpackage.internal.util.function.ThrowingConsumer.toConsumer; -import jdk.jpackage.internal.util.function.ThrowingFunction; import jdk.jpackage.test.TestMethodSupplier.InvalidAnnotationException; -import static jdk.jpackage.test.TestMethodSupplier.MethodQuery.fromQualifiedMethodName; final class TestBuilder implements AutoCloseable { @@ -54,8 +56,35 @@ final class TestBuilder implements AutoCloseable { flushTestGroup(); } - TestBuilder(Consumer testConsumer) { + static Builder build() { + return new Builder(); + } + + final static class Builder { + private Builder() { + } + + Builder testConsumer(Consumer v) { + testConsumer = v; + return this; + } + + Builder workDirRoot(Path v) { + workDirRoot = v; + return this; + } + + TestBuilder create() { + return new TestBuilder(testConsumer, workDirRoot); + } + + private Consumer testConsumer; + private Path workDirRoot = Path.of(""); + } + + private TestBuilder(Consumer testConsumer, Path workDirRoot) { this.testMethodSupplier = TestBuilderConfig.getDefault().createTestMethodSupplier(); + this.workDirRoot = Objects.requireNonNull(workDirRoot); argProcessors = Map.of( CMDLINE_ARG_PREFIX + "after-run", arg -> getJavaMethodsFromArg(arg).map( @@ -88,7 +117,7 @@ final class TestBuilder implements AutoCloseable { CMDLINE_ARG_PREFIX + "dry-run", arg -> dryRun = true ); - this.testConsumer = testConsumer; + this.testConsumer = Objects.requireNonNull(testConsumer); clear(); } @@ -188,7 +217,7 @@ final class TestBuilder implements AutoCloseable { } TestInstance test = new TestInstance(testBody, curBeforeActions, - curAfterActions, dryRun); + curAfterActions, dryRun, workDirRoot); if (includedTests == null) { trace(String.format("Create: %s", test.fullName())); } @@ -348,6 +377,7 @@ final class TestBuilder implements AutoCloseable { private final TestMethodSupplier testMethodSupplier; private final Map> argProcessors; private final Consumer testConsumer; + private final Path workDirRoot; private List testGroup; private List> beforeActions; private List> afterActions; diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestInstance.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestInstance.java index dd1e46eb09e..ca9523d5760 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestInstance.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TestInstance.java @@ -150,7 +150,7 @@ final class TestInstance implements ThrowingRunnable { private String instanceArgs; } - TestInstance(ThrowingRunnable testBody) { + TestInstance(ThrowingRunnable testBody, Path workDirRoot) { assertCount = 0; this.testConstructor = (unused) -> null; this.testBody = (unused) -> testBody.run(); @@ -158,11 +158,11 @@ final class TestInstance implements ThrowingRunnable { this.afterActions = Collections.emptyList(); this.testDesc = TestDesc.createBuilder().get(); this.dryRun = false; - this.workDir = createWorkDirName(testDesc); + this.workDir = workDirRoot.resolve(createWorkDirPath(testDesc)); } TestInstance(MethodCall testBody, List> beforeActions, - List> afterActions, boolean dryRun) { + List> afterActions, boolean dryRun, Path workDirRoot) { assertCount = 0; this.testConstructor = v -> ((MethodCall)v).newInstance(); this.testBody = testBody; @@ -170,7 +170,7 @@ final class TestInstance implements ThrowingRunnable { this.afterActions = afterActions; this.testDesc = testBody.createDescription(); this.dryRun = dryRun; - this.workDir = createWorkDirName(testDesc); + this.workDir = workDirRoot.resolve(createWorkDirPath(testDesc)); } void notifyAssert() { @@ -276,8 +276,8 @@ final class TestInstance implements ThrowingRunnable { return false; } - private static Path createWorkDirName(TestDesc testDesc) { - Path result = Path.of("."); + private static Path createWorkDirPath(TestDesc testDesc) { + Path result = Path.of(""); if (!isCalledByJavatest()) { result = result.resolve(testDesc.clazz.getSimpleName()); }