7127906: (launcher) convert the launcher regression tests to java
authorksrini
Sat, 28 Jan 2012 10:46:46 -0800
changeset 11687 f13cadbb0bb5
parent 11686 398118274810
child 11688 092073c222f1
7127906: (launcher) convert the launcher regression tests to java Reviewed-by: darcy, naoto
jdk/test/tools/launcher/Arrrghs.java
jdk/test/tools/launcher/ChangeDataModel.java
jdk/test/tools/launcher/ChangeDataModel.sh
jdk/test/tools/launcher/CreatePlatformFile.java
jdk/test/tools/launcher/DefaultLocaleTestRun.java
jdk/test/tools/launcher/ExecutionEnvironment.java
jdk/test/tools/launcher/I18NJarTest.java
jdk/test/tools/launcher/I18NTest.java
jdk/test/tools/launcher/MiscTests.java
jdk/test/tools/launcher/Settings.java
jdk/test/tools/launcher/SomeException.java
jdk/test/tools/launcher/Test7029048.java
jdk/test/tools/launcher/TestHelper.java
jdk/test/tools/launcher/UnicodeCleanup.java
jdk/test/tools/launcher/UnicodeTest.java
jdk/test/tools/launcher/UnicodeTest.sh
jdk/test/tools/launcher/UnresolvedExceptions.java
jdk/test/tools/launcher/deleteI18n.sh
jdk/test/tools/launcher/i18nTest.sh
jdk/test/tools/launcher/unresolvedExceptions.sh
--- a/jdk/test/tools/launcher/Arrrghs.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/Arrrghs.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2012, 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
@@ -26,7 +26,7 @@
  * @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938
  *      6894719 6968053 7067922
  * @summary Argument parsing validation.
- * @compile -XDignore.symbol.file Arrrghs.java TestHelper.java
+ * @compile -XDignore.symbol.file Arrrghs.java
  * @run main Arrrghs
  */
 
@@ -38,7 +38,7 @@
 import java.io.InputStreamReader;
 import java.util.Map;
 
-public class Arrrghs {
+public class Arrrghs extends TestHelper {
     private Arrrghs(){}
     /**
      * This class provides various tests for arguments processing.
@@ -62,7 +62,7 @@
      * SIGH, On Windows all strings are quoted, we need to unwrap it
      */
     private static String removeExtraQuotes(String in) {
-        if (TestHelper.isWindows) {
+        if (isWindows) {
             // Trim the string and remove the enclosed quotes if any.
             in = in.trim();
             if (in.startsWith("\"") && in.endsWith("\"")) {
@@ -82,7 +82,7 @@
 
         String in = rd.readLine();
         while (in != null) {
-            if (TestHelper.debug) System.out.println(in);
+            if (debug) System.out.println(in);
             if (in.startsWith(Cookie)) {
                 String detectedArgument = removeExtraQuotes(in.substring(Cookie.length()));
                 if (expectedArguments.equals(detectedArgument)) {
@@ -94,7 +94,7 @@
                             detectedArgument + "'");
                 }
                 // Return the value asap if not in debug mode.
-                if (!TestHelper.debug) {
+                if (!debug) {
                     rd.close();
                     istream.close();
                     return retval;
@@ -125,7 +125,7 @@
      * Quoting could cause dissimilar testArguments and expected arguments.
      */
     static int doTest(String testArguments, String expectedPattern) {
-        ProcessBuilder pb = new ProcessBuilder(TestHelper.javaCmd,
+        ProcessBuilder pb = new ProcessBuilder(javaCmd,
                 VersionStr, testArguments);
 
         Map<String, String> env = pb.environment();
@@ -146,8 +146,7 @@
          * These tests require that a JVM (any JVM) be installed in the system registry.
          * If none is installed, skip this test.
          */
-        TestHelper.TestResult tr =
-                TestHelper.doExec(TestHelper.javaCmd, VersionStr, "-version");
+        TestResult tr = doExec(javaCmd, VersionStr, "-version");
         if (!tr.isOK()) {
             System.err.println("Warning:Argument Passing Tests were skipped, " +
                     "no java found in system registry.");
@@ -155,38 +154,38 @@
         }
 
         // Basic test
-        TestHelper.testExitValue += doTest("-a -b -c -d");
+        testExitValue += doTest("-a -b -c -d");
 
         // Basic test with many spaces
-        TestHelper.testExitValue += doTest("-a    -b      -c       -d");
+        testExitValue += doTest("-a    -b      -c       -d");
 
         // Quoted whitespace does matter ?
-        TestHelper.testExitValue += doTest("-a \"\"-b      -c\"\" -d");
+        testExitValue += doTest("-a \"\"-b      -c\"\" -d");
 
 
         // Escaped quotes outside of quotes as literals
-        TestHelper.testExitValue += doTest("-a \\\"-b -c\\\" -d");
+        testExitValue += doTest("-a \\\"-b -c\\\" -d");
 
         // Check for escaped quotes inside of quotes as literal
-        TestHelper.testExitValue += doTest("-a \"-b \\\"stuff\\\"\" -c -d");
+        testExitValue += doTest("-a \"-b \\\"stuff\\\"\" -c -d");
 
         // A quote preceeded by an odd number of slashes is a literal quote
-        TestHelper.testExitValue += doTest("-a -b\\\\\\\" -c -d");
+        testExitValue += doTest("-a -b\\\\\\\" -c -d");
 
         // A quote preceeded by an even number of slashes is a literal quote
         // see 6214916.
-        TestHelper.testExitValue += doTest("-a -b\\\\\\\\\" -c -d");
+        testExitValue += doTest("-a -b\\\\\\\\\" -c -d");
 
         // Make sure that whitespace doesn't interfere with the removal of the
         // appropriate tokens. (space-tab-space preceeds -jre-restict-search).
-        TestHelper.testExitValue += doTest("-a -b  \t -jre-restrict-search -c -d","-a -b -c -d");
+        testExitValue += doTest("-a -b  \t -jre-restrict-search -c -d","-a -b -c -d");
 
         // Make sure that the mJRE tokens being stripped, aren't stripped if
         // they happen to appear as arguments to the main class.
-        TestHelper.testExitValue += doTest("foo -version:1.1+");
+        testExitValue += doTest("foo -version:1.1+");
 
         System.out.println("Completed arguments quoting tests with " +
-                TestHelper.testExitValue + " errors");
+                testExitValue + " errors");
     }
 
     /*
@@ -194,156 +193,167 @@
      */
     static void runBasicErrorMessageTests() {
         // Tests for 5030233
-        TestHelper.TestResult tr = TestHelper.doExec(TestHelper.javaCmd, "-cp");
+        TestResult tr = doExec(javaCmd, "-cp");
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-classpath");
+        tr = doExec(javaCmd, "-classpath");
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar");
+        tr = doExec(javaCmd, "-jar");
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
-        tr = TestHelper.doExec(TestHelper.javacCmd, "-cp");
+        tr = doExec(javacCmd, "-cp");
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
         // Test for 6356475 "REGRESSION:"java -X" from cmdline fails"
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-X");
+        tr = doExec(javaCmd, "-X");
         tr.checkPositive();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-help");
+        tr = doExec(javaCmd, "-help");
         tr.checkPositive();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
         // 6753938, test for non-negative exit value for an incorrectly formed
         // command line,  '% java'
-        tr = TestHelper.doExec(TestHelper.javaCmd);
+        tr = doExec(javaCmd);
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
 
         // 6753938, test for non-negative exit value for an incorrectly formed
         // command line,  '% java -Xcomp'
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-Xcomp");
+        tr = doExec(javaCmd, "-Xcomp");
         tr.checkNegative();
         tr.isNotZeroOutput();
         System.out.println(tr);
     }
 
     /*
-     * A set of tests which tests various dispositions of the main method.
+     * Tests various dispositions of the main method, these tests are limited
+     * to English locales as they check for error messages that are localized.
      */
     static void runMainMethodTests() throws FileNotFoundException {
-        TestHelper.TestResult tr = null;
+        if (!isEnglishLocale()) {
+            return;
+        }
+
+        TestResult tr = null;
 
         // a missing class
-        TestHelper.createJar("MIA", new File("some.jar"), new File("Foo"),
+        createJar("MIA", new File("some.jar"), new File("Foo"),
                 (String[])null);
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("Error: Could not find or load main class MIA");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "MIA");
+        tr = doExec(javaCmd, "-cp", "some.jar", "MIA");
         tr.contains("Error: Could not find or load main class MIA");
         System.out.println(tr);
 
         // incorrect method access
-        TestHelper.createJar(new File("some.jar"), new File("Foo"),
+        createJar(new File("some.jar"), new File("Foo"),
                 "private static void main(String[] args){}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("Error: Main method not found in class Foo");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "Foo");
+        tr = doExec(javaCmd, "-cp", "some.jar", "Foo");
         tr.contains("Error: Main method not found in class Foo");
         System.out.println(tr);
 
         // incorrect return type
-        TestHelper.createJar(new File("some.jar"), new File("Foo"),
+        createJar(new File("some.jar"), new File("Foo"),
                 "public static int main(String[] args){return 1;}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("Error: Main method must return a value of type void in class Foo");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "Foo");
+        tr = doExec(javaCmd, "-cp", "some.jar", "Foo");
         tr.contains("Error: Main method must return a value of type void in class Foo");
         System.out.println(tr);
 
         // incorrect parameter type
-        TestHelper.createJar(new File("some.jar"), new File("Foo"),
+        createJar(new File("some.jar"), new File("Foo"),
                 "public static void main(Object[] args){}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("Error: Main method not found in class Foo");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "Foo");
+        tr = doExec(javaCmd, "-cp", "some.jar", "Foo");
         tr.contains("Error: Main method not found in class Foo");
         System.out.println(tr);
 
         // incorrect method type - non-static
-         TestHelper.createJar(new File("some.jar"), new File("Foo"),
+         createJar(new File("some.jar"), new File("Foo"),
                 "public void main(String[] args){}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("Error: Main method is not static in class Foo");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "Foo");
+        tr = doExec(javaCmd, "-cp", "some.jar", "Foo");
         tr.contains("Error: Main method is not static in class Foo");
         System.out.println(tr);
 
         // amongst a potpourri of kindred main methods, is the right one chosen ?
-        TestHelper.createJar(new File("some.jar"), new File("Foo"),
+        createJar(new File("some.jar"), new File("Foo"),
             "void main(Object[] args){}",
             "int  main(Float[] args){return 1;}",
             "private void main() {}",
             "private static void main(int x) {}",
             "public int main(int argc, String[] argv) {return 1;}",
             "public static void main(String[] args) {System.out.println(\"THE_CHOSEN_ONE\");}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.contains("THE_CHOSEN_ONE");
         System.out.println(tr);
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp", "some.jar", "Foo");
+        tr = doExec(javaCmd, "-cp", "some.jar", "Foo");
         tr.contains("THE_CHOSEN_ONE");
         System.out.println(tr);
 
         // test for extraneous whitespace in the Main-Class attribute
-        TestHelper.createJar(" Foo ", new File("some.jar"), new File("Foo"),
+        createJar(" Foo ", new File("some.jar"), new File("Foo"),
                 "public static void main(String... args){}");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "some.jar");
+        tr = doExec(javaCmd, "-jar", "some.jar");
         tr.checkPositive();
         System.out.println(tr);
     }
-    // tests 6968053, ie. we turn on the -Xdiag (for now) flag and check if
-    // the suppressed stack traces are exposed.
+    /*
+     * tests 6968053, ie. we turn on the -Xdiag (for now) flag and check if
+     * the suppressed stack traces are exposed, ignore these tests for localized
+     * locales, limiting to English only.
+     */
     static void runDiagOptionTests() throws FileNotFoundException {
-        TestHelper.TestResult tr = null;
+        if (!isEnglishLocale()) { // only english version
+            return;
+        }
+        TestResult tr = null;
         // a missing class
-        TestHelper.createJar("MIA", new File("some.jar"), new File("Foo"),
+        createJar("MIA", new File("some.jar"), new File("Foo"),
                 (String[])null);
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-Xdiag", "-jar", "some.jar");
+        tr = doExec(javaCmd, "-Xdiag", "-jar", "some.jar");
         tr.contains("Error: Could not find or load main class MIA");
         tr.contains("java.lang.ClassNotFoundException: MIA");
         System.out.println(tr);
 
         // use classpath to check
-        tr = TestHelper.doExec(TestHelper.javaCmd,  "-Xdiag", "-cp", "some.jar", "MIA");
+        tr = doExec(javaCmd,  "-Xdiag", "-cp", "some.jar", "MIA");
         tr.contains("Error: Could not find or load main class MIA");
         tr.contains("java.lang.ClassNotFoundException: MIA");
         System.out.println(tr);
 
         // a missing class on the classpath
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-Xdiag", "NonExistentClass");
+        tr = doExec(javaCmd, "-Xdiag", "NonExistentClass");
         tr.contains("Error: Could not find or load main class NonExistentClass");
         tr.contains("java.lang.ClassNotFoundException: NonExistentClass");
         System.out.println(tr);
@@ -351,23 +361,29 @@
 
     static void test6894719() {
         // test both arguments to ensure they exist
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd,
+        TestResult tr = null;
+        tr = doExec(javaCmd,
                 "-no-jre-restrict-search", "-version");
         tr.checkPositive();
         System.out.println(tr);
 
-        tr = TestHelper.doExec(TestHelper.javaCmd,
+        tr = doExec(javaCmd,
                 "-jre-restrict-search", "-version");
         tr.checkPositive();
         System.out.println(tr);
     }
 
+    /*
+     * a missing manifest entry 7067922, we ignore this test for locales
+     * which are localized, thus the testing is limited to English locales.
+     */
     static void test7067922() {
-        // a missing manifest entry 7067922
-        TestHelper.TestResult tr = null;
-        TestHelper.createJar("cvf", "missingmainentry.jar", ".");
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-jar", "missingmainentry.jar");
+        if (!isEnglishLocale()) {
+            return;
+        }
+        TestResult tr = null;
+        createJar("cvf", "missingmainentry.jar", ".");
+        tr = doExec(javaCmd, "-jar", "missingmainentry.jar");
         tr.contains("no main manifest attribute");
         System.out.println(tr);
     }
@@ -377,7 +393,7 @@
      * @throws java.io.FileNotFoundException
      */
     public static void main(String[] args) throws FileNotFoundException {
-        if (TestHelper.debug) {
+        if (debug) {
             System.out.println("Starting Arrrghs tests");
         }
         quoteParsingTests();
@@ -386,8 +402,8 @@
         test6894719();
         test7067922();
         runDiagOptionTests();
-        if (TestHelper.testExitValue > 0) {
-            System.out.println("Total of " + TestHelper.testExitValue + " failed");
+        if (testExitValue > 0) {
+            System.out.println("Total of " + testExitValue + " failed");
             System.exit(1);
         } else {
             System.out.println("All tests pass");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/ChangeDataModel.java	Sat Jan 28 10:46:46 2012 -0800
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2012, 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.
+ */
+
+/**
+ * @test
+ * @bug 4894330 4810347 6277269
+ * @compile -XDignore.symbol.file ChangeDataModel.java
+ * @run main ChangeDataModel
+ * @summary Verify -d32 and -d64 options are accepted(rejected) on all platforms
+ * @author Joseph D. Darcy, ksrini
+ */
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ChangeDataModel extends TestHelper {
+    private static final File TestJar      = new File("test" + JAR_FILE_EXT);
+    private static final String OPT_PREFIX = "ARCH_OPT:";
+
+    public static void main(String... args) throws Exception {
+        String[] code = {
+            "   public static void main(String argv[]) {",
+            "      System.out.println(\"" + OPT_PREFIX + "-d\" + System.getProperty(\"sun.arch.data.model\", \"none\"));",
+            "   }",
+        };
+        createJar(TestJar, code);
+
+        // verify if data model flag for default data model is accepted
+        if (is32Bit) {
+            checkAcceptance(javaCmd, "-d32");
+        } else if (is64Bit) {
+            checkAcceptance(javaCmd, "-d64");
+        } else {
+            throw new Error("unsupported data model");
+        }
+
+        // test dual mode systems
+        if (isDualMode) {
+            // albeit dual mode we may not have the 64 bit components present
+            if (dualModePresent()) {
+                // 32-bit -> 64-bit
+                checkExecCount(javaCmd, "-d64");
+                // 64-bit -> 32-bit
+                checkExecCount(java64Cmd, "-d32");
+
+                checkAcceptance(javaCmd, "-d64");
+                checkAcceptance(java64Cmd, "-d32");
+            } else {
+                System.out.println("Warning: no 64-bit components found;" +
+                    " only one data model tested.");
+            }
+        } else {
+            // Negative tests: ensure that non-dual mode systems reject the
+            // complementary (other) data model
+            if (is32Bit) {
+                checkRejection(javaCmd, "-d64");
+            } else if (is64Bit) {
+                checkRejection(javaCmd, "-d32");
+            } else {
+                throw new Error("unsupported data model");
+            }
+        }
+    }
+
+    static void checkExecCount(String cmd, String dmodel) {
+        Map<String, String> envMap = new HashMap<>();
+        envMap.put(JLDEBUG_KEY, "true");
+        TestResult tr = doExec(envMap, javaCmd, "-d64",
+                "-jar", TestJar.getAbsolutePath());
+        int count = 0;
+        for (String x : tr.testOutput) {
+            if (x.contains(EXPECTED_MARKER)) {
+                count++;
+                if (count > 1) {
+                    System.out.println(tr);
+                    throw new RuntimeException("Maximum exec count of 1 execeeded");
+                }
+            }
+        }
+    }
+
+    static void checkAcceptance(String cmd, String dmodel) {
+        TestResult tr = doExec(cmd, dmodel, "-jar", TestJar.getAbsolutePath());
+        if (!tr.contains(OPT_PREFIX + dmodel)) {
+            System.out.println(tr);
+            String message = "Data model flag " + dmodel +
+                    " not accepted or had improper effect.";
+            throw new RuntimeException(message);
+        }
+    }
+
+    static void checkRejection(String cmd, String dmodel) {
+        TestResult tr = doExec(cmd, dmodel, "-jar", TestJar.getAbsolutePath());
+        if (tr.contains(OPT_PREFIX + dmodel)) {
+            System.out.println(tr);
+            String message = "Data model flag " + dmodel + " was accepted.";
+            throw new RuntimeException(message);
+        }
+    }
+}
--- a/jdk/test/tools/launcher/ChangeDataModel.sh	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,260 +0,0 @@
-#
-# Copyright (c) 2003, 2010, 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.
-#
-
-# @test
-# @bug 4894330 4810347 6277269
-# @run shell ChangeDataModel.sh
-# @summary Verify -d32 and -d64 options are accepted(rejected) on all platforms 
-# @author Joseph D. Darcy
-
-OS=`uname -s`;
-
-# To remove CR from output, needed for java apps in CYGWIN, harmless otherwise
-SED_CR="sed -e s@\\r@@g"
-
-case "$OS" in
-	Windows* | CYGWIN* )
-	  PATHSEP=";"
-	  ;;
-
-	* )
-	  PATHSEP=":"
-	;;
-esac
-
-# Verify directory context variables are set
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-# Construct paths to default Java executables
-JAVA="$TESTJAVA/bin/java -classpath $TESTCLASSES${PATHSEP}."
-JAVAC="$TESTJAVA/bin/javac"
-
-
-# Create our little Java test on the fly
-( printf "public class GetDataModel {"
-  printf "   public static void main(String argv[]) {"
-  printf "      System.out.println(System.getProperty(\"sun.arch.data.model\", \"none\"));"
-  printf "   }"
-  printf "}"
-) > GetDataModel.java
-
-$JAVAC GetDataModel.java
-
-
-# All preconditions are met; run the tests.
-
-
-# Verify data model flag for default data model is accepted
-
-DM=`$JAVA GetDataModel | ${SED_CR}`
-case "$DM" in
-        32 )
-		DM2=`${JAVA} -d32 GetDataModel | ${SED_CR}`	
-		if [ "${DM2}" != "32" ]
-		then
-	  	echo "Data model flag -d32 not accepted or had improper effect."
-	  	exit 1
-		fi
-        ;;
-
-        64 )
-		DM2=`${JAVA} -d64 GetDataModel | ${SED_CR}`	
-		if [ "${DM2}" != "64" ]
-		then
-	  	echo "Data model flag -d64 not accepted or had improper effect."
-	  	exit 1
-		fi
-	;;
-
-	* )
-		echo "Unrecognized data model: $DM"
-        	exit 1
-	;;
-esac
-
-# Determine if platform might be dual-mode capable.
-
-case "$OS" in
-	SunOS )
-		# ARCH should be sparc or i386
-		ARCH=`uname -p`
-		case "${ARCH}" in 
-			sparc )
-			DUALMODE=true
-			PATH64=sparcv9
-			;;
-
-			i386 )
-			DUALMODE=true
-			PATH64=amd64
-			;;
-
-			* )
-			DUALMODE=false
-			;;
-		esac
-	;;
-
-
-	Linux )
-		# ARCH should be ia64, x86_64, or i*86
-		ARCH=`uname -m`
-		case "${ARCH}" in 
-			ia64 )
-			DUALMODE=false
-			;;
-
-			x86_64 )
-			DUALMODE=true
-			PATH64=amd64
-			;;
-
-			* )
-			DUALMODE=false;
-			;;
-		esac
-	;;
-
-	Windows* | CYGWIN* )
-		ARCH=`uname -m`
-		case "${ARCH}" in 
-			* )
-			DUALMODE=false;
-			;;
-		esac
-	;;
-
-	* )
-		echo "Warning: unknown environment."
-		DUALMODE=false
-	;;
-esac
-
-if [ "${DUALMODE}" = "true" ]
-then
-	# Construct path to 64-bit Java executable, might not exist
-	JAVA64FILE="${TESTJAVA}/bin/${PATH64}/java"
-	JAVA64="${JAVA64FILE} -classpath ${TESTCLASSES}${PATHSEP}."
-
-	if [ -f ${JAVA64FILE} ]; then
-		# Verify that, at least on Solaris, only one exec is
-		# used to change data models
-		if [ "${OS}" = "SunOS" ]
-		then
-			rm -f truss.out
-			truss -texec ${JAVA} -d64 GetDataModel > /dev/null 2> truss.out
-			execCount=`grep -c execve truss.out`
-			if [ "${execCount}" -gt 2 ]
-			then
-				echo "Maximum exec count of 2 exceeded: got $execCount."
-				exit 1
-			fi
-
-			rm -f truss.out
-			truss -texec ${JAVA64} -d32 GetDataModel > /dev/null 2> truss.out
-			execCount=`grep -c execve truss.out`
-			if [ "${execCount}" -gt 2 ]
-			then
-				echo "Maximum exec count of 2 exceeded: got $execCount."
-				exit 1
-			fi
-		fi
-
-		DM2=`${JAVA} -d64 GetDataModel`
-		if [ "${DM2}" != "64" ]
-		then
-		  echo "Data model flag -d64 not accepted or had improper effect."
-		  exit 1
-		fi
-
-		DM2=`${JAVA64} GetDataModel`
-		if [ "${DM2}" != "64" ]
-		then
-		  echo "Improper data model returned."
-		  exit 1
-		fi
-
-		DM2=`${JAVA64} -d64 GetDataModel`
-		if [ "${DM2}" != "64" ]
-		then
-		  echo "Data model flag -d64 not accepted or had improper effect."
-		  exit 1
-		fi
-
-		DM2=`${JAVA64} -d32 GetDataModel`
-		if [ "${DM2}" != "32" ]
-		then
-		  echo "Data model flag -d32 not accepted or had improper effect."
-		  exit 1
-		fi
-
-	else
-	  echo "Warning: no 64-bit components found; only one data model tested."
-	fi
-else
-# Negative tests for non-dual mode platforms to ensure the other data model is 
-# rejected
-	DM=`$JAVA GetDataModel | ${SED_CR}`
-	case "$DM" in
-	   32 )
-		DM2=`${JAVA} -d64 GetDataModel | ${SED_CR}`	
-		if [ "x${DM2}" != "x" ]
-		then
-		   echo "Data model flag -d64 was accepted."
-		   exit 1
-		fi
-           ;;
-
-	   64 )
-		DM2=`${JAVA} -d32 GetDataModel | ${SED_CR}`	
-		if [ "x${DM2}" != "x" ]
-		  then
-		    echo "Data model flag -d32 was accepted."
-	  	    exit 1
-		fi
-	   ;;
-
-	   * )
-		echo "Unrecognized data model: $DM"
-        	exit 1
-	   ;;
-        esac
-fi
-
-exit 0;
--- a/jdk/test/tools/launcher/CreatePlatformFile.java	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- *
- *
- * This class is used by test i18nTest.sh
- *
- * Class to create various i18n Hello World Java source files using
- * the platform's default encoding of a non-ASCII name; create plain
- * ASCII Hello World if the platform's default is charset is US-ASCII.
- */
-
-import java.io.PrintWriter;
-import java.io.FileOutputStream;
-
-public class CreatePlatformFile {
-    public static void main(String argv[])  {
-        String fileSep = System.getProperty("file.separator");
-        String defaultEncoding = System.getProperty("file.encoding");
-
-        if(defaultEncoding == null) {
-            System.err.println("Default encoding not found; Error.");
-            return;
-        }
-
-        if (defaultEncoding.equals("Cp1252") ) {
-            // "HelloWorld" with an accented e
-            String fileName = "i18nH\u00e9lloWorld.java";
-            try {
-                PrintWriter pw = new PrintWriter(new FileOutputStream("."+fileSep+fileName));
-                pw.println("public class i18nH\u00e9lloWorld {");
-                pw.println("    public static void main(String [] argv) {");
-                pw.println("        System.out.println(\"Hello Cp1252 World\");");
-                pw.println("    }");
-                pw.println("}");
-                pw.flush();
-                pw.close();
-            }
-            catch (java.io.FileNotFoundException e) {
-                System.err.println("Problem opening file; test fails");
-            }
-
-        } else {
-            // ASCII "HelloWorld"
-            String fileName = "i18nHelloWorld.java";
-            try {
-                PrintWriter pw = new PrintWriter(new FileOutputStream("."+fileSep+fileName));
-                pw.println("public class i18nHelloWorld {");
-                pw.println("    public static void main(String [] argv) {");
-                pw.println("        System.out.println(\"Warning: US-ASCII assumed; filenames with\");");
-                pw.println("        System.out.println(\"non-ASCII characters will not be tested\");");
-                pw.println("    }");
-                pw.println("}");
-                pw.flush();
-                pw.close();
-            }
-            catch (java.io.FileNotFoundException e) {
-                System.err.println("Problem opening file; test fails");
-            }
-        }
-    }
-}
--- a/jdk/test/tools/launcher/DefaultLocaleTestRun.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/DefaultLocaleTestRun.java	Sat Jan 28 10:46:46 2012 -0800
@@ -31,23 +31,23 @@
           Following 2 testing scenarios are recommended
           (1)systemLocale=Japanese, userLocale=English
           (2)systemLocale=English, userLocale=Japanese
- * @compile -XDignore.symbol.file DefaultLocaleTest.java TestHelper.java
+ * @compile -XDignore.symbol.file DefaultLocaleTest.java
  * @run main DefaultLocaleTestRun
  */
 
-public class DefaultLocaleTestRun {
+public class DefaultLocaleTestRun extends TestHelper {
     public static void main(String... args) {
-        if (!TestHelper.isWindows) {
+        if (!isWindows) {
             System.out.println("Test passes vacuously on non-windows");
             return;
         }
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd,
-                "-cp", TestHelper.TEST_CLASSES_DIR.getAbsolutePath(),
+        TestResult tr = null;
+        tr = doExec(javaCmd,
+                "-cp", TEST_CLASSES_DIR.getAbsolutePath(),
                 "DefaultLocaleTest", "-w", "x.out");
         System.out.println(tr.testOutput);
-        tr = TestHelper.doExec(TestHelper.javawCmd,
-                "-cp", TestHelper.TEST_CLASSES_DIR.getAbsolutePath(),
+        tr = doExec(javawCmd,
+                "-cp", TEST_CLASSES_DIR.getAbsolutePath(),
                 "DefaultLocaleTest", "-r", "x.out");
         System.out.println(tr.testOutput);
         if (!tr.isOK()) {
--- a/jdk/test/tools/launcher/ExecutionEnvironment.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/ExecutionEnvironment.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2012, 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
@@ -25,7 +25,7 @@
  * @test
  * @bug 4780570 4731671 6354700 6367077 6670965 4882974
  * @summary Checks for LD_LIBRARY_PATH and execution  on *nixes
- * @compile -XDignore.symbol.file ExecutionEnvironment.java TestHelper.java
+ * @compile -XDignore.symbol.file ExecutionEnvironment.java
  * @run main ExecutionEnvironment
  */
 
@@ -60,7 +60,7 @@
 import java.util.Map;
 
 
-public class ExecutionEnvironment {
+public class ExecutionEnvironment extends TestHelper {
     static final String LD_LIBRARY_PATH    = "LD_LIBRARY_PATH";
     static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32";
     static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64";
@@ -70,9 +70,6 @@
     static final String LD_LIBRARY_PATH_32_VALUE = "/Lawrence/Of/Arabia";
     static final String LD_LIBRARY_PATH_64_VALUE = "/A/Passage/To/India";
 
-    static final String JLDEBUG_KEY = "_JAVA_LAUNCHER_DEBUG";
-    static final String EXPECTED_MARKER = "TRACER_MARKER:About to EXEC";
-
     static final String[] LD_PATH_STRINGS = {
         LD_LIBRARY_PATH + "=" + LD_LIBRARY_PATH_VALUE,
         LD_LIBRARY_PATH_32 + "=" + LD_LIBRARY_PATH_32_VALUE,
@@ -84,11 +81,11 @@
     static int errors = 0;
     static int passes = 0;
 
-    static final String LIBJVM = TestHelper.isWindows ? "jvm.dll" : "libjvm.so";
+    static final String LIBJVM = isWindows ? "jvm.dll" : "libjvm.so";
 
     static void createTestJar() {
         try {
-            List<String> codeList = new ArrayList<String>();
+            List<String> codeList = new ArrayList<>();
             codeList.add("static void printValue(String name, boolean property) {\n");
             codeList.add("    String value = (property) ? System.getProperty(name) : System.getenv(name);\n");
             codeList.add("    System.out.println(name + \"=\" + value);\n");
@@ -105,7 +102,7 @@
             codeList.add("    printValue(\"" + LD_LIBRARY_PATH_64 + "\", false);\n");
             codeList.add("}\n");
             String[] clist = new String[codeList.size()];
-            TestHelper.createJar(testJarFile, codeList.toArray(clist));
+            createJar(testJarFile, codeList.toArray(clist));
         } catch (FileNotFoundException fnfe) {
             throw new RuntimeException(fnfe);
         }
@@ -117,16 +114,15 @@
      * environment should be pristine.
      */
     private static void ensureEcoFriendly() {
-        TestHelper.TestResult tr = null;
+        TestResult tr = null;
 
-        Map<String, String> env = new HashMap<String, String>();
+        Map<String, String> env = new HashMap<>();
         for (String x : LD_PATH_STRINGS) {
             String pairs[] = x.split("=");
             env.put(pairs[0], pairs[1]);
         }
 
-        tr = TestHelper.doExec(env, TestHelper.javaCmd, "-jar",
-                testJarFile.getAbsolutePath());
+        tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
 
         if (!tr.isNotZeroOutput()) {
             System.out.println(tr);
@@ -149,10 +145,9 @@
      * data model
      */
     static void ensureNoExec() {
-        Map<String, String> env = new HashMap<String, String>();
+        Map<String, String> env = new HashMap<>();
         env.put(JLDEBUG_KEY, "true");
-        TestHelper.TestResult tr =
-                TestHelper.doExec(env, TestHelper.javaCmd, "-version");
+        TestResult tr = doExec(env, javaCmd, "-version");
         if (tr.testOutput.contains(EXPECTED_MARKER)) {
             System.out.println("FAIL: EnsureNoExecs: found expected warning <" +
                     EXPECTED_MARKER +
@@ -176,25 +171,23 @@
      */
 
     static void verifyJavaLibraryPath() {
-        TestHelper.TestResult tr = null;
+        TestResult tr = null;
 
-        Map<String, String> env = new HashMap<String, String>();
+        Map<String, String> env = new HashMap<>();
 
-        if (TestHelper.isLinux) {
+        if (isLinux) {
             for (String x : LD_PATH_STRINGS) {
                 String pairs[] = x.split("=");
                 env.put(pairs[0], pairs[1]);
             }
 
-            tr = TestHelper.doExec(env, TestHelper.javaCmd, "-jar",
-                    testJarFile.getAbsolutePath());
+            tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
             verifyJavaLibraryPathGeneric(tr);
         } else {
             // no override
             env.clear();
             env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
-            tr = TestHelper.doExec(env, TestHelper.javaCmd, "-jar",
-                    testJarFile.getAbsolutePath());
+            tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
             verifyJavaLibraryPathGeneric(tr);
 
             env.clear();
@@ -206,53 +199,52 @@
             // verify the override occurs, since we know the invocation always
             // uses by default is 32-bit, therefore we also set the test
             // expectation to be the same.
-            tr = TestHelper.doExec(env, TestHelper.javaCmd, "-jar",
-                    testJarFile.getAbsolutePath());
+            tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
             verifyJavaLibraryPathOverride(tr, true);
 
             // try changing the model from 32 to 64 bit
-            if (TestHelper.dualModePresent() && TestHelper.is32Bit) {
+            if (dualModePresent() && is32Bit) {
                 // verify the override occurs
                 env.clear();
                 for (String x : LD_PATH_STRINGS) {
                     String pairs[] = x.split("=");
                     env.put(pairs[0], pairs[1]);
                 }
-                tr = TestHelper.doExec(env, TestHelper.javaCmd, "-d64", "-jar",
+                tr = doExec(env, javaCmd, "-d64", "-jar",
                     testJarFile.getAbsolutePath());
                 verifyJavaLibraryPathOverride(tr, false);
 
                 // no override
                 env.clear();
                 env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
-                tr = TestHelper.doExec(env, TestHelper.javaCmd, "-jar",
+                tr = doExec(env, javaCmd, "-jar",
                         testJarFile.getAbsolutePath());
                 verifyJavaLibraryPathGeneric(tr);
             }
 
             // try changing the model from 64 to 32 bit
-            if (TestHelper.java64Cmd != null && TestHelper.is64Bit) {
+            if (java64Cmd != null && is64Bit) {
                 // verify the override occurs
                 env.clear();
                 for (String x : LD_PATH_STRINGS) {
                     String pairs[] = x.split("=");
                     env.put(pairs[0], pairs[1]);
                 }
-                tr = TestHelper.doExec(env, TestHelper.java64Cmd, "-d32", "-jar",
+                tr = doExec(env, java64Cmd, "-d32", "-jar",
                     testJarFile.getAbsolutePath());
                 verifyJavaLibraryPathOverride(tr, true);
 
                 // no override
                 env.clear();
                 env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
-                tr = TestHelper.doExec(env, TestHelper.java64Cmd, "-d32", "-jar",
+                tr = doExec(env, java64Cmd, "-d32", "-jar",
                         testJarFile.getAbsolutePath());
                 verifyJavaLibraryPathGeneric(tr);
             }
         }
     }
 
-    private static void verifyJavaLibraryPathGeneric(TestHelper.TestResult tr) {
+    private static void verifyJavaLibraryPathGeneric(TestResult tr) {
         if (!tr.matches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
             System.out.print("FAIL: verifyJavaLibraryPath: ");
             System.out.println(" java.library.path does not contain " +
@@ -264,7 +256,7 @@
         }
     }
 
-    private static void verifyJavaLibraryPathOverride(TestHelper.TestResult tr,
+    private static void verifyJavaLibraryPathOverride(TestResult tr,
             boolean is32Bit) {
         // make sure the 32/64 bit value exists
         if (!tr.matches("java.library.path=.*" +
@@ -295,10 +287,10 @@
      */
     static void verifyVmSelection() {
 
-        TestHelper.TestResult tr = null;
+        TestResult tr = null;
 
-        if (TestHelper.is32Bit) {
-            tr = TestHelper.doExec(TestHelper.javaCmd, "-client", "-version");
+        if (is32Bit) {
+            tr = doExec(javaCmd, "-client", "-version");
             if (!tr.matches(".*Client VM.*")) {
                 System.out.println("FAIL: the expected vm -client did not launch");
                 System.out.println(tr);
@@ -307,7 +299,7 @@
                 passes++;
             }
         }
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-server", "-version");
+        tr = doExec(javaCmd, "-server", "-version");
         if (!tr.matches(".*Server VM.*")) {
             System.out.println("FAIL: the expected vm -server did not launch");
             System.out.println(tr);
@@ -321,14 +313,14 @@
      * checks to see there is no extra libjvm.so than needed
      */
     static void verifyNoSymLink() {
-        if (TestHelper.is64Bit) {
+        if (is64Bit) {
             return;
         }
 
         File symLink = null;
-        String libPathPrefix = TestHelper.isSDK ? "jre/lib" : "/lib";
-        symLink = new File(TestHelper.JAVAHOME, libPathPrefix +
-                TestHelper.getJreArch() + "/" + LIBJVM);
+        String libPathPrefix = isSDK ? "jre/lib" : "/lib";
+        symLink = new File(JAVAHOME, libPathPrefix +
+                getJreArch() + "/" + LIBJVM);
         if (symLink.exists()) {
             System.out.println("FAIL: The symlink exists " +
                     symLink.getAbsolutePath());
@@ -339,7 +331,7 @@
     }
 
     public static void main(String... args) throws Exception {
-        if (TestHelper.isWindows) {
+        if (isWindows) {
             System.out.println("Warning: noop on windows");
             return;
         }
--- a/jdk/test/tools/launcher/I18NJarTest.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/I18NJarTest.java	Sat Jan 28 10:46:46 2012 -0800
@@ -26,7 +26,7 @@
  * @bug 7125442
  * @summary ensures a jar path as well as a class located in a path containing
  *          unicode characters are launched.
- * @compile -XDignore.symbol.file I18NJarTest.java TestHelper.java
+ * @compile -XDignore.symbol.file I18NJarTest.java
  * @run main/othervm I18NJarTest
  */
 import java.io.File;
@@ -48,7 +48,7 @@
  * in its own VM (othervm mode), such that the ensuing tests can run unperturbed,
  * regardless of the outcome.
  */
-public class I18NJarTest {
+public class I18NJarTest extends TestHelper {
     private static final File cwd = new File(".");
     private static final File dir = new File("\uFF66\uFF67\uFF68\uFF69");
     private static final String encoding = System.getProperty("sun.jnu.encoding", "");
@@ -78,7 +78,7 @@
         }
         dir.mkdir();
         File dirfile = new File(dir, "foo.jar");
-        TestHelper.createJar(dirfile,
+        createJar(dirfile,
                 "public static void main(String... args) {",
                 "System.out.println(\"Hello World\");",
                 "System.exit(0);",
@@ -86,22 +86,20 @@
 
         // remove the class files, to ensure that the class is indeed picked up
         // from the jar file and not from ambient classpath.
-        File[] classFiles = cwd.listFiles(TestHelper.createFilter(TestHelper.CLASS_FILE_EXT));
+        File[] classFiles = cwd.listFiles(createFilter(CLASS_FILE_EXT));
         for (File f : classFiles) {
             f.delete();
         }
 
         // test with a jar file
-        TestHelper.TestResult tr = TestHelper.doExec(TestHelper.javaCmd,
-                "-jar", dirfile.getAbsolutePath());
+        TestResult tr = doExec(javaCmd, "-jar", dirfile.getAbsolutePath());
         System.out.println(tr);
         if (!tr.isOK()) {
             throw new RuntimeException("TEST FAILED");
         }
 
         // test the same class but by specifying it as a classpath
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-cp",
-                dirfile.getAbsolutePath(), "Foo");
+        tr = doExec(javaCmd, "-cp", dirfile.getAbsolutePath(), "Foo");
         System.out.println(tr);
         if (!tr.isOK()) {
             throw new RuntimeException("TEST FAILED");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/I18NTest.java	Sat Jan 28 10:46:46 2012 -0800
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2012, 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.
+ */
+
+/*
+ * @test
+ * @bug 4761384
+ * @compile -XDignore.symbol.file I18NTest.java
+ * @run main I18NTest
+ * @summary Test to see if class files with non-ASCII characters can be run
+ * @author Joseph D. Darcy, Kumar Srinivasan
+ */
+
+
+import java.util.ArrayList;
+import java.io.File;
+import java.util.List;
+
+public class I18NTest extends TestHelper {
+    static String fileName = null;
+    public static void main(String... args) throws Exception {
+        String defaultEncoding = System.getProperty("file.encoding");
+        if (defaultEncoding == null) {
+            System.err.println("Default encoding not found; Error.");
+            return;
+        }
+        if (!defaultEncoding.equals("Cp1252")) {
+            System.err.println("Warning: required encoding not found, test skipped.");
+            return;
+        }
+        // for some reason the shell test version insisted on cleaning out the
+        // directory, likely being pedantic.
+        File cwd = new File(".");
+        for (File f : cwd.listFiles(createFilter(CLASS_FILE_EXT))) {
+            f.delete();
+        }
+        for (File f : cwd.listFiles(createFilter(JAVA_FILE_EXT))) {
+            f.delete();
+        }
+        createPlatformFile();
+
+        // compile the generate code using the javac compiler vs. the api, to
+        // as a bonus point to see if the argument is passed correctly
+        TestResult tr = null;
+        tr = doExec(javacCmd, fileName + JAVA_FILE_EXT);
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new Error("compilation failed...");
+        }
+        tr = doExec(javaCmd, "-cp", ".", fileName);
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("run failed with encoding " + defaultEncoding);
+        }
+    }
+
+    public static void createPlatformFile() throws Exception {
+        List<String> buffer = new ArrayList<>();
+        // "HelloWorld" with an accented e
+        fileName = "i18nH\u00e9lloWorld";
+        buffer.clear();
+        buffer.add("public class i18nH\u00e9lloWorld {");
+        buffer.add("    public static void main(String [] argv) {");
+        buffer.add("        System.out.println(\"Hello Cp1252 World\");");
+        buffer.add("    }");
+        buffer.add("}");
+        File outFile = new File(fileName + JAVA_FILE_EXT);
+        createFile(outFile, buffer);
+    }
+}
--- a/jdk/test/tools/launcher/MiscTests.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/MiscTests.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2012, 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
@@ -25,7 +25,7 @@
  * @test
  * @bug 6856415
  * @summary Miscellaneous tests, Exceptions
- * @compile -XDignore.symbol.file MiscTests.java TestHelper.java
+ * @compile -XDignore.symbol.file MiscTests.java
  * @run main MiscTests
  */
 
@@ -33,12 +33,12 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 
-public class MiscTests {
+public class MiscTests extends TestHelper {
 
     // 6856415: Checks to ensure that proper exceptions are thrown by java
     static void test6856415() {
         // No pkcs library on win-x64, so we bail out.
-        if (TestHelper.is64Bit && TestHelper.isWindows) {
+        if (is64Bit && isWindows) {
             return;
         }
         StringBuilder sb = new StringBuilder();
@@ -49,11 +49,11 @@
         File testJar = new File("Foo.jar");
         testJar.delete();
         try {
-            TestHelper.createJar(testJar, sb.toString());
+            createJar(testJar, sb.toString());
         } catch (FileNotFoundException fnfe) {
             throw new RuntimeException(fnfe);
         }
-        TestHelper.TestResult tr = TestHelper.doExec(TestHelper.javaCmd,
+        TestResult tr = doExec(javaCmd,
                 "-Djava.security.manager", "-jar", testJar.getName(), "foo.bak");
         for (String s : tr.testOutput) {
             System.out.println(s);
@@ -67,8 +67,8 @@
 
     public static void main(String... args) {
         test6856415();
-        if (TestHelper.testExitValue != 0) {
-            throw new Error(TestHelper.testExitValue + " tests failed");
+        if (testExitValue != 0) {
+            throw new Error(testExitValue + " tests failed");
     }
 }
 }
--- a/jdk/test/tools/launcher/Settings.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/Settings.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2012, 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
@@ -27,11 +27,11 @@
  * @test
  * @bug 6994753 7123582
  * @summary tests -XshowSettings options
- * @compile -XDignore.symbol.file Settings.java TestHelper.java
+ * @compile -XDignore.symbol.file Settings.java
  * @run main Settings
  * @author ksrini
  */
-public class Settings {
+public class Settings extends TestHelper {
     private static File testJar = null;
 
     static void init() throws IOException {
@@ -45,17 +45,17 @@
         tsrc.append("        System.out.println(x);\n");
         tsrc.append("   }\n");
         tsrc.append("}\n");
-        TestHelper.createJar(testJar, tsrc.toString());
+        createJar(testJar, tsrc.toString());
     }
 
-    static void checkContains(TestHelper.TestResult tr, String str) {
+    static void checkContains(TestResult tr, String str) {
         if (!tr.contains(str)) {
             System.out.println(tr);
             throw new RuntimeException(str + " not found");
         }
     }
 
-    static void checkNoContains(TestHelper.TestResult tr, String str) {
+    static void checkNoContains(TestResult tr, String str) {
         if (tr.contains(str)) {
             System.out.println(tr.status);
             throw new RuntimeException(str + " found");
@@ -66,22 +66,22 @@
     private static final String PROP_SETTINGS = "Property settings:";
     private static final String LOCALE_SETTINGS = "Locale settings:";
 
-    static void containsAllOptions(TestHelper.TestResult tr) {
+    static void containsAllOptions(TestResult tr) {
         checkContains(tr, VM_SETTINGS);
         checkContains(tr, PROP_SETTINGS);
         checkContains(tr, LOCALE_SETTINGS);
     }
 
     static void runTestOptionDefault() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-Xms64m", "-Xmx512m",
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-Xms64m", "-Xmx512m",
                 "-Xss128k", "-XshowSettings", "-jar", testJar.getAbsolutePath());
         containsAllOptions(tr);
         if (!tr.isOK()) {
             System.out.println(tr.status);
             throw new RuntimeException("test fails");
         }
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-Xms65536k", "-Xmx712m",
+        tr = doExec(javaCmd, "-Xms65536k", "-Xmx712m",
                 "-Xss122880", "-XshowSettings", "-jar", testJar.getAbsolutePath());
         containsAllOptions(tr);
         if (!tr.isOK()) {
@@ -92,38 +92,38 @@
 
     static void runTestOptionAll() throws IOException {
         init();
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettings:all");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettings:all");
         containsAllOptions(tr);
     }
 
     static void runTestOptionVM() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettings:vm");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettings:vm");
         checkContains(tr, VM_SETTINGS);
         checkNoContains(tr, PROP_SETTINGS);
         checkNoContains(tr, LOCALE_SETTINGS);
     }
 
     static void runTestOptionProperty() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettings:properties");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettings:properties");
         checkNoContains(tr, VM_SETTINGS);
         checkContains(tr, PROP_SETTINGS);
         checkNoContains(tr, LOCALE_SETTINGS);
     }
 
     static void runTestOptionLocale() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettings:locale");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettings:locale");
         checkNoContains(tr, VM_SETTINGS);
         checkNoContains(tr, PROP_SETTINGS);
         checkContains(tr, LOCALE_SETTINGS);
     }
 
     static void runTestBadOptions() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettingsBadOption");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettingsBadOption");
         checkNoContains(tr, VM_SETTINGS);
         checkNoContains(tr, PROP_SETTINGS);
         checkNoContains(tr, LOCALE_SETTINGS);
@@ -131,8 +131,8 @@
     }
 
     static void runTest7123582() throws IOException {
-        TestHelper.TestResult tr = null;
-        tr = TestHelper.doExec(TestHelper.javaCmd, "-XshowSettings", "-version");
+        TestResult tr = null;
+        tr = doExec(javaCmd, "-XshowSettings", "-version");
         if (!tr.isOK()) {
             System.out.println(tr.status);
             throw new RuntimeException("test fails");
--- a/jdk/test/tools/launcher/SomeException.java	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- *
- *
- * Used by unresolvedExceptions.sh
- */
-
-public class SomeException extends RuntimeException {
-
-}
--- a/jdk/test/tools/launcher/Test7029048.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/Test7029048.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, 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
@@ -25,7 +25,7 @@
  * @test
  * @bug 7029048
  * @summary Checks for LD_LIBRARY_PATH on *nixes
- * @compile -XDignore.symbol.file ExecutionEnvironment.java TestHelper.java Test7029048.java
+ * @compile -XDignore.symbol.file ExecutionEnvironment.java Test7029048.java
  * @run main Test7029048
  */
 
@@ -42,7 +42,7 @@
 import java.util.List;
 import java.util.Map;
 
-public class Test7029048 {
+public class Test7029048 extends TestHelper {
 
     static int passes = 0;
     static int errors = 0;
@@ -62,7 +62,7 @@
 
     private static final File dstLibDir = new File("lib");
     private static final File dstLibArchDir =
-            new File(dstLibDir, TestHelper.getJreArch());
+            new File(dstLibDir, getJreArch());
 
     private static final File dstServerDir = new File(dstLibArchDir, "server");
     private static final File dstServerLibjvm = new File(dstServerDir, LIBJVM);
@@ -78,8 +78,8 @@
     private static final Map<String, String> env = new HashMap<>();
 
     static {
-        if (TestHelper.isDualMode) {
-            dstOtherArchDir = new File(dstLibDir, TestHelper.getComplementaryJreArch());
+        if (isDualMode) {
+            dstOtherArchDir = new File(dstLibDir, getComplementaryJreArch());
             dstOtherServerDir = new File(dstOtherArchDir, "server");
             dstOtherServerLibjvm = new File(dstOtherServerDir, LIBJVM);
         } else {
@@ -106,10 +106,10 @@
         List<String> cmdsList = new ArrayList<>();
 
         // only for a dual-mode system
-        if (want64 && TestHelper.isDualMode) {
-            cmdsList.add(TestHelper.java64Cmd);
+        if (want64 && isDualMode) {
+            cmdsList.add(java64Cmd);
         } else {
-            cmdsList.add(TestHelper.javaCmd); // a 32-bit java command for all
+            cmdsList.add(javaCmd); // a 32-bit java command for all
         }
 
         /*
@@ -127,18 +127,18 @@
         cmdsList.add("-jar");
         cmdsList.add(ExecutionEnvironment.testJarFile.getAbsolutePath());
         String[] cmds = new String[cmdsList.size()];
-        TestHelper.TestResult tr = TestHelper.doExec(env, cmdsList.toArray(cmds));
+        TestResult tr = doExec(env, cmdsList.toArray(cmds));
         analyze(tr, nLLPComponents, caseID);
     }
 
     // no cross launch, ie. no change to the data model.
     static void run(Map<String, String> env, int nLLPComponents, String caseID)
             throws IOException {
-        boolean want32 = TestHelper.is32Bit;
+        boolean want32 = is32Bit;
         run(want32, null, env, nLLPComponents, caseID);
     }
 
-    static void analyze(TestHelper.TestResult tr, int nLLPComponents, String caseID) {
+    static void analyze(TestResult tr, int nLLPComponents, String caseID) {
         String envValue = getValue(LD_LIBRARY_PATH, tr.testOutput);
        /*
         * the envValue can never be null, since the test code should always
@@ -189,12 +189,12 @@
             switch (v) {
                 case LLP_SET_WITH_JVM:
                     // copy the files into the directory structures
-                    TestHelper.copyFile(srcLibjvmSo, dstServerLibjvm);
+                    copyFile(srcLibjvmSo, dstServerLibjvm);
                     // does not matter if it is client or a server
-                    TestHelper.copyFile(srcLibjvmSo, dstClientLibjvm);
+                    copyFile(srcLibjvmSo, dstClientLibjvm);
                     // does not matter if the arch do not match either
-                    if (TestHelper.isDualMode) {
-                        TestHelper.copyFile(srcLibjvmSo, dstOtherServerLibjvm);
+                    if (isDualMode) {
+                        copyFile(srcLibjvmSo, dstOtherServerLibjvm);
                     }
                     desc = "LD_LIBRARY_PATH should be set";
                     break;
@@ -211,7 +211,7 @@
                         Files.deleteIfExists(dstServerLibjvm.toPath());
                     }
 
-                    if (TestHelper.isDualMode) {
+                    if (isDualMode) {
                         if (!dstOtherServerDir.exists()) {
                             Files.createDirectories(dstOtherServerDir.toPath());
                         } else {
@@ -223,7 +223,7 @@
                     break;
                 case LLP_SET_NON_EXISTENT_PATH:
                     if (dstLibDir.exists()) {
-                        TestHelper.recursiveDelete(dstLibDir);
+                        recursiveDelete(dstLibDir);
                     }
                     desc = "LD_LIBRARY_PATH should not be set";
                     break;
@@ -245,18 +245,18 @@
             env.put(LD_LIBRARY_PATH, dstClientDir.getAbsolutePath());
             run(env, v.value + 1, "Case 2: " + desc);
 
-            if (!TestHelper.isDualMode) {
+            if (!isDualMode) {
                 continue; // nothing more to do for Linux
             }
 
             // Tests applicable only to solaris.
 
             // initialize test variables for dual mode operations
-            final File dst32ServerDir = TestHelper.is32Bit
+            final File dst32ServerDir = is32Bit
                     ? dstServerDir
                     : dstOtherServerDir;
 
-            final File dst64ServerDir = TestHelper.is64Bit
+            final File dst64ServerDir = is64Bit
                     ? dstServerDir
                     : dstOtherServerDir;
 
@@ -268,7 +268,7 @@
             env.clear();
             env.put(LD_LIBRARY_PATH_32, dst32ServerDir.getAbsolutePath());
             env.put(LD_LIBRARY_PATH_64, dst64ServerDir.getAbsolutePath());
-            run(TestHelper.is32Bit, null, env, v.value + 1, "Case 3: " + desc);
+            run(is32Bit, null, env, v.value + 1, "Case 3: " + desc);
 
             /*
              * Case 4: we are in dual mode environment, running 64-bit then
@@ -276,7 +276,7 @@
              * java32 -d64, LLP_64 is relevant, LLP_32 is ignored
              * java64 -d32, LLP_32 is relevant, LLP_64 is ignored
              */
-            if (TestHelper.dualModePresent()) {
+            if (dualModePresent()) {
                 run(true, "-d64", env, v.value + 1, "Case 4A: " + desc);
                 run(false,"-d32", env, v.value + 1, "Case 4B: " + desc);
             }
@@ -285,7 +285,7 @@
     }
 
     public static void main(String... args) throws Exception {
-        if (TestHelper.isWindows) {
+        if (isWindows) {
             System.out.println("Warning: noop on windows");
             return;
         }
@@ -297,13 +297,13 @@
         if (errors > 0) {
             throw new Exception("Test7029048: FAIL: with "
                     + errors + " errors and passes " + passes);
-        } else if (TestHelper.dualModePresent() && passes < 15) {
+        } else if (dualModePresent() && passes < 15) {
             throw new Exception("Test7029048: FAIL: " +
                     "all tests did not run, expected " + 15 + " got " + passes);
-        } else if (TestHelper.isSolaris && passes < 9) {
+        } else if (isSolaris && passes < 9) {
             throw new Exception("Test7029048: FAIL: " +
                     "all tests did not run, expected " + 9 + " got " + passes);
-        } else if (TestHelper.isLinux && passes < 6) {
+        } else if (isLinux && passes < 6) {
              throw new Exception("Test7029048: FAIL: " +
                     "all tests did not run, expected " + 6 + " got " + passes);
         } else {
--- a/jdk/test/tools/launcher/TestHelper.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/TestHelper.java	Sat Jan 28 10:46:46 2012 -0800
@@ -29,6 +29,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintStream;
+import java.nio.charset.Charset;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.nio.file.Files;
 import java.nio.file.FileVisitResult;
@@ -36,17 +37,18 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import javax.tools.JavaCompiler;
 import javax.tools.ToolProvider;
 
 import static java.nio.file.StandardCopyOption.*;
+import static java.nio.file.StandardOpenOption.*;
 
 /**
  * This class provides some common utilities for the launcher tests.
  */
-public enum TestHelper {
-    INSTANCE;
+public class TestHelper {
     // commonly used jtreg constants
     static final File TEST_CLASSES_DIR;
     static final File TEST_SOURCES_DIR;
@@ -73,9 +75,14 @@
     static final boolean isDualMode = isSolaris;
     static final boolean isSparc = System.getProperty("os.arch").startsWith("sparc");
 
+    // make a note of the golden default locale
+    static final Locale DefaultLocale = Locale.getDefault();
+
     static final String JAVA_FILE_EXT  = ".java";
     static final String CLASS_FILE_EXT = ".class";
     static final String JAR_FILE_EXT   = ".jar";
+    static final String JLDEBUG_KEY     = "_JAVA_LAUNCHER_DEBUG";
+    static final String EXPECTED_MARKER = "TRACER_MARKER:About to EXEC";
 
     static int testExitValue = 0;
 
@@ -197,6 +204,19 @@
     }
 
     /*
+     * A convenience method to compile java files.
+     */
+    static void compile(String... compilerArgs) {
+        if (compiler.run(null, null, null, compilerArgs) != 0) {
+            String sarg = "";
+            for (String x : compilerArgs) {
+                sarg.concat(x + " ");
+            }
+            throw new Error("compilation failed: " + sarg);
+        }
+    }
+
+    /*
      * A generic jar file creator to create a java file, compile it
      * and jar it up, a specific Main-Class entry name in the
      * manifest can be specified or a null to use the sole class file name
@@ -255,6 +275,11 @@
         Files.copy(src.toPath(), dst.toPath(), COPY_ATTRIBUTES, REPLACE_EXISTING);
     }
 
+    static void createFile(File outFile, List<String> content) throws IOException {
+        Files.write(outFile.getAbsoluteFile().toPath(), content,
+                Charset.defaultCharset(), CREATE_NEW);
+    }
+
     static void recursiveDelete(File target) throws IOException {
         if (!target.exists()) {
             return;
@@ -337,6 +362,10 @@
         };
     }
 
+    static boolean isEnglishLocale() {
+        return Locale.getDefault().getLanguage().equals("en");
+    }
+
     /*
      * A class to encapsulate the test results and stuff, with some ease
      * of use methods to check the test results.
--- a/jdk/test/tools/launcher/UnicodeCleanup.java	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-
-
-/*
- *
- *
- * Used by UnicodeTest.sh.
- *
- * Recursively deletes the given file/directory and its contents.
- * Equivalent to "rm -rf args...", but on NT-based Windows can
- * handle files with full Unicode names inside the given directories
- * while shells are generally limited to names using the system encoding.
- *
- * @author Norbert Lindenberg
- */
-
-
-
-import java.io.File;
-
-public class UnicodeCleanup {
-
-    public static void main(String[] args) {
-
-        for (int i = 0; i < args.length; i++) {
-            delete(new File(args[i]));
-        }
-    }
-
-    private static void delete(File file) {
-        // paranoia is healthy in rm -rf
-        String name = file.toString();
-        if (name.equals(".") || name.equals("..") ||
-                name.endsWith(File.separator + ".") ||
-                name.endsWith(File.separator + "..")) {
-            throw new RuntimeException("too risky to process: " + name);
-        }
-        if (file.isDirectory()) {
-            File[] contents = file.listFiles();
-            for (int i = 0; i < contents.length; i++) {
-                delete(contents[i]);
-            }
-        }
-        if (!file.delete()) {
-            throw new RuntimeException("Unable to delete " + file);
-        }
-    }
-}
--- a/jdk/test/tools/launcher/UnicodeTest.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/UnicodeTest.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2012, 2012 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,12 +21,18 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 5030265
+ * @compile  -XDignore.symbol.file UnicodeTest.java
+ * @run main/othervm UnicodeTest
+ * @summary Verify that the J2RE can handle all legal Unicode characters
+ *          in class names unless limited by the file system encoding
+ *          or the encoding used for command line arguments.
+ * @author Norbert Lindenberg, ksrini
+ */
 
 /*
- *
- *
- * Used by UnicodeTest.sh.
- *
  * This class creates Java source files using Unicode characters
  * that test the limits of what's possible
  * - in situations where the platform encoding imposes limits
@@ -35,38 +41,126 @@
  *   (file system access in UTF-8 locales and on Windows 2000++,
  *    jar file contents)
  *
- * @author Norbert Lindenberg
+ * This test needs to be run in othervm as the locale is reset.
  */
 
-
-
+import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
 import java.util.Locale;
 
-public class UnicodeTest {
+public class UnicodeTest extends TestHelper {
+    static final File UnicodeTestSrc        = new File("UnicodeTest-src");
+    static final File UnicodeTestClasses    = new File("UnicodeTest-classes");
+    static final String UnicodeTestJarName  = "UnicodeTest" + JAR_FILE_EXT;
+    static final File UnicodeTestJar        = new File(UnicodeTestJarName);
+    static final File SolarisUnicodeTestJar = new File(TEST_SOURCES_DIR,
+                                                       UnicodeTestJarName);
+
+    /*
+     * the main method is a port of the shell based test to a java, this
+     * eliminates the need for MKS on windows, thus we can rely on consistent
+     * results regardless of the shell being used.
+     */
+    public static void main(String... args) throws Exception {
+        System.out.println("creating test source files");
+        UnicodeTestSrc.mkdirs();
+        UnicodeTestClasses.mkdirs();
+        String classname = generateSources();
+        File javaFile = new File(UnicodeTestSrc, classname + JAVA_FILE_EXT);
+        System.out.println("building test apps");
+        compile("-encoding", "UTF-8",
+                "-sourcepath", UnicodeTestSrc.getAbsolutePath(),
+                "-d", UnicodeTestClasses.getAbsolutePath(),
+                javaFile.getAbsolutePath());
+
+        createJar("-cvfm", UnicodeTestJar.getAbsolutePath(),
+                  new File(UnicodeTestSrc, "MANIFEST.MF").getAbsolutePath(),
+                  "-C", UnicodeTestClasses.getAbsolutePath(), ".");
+
+        if (!UnicodeTestJar.exists()) {
+            throw new Error("failed to create " + UnicodeTestJar.getAbsolutePath());
+        }
+
+        System.out.println("running test app using class file");
+        TestResult tr = doExec(javaCmd,
+                        "-cp", UnicodeTestClasses.getAbsolutePath(), classname);
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("test fails");
+        }
+
+        System.out.println("delete generated files with non-ASCII names");
+        recursiveDelete(UnicodeTestSrc);
+        recursiveDelete(UnicodeTestClasses);
+
+        /*
+         * test in whatever the default locale is
+         */
+        runJarTests();
 
-    public static void main(String[] args) throws Exception {
+        /*
+         * if the Japanese locale is available, test in that locale as well
+         */
+        if (setLocale(Locale.JAPANESE)) {
+            runJarTests();
+        }
+
+       /*
+        * if we can switch to a C locale, then test whether jar files with
+        * non-ASCII characters in the manifest still work in this crippled
+        * environment
+        */
+        if (setLocale(Locale.ENGLISH)) {
+            runJarTests();
+        }
+        // thats it we are outta here
+    }
+
+    static void runJarTests() {
+        System.out.println("running test app using newly built jar file in " +
+                Locale.getDefault());
+        runTest(UnicodeTestJar);
 
+        System.out.println("running test app using jar file " +
+                "(built with Solaris UTF-8 locale) in " + Locale.getDefault());
+        runTest(SolarisUnicodeTestJar);
+    }
+
+    static void runTest(File testJar) {
+        TestResult tr = doExec(javaCmd, "-jar", testJar.getAbsolutePath());
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("test fails");
+        }
+    }
+
+    static boolean setLocale(Locale desired) {
+        if (Locale.getDefault().equals(desired)) {
+            return true;  // already set nothing more
+        }
+        for (Locale l : Locale.getAvailableLocales()) {
+            if (l == desired) {
+                Locale.setDefault(l);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    static String generateSources() throws Exception {
         String commandLineClassNameSuffix = commandLineClassNameSuffix();
         String commandLineClassName = "ClassA" + commandLineClassNameSuffix;
-        String manifestClassName;
-        if (hasUnicodeFileSystem()) {
-            manifestClassName = "ClassB" + unicode;
-        } else {
-            manifestClassName = "ClassB" + commandLineClassNameSuffix;
-        }
+        String manifestClassName = "ClassB" +
+                (hasUnicodeFileSystem() ? unicode : commandLineClassNameSuffix);
 
         generateSource(commandLineClassName, manifestClassName);
         generateSource(manifestClassName, commandLineClassName);
         generateManifest(manifestClassName);
-
-        System.out.println(commandLineClassName);
+        return commandLineClassName;
     }
 
-    private static final String fileSeparator = System.getProperty("file.separator");
-    private static final String osName = System.getProperty("os.name");
     private static final String defaultEncoding = Charset.defaultCharset().name();
 
     // language names taken from java.util.Locale.getDisplayLanguage for the respective language
@@ -132,12 +226,7 @@
             { "tis-620",        thai,           null            },
         };
 
-        int column;
-        if (osName.startsWith("Windows")) {
-            column = 2;
-        } else {
-            column = 1;
-        }
+        int column = isWindows ? 2 : 1;
         for (int i = 0; i < names.length; i++) {
              if (names[i][0].equalsIgnoreCase(defaultEncoding)) {
                  return names[i][column];
@@ -147,17 +236,12 @@
     }
 
     private static boolean hasUnicodeFileSystem() {
-        if (osName.startsWith("Windows")) {
-            return ! osName.startsWith("Windows 9") &&
-                   ! osName.equals("Windows Me");
-        } else {
-            return defaultEncoding.equalsIgnoreCase("UTF-8");
-        }
+        return (isWindows) ? true : defaultEncoding.equalsIgnoreCase("UTF-8");
     }
 
     private static void generateSource(String thisClass, String otherClass) throws Exception {
-        String fileName = "UnicodeTest-src" + fileSeparator + thisClass + ".java";
-        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
+        File file = new File(UnicodeTestSrc, thisClass + JAVA_FILE_EXT);
+        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
         out.write("public class " + thisClass + " {\n");
         out.write("    public static void main(String[] args) {\n");
         out.write("        if (!" + otherClass + "." + otherClass.toLowerCase() + "().equals(\"" + otherClass + "\")) {\n");
@@ -172,8 +256,8 @@
     }
 
     private static void generateManifest(String mainClass) throws Exception {
-        String fileName = "UnicodeTest-src" + fileSeparator + "MANIFEST.MF";
-        FileOutputStream out = new FileOutputStream(fileName);
+        File file = new File(UnicodeTestSrc, "MANIFEST.MF");
+        FileOutputStream out = new FileOutputStream(file);
         out.write("Manifest-Version: 1.0\n".getBytes("UTF-8"));
         // Header lines are limited to 72 bytes.
         // The manifest spec doesn't say we have to break at character boundaries,
--- a/jdk/test/tools/launcher/UnicodeTest.sh	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-# Copyright (c) 2007, 2010, 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.
-
-# @test
-# @bug 5030265
-# @summary Verify that the J2RE can handle all legal Unicode characters
-#          in class names unless limited by the file system encoding
-#          or the encoding used for command line arguments.
-# @author Norbert Lindenberg
-
-
-# Verify directory context variables are set
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-JAVAC="${TESTJAVA}"/bin/javac
-JAVA="${TESTJAVA}"/bin/java
-JAR="${TESTJAVA}"/bin/jar
-
-mkdir UnicodeTest-src UnicodeTest-classes
-
-echo "creating test source files"
-"$JAVAC" -d . "${TESTSRC}"/UnicodeTest.java
-if [ "`uname -s | grep CYGWIN`" != "" ] ; then
-  CLASS_NAME=`"$JAVA" UnicodeTest | sed -e 's@\\r@@g' `
-else
-  CLASS_NAME=`"$JAVA" UnicodeTest`
-fi
-
-if [ "$CLASS_NAME" = "" ]
-then
-  echo "CLASS_NAME not generated.  Test failed."
-  exit 1
-fi
-
-echo "building test apps"
-"$JAVAC" -encoding UTF-8 -sourcepath UnicodeTest-src \
-    -d UnicodeTest-classes UnicodeTest-src/"${CLASS_NAME}".java || exit 1
-"$JAR" -cvfm UnicodeTest.jar UnicodeTest-src/MANIFEST.MF \
-    -C UnicodeTest-classes . || exit 1
-
-echo "running test app using class file"
-"$JAVA" -classpath UnicodeTest-classes "$CLASS_NAME" || exit 1
-
-echo "delete generated files with non-ASCII names"
-# do it now because on Unix they may not be accessible when locale changes
-# do it in Java because shells on Windows can't handle full Unicode
-"$JAVAC" -d . "${TESTSRC}"/UnicodeCleanup.java || exit 1
-"$JAVA" UnicodeCleanup UnicodeTest-src UnicodeTest-classes || exit 1
-
-echo "running test app using newly built jar file"
-"$JAVA" -jar UnicodeTest.jar || exit 1
-
-echo "running test app using jar file built in Solaris UTF-8 locale"
-"$JAVA" -jar "${TESTSRC}"/UnicodeTest.jar || exit 1
-
-# if we can switch to a C locale, then test whether jar files with
-# non-ASCII characters in the manifest still work in this crippled
-# environment
-if test -n "`locale -a 2>/dev/null | grep '^C$'`"
-then
-    LC_ALL=C
-    export LC_ALL
-
-    echo "running test app using newly built jar file in C locale"
-    "$JAVA" -jar UnicodeTest.jar || exit 1
-
-    echo "running test app using premade jar file in C locale"
-    "$JAVA" -jar "${TESTSRC}"/UnicodeTest.jar || exit 1
-fi
-
-exit 0
-
--- a/jdk/test/tools/launcher/UnresolvedExceptions.java	Fri Jan 27 15:25:17 2012 -0800
+++ b/jdk/test/tools/launcher/UnresolvedExceptions.java	Sat Jan 28 10:46:46 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2012, 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
@@ -22,15 +22,39 @@
  */
 
 /*
- *
- *
- * Used by unresolvedExceptions.sh
+ * @test
+ * @bug 4529320
+ * @compile -XDignore.symbol.file UnresolvedExceptions.java
+ * @run main UnresolvedExceptions
+ * @summary Verifying jvm won't segv if exception not available
+ * @author Joseph D. Darcy, ksrini
  */
 
-public class UnresolvedExceptions  {
-    public static void main(String[] argv) throws SomeException {
-        // main is invoked from a shell so calling exit won't stop all
-        // tests.
-        System.exit(0);
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class UnresolvedExceptions extends TestHelper {
+
+    public static void main(String... args) throws Exception {
+        final String fname = "Foo";
+        List<String> buffer = new ArrayList<>();
+        buffer.add("public class " + fname + " {");
+        buffer.add("    public static void main(String[] argv) throws "
+                       + "Foo.SomeException {");
+        buffer.add("        System.exit(0);");
+        buffer.add("    }");
+        buffer.add("    static class SomeException extends RuntimeException{}");
+        buffer.add("}");
+
+        File testJavaFile = new File("Foo" + JAVA_FILE_EXT);
+        createFile(testJavaFile, buffer);
+        compile(testJavaFile.getName());
+        TestResult tr = doExec(javaCmd, "-cp", ".", fname);
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("java -cp ... failed");
     }
 }
+}
--- a/jdk/test/tools/launcher/deleteI18n.sh	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2002, 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.
-#
-
-#
-#
-# This file is used by test i18nTest.sh; this file is called to use
-# shell globbing to delete Java source and class files whose names
-# include non-ASCII characters.
-
-
-# Verify directory context variables are set
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-rm -f i18n*.java
-rm -f i18n*.class
-
-
--- a/jdk/test/tools/launcher/i18nTest.sh	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#
-# Copyright (c) 2002, 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.
-#
-
-# @test
-# @bug 4761384
-# @run shell deleteI18n.sh
-# @build CreatePlatformFile
-# @run main CreatePlatformFile
-# @run shell i18nTest.sh
-# @summary Test to see if class files with non-ASCII characters can be run
-# @author Joseph D. Darcy
-
-
-# Verify directory context variables are set
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-JAVAC="${TESTJAVA}/bin/javac -d . "
-JAVA="${TESTJAVA}/bin/java -classpath . "
-
-NAME=`ls i18n*.java | sed s/.java//`
-echo $NAME
-$JAVAC ${NAME}.java
-
-RESULT=$?
-case "$RESULT" in
-        0  )
-        ;;
-
-        * )
-	echo "Compile of i18n*.java failed."
-        exit 1
-esac
-
-$JAVA ${NAME}
-RESULT=$?
-
-case "$RESULT" in
-        0  )
-        exit 0;
-        ;;
-
-        * )
-	echo "Class $NAME did not run successfully."
-        exit 1
-esac
--- a/jdk/test/tools/launcher/unresolvedExceptions.sh	Fri Jan 27 15:25:17 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-#
-# Copyright (c) 2002, 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.
-#
-
-# @test
-# @bug 4529320
-# @build SomeException
-# @build UnresolvedExceptions
-# @clean SomeException
-# @run shell/timeout=60 unresolvedExceptions.sh
-# @summary Verifying jvm won't segv if exception not available
-# @author Joseph D. Darcy
-
-# Verify directory context variables are set
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-JAVA="${TESTJAVA}/bin/java"
-
-$JAVA -classpath ${TESTCLASSES} UnresolvedExceptions
-RESULT=$?
-
-case "$RESULT" in
-	0 | 1 )
-	exit 0;
-	;;
-
-	* )
-	exit 1
-esac