#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# 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 4758537 4809833
# @summary Test that javac and java find files in similar ways
# @author Martin Buchholz
#
# @run shell/timeout=600 MineField.sh
# To run this test manually, simply do ./MineField.sh
#----------------------------------------------------------------
# The search order for classes used by both java and javac is:
#
# -Xbootclasspath/p:<path>
# -endorseddirs <dirs> or -Djava.endorsed.dirs=<dirs> (search for jar/zip only)
# -bootclasspath <path> or -Xbootclasspath:<path>
# -Xbootclasspath/a:<path>
# -extdirs <dirs> or -Djava.ext.dirs=<dirs> (search for jar/zip only)
# -classpath <path>, -cp <path>, env CLASSPATH=<path>
#
# Peculiarities of the class file search:
# - Empty elements of the (user) classpath default to ".",
# while empty elements of other paths are ignored.
# - Only for the user classpath is an empty string value equivalent to "."
# - Specifying a bootclasspath on the command line obliterates any
# previous -Xbootclasspath/p: or -Xbootclasspath/a: command line flags.
#----------------------------------------------------------------
set -u
#----------------------------------------------------------------
# Prepare the "Minefield"
#----------------------------------------------------------------
}
echo 'public class Lib {public static void f(){}}' > Lib.java
echo 'public class Lib {/* Bad */}' > Lib.java
#----------------------------------------------------------------
# Verify that javac class search order is the same as java's
#----------------------------------------------------------------
-Xbootclasspath/p:"BadClass" \
-J-Djava.endorsed.dirs="GooJar" \
-Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \
-J-Djava.endorsed.dirs="BadJar${PS}GooZip" \
-Xbootclasspath/p:"BadClass" \
-Djava.endorsed.dirs="GooJar" \
-Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \
-Djava.endorsed.dirs="BadJar${PS}GooZip" \
#----------------------------------------------------------------
-Xbootclasspath/p:"GooClass" \
-bootclasspath "$BCP${PS}BadZip/Lib.zip" \
-Xbootclasspath/p:"BadClass${PS}GooClass" \
-bootclasspath "$BCP${PS}GooZip/Lib.zip${PS}BadClass" \
-Xbootclasspath/p:"BadJar/Lib.jar" \
-Xbootclasspath:"$BCP${PS}GooClass" \
-Xbootclasspath/p:"GooClass" \
-Xbootclasspath:"$BCP${PS}BadZip/Lib.zip" \
-Xbootclasspath/p:"BadClass${PS}GooClass" \
-Xbootclasspath:"$BCP${PS}GooZip/Lib.zip${PS}BadClass" \
#----------------------------------------------------------------
-bootclasspath "$BCP${PS}GooZip/Lib.zip" \
-Xbootclasspath/p:"BadClass" \
-bootclasspath "$BCP${PS}BadZip/Lib.zip" \
-Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \
-Xbootclasspath:"$BCP${PS}GooClass" \
-Xbootclasspath/p:"BadClass" \
-Xbootclasspath:"$BCP${PS}BadClass" \
-Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \
#----------------------------------------------------------------
-Xbootclasspath/p:"BadClass" \
-Xbootclasspath/a:"GooClass" \
-Xbootclasspath/p:"GooClass${PS}BadClass" \
-Xbootclasspath/a:"BadClass" \
-Xbootclasspath/p:"BadClass" \
-Xbootclasspath/a:"GooClass" \
-Xbootclasspath/p:"GooClass${PS}BadClass" \
-Xbootclasspath/a:"BadClass" \
#----------------------------------------------------------------
-Xbootclasspath/p:"GooClass" \
-J-Djava.endorsed.dirs="BadZip" \
-bootclasspath "GooClass${PS}$BCP" \
-Xbootclasspath/p:"BadClass" \
-J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \
-bootclasspath "BadClass${PS}$BCP" \
-Xbootclasspath/p:"GooClass" \
-Djava.endorsed.dirs="BadZip" \
-Xbootclasspath:"GooClass${PS}$BCP" \
-Xbootclasspath/p:"BadClass" \
-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \
-Xbootclasspath:"BadClass${PS}$BCP" \
#----------------------------------------------------------------
-Xbootclasspath/p:"GooClass" \
-Xbootclasspath:"BadClass${PS}$BCP" \
-Xbootclasspath/a:"GooClass" \
-Xbootclasspath/p:"BadClass" \
-Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \
-Xbootclasspath/a:"BadClass" \
-Xbootclasspath/p:"GooClass" \
-Xbootclasspath:"BadClass${PS}$BCP" \
-Xbootclasspath/a:"GooClass" \
-Xbootclasspath/p:"BadClass" \
-Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \
-Xbootclasspath/a:"BadClass" \
#----------------------------------------------------------------
-J-Djava.endorsed.dirs="BadZip" \
-Xbootclasspath:"GooClass${PS}$BCP" \
-endorseddirs "BadClass${PS}GooZip${PS}BadJar" \
-Xbootclasspath:"BadClass${PS}$BCP" \
-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \
-Xbootclasspath:"BadClass${PS}$BCP" \
-J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \
-Xbootclasspath:"BadClass${PS}$BCP" \
-Djava.endorsed.dirs="BadZip" \
-Xbootclasspath:"GooClass${PS}$BCP" \
-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \
-Xbootclasspath:"BadClass${PS}$BCP" \
#----------------------------------------------------------------
-Xbootclasspath/a:"BadClass" \
-extdirs "GooZip" \
-Xbootclasspath/a:"GooClass${PS}BadClass" \
-extdirs "BadZip" \
-Xbootclasspath/a:"BadClass" \
-Djava.ext.dirs="GooZip" \
-Xbootclasspath/a:"GooClass${PS}BadClass" \
-Djava.ext.dirs="BadZip" \
#----------------------------------------------------------------
-bootclasspath "$BCP${PS}BadJar/Lib.jar" \
-J-Djava.ext.dir="GooJar" \
-bootclasspath "$BCP${PS}GooJar/Lib.jar${PS}BadClass" \
-J-Djava.ext.dir="BadJar" \
-Xbootclasspath:"$BCP${PS}BadJar/Lib.jar" \
-Djava.ext.dirs="GooJar" \
-Xbootclasspath:"$BCP${PS}GooJar/Lib.jar${PS}BadClass" \
-Djava.ext.dirs="BadJar" \
#----------------------------------------------------------------
-extdirs "GooClass${PS}BadZip" \
-extdirs "BadClass${PS}GooZip${PS}BadJar" \
-Djava.ext.dirs="GooZip${PS}BadJar" \
-J-Djava.ext.dirs="GooZip${PS}BadJar" \
-Djava.ext.dirs="GooClass${PS}BadZip" \
-Djava.ext.dirs="GooZip${PS}BadJar" \
#----------------------------------------------------------------
#----------------------------------------------------------------
# Check behavior of empty paths and empty path elements
#----------------------------------------------------------------
# Unspecified classpath defaults to "."
# Empty classpath elements mean "."
# All other empty path elements are ignored.