jdk/test/tools/launcher/ClassPathWildCard.sh
changeset 2 90ce3da70b43
child 4663 dfea6ffdb0dc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/ClassPathWildCard.sh	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,162 @@
+#!/bin/sh
+# @test
+# @bug  6510337
+# @run shell ClassPathWildCard.sh 
+# @summary A very basic/rudimentary test for classpath wildcards
+# @author Kumar Srinivasan 
+
+#
+# Copyright 2007 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# An elaborate wildcard testing is done by test/tools/javac/Paths/wcMineField.sh, 
+# this test is a small subset, primarily to ensure that java and javaw launcher
+# behave consistently, while we are it , doesn't hurt to test other platforms
+# as well.
+
+# For debugging
+# set -x
+# _JAVA_LAUNCHER_DEBUG=true ; export _JAVA_LAUNCHER_DEBUG
+
+# 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
+JAVAC=$TESTJAVA/bin/javac
+JAR=$TESTJAVA/bin/jar
+
+OUTEXT=".out"
+
+# We write out a test file, as javaw does not have any notion about
+# stdout or stderr.
+
+EmitJavaFile() {
+    fullName=$1
+    fileName=`basename $fullName .java`
+
+(
+    printf "import java.io.*;\n"
+    printf "public class %s {\n" $fileName
+    printf "   public static void main(String[] args) {"
+    printf "       String m = \"%s:\";\n" $fileName
+    printf "       m = m.concat(\"java.class.path=\");\n"
+    printf "       m = m.concat(System.getProperty(\"java.class.path\",\"NONE\"));\n"
+    printf "       System.out.println(m);\n"
+    printf "       try {\n"
+    printf "          PrintStream ps = new PrintStream(\"%s\");\n" $fileName$OUTEXT
+    printf "          ps.println(m);\n"
+    printf "          ps.flush(); ps.close();\n"
+    printf "       } catch (Exception e) {\n"
+    printf "           System.out.println(e.getMessage());\n"
+    printf "           System.exit(1);\n"
+    printf "       }\n"
+    printf "   }\n"
+    printf "}\n"
+) > $fullName
+}
+
+CreateClassFiles() {
+  Exp=$1
+  [ -d Test${Exp} ] || mkdir Test${Exp} 
+  EmitJavaFile Test${Exp}/Test${Exp}.java
+  $JAVAC  -d Test${Exp} Test${Exp}/Test${Exp}.java || exit 1
+}
+
+CreateJarFiles() {
+  Exp=$1
+  [ -d JarDir ] || mkdir JarDir
+  CreateClassFiles $Exp
+  $JAR -cvf JarDir/Test${Exp}.jar -C Test${Exp} . || exit 1
+}
+
+CheckFail() {
+  if [ ! -f ${1}${OUTEXT} ]; then
+     printf "Error: %s fails\n" "$1"
+     exit 1
+  fi
+}
+
+# Note: see CR:6328875 this is why we use the NOOP variable 
+# below on Windows
+
+ExecJava() {
+  variant=$1
+  NOOP=$2
+
+  # Test JAR files first
+  rm -f TestA${OUTEXT}
+  $JAVA${variant} -classpath JarDir/"*"$NOOP TestA || exit 1
+  CheckFail TestA
+
+  rm -f TestB${OUTEXT}
+  $JAVA${variant} -classpath JarDir/"*"$NOOP TestB || exit 1
+  CheckFail TestB
+
+
+  # Throw some class files into the mix
+  cp TestC/*.class JarDir
+  cp TestD/*.class JarDir
+
+  rm -f TestC${OUTEXT}
+  $JAVA${variant} -classpath JarDir${PATHSEP}JarDir/"*"$NOOP TestC || exit 1
+  CheckFail TestC
+
+  rm -f TestD${OUTEXT}
+  $JAVA${variant} -classpath JarDir${PATHSEP}JarDir/"*"$NOOP TestD || exit 1
+  CheckFail TestD
+}
+
+CreateJarFiles A
+CreateJarFiles B
+CreateClassFiles C
+CreateClassFiles D
+
+OS=`uname -s`
+case $OS in 
+    Windows*|Cygwin*)
+        PATHSEP=";"
+        ExecJava "" "${PATHSEP}NOOPDIR"
+        ExecJava "w" "${PATHSEP}NOOPDIR"
+        break
+    ;;
+
+    *)
+        PATHSEP=":"
+        ExecJava "" ""
+	break
+    ;;
+esac
+
+exit 0