8295239: Refactor java/util/Formatter/Basic script into a Java native test launcher

Reviewed-by: lancea, bchristi, naoto
This commit is contained in:
Justin Lu 2022-10-21 22:59:18 +00:00 committed by Brent Christian
parent f5dabf9440
commit 902162ca9f
3 changed files with 122 additions and 79 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2022, 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
@ -21,18 +21,6 @@
* questions.
*/
/* @test
* @summary Unit test for formatter
* @bug 4906370 4962433 4973103 4989961 5005818 5031150 4970931 4989491 5002937
* 5005104 5007745 5061412 5055180 5066788 5088703 6317248 6318369 6320122
* 6344623 6369500 6534606 6282094 6286592 6476425 5063507 6469160 6476168
* 8059175 8204229
*
* @run shell/timeout=240 Basic.sh
*/
import static java.lang.System.out;
public class Basic {
private static int fail = 0;
@ -45,18 +33,20 @@ public class Basic {
}
static void fail(String fs, Class ex) {
String s = "'" + fs + "': " + ex.getName() + " not thrown";
if (first == null)
setFirst(s);
System.err.println("FAILED: " + s);
String message = "'%s': %s not thrown".formatted(fs, ex.getName());
if (first == null) {
setFirst(message);
}
System.err.printf("FAILED: %s%n", message);
fail++;
}
static void fail(String fs, String exp, String got) {
String s = "'" + fs + "': Expected '" + exp + "', got '" + got + "'";
if (first == null)
setFirst(s);
System.err.println("FAILED: " + s);
String message = "'%s': Expected '%s', got '%s'".formatted(fs, exp, got);
if (first == null) {
setFirst(message);
}
System.err.printf("FAILED: %s%n", message);
fail++;
}
@ -69,10 +59,11 @@ public class Basic {
}
static void ck(String fs, String exp, String got) {
if (!exp.equals(got))
if (!exp.equals(got)) {
fail(fs, exp, got);
else
} else {
pass();
}
}
public static void main(String[] args) {
@ -94,13 +85,15 @@ public class Basic {
BasicDouble.test();
BasicDoubleObject.test();
BasicBigDecimal.test();
BasicDateTime.test();
if (fail != 0)
throw new RuntimeException((fail + pass) + " tests: "
+ fail + " failure(s), first", first);
else
out.println("all " + (fail + pass) + " tests passed");
if (fail != 0) {
var tests_message = "%d tests: %d failure(s)%n".formatted(fail + pass, fail);
var trace_message = "Traceback of the first error located";
var message = "%s %s".formatted(tests_message, trace_message);
throw new RuntimeException(message, first);
} else {
System.out.printf("All %d tests passed", pass);
}
}
}

View File

@ -1,50 +0,0 @@
#
# Copyright (c) 2004, 2019, 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.
#
#
EXTRAOPTS="--add-exports java.base/jdk.internal.math=ALL-UNNAMED"
LOCALEOPTS="-Djava.locale.providers=CLDR"
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} ${EXTRAOPTS} -cp ${TESTSRC} -d . \
${TESTSRC}/Basic.java
expectPass() {
if [ $1 -eq 0 ]
then echo "--- passed as expected"
else
echo "--- failed"
exit $1
fi
}
runTest() {
echo "Testing:" ${1}
TZ="${1}"; export TZ
echo " " $TZ
${TESTJAVA}/bin/java ${TESTVMOPTS} ${EXTRAOPTS} ${LOCALEOPTS} Basic
expectPass $?
}
runTest US/Pacific
runTest Asia/Novosibirsk

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) 2022, 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 jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import java.io.IOException;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
/* @test
* @summary Unit tests for formatter
* @library /test/lib
* @compile Basic.java
* @compile BasicBoolean.java
* @compile BasicBooleanObject.java
* @compile BasicByte.java
* @compile BasicByteObject.java
* @compile BasicChar.java
* @compile BasicCharObject.java
* @compile BasicShort.java
* @compile BasicShortObject.java
* @compile BasicInt.java
* @compile BasicIntObject.java
* @compile BasicLong.java
* @compile BasicLongObject.java
* @compile BasicBigInteger.java
* @compile BasicFloat.java
* @compile BasicFloatObject.java
* @compile BasicDouble.java
* @compile BasicDoubleObject.java
* @compile BasicBigDecimal.java
* @compile BasicDateTime.java
* @bug 4906370 4962433 4973103 4989961 5005818 5031150 4970931 4989491 5002937
* 5005104 5007745 5061412 5055180 5066788 5088703 6317248 6318369 6320122
* 6344623 6369500 6534606 6282094 6286592 6476425 5063507 6469160 6476168
* 8059175 8204229
*
* @run junit BasicTestLauncher
*/
public class BasicTestLauncher {
// Locale flag for testJVM
private static final String JAVA_OPTS = "-Djava.locale.providers=CLDR";
// Test class
private static final String TEST_CLASS = "Basic";
/**
* Executes Formatter Basic tests
* @param timeZone the time zone to run tests against
*/
@ParameterizedTest
@ValueSource(strings = { "US/Pacific", "Asia/Novosibirsk" })
void testTimeZone(String timeZone) throws IOException{
System.out.printf("$$$ Testing against %s!%n", timeZone);
OutputAnalyzer output = RunTest(timeZone);
CheckTest(output);
System.out.printf("$$$ %s passed as expected!%n", timeZone);
}
/**
* Creates and runs the testJVM process using Basic class
* @param timeZone the time zone to be set in the testJVM environment
*/
private static OutputAnalyzer RunTest(String timeZone) throws IOException{
// Build and run Basic class with correct configuration
ProcessBuilder pb = ProcessTools.createTestJvm(JAVA_OPTS, TEST_CLASS);
pb.environment().put("TZ", timeZone);
Process process = pb.start();
return new OutputAnalyzer(process);
}
/**
* Validates if the testJVM process passed all tests
* @param output is an Output Analyzer for the testJVM
* @throws RuntimeException for all testJVM failures
*/
private static void CheckTest(OutputAnalyzer output){
output.shouldHaveExitValue(0)
.reportDiagnosticSummary();
}
}