7124443: (launcher) test DefaultsLocaleTest fails with Windows shells.
authorksrini
Tue, 03 Jan 2012 08:33:30 -0800
changeset 11364 7907324fed4f
parent 11363 09b0c9731145
child 11365 05d995976571
7124443: (launcher) test DefaultsLocaleTest fails with Windows shells. Reviewed-by: darcy
jdk/test/tools/launcher/DefaultLocaleTest.java
jdk/test/tools/launcher/DefaultLocaleTest.sh
jdk/test/tools/launcher/DefaultLocaleTestRun.java
jdk/test/tools/launcher/TestHelper.java
--- a/jdk/test/tools/launcher/DefaultLocaleTest.java	Tue Jan 03 08:27:37 2012 -0800
+++ b/jdk/test/tools/launcher/DefaultLocaleTest.java	Tue Jan 03 08:33:30 2012 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, 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,22 +21,55 @@
  * questions.
  */
 
-import java.util.Properties;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import static java.nio.file.Files.*;
+import static java.nio.file.StandardOpenOption.*;
 
 public class DefaultLocaleTest {
-    public static void main(String[] args) {
-        String setting =
+
+    static final String setting =
             "language:"   + System.getProperty("user.language") + "_" +
             "country:"    + System.getProperty("user.country")  + "_" +
             "encoding:"   + System.getProperty("file.encoding") + "_" +
             "jnuEncoding:"+ System.getProperty("sun.jnu.encoding");
-        if (args.length != 0) {
-            if (!setting.equals(args[0])) {
-                System.exit(1);
+
+    public static void main(String[] args) throws IOException {
+        if (args != null && args.length > 1) {
+            File f = new File(args[1]);
+            switch (args[0]) {
+                case "-r":
+                    System.out.println("reading file: " + args[1]);
+                    String str = null;
+                    try (BufferedReader in = newBufferedReader(f.toPath(),
+                                    Charset.defaultCharset())) {
+                        str = in.readLine().trim();
+                    }
+                    if (setting.equals(str)) {
+                        System.out.println("Compared ok");
+                    } else {
+                        System.out.println("Compare fails");
+                        System.out.println("EXPECTED: " + setting);
+                        System.out.println("OBTAINED: " + str);
+                        throw new RuntimeException("Test fails: compare failed");
+                    }
+                    break;
+                case "-w":
+                    System.out.println("writing file: " + args[1]);
+                    try (BufferedWriter out = newBufferedWriter(f.toPath(),
+                                    Charset.defaultCharset(), CREATE_NEW)) {
+                        out.write(setting);
+                    }
+                    break;
+                default:
+                    throw new RuntimeException("ERROR: invalid arguments");
             }
         } else {
-            System.out.println(setting);
+            throw new RuntimeException("ERROR: invalid arguments");
         }
-        System.exit(0);
-   }
+    }
 }
--- a/jdk/test/tools/launcher/DefaultLocaleTest.sh	Tue Jan 03 08:27:37 2012 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#
-# Copyright (c) 2004, 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 4958170 4891531 4989534
-# @summary Test to see if default java locale settings are identical
-#          when launch jvm from java and javaw respectively. Test 
-#          should be run on Windows with different user locale and 
-#          system locale setting in ControlPanel's RegionSetting.
-#          Following 2 testing scenarios are recommended
-#          (1)systemLocale=Japanese, userLocale=English
-#          (2)systemLocale=English, userLocale=Japanese
-# @run shell DefaultLocaleTest.sh
-#
-# 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
-
-OS=`uname`
-
-case "$OS" in
-        Windows* )
-            JAVAC="${TESTJAVA}/bin/javac -d . "
-            JAVA="${TESTJAVA}/bin/java -classpath . "
-            JAVAW="${TESTJAVA}/bin/javaw -classpath . "
-
-            ${JAVAC} ${TESTSRC}/DefaultLocaleTest.java
-            props=`${JAVA} DefaultLocaleTest`
-            ${JAVAW} DefaultLocaleTest $props
-            if [ $? -ne 0 ]
-            then
-                echo "Test fails"
-                exit 1
-            fi
-            echo "Test passes"
-            exit 0
-        ;;
-        CYGWIN* )
-            JAVAC="${TESTJAVA}/bin/javac -d . "
-            JAVA="${TESTJAVA}/bin/java -classpath . "
-            JAVAW="${TESTJAVA}/bin/javaw -classpath . "
-
-            ${JAVAC} ${TESTSRC}/DefaultLocaleTest.java
-            ${JAVA} DefaultLocaleTest | sed -e s@\\r@@g > x.out
-            ${JAVAW} DefaultLocaleTest `cat x.out`
-            if [ $? -ne 0 ]
-            then
-                echo "Test fails"
-                exit 1
-            fi
-            echo "Test passes"
-            exit 0
-        ;;
-        * )
-        echo "Non-windows environment; test vacuously succeeds."
-        exit 0;
-    ;;
-esac
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/DefaultLocaleTestRun.java	Tue Jan 03 08:33:30 2012 -0800
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 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 4958170 4891531 4989534
+ * @summary Test to see if default java locale settings are identical
+          when launch jvm from java and javaw respectively. Test
+          should be run on Windows with different user locale and
+          system locale setting in ControlPanel's RegionSetting.
+          Following 2 testing scenarios are recommended
+          (1)systemLocale=Japanese, userLocale=English
+          (2)systemLocale=English, userLocale=Japanese
+ * @compile -XDignore.symbol.file DefaultLocaleTest.java TestHelper.java
+ * @run main DefaultLocaleTestRun
+ */
+import java.io.File;
+
+public class DefaultLocaleTestRun {
+    public static void main(String... args) {
+        if (!TestHelper.isWindows) {
+            System.out.println("Test passes vacuously on non-windows");
+            return;
+        }
+        TestHelper.TestResult tr = null;
+        tr = TestHelper.doExec(TestHelper.javaCmd,  "DefaultLocaleTest", "-w",
+                "x.out");
+        System.out.println(tr.testOutput);
+        tr = TestHelper.doExec(TestHelper.javawCmd, "DefaultLocaleTest", "-r",
+                "x.out");
+        System.out.println(tr.testOutput);
+        if (!tr.isOK()) {
+            throw new RuntimeException("Test failed");
+        }
+    }
+}
--- a/jdk/test/tools/launcher/TestHelper.java	Tue Jan 03 08:27:37 2012 -0800
+++ b/jdk/test/tools/launcher/TestHelper.java	Tue Jan 03 08:33:30 2012 -0800
@@ -49,6 +49,7 @@
     static final String JAVAHOME = System.getProperty("java.home");
     static final boolean isSDK = JAVAHOME.endsWith("jre");
     static final String javaCmd;
+    static final String javawCmd;
     static final String java64Cmd;
     static final String javacCmd;
     static final JavaCompiler compiler;
@@ -84,15 +85,29 @@
                 : new File(binDir, "java");
         javaCmd = javaCmdFile.getAbsolutePath();
         if (!javaCmdFile.canExecute()) {
-            throw new RuntimeException("java <" + TestHelper.javaCmd + "> must exist");
+            throw new RuntimeException("java <" + TestHelper.javaCmd +
+                    "> must exist and should be executable");
         }
 
         File javacCmdFile = (isWindows)
                 ? new File(binDir, "javac.exe")
                 : new File(binDir, "javac");
         javacCmd = javacCmdFile.getAbsolutePath();
+
+        if (isWindows) {
+            File javawCmdFile = new File(binDir, "javaw.exe");
+            javawCmd = javawCmdFile.getAbsolutePath();
+            if (!javawCmdFile.canExecute()) {
+                throw new RuntimeException("java <" + javawCmd +
+                        "> must exist and should be executable");
+            }
+        } else {
+            javawCmd = null;
+        }
+
         if (!javacCmdFile.canExecute()) {
-            throw new RuntimeException("java <" + javacCmd + "> must exist");
+            throw new RuntimeException("java <" + javacCmd +
+                    "> must exist and should be executable");
         }
         if (isSolaris) {
             File sparc64BinDir = new File(binDir,isSparc ? "sparcv9" : "amd64");