From 9c74d545147c2eeec187df552037a12b6b476a61 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Tue, 3 Jun 2025 23:28:00 +0000 Subject: [PATCH] 8358158: test/jdk/java/io/Console/CharsetTest.java failing with NoClassDefFoundError: jtreg/SkippedException Reviewed-by: joehw, jlu, iris --- test/jdk/java/io/Console/CharsetTest.java | 73 ------------------ .../java/io/Console/ConsolePromptTest.java | 5 +- test/jdk/java/io/Console/RestoreEchoTest.java | 5 +- .../java/io/Console/StdinEncodingTest.java | 4 +- .../java/io/Console/StdoutEncodingTest.java | 75 +++++++++++++++++++ .../{script.exp => stdoutEncoding.exp} | 6 +- 6 files changed, 83 insertions(+), 85 deletions(-) delete mode 100644 test/jdk/java/io/Console/CharsetTest.java create mode 100644 test/jdk/java/io/Console/StdoutEncodingTest.java rename test/jdk/java/io/Console/{script.exp => stdoutEncoding.exp} (88%) diff --git a/test/jdk/java/io/Console/CharsetTest.java b/test/jdk/java/io/Console/CharsetTest.java deleted file mode 100644 index c8c756def81..00000000000 --- a/test/jdk/java/io/Console/CharsetTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2021, 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. - */ - -import java.io.Console; -import java.nio.file.Files; -import java.nio.file.Paths; - -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import static jdk.test.lib.Utils.*; - -/** - * @test - * @bug 8264208 8265918 8356985 - * @summary Tests Console.charset() method. "expect" command in Windows/Cygwin - * does not work as expected. Ignoring tests on Windows. - * @requires (os.family == "linux") | (os.family == "mac") - * @library /test/lib - * @run main CharsetTest en_US.ISO8859-1 ISO-8859-1 - * @run main CharsetTest en_US.US-ASCII US-ASCII - * @run main CharsetTest en_US.UTF-8 UTF-8 - */ -public class CharsetTest { - public static void main(String... args) throws Throwable { - if (args.length == 0) { - // no arg means child java process being tested. - Console con = System.console(); - System.out.println(con.charset()); - return; - } else { - // check "expect" command availability - var expect = Paths.get("/usr/bin/expect"); - if (!Files.exists(expect) || !Files.isExecutable(expect)) { - throw new jtreg.SkippedException("'expect' command not found. Test ignored."); - } - - // invoking "expect" command - OutputAnalyzer output = ProcessTools.executeProcess( - "expect", - "-n", - TEST_SRC + "/script.exp", - TEST_JDK + "/bin/java", - args[0], - args[1], - TEST_CLASSES); - output.reportDiagnosticSummary(); - var eval = output.getExitValue(); - if (eval != 0) { - throw new RuntimeException("Test failed. Exit value from 'expect' command: " + eval); - } - } - } -} diff --git a/test/jdk/java/io/Console/ConsolePromptTest.java b/test/jdk/java/io/Console/ConsolePromptTest.java index 1e4f73b65d2..0c59aaccac4 100644 --- a/test/jdk/java/io/Console/ConsolePromptTest.java +++ b/test/jdk/java/io/Console/ConsolePromptTest.java @@ -104,10 +104,7 @@ public class ConsolePromptTest { OutputAnalyzer output = ProcessTools.executeProcess(command.toArray(String[]::new)); output.reportDiagnosticSummary(); - var eval = output.getExitValue(); - if (eval != 0) { - throw new RuntimeException("Test failed. Exit value from 'expect' command: " + eval); - } + output.shouldHaveExitValue(0); } public static class ConsoleTest { diff --git a/test/jdk/java/io/Console/RestoreEchoTest.java b/test/jdk/java/io/Console/RestoreEchoTest.java index 78d36faa537..6ccc434e7ad 100644 --- a/test/jdk/java/io/Console/RestoreEchoTest.java +++ b/test/jdk/java/io/Console/RestoreEchoTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 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 @@ -32,7 +32,6 @@ import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledOnOs; import org.junit.jupiter.api.condition.OS; -import static org.junit.jupiter.api.Assertions.*; /** @@ -72,7 +71,7 @@ public class RestoreEchoTest { "-classpath", testClasses, "RestoreEchoTest"); output.reportDiagnosticSummary(); - assertEquals(0, output.getExitValue()); + output.shouldHaveExitValue(0); } public static void main(String... args) throws Throwable { diff --git a/test/jdk/java/io/Console/StdinEncodingTest.java b/test/jdk/java/io/Console/StdinEncodingTest.java index 1f2ea225f96..55811ac912a 100644 --- a/test/jdk/java/io/Console/StdinEncodingTest.java +++ b/test/jdk/java/io/Console/StdinEncodingTest.java @@ -31,7 +31,6 @@ import static jdk.test.lib.Utils.*; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; /** * @test @@ -64,8 +63,7 @@ public class StdinEncodingTest { "-Dstdin.encoding=Uppercasing", // <- gist of this test "StdinEncodingTest"); output.reportDiagnosticSummary(); - var eval = output.getExitValue(); - assertEquals(0, eval, "Test failed. Exit value from 'expect' command: " + eval); + output.shouldHaveExitValue(0); } public static void main(String... args) throws Throwable { diff --git a/test/jdk/java/io/Console/StdoutEncodingTest.java b/test/jdk/java/io/Console/StdoutEncodingTest.java new file mode 100644 index 00000000000..38deddae8b6 --- /dev/null +++ b/test/jdk/java/io/Console/StdoutEncodingTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021, 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. + */ + +import java.nio.file.Files; +import java.nio.file.Paths; + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import static jdk.test.lib.Utils.*; + +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +/** + * @test + * @bug 8264208 8265918 8356985 8358158 + * @summary Tests if "stdout.encoding" property is reflected in + * Console.charset() method. "expect" command in Windows/Cygwin + * does not work as expected. Ignoring tests on Windows. + * @requires (os.family == "linux") | (os.family == "mac") + * @library /test/lib + * @run junit StdoutEncodingTest + */ +public class StdoutEncodingTest { + + @ParameterizedTest + @CsvSource({ + "en_US.ISO8859-1, ISO-8859-1", + "en_US.US-ASCII, US-ASCII", + "en_US.UTF-8, UTF-8" + }) + void testCharset(String locale, String expectedCharset) throws Exception { + // check "expect" command availability + var expect = Paths.get("/usr/bin/expect"); + Assumptions.assumeTrue(Files.exists(expect) && Files.isExecutable(expect), + "'" + expect + "' not found. Test ignored."); + + // invoking "expect" command + OutputAnalyzer output = ProcessTools.executeProcess( + "expect", + "-n", + TEST_SRC + "/stdoutEncoding.exp", + TEST_JDK + "/bin/java", + locale, + expectedCharset, + TEST_CLASSES); + output.reportDiagnosticSummary(); + output.shouldHaveExitValue(0); + } + + public static void main(String... args) { + System.out.println(System.console().charset()); + } +} diff --git a/test/jdk/java/io/Console/script.exp b/test/jdk/java/io/Console/stdoutEncoding.exp similarity index 88% rename from test/jdk/java/io/Console/script.exp rename to test/jdk/java/io/Console/stdoutEncoding.exp index c416990cbe9..4e23fd5fcd8 100644 --- a/test/jdk/java/io/Console/script.exp +++ b/test/jdk/java/io/Console/stdoutEncoding.exp @@ -21,12 +21,14 @@ # questions. # +# `expect` script for StdoutEncodingTest + set java [lrange $argv 0 0] set locale [lrange $argv 1 1] set expected [lrange $argv 2 2] -set args [lrange $argv 3 end] +set classpath [lrange $argv 3 end] regexp {([a-zA-Z_]*).([a-zA-Z0-9\-]*)} $locale dummy lang_region encoding -eval spawn $java -Dstdout.encoding=$encoding -classpath $args CharsetTest +eval spawn $java -Dstdout.encoding=$encoding -classpath $classpath StdoutEncodingTest expect $expected expect eof