--- a/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
8c0bdeecd7c0f9ce3f3762a51991f755cb3a972c jdk9-b10
0809c9a4d36e6291f1c4384604c4bbf29e975722 jdk9-b11
0d1f816217dce5e72187f167cc1816080cbeb453 jdk9-b12
+1a30593dcb9802faec3b6edb24d86ca088594e4e jdk9-b13
--- a/.hgtags-top-repo Thu May 15 10:37:52 2014 -0700
+++ b/.hgtags-top-repo Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
fa13f2b926f8426876ec03e7903f3ee0ee150f2e jdk9-b10
ab55a18a95e1990a588929d5d29db3eb9985fea0 jdk9-b11
59f6350295f9681fe5956d8bc889bf341914c6cb jdk9-b12
+5800456add07e1a68170a229fb5e27376f8875e5 jdk9-b13
--- a/common/autoconf/boot-jdk.m4 Thu May 15 10:37:52 2014 -0700
+++ b/common/autoconf/boot-jdk.m4 Fri May 16 14:35:37 2014 -0700
@@ -331,8 +331,8 @@
# Finally, set some other options...
- # When compiling code to be executed by the Boot JDK, force jdk7 compatibility.
- BOOT_JDK_SOURCETARGET="-source 7 -target 7"
+ # When compiling code to be executed by the Boot JDK, force jdk8 compatibility.
+ BOOT_JDK_SOURCETARGET="-source 8 -target 8"
AC_SUBST(BOOT_JDK_SOURCETARGET)
AC_SUBST(JAVAC_FLAGS)
])
--- a/common/autoconf/generated-configure.sh Thu May 15 10:37:52 2014 -0700
+++ b/common/autoconf/generated-configure.sh Fri May 16 14:35:37 2014 -0700
@@ -4243,7 +4243,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1398861894
+DATE_WHEN_GENERATED=1399969244
###############################################################################
#
@@ -26004,8 +26004,8 @@
# Finally, set some other options...
- # When compiling code to be executed by the Boot JDK, force jdk7 compatibility.
- BOOT_JDK_SOURCETARGET="-source 7 -target 7"
+ # When compiling code to be executed by the Boot JDK, force jdk8 compatibility.
+ BOOT_JDK_SOURCETARGET="-source 8 -target 8"
--- a/common/bin/hgforest.sh Thu May 15 10:37:52 2014 -0700
+++ b/common/bin/hgforest.sh Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,4 @@
#!/bin/sh
-
#
# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -23,25 +22,40 @@
# questions.
#
-# Shell script for a fast parallel forest command
+# Shell script for a fast parallel forest/trees command
-global_opts=""
-status_output="/dev/stdout"
-qflag="false"
-vflag="false"
-sflag="false"
+usage() {
+ echo "usage: $0 [-h|--help] [-q|--quiet] [-v|--verbose] [-s|--sequential] [--] <command> [commands...]" > ${status_output}
+ echo "Environment variables which modify behaviour:"
+ echo " HGFOREST_QUIET : (boolean) If 'true' then standard output is redirected to /dev/null"
+ echo " HGFOREST_VERBOSE : (boolean) If 'true' then Mercurial asked to produce verbose output"
+ echo " HGFOREST_SEQUENTIAL : (boolean) If 'true' then repos are processed sequentially. Disables concurrency"
+ echo " HGFOREST_GLOBALOPTS : (string, must begin with space) Additional Mercurial global options"
+ echo " HGFOREST_REDIRECT : (file path) Redirect standard output to specified file"
+ echo " HGFOREST_FIFOS : (boolean) Default behaviour for FIFO detection. Does not override FIFOs disabled"
+ echo " HGFOREST_CONCURRENCY: (positive integer) Number of repos to process concurrently"
+ echo " HGFOREST_DEBUG : (boolean) If 'true' then temp files are retained"
+ exit 1
+}
+
+global_opts="${HGFOREST_GLOBALOPTS:-}"
+status_output="${HGFOREST_REDIRECT:-/dev/stdout}"
+qflag="${HGFOREST_QUIET:-false}"
+vflag="${HGFOREST_VERBOSE:-false}"
+sflag="${HGFOREST_SEQUENTIAL:-false}"
while [ $# -gt 0 ]
do
case $1 in
+ -h | --help )
+ usage
+ ;;
+
-q | --quiet )
qflag="true"
- global_opts="${global_opts} -q"
- status_output="/dev/null"
;;
-v | --verbose )
vflag="true"
- global_opts="${global_opts} -v"
;;
-s | --sequential )
@@ -63,39 +77,60 @@
shift
done
-
-command="$1"; shift
-command_args="$@"
+# silence standard output?
+if [ ${qflag} = "true" ] ; then
+ global_opts="${global_opts} -q"
+ status_output="/dev/null"
+fi
-usage() {
- echo "usage: $0 [-q|--quiet] [-v|--verbose] [-s|--sequential] [--] <command> [commands...]" > ${status_output}
- exit 1
-}
+# verbose output?
+if [ ${vflag} = "true" ] ; then
+ global_opts="${global_opts} -v"
+fi
-if [ "x" = "x$command" ] ; then
+# Make sure we have a command.
+if [ $# -lt 1 -o -z "${1:-}" ] ; then
echo "ERROR: No command to hg supplied!"
usage
fi
-# Check if we can use fifos for monitoring sub-process completion.
-on_windows=`uname -s | egrep -ic -e 'cygwin|msys'`
-if [ ${on_windows} = "1" ]; then
- # cygwin has (2014-04-18) broken (single writer only) FIFOs
- # msys has (2014-04-18) no FIFOs.
- have_fifos="false"
-else
- have_fifos="true"
-fi
+command="$1"; shift
+command_args="${@:-}"
# Clean out the temporary directory that stores the pid files.
tmp=/tmp/forest.$$
rm -f -r ${tmp}
mkdir -p ${tmp}
+
+if [ "${HGFOREST_DEBUG:-false}" = "true" ] ; then
+ echo "DEBUG: temp files are in: ${tmp}"
+fi
+
+# Check if we can use fifos for monitoring sub-process completion.
+echo "1" > ${tmp}/read
+while_subshell=1
+while read line; do
+ while_subshell=0
+ break;
+done < ${tmp}/read
+rm ${tmp}/read
+
+on_windows=`uname -s | egrep -ic -e 'cygwin|msys'`
+
+if [ ${while_subshell} = "1" -o ${on_windows} = "1" ]; then
+ # cygwin has (2014-04-18) broken (single writer only) FIFOs
+ # msys has (2014-04-18) no FIFOs.
+ # older shells create a sub-shell for redirect to while
+ have_fifos="false"
+else
+ have_fifos="${HGFOREST_FIFOS:-true}"
+fi
+
safe_interrupt () {
if [ -d ${tmp} ]; then
if [ "`ls ${tmp}/*.pid`" != "" ]; then
- echo "Waiting for processes ( `cat ${tmp}/*.pid | tr '\n' ' '`) to terminate nicely!" > ${status_output}
+ echo "Waiting for processes ( `cat ${tmp}/.*.pid ${tmp}/*.pid 2> /dev/null | tr '\n' ' '`) to terminate nicely!" > ${status_output}
sleep 1
# Pipe stderr to dev/null to silence kill, that complains when trying to kill
# a subprocess that has already exited.
@@ -110,10 +145,12 @@
nice_exit () {
if [ -d ${tmp} ]; then
- if [ "`ls ${tmp}`" != "" ]; then
+ if [ "`ls -A ${tmp} 2> /dev/null`" != "" ]; then
wait
fi
- rm -f -r ${tmp}
+ if [ "${HGFOREST_DEBUG:-false}" != "true" ] ; then
+ rm -f -r ${tmp}
+ fi
fi
}
@@ -128,17 +165,20 @@
repos=""
repos_extra=""
if [ "${command}" = "clone" -o "${command}" = "fclone" -o "${command}" = "tclone" ] ; then
+ # we must be a clone
if [ ! -f .hg/hgrc ] ; then
echo "ERROR: Need initial repository to use this script" > ${status_output}
exit 1
fi
+ # the clone must know where it came from (have a default pull path).
pull_default=`hg paths default`
if [ "${pull_default}" = "" ] ; then
echo "ERROR: Need initial clone with 'hg paths default' defined" > ${status_output}
exit 1
fi
+ # determine which sub repos need to be cloned.
for i in ${subrepos} ; do
if [ ! -f ${i}/.hg/hgrc ] ; then
repos="${repos} ${i}"
@@ -147,12 +187,15 @@
pull_default_tail=`echo ${pull_default} | sed -e 's@^.*://[^/]*/\(.*\)@\1@'`
- if [ "${command_args}" != "" ] ; then
+ if [ -n "${command_args}" ] ; then
+ # if there is an "extra sources" path then reparent "extra" repos to that path
if [ "x${pull_default}" = "x${pull_default_tail}" ] ; then
echo "ERROR: Need initial clone from non-local source" > ${status_output}
exit 1
fi
pull_extra="${command_args}/${pull_default_tail}"
+
+ # determine which extra subrepos need to be cloned.
for i in ${subrepos_extra} ; do
if [ ! -f ${i}/.hg/hgrc ] ; then
repos_extra="${repos_extra} ${i}"
@@ -160,7 +203,7 @@
done
else
if [ "x${pull_default}" = "x${pull_default_tail}" ] ; then
- # local source repo. Copy the extras ones that exist there.
+ # local source repo. Clone the "extra" subrepos that exist there.
for i in ${subrepos_extra} ; do
if [ -f ${pull_default}/${i}/.hg/hgrc -a ! -f ${i}/.hg/hgrc ] ; then
# sub-repo there in source but not here
@@ -169,13 +212,17 @@
done
fi
fi
- at_a_time=2
+
# Any repos to deal with?
if [ "${repos}" = "" -a "${repos_extra}" = "" ] ; then
echo "No repositories to process." > ${status_output}
exit
fi
+
+ # Repos to process concurrently. Clone does better with low concurrency.
+ at_a_time="${HGFOREST_CONCURRENCY:-2}"
else
+ # Process command for all of the present repos
for i in . ${subrepos} ${subrepos_extra} ; do
if [ -d ${i}/.hg ] ; then
repos="${repos} ${i}"
@@ -189,6 +236,7 @@
fi
# any of the repos locked?
+ locked=""
for i in ${repos} ; do
if [ -h ${i}/.hg/store/lock -o -f ${i}/.hg/store/lock ] ; then
locked="${i} ${locked}"
@@ -198,34 +246,39 @@
echo "ERROR: These repositories are locked: ${locked}" > ${status_output}
exit 1
fi
- at_a_time=8
+
+ # Repos to process concurrently.
+ at_a_time="${HGFOREST_CONCURRENCY:-8}"
fi
# Echo out what repositories we do a command on.
echo "# Repositories: ${repos} ${repos_extra}" > ${status_output}
if [ "${command}" = "serve" ] ; then
- # "serve" is run for all the repos.
+ # "serve" is run for all the repos as one command.
(
(
+ cwd=`pwd`
+ serving=`basename ${cwd}`
(
echo "[web]"
- echo "description = $(basename $(pwd))"
+ echo "description = ${serving}"
echo "allow_push = *"
echo "push_ssl = False"
echo "[paths]"
- for i in ${repos} ${repos_extra} ; do
+ for i in ${repos} ; do
if [ "${i}" != "." ] ; then
- echo "/$(basename $(pwd))/${i} = ${i}"
+ echo "/${serving}/${i} = ${i}"
else
- echo "/$(basename $(pwd)) = $(pwd)"
+ echo "/${serving} = ${cwd}"
fi
done
) > ${tmp}/serve.web-conf
- echo "serving root repo $(basename $(pwd))"
+ echo "serving root repo ${serving}" > ${status_output}
+ echo "hg${global_opts} serve" > ${status_output}
(PYTHONUNBUFFERED=true hg${global_opts} serve -A ${status_output} -E ${status_output} --pid-file ${tmp}/serve.pid --web-conf ${tmp}/serve.web-conf; echo "$?" > ${tmp}/serve.pid.rc ) 2>&1 &
) 2>&1 | sed -e "s@^@serve: @" > ${status_output}
) &
@@ -234,81 +287,93 @@
# n is the number of subprocess started or which might still be running.
n=0
- if [ $have_fifos = "true" ]; then
+ if [ ${have_fifos} = "true" ]; then
# if we have fifos use them to detect command completion.
mkfifo ${tmp}/fifo
exec 3<>${tmp}/fifo
- if [ "${sflag}" = "true" ] ; then
- # force sequential
- at_a_time=1
- fi
fi
+ # iterate over all of the subrepos.
for i in ${repos} ${repos_extra} ; do
n=`expr ${n} '+' 1`
repopidfile=`echo ${i} | sed -e 's@./@@' -e 's@/@_@g'`
reponame=`echo ${i} | sed -e :a -e 's/^.\{1,20\}$/ &/;ta'`
pull_base="${pull_default}"
- for j in $repos_extra ; do
- if [ "$i" = "$j" ] ; then
- pull_base="${pull_extra}"
+
+ # regular repo or "extra" repo?
+ for j in ${repos_extra} ; do
+ if [ "${i}" = "${j}" ] ; then
+ # it's an "extra"
+ pull_base="${pull_extra}"
fi
done
+
+ # remove trailing slash
pull_base="`echo ${pull_base} | sed -e 's@[/]*$@@'`"
+
+ # execute the command on the subrepo
(
(
if [ "${command}" = "clone" -o "${command}" = "fclone" -o "${command}" = "tclone" ] ; then
- pull_newrepo="${pull_base}/${i}"
- path="`dirname ${i}`"
- if [ "${path}" != "." ] ; then
+ # some form of clone
+ clone_newrepo="${pull_base}/${i}"
+ parent_path="`dirname ${i}`"
+ if [ "${parent_path}" != "." ] ; then
times=0
- while [ ! -d "${path}" ] ## nested repo, ensure containing dir exists
- do
+ while [ ! -d "${parent_path}" ] ; do ## nested repo, ensure containing dir exists
+ if [ "${sflag}" = "true" ] ; then
+ # Missing parent is fatal during sequential operation.
+ echo "ERROR: Missing parent path: ${parent_path}" > ${status_output}
+ exit 1
+ fi
times=`expr ${times} '+' 1`
if [ `expr ${times} '%' 10` -eq 0 ] ; then
- echo "${path} still not created, waiting..." > ${status_output}
+ echo "${parent_path} still not created, waiting..." > ${status_output}
fi
sleep 5
done
fi
- echo "hg${global_opts} clone ${pull_newrepo} ${i}" > ${status_output}
- (PYTHONUNBUFFERED=true hg${global_opts} clone ${pull_newrepo} ${i}; echo "$?" > ${tmp}/${repopidfile}.pid.rc ) 2>&1 &
+ # run the clone command.
+ echo "hg${global_opts} clone ${clone_newrepo} ${i}" > ${status_output}
+ (PYTHONUNBUFFERED=true hg${global_opts} clone ${clone_newrepo} ${i}; echo "$?" > ${tmp}/${repopidfile}.pid.rc ) 2>&1 &
else
+ # run the command.
echo "cd ${i} && hg${global_opts} ${command} ${command_args}" > ${status_output}
cd ${i} && (PYTHONUNBUFFERED=true hg${global_opts} ${command} ${command_args}; echo "$?" > ${tmp}/${repopidfile}.pid.rc ) 2>&1 &
fi
echo $! > ${tmp}/${repopidfile}.pid
) 2>&1 | sed -e "s@^@${reponame}: @" > ${status_output}
- if [ $have_fifos = "true" ]; then
- echo "${reponame}" >&3
+ # tell the fifo waiter that this subprocess is done.
+ if [ ${have_fifos} = "true" ]; then
+ echo "${i}" >&3
fi
) &
- if [ $have_fifos = "true" ]; then
- # check on count of running subprocesses and possibly wait for completion
- if [ ${at_a_time} -lt ${n} ] ; then
- # read will block until there are completed subprocesses
- while read repo_done; do
- n=`expr ${n} '-' 1`
- if [ ${n} -lt ${at_a_time} ] ; then
- # we should start more subprocesses
- break;
- fi
- done <&3
- fi
+ if [ "${sflag}" = "true" ] ; then
+ # complete this task before starting another.
+ wait
else
- if [ "${sflag}" = "false" ] ; then
+ if [ "${have_fifos}" = "true" ]; then
+ # check on count of running subprocesses and possibly wait for completion
+ if [ ${n} -ge ${at_a_time} ] ; then
+ # read will block until there are completed subprocesses
+ while read repo_done; do
+ n=`expr ${n} '-' 1`
+ if [ ${n} -lt ${at_a_time} ] ; then
+ # we should start more subprocesses
+ break;
+ fi
+ done <&3
+ fi
+ else
# Compare completions to starts
- completed="`(ls -1 ${tmp}/*.pid.rc 2> /dev/null | wc -l) || echo 0`"
- while [ ${at_a_time} -lt `expr ${n} '-' ${completed}` ] ; do
+ completed="`(ls -a1 ${tmp}/*.pid.rc 2> /dev/null | wc -l) || echo 0`"
+ while [ `expr ${n} '-' ${completed}` -ge ${at_a_time} ] ; do
# sleep a short time to give time for something to complete
sleep 1
- completed="`(ls -1 ${tmp}/*.pid.rc 2> /dev/null | wc -l) || echo 0`"
+ completed="`(ls -a1 ${tmp}/*.pid.rc 2> /dev/null | wc -l) || echo 0`"
done
- else
- # complete this task before starting another.
- wait
fi
fi
done
@@ -320,11 +385,12 @@
# Terminate with exit 0 only if all subprocesses were successful
ec=0
if [ -d ${tmp} ]; then
- for rc in ${tmp}/*.pid.rc ; do
+ rcfiles="`(ls -a ${tmp}/*.pid.rc 2> /dev/null) || echo ''`"
+ for rc in ${rcfiles} ; do
exit_code=`cat ${rc} | tr -d ' \n\r'`
if [ "${exit_code}" != "0" ] ; then
- repo="`echo ${rc} | sed -e s@^${tmp}@@ -e 's@/*\([^/]*\)\.pid\.rc$@\1@' -e 's@_@/@g'`"
- echo "WARNING: ${repo} exited abnormally ($exit_code)" > ${status_output}
+ repo="`echo ${rc} | sed -e 's@^'${tmp}'@@' -e 's@/*\([^/]*\)\.pid\.rc$@\1@' -e 's@_@/@g'`"
+ echo "WARNING: ${repo} exited abnormally (${exit_code})" > ${status_output}
ec=1
fi
done
--- a/corba/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/corba/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
3bd4039dfc632fd7fc8418a25a3dcc34d1cd4019 jdk9-b10
77ea0a2503582a28e4e66be7239a49a0d1dd313f jdk9-b11
e212cdcc8c11f0ba5acf6f5ddb596c4c545a93f9 jdk9-b12
+088eec4c36f4d7f250fcd19c4969bf698e3d2cdc jdk9-b13
--- a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java Thu May 15 10:37:52 2014 -0700
+++ b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java Fri May 16 14:35:37 2014 -0700
@@ -25,8 +25,6 @@
package com.sun.corba.se.spi.orb;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Map ;
import java.util.HashMap ;
import java.util.Properties ;
@@ -44,16 +42,13 @@
import com.sun.corba.se.spi.protocol.RequestDispatcherRegistry ;
import com.sun.corba.se.spi.protocol.ClientDelegateFactory ;
import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher ;
-import com.sun.corba.se.spi.protocol.CorbaMessageMediator ;
import com.sun.corba.se.spi.protocol.PIHandler ;
import com.sun.corba.se.spi.resolver.LocalResolver ;
import com.sun.corba.se.spi.resolver.Resolver ;
import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory ;
-import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo;
import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager;
import com.sun.corba.se.spi.monitoring.MonitoringConstants;
import com.sun.corba.se.spi.monitoring.MonitoringManager;
-import com.sun.corba.se.spi.monitoring.MonitoringManagerFactory;
import com.sun.corba.se.spi.monitoring.MonitoringFactories;
import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ;
@@ -62,11 +57,6 @@
import com.sun.corba.se.spi.ior.ObjectKeyFactory ;
import com.sun.corba.se.spi.ior.IOR ;
-import com.sun.corba.se.spi.orbutil.closure.Closure ;
-
-import com.sun.corba.se.spi.orb.Operation ;
-import com.sun.corba.se.spi.orb.ORBData ;
-import com.sun.corba.se.spi.orb.ORBVersion ;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager;
import com.sun.corba.se.spi.oa.OAInvocationInfo ;
@@ -99,8 +89,6 @@
import com.sun.corba.se.impl.presentation.rmi.PresentationManagerImpl ;
-import sun.misc.JavaAWTAccess;
-
public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
implements Broker, TypeCodeFactory
{
@@ -146,9 +134,9 @@
// This map is needed for resolving recursive type code placeholders
// based on the unique repository id.
// XXX Should this be a WeakHashMap for GC?
- private Map typeCodeMap ;
+ private Map<String, TypeCodeImpl> typeCodeMap;
- private TypeCodeImpl[] primitiveTypeCodeConstants ;
+ private TypeCodeImpl[] primitiveTypeCodeConstants;
// ByteBufferPool - needed by both ORBImpl and ORBSingleton
ByteBufferPool byteBufferPool;
@@ -169,16 +157,18 @@
// wrapperMap maintains a table of LogWrapper instances used by
// different classes to log exceptions. The key is a StringPair
// representing LogDomain and ExceptionGroup.
- private Map wrapperMap ;
+ private Map<StringPair, LogWrapperBase> wrapperMap;
static class Holder {
static final PresentationManager defaultPresentationManager =
setupPresentationManager();
}
- private static final Map<Object, PresentationManager> pmContexts = new HashMap<>();
+ private static final Map<Object, PresentationManager> pmContexts =
+ new ConcurrentHashMap<>();
- private static Map staticWrapperMap = new ConcurrentHashMap();
+ private static Map<StringPair, LogWrapperBase> staticWrapperMap =
+ new ConcurrentHashMap<>();
protected MonitoringManager monitoringManager;
@@ -245,28 +235,12 @@
public static PresentationManager getPresentationManager()
{
SecurityManager sm = System.getSecurityManager();
- JavaAWTAccess javaAwtAccess = sun.misc.SharedSecrets.getJavaAWTAccess();
+ sun.misc.JavaAWTAccess javaAwtAccess = sun.misc.SharedSecrets.getJavaAWTAccess();
if (sm != null && javaAwtAccess != null) {
- Object appletContext;
- try {
- Class<?> clazz = JavaAWTAccess.class;
- Method method = clazz.getMethod("getAppletContext");
- appletContext = method.invoke(javaAwtAccess);
- } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- InternalError err = new InternalError();
- err.initCause(e);
- throw err;
- }
-
+ final Object appletContext = javaAwtAccess.getAppletContext();
if (appletContext != null) {
- synchronized (pmContexts) {
- PresentationManager pm = pmContexts.get(appletContext);
- if (pm == null) {
- pm = setupPresentationManager();
- pmContexts.put(appletContext, pm);
- }
- return pm;
- }
+ return pmContexts.computeIfAbsent(appletContext,
+ x -> setupPresentationManager());
}
}
@@ -290,13 +264,13 @@
{
// Initialize logging first, since it is needed nearly
// everywhere (for example, in TypeCodeImpl).
- wrapperMap = new ConcurrentHashMap();
+ wrapperMap = new ConcurrentHashMap<>();
wrapper = ORBUtilSystemException.get( this,
CORBALogDomains.RPC_PRESENTATION ) ;
omgWrapper = OMGSystemException.get( this,
CORBALogDomains.RPC_PRESENTATION ) ;
- typeCodeMap = new HashMap();
+ typeCodeMap = new HashMap<>();
primitiveTypeCodeConstants = new TypeCodeImpl[] {
new TypeCodeImpl(this, TCKind._tk_null),
@@ -363,7 +337,7 @@
public synchronized TypeCodeImpl getTypeCode(String id)
{
checkShutdownState();
- return (TypeCodeImpl)typeCodeMap.get(id);
+ return typeCodeMap.get(id);
}
public MonitoringManager getMonitoringManager( ) {
@@ -526,35 +500,23 @@
/** get the log wrapper class (its type is dependent on the exceptionGroup) for the
* given log domain and exception group in this ORB instance.
*/
- public LogWrapperBase getLogWrapper( String logDomain,
- String exceptionGroup, LogWrapperFactory factory )
+ public LogWrapperBase getLogWrapper(String logDomain,
+ String exceptionGroup, LogWrapperFactory factory)
{
- StringPair key = new StringPair( logDomain, exceptionGroup ) ;
-
- LogWrapperBase logWrapper = (LogWrapperBase)wrapperMap.get( key );
- if (logWrapper == null) {
- logWrapper = factory.create( getLogger( logDomain ) );
- wrapperMap.put( key, logWrapper );
- }
-
- return logWrapper;
+ return wrapperMap.computeIfAbsent(
+ new StringPair(logDomain, exceptionGroup),
+ x -> factory.create(getLogger(logDomain)));
}
/** get the log wrapper class (its type is dependent on the exceptionGroup) for the
* given log domain and exception group in this ORB instance.
*/
- public static LogWrapperBase staticGetLogWrapper( String logDomain,
- String exceptionGroup, LogWrapperFactory factory )
+ public static LogWrapperBase staticGetLogWrapper(String logDomain,
+ String exceptionGroup, LogWrapperFactory factory)
{
- StringPair key = new StringPair( logDomain, exceptionGroup ) ;
-
- LogWrapperBase logWrapper = (LogWrapperBase)staticWrapperMap.get( key );
- if (logWrapper == null) {
- logWrapper = factory.create( staticGetLogger( logDomain ) );
- staticWrapperMap.put( key, logWrapper );
- }
-
- return logWrapper;
+ return staticWrapperMap.computeIfAbsent(
+ new StringPair(logDomain, exceptionGroup),
+ x -> factory.create(staticGetLogger(logDomain)));
}
// get a reference to a ByteBufferPool, a pool of NIO ByteBuffers
--- a/hotspot/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -415,3 +415,4 @@
ebc44d040cd149d2120d69fe183a3dae7840f4b4 jdk9-b10
783309c3a1a629a452673399dcfa83ef7eca94d8 jdk9-b11
1c383bb39e2849ca62cb763f4e182a29b421d60a jdk9-b12
+456ad9c99133803d4e1433124c85a6fd141b9ac9 jdk9-b13
--- a/hotspot/make/aix/makefiles/vm.make Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/make/aix/makefiles/vm.make Fri May 16 14:35:37 2014 -0700
@@ -136,8 +136,6 @@
JVM = jvm
LIBJVM = lib$(JVM).so
-CFLAGS += -DALLOW_OPERATOR_NEW_USAGE
-
LIBJVM_DEBUGINFO = lib$(JVM).debuginfo
LIBJVM_DIZ = lib$(JVM).diz
--- a/hotspot/make/bsd/makefiles/vm.make Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/make/bsd/makefiles/vm.make Fri May 16 14:35:37 2014 -0700
@@ -146,9 +146,6 @@
ifeq ($(OS_VENDOR), Darwin)
LIBJVM = lib$(JVM).dylib
CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
- ifeq (${VERSION}, $(filter ${VERSION}, debug fastdebug))
- CFLAGS += -DALLOW_OPERATOR_NEW_USAGE
- endif
LIBJVM_DEBUGINFO = lib$(JVM).dylib.dSYM
LIBJVM_DIZ = lib$(JVM).diz
--- a/hotspot/make/windows/projectfiles/common/Makefile Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/make/windows/projectfiles/common/Makefile Fri May 16 14:35:37 2014 -0700
@@ -93,7 +93,7 @@
!if "$(HOTSPOT_RELEASE_VERSION)" != ""
HOTSPOT_RELEASE_VERSION="\\\"$(HOTSPOT_RELEASE_VERSION)\\\""
!else
-HOTSPOT_RELEASE_VERSION="\\\"$(JRE_RELEASE_VERSION)\\\""
+HOTSPOT_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
!endif
# Define HOTSPOT_VM_DISTRO if HOTSPOT_VM_DISTRO is set,
# and if it is not see if we have the src/closed directory
@@ -105,9 +105,18 @@
!else
HOTSPOT_VM_DISTRO="\\\"OpenJDK\\\""
!endif
+!if "$(JDK_BUILD_NUMBER)" != ""
+JDK_BUILD_NUMBER="\\\"$(JDK_BUILD_NUMBER)\\\""
+!else
+JDK_BUILD_NUMBER="\\\"00\\\""
+!endif
!endif
-ReleaseOptions = -define HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) -define JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) -define HOTSPOT_VM_DISTRO=$(HOTSPOT_VM_DISTRO)
+JDK_MAJOR_VERSION="\\\"$(JDK_MAJOR_VER)\\\""
+JDK_MINOR_VERSION="\\\"$(JDK_MINOR_VER)\\\""
+JDK_MICRO_VERSION="\\\"$(JDK_MICRO_VER)\\\""
+
+ReleaseOptions = -define HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) -define JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) -define HOTSPOT_VM_DISTRO=$(HOTSPOT_VM_DISTRO) -define JDK_MAJOR_VERSION=$(JDK_MAJOR_VERSION) -define JDK_MINOR_VERSION=$(JDK_MINOR_VERSION) -define JDK_MICRO_VERSION=$(JDK_MICRO_VERSION) -define JDK_BUILD_NUMBER=$(JDK_BUILD_NUMBER)
ProjectCreatorIDEOptions = $(ProjectCreatorIDEOptions) $(ReleaseOptions)
$(HOTSPOTBUILDSPACE)/$(ProjectFile): $(HOTSPOTBUILDSPACE)/classes/ProjectCreator.class
--- a/hotspot/src/os/aix/vm/os_aix.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/os/aix/vm/os_aix.cpp Fri May 16 14:35:37 2014 -0700
@@ -1871,7 +1871,7 @@
// properties.
// ShmBkBlock: base class for all blocks in the shared memory bookkeeping
-class ShmBkBlock {
+class ShmBkBlock : public CHeapObj<mtInternal> {
ShmBkBlock* _next;
--- a/hotspot/src/os/aix/vm/porting_aix.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/os/aix/vm/porting_aix.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,6 +23,7 @@
*/
#include "asm/assembler.hpp"
+#include "memory/allocation.hpp"
#include "loadlib_aix.hpp"
#include "porting_aix.hpp"
#include "utilities/debug.hpp"
@@ -67,7 +68,7 @@
// a primitive string map. Should this turn out to be a performance
// problem, a better hashmap has to be used.
class fixed_strings {
- struct node {
+ struct node : public CHeapObj<mtInternal> {
char* v;
node* next;
};
--- a/hotspot/src/share/vm/adlc/adlc.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/adlc/adlc.hpp Fri May 16 14:35:37 2014 -0700
@@ -30,12 +30,13 @@
//
// standard library constants
-#include "stdio.h"
-#include "stdlib.h"
#include <iostream>
-#include "string.h"
-#include "ctype.h"
-#include "stdarg.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
#include <sys/types.h>
/* Make sure that we have the intptr_t and uintptr_t definitions */
--- a/hotspot/src/share/vm/adlc/adlparse.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/adlc/adlparse.hpp Fri May 16 14:35:37 2014 -0700
@@ -64,8 +64,6 @@
class PeepConstraint;
class PeepReplace;
-// class ostream; // ostream is a typedef in some systems
-
extern char *toUpper(const char *str);
//---------------------------ADLParser-----------------------------------------
--- a/hotspot/src/share/vm/adlc/filebuff.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/adlc/filebuff.cpp Fri May 16 14:35:37 2014 -0700
@@ -25,8 +25,6 @@
// FILEBUFF.CPP - Routines for handling a parser file buffer
#include "adlc.hpp"
-using namespace std;
-
//------------------------------FileBuff---------------------------------------
// Create a new parsing buffer
FileBuff::FileBuff( BufferedFile *fptr, ArchDesc& archDesc) : _fp(fptr), _AD(archDesc) {
--- a/hotspot/src/share/vm/adlc/filebuff.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/adlc/filebuff.hpp Fri May 16 14:35:37 2014 -0700
@@ -26,9 +26,6 @@
#define SHARE_VM_ADLC_FILEBUFF_HPP
// FILEBUFF.HPP - Definitions for parser file buffering routines
-#include <iostream>
-
-using namespace std;
// STRUCTURE FOR HANDLING INPUT AND OUTPUT FILES
--- a/hotspot/src/share/vm/adlc/output_h.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/adlc/output_h.cpp Fri May 16 14:35:37 2014 -0700
@@ -211,7 +211,7 @@
const char *type = oper->ideal_type(globals);
if (!strcmp(type, "ConI")) {
if (i > 0) fprintf(fp,", ");
- fprintf(fp," int32 _c%d;\n", i);
+ fprintf(fp," int32_t _c%d;\n", i);
}
else if (!strcmp(type, "ConP")) {
if (i > 0) fprintf(fp,", ");
@@ -307,7 +307,7 @@
assert(num_consts == 1, "Bad component list detected.\n");
switch( constant_type ) {
case Form::idealI : {
- fprintf(fp,is_ideal_bool ? "BoolTest::mask c%d" : "int32 c%d", i);
+ fprintf(fp,is_ideal_bool ? "BoolTest::mask c%d" : "int32_t c%d", i);
break;
}
case Form::idealN : { fprintf(fp,"const TypeNarrowOop *c%d", i); break; }
@@ -326,7 +326,7 @@
while((comp = lst.iter()) != NULL) {
if (!strcmp(comp->base_type(globals), "ConI")) {
if (i > 0) fprintf(fp,", ");
- fprintf(fp,"int32 c%d", i);
+ fprintf(fp,"int32_t c%d", i);
i++;
}
else if (!strcmp(comp->base_type(globals), "ConP")) {
--- a/hotspot/src/share/vm/asm/assembler.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/asm/assembler.cpp Fri May 16 14:35:37 2014 -0700
@@ -119,7 +119,7 @@
L.patch_instructions((MacroAssembler*)this);
}
-void AbstractAssembler::generate_stack_overflow_check( int frame_size_in_bytes) {
+void AbstractAssembler::generate_stack_overflow_check(int frame_size_in_bytes) {
if (UseStackBanging) {
// Each code entry causes one stack bang n pages down the stack where n
// is configurable by StackShadowPages. The setting depends on the maximum
@@ -134,7 +134,7 @@
// is greater than a page.
const int page_size = os::vm_page_size();
- int bang_end = StackShadowPages*page_size;
+ int bang_end = StackShadowPages * page_size;
// This is how far the previous frame's stack banging extended.
const int bang_end_safe = bang_end;
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Fri May 16 14:35:37 2014 -0700
@@ -875,6 +875,7 @@
int runtime_visible_type_annotations_length = 0;
u1* runtime_invisible_type_annotations = NULL;
int runtime_invisible_type_annotations_length = 0;
+ bool runtime_invisible_annotations_exists = false;
bool runtime_invisible_type_annotations_exists = false;
while (attributes_count--) {
cfs->guarantee_more(6, CHECK); // attribute_name_index, attribute_length
@@ -920,6 +921,10 @@
}
generic_signature_index = cfs->get_u2(CHECK);
} else if (attribute_name == vmSymbols::tag_runtime_visible_annotations()) {
+ if (runtime_visible_annotations != NULL) {
+ classfile_parse_error(
+ "Multiple RuntimeVisibleAnnotations attributes for field in class file %s", CHECK);
+ }
runtime_visible_annotations_length = attribute_length;
runtime_visible_annotations = cfs->get_u1_buffer();
assert(runtime_visible_annotations != NULL, "null visible annotations");
@@ -928,11 +933,18 @@
parsed_annotations,
CHECK);
cfs->skip_u1(runtime_visible_annotations_length, CHECK);
- } else if (PreserveAllAnnotations && attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
- runtime_invisible_annotations_length = attribute_length;
- runtime_invisible_annotations = cfs->get_u1_buffer();
- assert(runtime_invisible_annotations != NULL, "null invisible annotations");
- cfs->skip_u1(runtime_invisible_annotations_length, CHECK);
+ } else if (attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
+ if (runtime_invisible_annotations_exists) {
+ classfile_parse_error(
+ "Multiple RuntimeInvisibleAnnotations attributes for field in class file %s", CHECK);
+ }
+ runtime_invisible_annotations_exists = true;
+ if (PreserveAllAnnotations) {
+ runtime_invisible_annotations_length = attribute_length;
+ runtime_invisible_annotations = cfs->get_u1_buffer();
+ assert(runtime_invisible_annotations != NULL, "null invisible annotations");
+ }
+ cfs->skip_u1(attribute_length, CHECK);
} else if (attribute_name == vmSymbols::tag_runtime_visible_type_annotations()) {
if (runtime_visible_type_annotations != NULL) {
classfile_parse_error(
@@ -2066,7 +2078,9 @@
int runtime_visible_type_annotations_length = 0;
u1* runtime_invisible_type_annotations = NULL;
int runtime_invisible_type_annotations_length = 0;
+ bool runtime_invisible_annotations_exists = false;
bool runtime_invisible_type_annotations_exists = false;
+ bool runtime_invisible_parameter_annotations_exists = false;
u1* annotation_default = NULL;
int annotation_default_length = 0;
@@ -2295,6 +2309,10 @@
cfs->guarantee_more(2, CHECK_(nullHandle)); // generic_signature_index
generic_signature_index = cfs->get_u2_fast();
} else if (method_attribute_name == vmSymbols::tag_runtime_visible_annotations()) {
+ if (runtime_visible_annotations != NULL) {
+ classfile_parse_error(
+ "Multiple RuntimeVisibleAnnotations attributes for method in class file %s", CHECK_(nullHandle));
+ }
runtime_visible_annotations_length = method_attribute_length;
runtime_visible_annotations = cfs->get_u1_buffer();
assert(runtime_visible_annotations != NULL, "null visible annotations");
@@ -2302,22 +2320,45 @@
runtime_visible_annotations_length, &parsed_annotations,
CHECK_(nullHandle));
cfs->skip_u1(runtime_visible_annotations_length, CHECK_(nullHandle));
- } else if (PreserveAllAnnotations && method_attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
- runtime_invisible_annotations_length = method_attribute_length;
- runtime_invisible_annotations = cfs->get_u1_buffer();
- assert(runtime_invisible_annotations != NULL, "null invisible annotations");
- cfs->skip_u1(runtime_invisible_annotations_length, CHECK_(nullHandle));
+ } else if (method_attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
+ if (runtime_invisible_annotations_exists) {
+ classfile_parse_error(
+ "Multiple RuntimeInvisibleAnnotations attributes for method in class file %s", CHECK_(nullHandle));
+ }
+ runtime_invisible_annotations_exists = true;
+ if (PreserveAllAnnotations) {
+ runtime_invisible_annotations_length = method_attribute_length;
+ runtime_invisible_annotations = cfs->get_u1_buffer();
+ assert(runtime_invisible_annotations != NULL, "null invisible annotations");
+ }
+ cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
} else if (method_attribute_name == vmSymbols::tag_runtime_visible_parameter_annotations()) {
+ if (runtime_visible_parameter_annotations != NULL) {
+ classfile_parse_error(
+ "Multiple RuntimeVisibleParameterAnnotations attributes for method in class file %s", CHECK_(nullHandle));
+ }
runtime_visible_parameter_annotations_length = method_attribute_length;
runtime_visible_parameter_annotations = cfs->get_u1_buffer();
assert(runtime_visible_parameter_annotations != NULL, "null visible parameter annotations");
cfs->skip_u1(runtime_visible_parameter_annotations_length, CHECK_(nullHandle));
- } else if (PreserveAllAnnotations && method_attribute_name == vmSymbols::tag_runtime_invisible_parameter_annotations()) {
- runtime_invisible_parameter_annotations_length = method_attribute_length;
- runtime_invisible_parameter_annotations = cfs->get_u1_buffer();
- assert(runtime_invisible_parameter_annotations != NULL, "null invisible parameter annotations");
- cfs->skip_u1(runtime_invisible_parameter_annotations_length, CHECK_(nullHandle));
+ } else if (method_attribute_name == vmSymbols::tag_runtime_invisible_parameter_annotations()) {
+ if (runtime_invisible_parameter_annotations_exists) {
+ classfile_parse_error(
+ "Multiple RuntimeInvisibleParameterAnnotations attributes for method in class file %s", CHECK_(nullHandle));
+ }
+ runtime_invisible_parameter_annotations_exists = true;
+ if (PreserveAllAnnotations) {
+ runtime_invisible_parameter_annotations_length = method_attribute_length;
+ runtime_invisible_parameter_annotations = cfs->get_u1_buffer();
+ assert(runtime_invisible_parameter_annotations != NULL, "null invisible parameter annotations");
+ }
+ cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
} else if (method_attribute_name == vmSymbols::tag_annotation_default()) {
+ if (annotation_default != NULL) {
+ classfile_parse_error(
+ "Multiple AnnotationDefault attributes for method in class file %s",
+ CHECK_(nullHandle));
+ }
annotation_default_length = method_attribute_length;
annotation_default = cfs->get_u1_buffer();
assert(annotation_default != NULL, "null annotation default");
@@ -2846,6 +2887,8 @@
u1* runtime_invisible_type_annotations = NULL;
int runtime_invisible_type_annotations_length = 0;
bool runtime_invisible_type_annotations_exists = false;
+ bool runtime_invisible_annotations_exists = false;
+ bool parsed_source_debug_ext_annotations_exist = false;
u1* inner_classes_attribute_start = NULL;
u4 inner_classes_attribute_length = 0;
u2 enclosing_method_class_index = 0;
@@ -2873,6 +2916,11 @@
parse_classfile_sourcefile_attribute(CHECK);
} else if (tag == vmSymbols::tag_source_debug_extension()) {
// Check for SourceDebugExtension tag
+ if (parsed_source_debug_ext_annotations_exist) {
+ classfile_parse_error(
+ "Multiple SourceDebugExtension attributes in class file %s", CHECK);
+ }
+ parsed_source_debug_ext_annotations_exist = true;
parse_classfile_source_debug_extension_attribute((int)attribute_length, CHECK);
} else if (tag == vmSymbols::tag_inner_classes()) {
// Check for InnerClasses tag
@@ -2909,6 +2957,10 @@
}
parse_classfile_signature_attribute(CHECK);
} else if (tag == vmSymbols::tag_runtime_visible_annotations()) {
+ if (runtime_visible_annotations != NULL) {
+ classfile_parse_error(
+ "Multiple RuntimeVisibleAnnotations attributes in class file %s", CHECK);
+ }
runtime_visible_annotations_length = attribute_length;
runtime_visible_annotations = cfs->get_u1_buffer();
assert(runtime_visible_annotations != NULL, "null visible annotations");
@@ -2917,11 +2969,18 @@
parsed_annotations,
CHECK);
cfs->skip_u1(runtime_visible_annotations_length, CHECK);
- } else if (PreserveAllAnnotations && tag == vmSymbols::tag_runtime_invisible_annotations()) {
- runtime_invisible_annotations_length = attribute_length;
- runtime_invisible_annotations = cfs->get_u1_buffer();
- assert(runtime_invisible_annotations != NULL, "null invisible annotations");
- cfs->skip_u1(runtime_invisible_annotations_length, CHECK);
+ } else if (tag == vmSymbols::tag_runtime_invisible_annotations()) {
+ if (runtime_invisible_annotations_exists) {
+ classfile_parse_error(
+ "Multiple RuntimeInvisibleAnnotations attributes in class file %s", CHECK);
+ }
+ runtime_invisible_annotations_exists = true;
+ if (PreserveAllAnnotations) {
+ runtime_invisible_annotations_length = attribute_length;
+ runtime_invisible_annotations = cfs->get_u1_buffer();
+ assert(runtime_invisible_annotations != NULL, "null invisible annotations");
+ }
+ cfs->skip_u1(attribute_length, CHECK);
} else if (tag == vmSymbols::tag_enclosing_method()) {
if (parsed_enclosingmethod_attribute) {
classfile_parse_error("Multiple EnclosingMethod attributes in class file %s", CHECK);
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Fri May 16 14:35:37 2014 -0700
@@ -25,7 +25,7 @@
#include "precompiled.hpp"
#include "classfile/altHashing.hpp"
#include "classfile/javaClasses.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/vmSymbols.hpp"
#include "code/debugInfo.hpp"
#include "code/pcDesc.hpp"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/classfile/stringTable.cpp Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,533 @@
+/*
+ * Copyright (c) 1997, 2014, 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "classfile/altHashing.hpp"
+#include "classfile/javaClasses.hpp"
+#include "classfile/stringTable.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "gc_interface/collectedHeap.inline.hpp"
+#include "memory/allocation.inline.hpp"
+#include "memory/filemap.hpp"
+#include "memory/gcLocker.inline.hpp"
+#include "oops/oop.inline.hpp"
+#include "oops/oop.inline2.hpp"
+#include "runtime/mutexLocker.hpp"
+#include "utilities/hashtable.inline.hpp"
+#if INCLUDE_ALL_GCS
+#include "gc_implementation/g1/g1StringDedup.hpp"
+#endif
+
+PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
+
+// the number of buckets a thread claims
+const int ClaimChunkSize = 32;
+
+#ifdef ASSERT
+class StableMemoryChecker : public StackObj {
+ enum { _bufsize = wordSize*4 };
+
+ address _region;
+ jint _size;
+ u1 _save_buf[_bufsize];
+
+ int sample(u1* save_buf) {
+ if (_size <= _bufsize) {
+ memcpy(save_buf, _region, _size);
+ return _size;
+ } else {
+ // copy head and tail
+ memcpy(&save_buf[0], _region, _bufsize/2);
+ memcpy(&save_buf[_bufsize/2], _region + _size - _bufsize/2, _bufsize/2);
+ return (_bufsize/2)*2;
+ }
+ }
+
+ public:
+ StableMemoryChecker(const void* region, jint size) {
+ _region = (address) region;
+ _size = size;
+ sample(_save_buf);
+ }
+
+ bool verify() {
+ u1 check_buf[sizeof(_save_buf)];
+ int check_size = sample(check_buf);
+ return (0 == memcmp(_save_buf, check_buf, check_size));
+ }
+
+ void set_region(const void* region) { _region = (address) region; }
+};
+#endif
+
+
+// --------------------------------------------------------------------------
+StringTable* StringTable::_the_table = NULL;
+
+bool StringTable::_needs_rehashing = false;
+
+volatile int StringTable::_parallel_claimed_idx = 0;
+
+// Pick hashing algorithm
+unsigned int StringTable::hash_string(const jchar* s, int len) {
+ return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) :
+ java_lang_String::hash_code(s, len);
+}
+
+oop StringTable::lookup(int index, jchar* name,
+ int len, unsigned int hash) {
+ int count = 0;
+ for (HashtableEntry<oop, mtSymbol>* l = bucket(index); l != NULL; l = l->next()) {
+ count++;
+ if (l->hash() == hash) {
+ if (java_lang_String::equals(l->literal(), name, len)) {
+ return l->literal();
+ }
+ }
+ }
+ // If the bucket size is too deep check if this hash code is insufficient.
+ if (count >= BasicHashtable<mtSymbol>::rehash_count && !needs_rehashing()) {
+ _needs_rehashing = check_rehash_table(count);
+ }
+ return NULL;
+}
+
+
+oop StringTable::basic_add(int index_arg, Handle string, jchar* name,
+ int len, unsigned int hashValue_arg, TRAPS) {
+
+ assert(java_lang_String::equals(string(), name, len),
+ "string must be properly initialized");
+ // Cannot hit a safepoint in this function because the "this" pointer can move.
+ No_Safepoint_Verifier nsv;
+
+ // Check if the symbol table has been rehashed, if so, need to recalculate
+ // the hash value and index before second lookup.
+ unsigned int hashValue;
+ int index;
+ if (use_alternate_hashcode()) {
+ hashValue = hash_string(name, len);
+ index = hash_to_index(hashValue);
+ } else {
+ hashValue = hashValue_arg;
+ index = index_arg;
+ }
+
+ // Since look-up was done lock-free, we need to check if another
+ // thread beat us in the race to insert the symbol.
+
+ oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int)
+ if (test != NULL) {
+ // Entry already added
+ return test;
+ }
+
+ HashtableEntry<oop, mtSymbol>* entry = new_entry(hashValue, string());
+ add_entry(index, entry);
+ return string();
+}
+
+
+oop StringTable::lookup(Symbol* symbol) {
+ ResourceMark rm;
+ int length;
+ jchar* chars = symbol->as_unicode(length);
+ return lookup(chars, length);
+}
+
+
+oop StringTable::lookup(jchar* name, int len) {
+ unsigned int hash = hash_string(name, len);
+ int index = the_table()->hash_to_index(hash);
+ return the_table()->lookup(index, name, len, hash);
+}
+
+
+oop StringTable::intern(Handle string_or_null, jchar* name,
+ int len, TRAPS) {
+ unsigned int hashValue = hash_string(name, len);
+ int index = the_table()->hash_to_index(hashValue);
+ oop found_string = the_table()->lookup(index, name, len, hashValue);
+
+ // Found
+ if (found_string != NULL) return found_string;
+
+ debug_only(StableMemoryChecker smc(name, len * sizeof(name[0])));
+ assert(!Universe::heap()->is_in_reserved(name),
+ "proposed name of symbol must be stable");
+
+ Handle string;
+ // try to reuse the string if possible
+ if (!string_or_null.is_null()) {
+ string = string_or_null;
+ } else {
+ string = java_lang_String::create_from_unicode(name, len, CHECK_NULL);
+ }
+
+#if INCLUDE_ALL_GCS
+ if (G1StringDedup::is_enabled()) {
+ // Deduplicate the string before it is interned. Note that we should never
+ // deduplicate a string after it has been interned. Doing so will counteract
+ // compiler optimizations done on e.g. interned string literals.
+ G1StringDedup::deduplicate(string());
+ }
+#endif
+
+ // Grab the StringTable_lock before getting the_table() because it could
+ // change at safepoint.
+ MutexLocker ml(StringTable_lock, THREAD);
+
+ // Otherwise, add to symbol to table
+ return the_table()->basic_add(index, string, name, len,
+ hashValue, CHECK_NULL);
+}
+
+oop StringTable::intern(Symbol* symbol, TRAPS) {
+ if (symbol == NULL) return NULL;
+ ResourceMark rm(THREAD);
+ int length;
+ jchar* chars = symbol->as_unicode(length);
+ Handle string;
+ oop result = intern(string, chars, length, CHECK_NULL);
+ return result;
+}
+
+
+oop StringTable::intern(oop string, TRAPS)
+{
+ if (string == NULL) return NULL;
+ ResourceMark rm(THREAD);
+ int length;
+ Handle h_string (THREAD, string);
+ jchar* chars = java_lang_String::as_unicode_string(string, length, CHECK_NULL);
+ oop result = intern(h_string, chars, length, CHECK_NULL);
+ return result;
+}
+
+
+oop StringTable::intern(const char* utf8_string, TRAPS) {
+ if (utf8_string == NULL) return NULL;
+ ResourceMark rm(THREAD);
+ int length = UTF8::unicode_length(utf8_string);
+ jchar* chars = NEW_RESOURCE_ARRAY(jchar, length);
+ UTF8::convert_to_unicode(utf8_string, chars, length);
+ Handle string;
+ oop result = intern(string, chars, length, CHECK_NULL);
+ return result;
+}
+
+void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
+ buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
+}
+
+void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
+ // Readers of the table are unlocked, so we should only be removing
+ // entries at a safepoint.
+ assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
+ const int limit = the_table()->table_size();
+
+ for (;;) {
+ // Grab next set of buckets to scan
+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
+ if (start_idx >= limit) {
+ // End of table
+ break;
+ }
+
+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
+ buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
+ }
+}
+
+void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
+ const int limit = the_table()->table_size();
+
+ assert(0 <= start_idx && start_idx <= limit,
+ err_msg("start_idx (%d) is out of bounds", start_idx));
+ assert(0 <= end_idx && end_idx <= limit,
+ err_msg("end_idx (%d) is out of bounds", end_idx));
+ assert(start_idx <= end_idx,
+ err_msg("Index ordering: start_idx=%d, end_idx=%d",
+ start_idx, end_idx));
+
+ for (int i = start_idx; i < end_idx; i += 1) {
+ HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
+ while (entry != NULL) {
+ assert(!entry->is_shared(), "CDS not used for the StringTable");
+
+ f->do_oop((oop*)entry->literal_addr());
+
+ entry = entry->next();
+ }
+ }
+}
+
+void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
+ const int limit = the_table()->table_size();
+
+ assert(0 <= start_idx && start_idx <= limit,
+ err_msg("start_idx (%d) is out of bounds", start_idx));
+ assert(0 <= end_idx && end_idx <= limit,
+ err_msg("end_idx (%d) is out of bounds", end_idx));
+ assert(start_idx <= end_idx,
+ err_msg("Index ordering: start_idx=%d, end_idx=%d",
+ start_idx, end_idx));
+
+ for (int i = start_idx; i < end_idx; ++i) {
+ HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
+ HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
+ while (entry != NULL) {
+ assert(!entry->is_shared(), "CDS not used for the StringTable");
+
+ if (is_alive->do_object_b(entry->literal())) {
+ if (f != NULL) {
+ f->do_oop((oop*)entry->literal_addr());
+ }
+ p = entry->next_addr();
+ } else {
+ *p = entry->next();
+ the_table()->free_entry(entry);
+ (*removed)++;
+ }
+ (*processed)++;
+ entry = *p;
+ }
+ }
+}
+
+void StringTable::oops_do(OopClosure* f) {
+ buckets_oops_do(f, 0, the_table()->table_size());
+}
+
+void StringTable::possibly_parallel_oops_do(OopClosure* f) {
+ const int limit = the_table()->table_size();
+
+ for (;;) {
+ // Grab next set of buckets to scan
+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
+ if (start_idx >= limit) {
+ // End of table
+ break;
+ }
+
+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
+ buckets_oops_do(f, start_idx, end_idx);
+ }
+}
+
+// This verification is part of Universe::verify() and needs to be quick.
+// See StringTable::verify_and_compare() below for exhaustive verification.
+void StringTable::verify() {
+ for (int i = 0; i < the_table()->table_size(); ++i) {
+ HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i);
+ for ( ; p != NULL; p = p->next()) {
+ oop s = p->literal();
+ guarantee(s != NULL, "interned string is NULL");
+ unsigned int h = java_lang_String::hash_string(s);
+ guarantee(p->hash() == h, "broken hash in string table entry");
+ guarantee(the_table()->hash_to_index(h) == i,
+ "wrong index in string table");
+ }
+ }
+}
+
+void StringTable::dump(outputStream* st) {
+ the_table()->dump_table(st, "StringTable");
+}
+
+StringTable::VerifyRetTypes StringTable::compare_entries(
+ int bkt1, int e_cnt1,
+ HashtableEntry<oop, mtSymbol>* e_ptr1,
+ int bkt2, int e_cnt2,
+ HashtableEntry<oop, mtSymbol>* e_ptr2) {
+ // These entries are sanity checked by verify_and_compare_entries()
+ // before this function is called.
+ oop str1 = e_ptr1->literal();
+ oop str2 = e_ptr2->literal();
+
+ if (str1 == str2) {
+ tty->print_cr("ERROR: identical oop values (0x" PTR_FORMAT ") "
+ "in entry @ bucket[%d][%d] and entry @ bucket[%d][%d]",
+ (void *)str1, bkt1, e_cnt1, bkt2, e_cnt2);
+ return _verify_fail_continue;
+ }
+
+ if (java_lang_String::equals(str1, str2)) {
+ tty->print_cr("ERROR: identical String values in entry @ "
+ "bucket[%d][%d] and entry @ bucket[%d][%d]",
+ bkt1, e_cnt1, bkt2, e_cnt2);
+ return _verify_fail_continue;
+ }
+
+ return _verify_pass;
+}
+
+StringTable::VerifyRetTypes StringTable::verify_entry(int bkt, int e_cnt,
+ HashtableEntry<oop, mtSymbol>* e_ptr,
+ StringTable::VerifyMesgModes mesg_mode) {
+
+ VerifyRetTypes ret = _verify_pass; // be optimistic
+
+ oop str = e_ptr->literal();
+ if (str == NULL) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: NULL oop value in entry @ bucket[%d][%d]", bkt,
+ e_cnt);
+ }
+ // NULL oop means no more verifications are possible
+ return _verify_fail_done;
+ }
+
+ if (str->klass() != SystemDictionary::String_klass()) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: oop is not a String in entry @ bucket[%d][%d]",
+ bkt, e_cnt);
+ }
+ // not a String means no more verifications are possible
+ return _verify_fail_done;
+ }
+
+ unsigned int h = java_lang_String::hash_string(str);
+ if (e_ptr->hash() != h) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: broken hash value in entry @ bucket[%d][%d], "
+ "bkt_hash=%d, str_hash=%d", bkt, e_cnt, e_ptr->hash(), h);
+ }
+ ret = _verify_fail_continue;
+ }
+
+ if (the_table()->hash_to_index(h) != bkt) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: wrong index value for entry @ bucket[%d][%d], "
+ "str_hash=%d, hash_to_index=%d", bkt, e_cnt, h,
+ the_table()->hash_to_index(h));
+ }
+ ret = _verify_fail_continue;
+ }
+
+ return ret;
+}
+
+// See StringTable::verify() above for the quick verification that is
+// part of Universe::verify(). This verification is exhaustive and
+// reports on every issue that is found. StringTable::verify() only
+// reports on the first issue that is found.
+//
+// StringTable::verify_entry() checks:
+// - oop value != NULL (same as verify())
+// - oop value is a String
+// - hash(String) == hash in entry (same as verify())
+// - index for hash == index of entry (same as verify())
+//
+// StringTable::compare_entries() checks:
+// - oops are unique across all entries
+// - String values are unique across all entries
+//
+int StringTable::verify_and_compare_entries() {
+ assert(StringTable_lock->is_locked(), "sanity check");
+
+ int fail_cnt = 0;
+
+ // first, verify all the entries individually:
+ for (int bkt = 0; bkt < the_table()->table_size(); bkt++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr = the_table()->bucket(bkt);
+ for (int e_cnt = 0; e_ptr != NULL; e_ptr = e_ptr->next(), e_cnt++) {
+ VerifyRetTypes ret = verify_entry(bkt, e_cnt, e_ptr, _verify_with_mesgs);
+ if (ret != _verify_pass) {
+ fail_cnt++;
+ }
+ }
+ }
+
+ // Optimization: if the above check did not find any failures, then
+ // the comparison loop below does not need to call verify_entry()
+ // before calling compare_entries(). If there were failures, then we
+ // have to call verify_entry() to see if the entry can be passed to
+ // compare_entries() safely. When we call verify_entry() in the loop
+ // below, we do so quietly to void duplicate messages and we don't
+ // increment fail_cnt because the failures have already been counted.
+ bool need_entry_verify = (fail_cnt != 0);
+
+ // second, verify all entries relative to each other:
+ for (int bkt1 = 0; bkt1 < the_table()->table_size(); bkt1++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr1 = the_table()->bucket(bkt1);
+ for (int e_cnt1 = 0; e_ptr1 != NULL; e_ptr1 = e_ptr1->next(), e_cnt1++) {
+ if (need_entry_verify) {
+ VerifyRetTypes ret = verify_entry(bkt1, e_cnt1, e_ptr1,
+ _verify_quietly);
+ if (ret == _verify_fail_done) {
+ // cannot use the current entry to compare against other entries
+ continue;
+ }
+ }
+
+ for (int bkt2 = bkt1; bkt2 < the_table()->table_size(); bkt2++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr2 = the_table()->bucket(bkt2);
+ int e_cnt2;
+ for (e_cnt2 = 0; e_ptr2 != NULL; e_ptr2 = e_ptr2->next(), e_cnt2++) {
+ if (bkt1 == bkt2 && e_cnt2 <= e_cnt1) {
+ // skip the entries up to and including the one that
+ // we're comparing against
+ continue;
+ }
+
+ if (need_entry_verify) {
+ VerifyRetTypes ret = verify_entry(bkt2, e_cnt2, e_ptr2,
+ _verify_quietly);
+ if (ret == _verify_fail_done) {
+ // cannot compare against this entry
+ continue;
+ }
+ }
+
+ // compare two entries, report and count any failures:
+ if (compare_entries(bkt1, e_cnt1, e_ptr1, bkt2, e_cnt2, e_ptr2)
+ != _verify_pass) {
+ fail_cnt++;
+ }
+ }
+ }
+ }
+ }
+ return fail_cnt;
+}
+
+// Create a new table and using alternate hash code, populate the new table
+// with the existing strings. Set flag to use the alternate hash code afterwards.
+void StringTable::rehash_table() {
+ assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
+ // This should never happen with -Xshare:dump but it might in testing mode.
+ if (DumpSharedSpaces) return;
+ StringTable* new_table = new StringTable();
+
+ // Rehash the table
+ the_table()->move_to(new_table);
+
+ // Delete the table and buckets (entries are reused in new table).
+ delete _the_table;
+ // Don't check if we need rehashing until the table gets unbalanced again.
+ // Then rehash with a new global seed.
+ _needs_rehashing = false;
+ _the_table = new_table;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/classfile/stringTable.hpp Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 1997, 2013, 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.
+ *
+ */
+
+#ifndef SHARE_VM_CLASSFILE_STRINGTABLE_HPP
+#define SHARE_VM_CLASSFILE_STRINGTABLE_HPP
+
+#include "memory/allocation.inline.hpp"
+#include "utilities/hashtable.hpp"
+
+class StringTable : public Hashtable<oop, mtSymbol> {
+ friend class VMStructs;
+ friend class Symbol;
+
+private:
+ // The string table
+ static StringTable* _the_table;
+
+ // Set if one bucket is out of balance due to hash algorithm deficiency
+ static bool _needs_rehashing;
+
+ // Claimed high water mark for parallel chunked scanning
+ static volatile int _parallel_claimed_idx;
+
+ static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS);
+ oop basic_add(int index, Handle string_or_null, jchar* name, int len,
+ unsigned int hashValue, TRAPS);
+
+ oop lookup(int index, jchar* chars, int length, unsigned int hashValue);
+
+ // Apply the give oop closure to the entries to the buckets
+ // in the range [start_idx, end_idx).
+ static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
+ // Unlink or apply the give oop closure to the entries to the buckets
+ // in the range [start_idx, end_idx).
+ static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
+
+ StringTable() : Hashtable<oop, mtSymbol>((int)StringTableSize,
+ sizeof (HashtableEntry<oop, mtSymbol>)) {}
+
+ StringTable(HashtableBucket<mtSymbol>* t, int number_of_entries)
+ : Hashtable<oop, mtSymbol>((int)StringTableSize, sizeof (HashtableEntry<oop, mtSymbol>), t,
+ number_of_entries) {}
+public:
+ // The string table
+ static StringTable* the_table() { return _the_table; }
+
+ // Size of one bucket in the string table. Used when checking for rollover.
+ static uint bucket_size() { return sizeof(HashtableBucket<mtSymbol>); }
+
+ static void create_table() {
+ assert(_the_table == NULL, "One string table allowed.");
+ _the_table = new StringTable();
+ }
+
+ // GC support
+ // Delete pointers to otherwise-unreachable objects.
+ static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f) {
+ int processed = 0;
+ int removed = 0;
+ unlink_or_oops_do(cl, f, &processed, &removed);
+ }
+ static void unlink(BoolObjectClosure* cl) {
+ int processed = 0;
+ int removed = 0;
+ unlink_or_oops_do(cl, NULL, &processed, &removed);
+ }
+ static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
+ static void unlink(BoolObjectClosure* cl, int* processed, int* removed) {
+ unlink_or_oops_do(cl, NULL, processed, removed);
+ }
+ // Serially invoke "f->do_oop" on the locations of all oops in the table.
+ static void oops_do(OopClosure* f);
+
+ // Possibly parallel versions of the above
+ static void possibly_parallel_unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
+ static void possibly_parallel_unlink(BoolObjectClosure* cl, int* processed, int* removed) {
+ possibly_parallel_unlink_or_oops_do(cl, NULL, processed, removed);
+ }
+ static void possibly_parallel_oops_do(OopClosure* f);
+
+ // Hashing algorithm, used as the hash value used by the
+ // StringTable for bucket selection and comparison (stored in the
+ // HashtableEntry structures). This is used in the String.intern() method.
+ static unsigned int hash_string(const jchar* s, int len);
+
+ // Internal test.
+ static void test_alt_hash() PRODUCT_RETURN;
+
+ // Probing
+ static oop lookup(Symbol* symbol);
+ static oop lookup(jchar* chars, int length);
+
+ // Interning
+ static oop intern(Symbol* symbol, TRAPS);
+ static oop intern(oop string, TRAPS);
+ static oop intern(const char *utf8_string, TRAPS);
+
+ // Debugging
+ static void verify();
+ static void dump(outputStream* st);
+
+ enum VerifyMesgModes {
+ _verify_quietly = 0,
+ _verify_with_mesgs = 1
+ };
+
+ enum VerifyRetTypes {
+ _verify_pass = 0,
+ _verify_fail_continue = 1,
+ _verify_fail_done = 2
+ };
+
+ static VerifyRetTypes compare_entries(int bkt1, int e_cnt1,
+ HashtableEntry<oop, mtSymbol>* e_ptr1,
+ int bkt2, int e_cnt2,
+ HashtableEntry<oop, mtSymbol>* e_ptr2);
+ static VerifyRetTypes verify_entry(int bkt, int e_cnt,
+ HashtableEntry<oop, mtSymbol>* e_ptr,
+ VerifyMesgModes mesg_mode);
+ static int verify_and_compare_entries();
+
+ // Sharing
+ static void copy_buckets(char** top, char*end) {
+ the_table()->Hashtable<oop, mtSymbol>::copy_buckets(top, end);
+ }
+ static void copy_table(char** top, char*end) {
+ the_table()->Hashtable<oop, mtSymbol>::copy_table(top, end);
+ }
+ static void reverse() {
+ the_table()->Hashtable<oop, mtSymbol>::reverse();
+ }
+
+ // Rehash the symbol table if it gets out of balance
+ static void rehash_table();
+ static bool needs_rehashing() { return _needs_rehashing; }
+
+ // Parallel chunked scanning
+ static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
+ static int parallel_claimed_index() { return _parallel_claimed_idx; }
+};
+#endif // SHARE_VM_CLASSFILE_STRINGTABLE_HPP
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Fri May 16 14:35:37 2014 -0700
@@ -35,14 +35,10 @@
#include "oops/oop.inline2.hpp"
#include "runtime/mutexLocker.hpp"
#include "utilities/hashtable.inline.hpp"
-#if INCLUDE_ALL_GCS
-#include "gc_implementation/g1/g1StringDedup.hpp"
-#endif
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
// --------------------------------------------------------------------------
-
// the number of buckets a thread claims
const int ClaimChunkSize = 32;
@@ -589,493 +585,3 @@
}
}
#endif // PRODUCT
-
-// --------------------------------------------------------------------------
-
-#ifdef ASSERT
-class StableMemoryChecker : public StackObj {
- enum { _bufsize = wordSize*4 };
-
- address _region;
- jint _size;
- u1 _save_buf[_bufsize];
-
- int sample(u1* save_buf) {
- if (_size <= _bufsize) {
- memcpy(save_buf, _region, _size);
- return _size;
- } else {
- // copy head and tail
- memcpy(&save_buf[0], _region, _bufsize/2);
- memcpy(&save_buf[_bufsize/2], _region + _size - _bufsize/2, _bufsize/2);
- return (_bufsize/2)*2;
- }
- }
-
- public:
- StableMemoryChecker(const void* region, jint size) {
- _region = (address) region;
- _size = size;
- sample(_save_buf);
- }
-
- bool verify() {
- u1 check_buf[sizeof(_save_buf)];
- int check_size = sample(check_buf);
- return (0 == memcmp(_save_buf, check_buf, check_size));
- }
-
- void set_region(const void* region) { _region = (address) region; }
-};
-#endif
-
-
-// --------------------------------------------------------------------------
-StringTable* StringTable::_the_table = NULL;
-
-bool StringTable::_needs_rehashing = false;
-
-volatile int StringTable::_parallel_claimed_idx = 0;
-
-// Pick hashing algorithm
-unsigned int StringTable::hash_string(const jchar* s, int len) {
- return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) :
- java_lang_String::hash_code(s, len);
-}
-
-oop StringTable::lookup(int index, jchar* name,
- int len, unsigned int hash) {
- int count = 0;
- for (HashtableEntry<oop, mtSymbol>* l = bucket(index); l != NULL; l = l->next()) {
- count++;
- if (l->hash() == hash) {
- if (java_lang_String::equals(l->literal(), name, len)) {
- return l->literal();
- }
- }
- }
- // If the bucket size is too deep check if this hash code is insufficient.
- if (count >= BasicHashtable<mtSymbol>::rehash_count && !needs_rehashing()) {
- _needs_rehashing = check_rehash_table(count);
- }
- return NULL;
-}
-
-
-oop StringTable::basic_add(int index_arg, Handle string, jchar* name,
- int len, unsigned int hashValue_arg, TRAPS) {
-
- assert(java_lang_String::equals(string(), name, len),
- "string must be properly initialized");
- // Cannot hit a safepoint in this function because the "this" pointer can move.
- No_Safepoint_Verifier nsv;
-
- // Check if the symbol table has been rehashed, if so, need to recalculate
- // the hash value and index before second lookup.
- unsigned int hashValue;
- int index;
- if (use_alternate_hashcode()) {
- hashValue = hash_string(name, len);
- index = hash_to_index(hashValue);
- } else {
- hashValue = hashValue_arg;
- index = index_arg;
- }
-
- // Since look-up was done lock-free, we need to check if another
- // thread beat us in the race to insert the symbol.
-
- oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int)
- if (test != NULL) {
- // Entry already added
- return test;
- }
-
- HashtableEntry<oop, mtSymbol>* entry = new_entry(hashValue, string());
- add_entry(index, entry);
- return string();
-}
-
-
-oop StringTable::lookup(Symbol* symbol) {
- ResourceMark rm;
- int length;
- jchar* chars = symbol->as_unicode(length);
- return lookup(chars, length);
-}
-
-
-oop StringTable::lookup(jchar* name, int len) {
- unsigned int hash = hash_string(name, len);
- int index = the_table()->hash_to_index(hash);
- return the_table()->lookup(index, name, len, hash);
-}
-
-
-oop StringTable::intern(Handle string_or_null, jchar* name,
- int len, TRAPS) {
- unsigned int hashValue = hash_string(name, len);
- int index = the_table()->hash_to_index(hashValue);
- oop found_string = the_table()->lookup(index, name, len, hashValue);
-
- // Found
- if (found_string != NULL) return found_string;
-
- debug_only(StableMemoryChecker smc(name, len * sizeof(name[0])));
- assert(!Universe::heap()->is_in_reserved(name),
- "proposed name of symbol must be stable");
-
- Handle string;
- // try to reuse the string if possible
- if (!string_or_null.is_null()) {
- string = string_or_null;
- } else {
- string = java_lang_String::create_from_unicode(name, len, CHECK_NULL);
- }
-
-#if INCLUDE_ALL_GCS
- if (G1StringDedup::is_enabled()) {
- // Deduplicate the string before it is interned. Note that we should never
- // deduplicate a string after it has been interned. Doing so will counteract
- // compiler optimizations done on e.g. interned string literals.
- G1StringDedup::deduplicate(string());
- }
-#endif
-
- // Grab the StringTable_lock before getting the_table() because it could
- // change at safepoint.
- MutexLocker ml(StringTable_lock, THREAD);
-
- // Otherwise, add to symbol to table
- return the_table()->basic_add(index, string, name, len,
- hashValue, CHECK_NULL);
-}
-
-oop StringTable::intern(Symbol* symbol, TRAPS) {
- if (symbol == NULL) return NULL;
- ResourceMark rm(THREAD);
- int length;
- jchar* chars = symbol->as_unicode(length);
- Handle string;
- oop result = intern(string, chars, length, CHECK_NULL);
- return result;
-}
-
-
-oop StringTable::intern(oop string, TRAPS)
-{
- if (string == NULL) return NULL;
- ResourceMark rm(THREAD);
- int length;
- Handle h_string (THREAD, string);
- jchar* chars = java_lang_String::as_unicode_string(string, length, CHECK_NULL);
- oop result = intern(h_string, chars, length, CHECK_NULL);
- return result;
-}
-
-
-oop StringTable::intern(const char* utf8_string, TRAPS) {
- if (utf8_string == NULL) return NULL;
- ResourceMark rm(THREAD);
- int length = UTF8::unicode_length(utf8_string);
- jchar* chars = NEW_RESOURCE_ARRAY(jchar, length);
- UTF8::convert_to_unicode(utf8_string, chars, length);
- Handle string;
- oop result = intern(string, chars, length, CHECK_NULL);
- return result;
-}
-
-void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
- buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
-}
-
-void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
- // Readers of the table are unlocked, so we should only be removing
- // entries at a safepoint.
- assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
- const int limit = the_table()->table_size();
-
- for (;;) {
- // Grab next set of buckets to scan
- int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
- if (start_idx >= limit) {
- // End of table
- break;
- }
-
- int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
- buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
- }
-}
-
-void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
- const int limit = the_table()->table_size();
-
- assert(0 <= start_idx && start_idx <= limit,
- err_msg("start_idx (%d) is out of bounds", start_idx));
- assert(0 <= end_idx && end_idx <= limit,
- err_msg("end_idx (%d) is out of bounds", end_idx));
- assert(start_idx <= end_idx,
- err_msg("Index ordering: start_idx=%d, end_idx=%d",
- start_idx, end_idx));
-
- for (int i = start_idx; i < end_idx; i += 1) {
- HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
- assert(!entry->is_shared(), "CDS not used for the StringTable");
-
- f->do_oop((oop*)entry->literal_addr());
-
- entry = entry->next();
- }
- }
-}
-
-void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
- const int limit = the_table()->table_size();
-
- assert(0 <= start_idx && start_idx <= limit,
- err_msg("start_idx (%d) is out of bounds", start_idx));
- assert(0 <= end_idx && end_idx <= limit,
- err_msg("end_idx (%d) is out of bounds", end_idx));
- assert(start_idx <= end_idx,
- err_msg("Index ordering: start_idx=%d, end_idx=%d",
- start_idx, end_idx));
-
- for (int i = start_idx; i < end_idx; ++i) {
- HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
- HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
- assert(!entry->is_shared(), "CDS not used for the StringTable");
-
- if (is_alive->do_object_b(entry->literal())) {
- if (f != NULL) {
- f->do_oop((oop*)entry->literal_addr());
- }
- p = entry->next_addr();
- } else {
- *p = entry->next();
- the_table()->free_entry(entry);
- (*removed)++;
- }
- (*processed)++;
- entry = *p;
- }
- }
-}
-
-void StringTable::oops_do(OopClosure* f) {
- buckets_oops_do(f, 0, the_table()->table_size());
-}
-
-void StringTable::possibly_parallel_oops_do(OopClosure* f) {
- const int limit = the_table()->table_size();
-
- for (;;) {
- // Grab next set of buckets to scan
- int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
- if (start_idx >= limit) {
- // End of table
- break;
- }
-
- int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
- buckets_oops_do(f, start_idx, end_idx);
- }
-}
-
-// This verification is part of Universe::verify() and needs to be quick.
-// See StringTable::verify_and_compare() below for exhaustive verification.
-void StringTable::verify() {
- for (int i = 0; i < the_table()->table_size(); ++i) {
- HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i);
- for ( ; p != NULL; p = p->next()) {
- oop s = p->literal();
- guarantee(s != NULL, "interned string is NULL");
- unsigned int h = java_lang_String::hash_string(s);
- guarantee(p->hash() == h, "broken hash in string table entry");
- guarantee(the_table()->hash_to_index(h) == i,
- "wrong index in string table");
- }
- }
-}
-
-void StringTable::dump(outputStream* st) {
- the_table()->dump_table(st, "StringTable");
-}
-
-StringTable::VerifyRetTypes StringTable::compare_entries(
- int bkt1, int e_cnt1,
- HashtableEntry<oop, mtSymbol>* e_ptr1,
- int bkt2, int e_cnt2,
- HashtableEntry<oop, mtSymbol>* e_ptr2) {
- // These entries are sanity checked by verify_and_compare_entries()
- // before this function is called.
- oop str1 = e_ptr1->literal();
- oop str2 = e_ptr2->literal();
-
- if (str1 == str2) {
- tty->print_cr("ERROR: identical oop values (0x" PTR_FORMAT ") "
- "in entry @ bucket[%d][%d] and entry @ bucket[%d][%d]",
- (void *)str1, bkt1, e_cnt1, bkt2, e_cnt2);
- return _verify_fail_continue;
- }
-
- if (java_lang_String::equals(str1, str2)) {
- tty->print_cr("ERROR: identical String values in entry @ "
- "bucket[%d][%d] and entry @ bucket[%d][%d]",
- bkt1, e_cnt1, bkt2, e_cnt2);
- return _verify_fail_continue;
- }
-
- return _verify_pass;
-}
-
-StringTable::VerifyRetTypes StringTable::verify_entry(int bkt, int e_cnt,
- HashtableEntry<oop, mtSymbol>* e_ptr,
- StringTable::VerifyMesgModes mesg_mode) {
-
- VerifyRetTypes ret = _verify_pass; // be optimistic
-
- oop str = e_ptr->literal();
- if (str == NULL) {
- if (mesg_mode == _verify_with_mesgs) {
- tty->print_cr("ERROR: NULL oop value in entry @ bucket[%d][%d]", bkt,
- e_cnt);
- }
- // NULL oop means no more verifications are possible
- return _verify_fail_done;
- }
-
- if (str->klass() != SystemDictionary::String_klass()) {
- if (mesg_mode == _verify_with_mesgs) {
- tty->print_cr("ERROR: oop is not a String in entry @ bucket[%d][%d]",
- bkt, e_cnt);
- }
- // not a String means no more verifications are possible
- return _verify_fail_done;
- }
-
- unsigned int h = java_lang_String::hash_string(str);
- if (e_ptr->hash() != h) {
- if (mesg_mode == _verify_with_mesgs) {
- tty->print_cr("ERROR: broken hash value in entry @ bucket[%d][%d], "
- "bkt_hash=%d, str_hash=%d", bkt, e_cnt, e_ptr->hash(), h);
- }
- ret = _verify_fail_continue;
- }
-
- if (the_table()->hash_to_index(h) != bkt) {
- if (mesg_mode == _verify_with_mesgs) {
- tty->print_cr("ERROR: wrong index value for entry @ bucket[%d][%d], "
- "str_hash=%d, hash_to_index=%d", bkt, e_cnt, h,
- the_table()->hash_to_index(h));
- }
- ret = _verify_fail_continue;
- }
-
- return ret;
-}
-
-// See StringTable::verify() above for the quick verification that is
-// part of Universe::verify(). This verification is exhaustive and
-// reports on every issue that is found. StringTable::verify() only
-// reports on the first issue that is found.
-//
-// StringTable::verify_entry() checks:
-// - oop value != NULL (same as verify())
-// - oop value is a String
-// - hash(String) == hash in entry (same as verify())
-// - index for hash == index of entry (same as verify())
-//
-// StringTable::compare_entries() checks:
-// - oops are unique across all entries
-// - String values are unique across all entries
-//
-int StringTable::verify_and_compare_entries() {
- assert(StringTable_lock->is_locked(), "sanity check");
-
- int fail_cnt = 0;
-
- // first, verify all the entries individually:
- for (int bkt = 0; bkt < the_table()->table_size(); bkt++) {
- HashtableEntry<oop, mtSymbol>* e_ptr = the_table()->bucket(bkt);
- for (int e_cnt = 0; e_ptr != NULL; e_ptr = e_ptr->next(), e_cnt++) {
- VerifyRetTypes ret = verify_entry(bkt, e_cnt, e_ptr, _verify_with_mesgs);
- if (ret != _verify_pass) {
- fail_cnt++;
- }
- }
- }
-
- // Optimization: if the above check did not find any failures, then
- // the comparison loop below does not need to call verify_entry()
- // before calling compare_entries(). If there were failures, then we
- // have to call verify_entry() to see if the entry can be passed to
- // compare_entries() safely. When we call verify_entry() in the loop
- // below, we do so quietly to void duplicate messages and we don't
- // increment fail_cnt because the failures have already been counted.
- bool need_entry_verify = (fail_cnt != 0);
-
- // second, verify all entries relative to each other:
- for (int bkt1 = 0; bkt1 < the_table()->table_size(); bkt1++) {
- HashtableEntry<oop, mtSymbol>* e_ptr1 = the_table()->bucket(bkt1);
- for (int e_cnt1 = 0; e_ptr1 != NULL; e_ptr1 = e_ptr1->next(), e_cnt1++) {
- if (need_entry_verify) {
- VerifyRetTypes ret = verify_entry(bkt1, e_cnt1, e_ptr1,
- _verify_quietly);
- if (ret == _verify_fail_done) {
- // cannot use the current entry to compare against other entries
- continue;
- }
- }
-
- for (int bkt2 = bkt1; bkt2 < the_table()->table_size(); bkt2++) {
- HashtableEntry<oop, mtSymbol>* e_ptr2 = the_table()->bucket(bkt2);
- int e_cnt2;
- for (e_cnt2 = 0; e_ptr2 != NULL; e_ptr2 = e_ptr2->next(), e_cnt2++) {
- if (bkt1 == bkt2 && e_cnt2 <= e_cnt1) {
- // skip the entries up to and including the one that
- // we're comparing against
- continue;
- }
-
- if (need_entry_verify) {
- VerifyRetTypes ret = verify_entry(bkt2, e_cnt2, e_ptr2,
- _verify_quietly);
- if (ret == _verify_fail_done) {
- // cannot compare against this entry
- continue;
- }
- }
-
- // compare two entries, report and count any failures:
- if (compare_entries(bkt1, e_cnt1, e_ptr1, bkt2, e_cnt2, e_ptr2)
- != _verify_pass) {
- fail_cnt++;
- }
- }
- }
- }
- }
- return fail_cnt;
-}
-
-// Create a new table and using alternate hash code, populate the new table
-// with the existing strings. Set flag to use the alternate hash code afterwards.
-void StringTable::rehash_table() {
- assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
- // This should never happen with -Xshare:dump but it might in testing mode.
- if (DumpSharedSpaces) return;
- StringTable* new_table = new StringTable();
-
- // Rehash the table
- the_table()->move_to(new_table);
-
- // Delete the table and buckets (entries are reused in new table).
- delete _the_table;
- // Don't check if we need rehashing until the table gets unbalanced again.
- // Then rehash with a new global seed.
- _needs_rehashing = false;
- _the_table = new_table;
-}
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp Fri May 16 14:35:37 2014 -0700
@@ -42,7 +42,6 @@
class BoolObjectClosure;
class outputStream;
-
// Class to hold a newly created or referenced Symbol* temporarily in scope.
// new_symbol() and lookup() will create a Symbol* if not already in the
// symbol table and add to the symbol's reference count.
@@ -252,134 +251,4 @@
static int parallel_claimed_index() { return _parallel_claimed_idx; }
};
-class StringTable : public Hashtable<oop, mtSymbol> {
- friend class VMStructs;
-
-private:
- // The string table
- static StringTable* _the_table;
-
- // Set if one bucket is out of balance due to hash algorithm deficiency
- static bool _needs_rehashing;
-
- // Claimed high water mark for parallel chunked scanning
- static volatile int _parallel_claimed_idx;
-
- static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS);
- oop basic_add(int index, Handle string_or_null, jchar* name, int len,
- unsigned int hashValue, TRAPS);
-
- oop lookup(int index, jchar* chars, int length, unsigned int hashValue);
-
- // Apply the give oop closure to the entries to the buckets
- // in the range [start_idx, end_idx).
- static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
- // Unlink or apply the give oop closure to the entries to the buckets
- // in the range [start_idx, end_idx).
- static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
-
- StringTable() : Hashtable<oop, mtSymbol>((int)StringTableSize,
- sizeof (HashtableEntry<oop, mtSymbol>)) {}
-
- StringTable(HashtableBucket<mtSymbol>* t, int number_of_entries)
- : Hashtable<oop, mtSymbol>((int)StringTableSize, sizeof (HashtableEntry<oop, mtSymbol>), t,
- number_of_entries) {}
-public:
- // The string table
- static StringTable* the_table() { return _the_table; }
-
- // Size of one bucket in the string table. Used when checking for rollover.
- static uint bucket_size() { return sizeof(HashtableBucket<mtSymbol>); }
-
- static void create_table() {
- assert(_the_table == NULL, "One string table allowed.");
- _the_table = new StringTable();
- }
-
- // GC support
- // Delete pointers to otherwise-unreachable objects.
- static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f) {
- int processed = 0;
- int removed = 0;
- unlink_or_oops_do(cl, f, &processed, &removed);
- }
- static void unlink(BoolObjectClosure* cl) {
- int processed = 0;
- int removed = 0;
- unlink_or_oops_do(cl, NULL, &processed, &removed);
- }
- static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
- static void unlink(BoolObjectClosure* cl, int* processed, int* removed) {
- unlink_or_oops_do(cl, NULL, processed, removed);
- }
- // Serially invoke "f->do_oop" on the locations of all oops in the table.
- static void oops_do(OopClosure* f);
-
- // Possibly parallel versions of the above
- static void possibly_parallel_unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
- static void possibly_parallel_unlink(BoolObjectClosure* cl, int* processed, int* removed) {
- possibly_parallel_unlink_or_oops_do(cl, NULL, processed, removed);
- }
- static void possibly_parallel_oops_do(OopClosure* f);
-
- // Hashing algorithm, used as the hash value used by the
- // StringTable for bucket selection and comparison (stored in the
- // HashtableEntry structures). This is used in the String.intern() method.
- static unsigned int hash_string(const jchar* s, int len);
-
- // Internal test.
- static void test_alt_hash() PRODUCT_RETURN;
-
- // Probing
- static oop lookup(Symbol* symbol);
- static oop lookup(jchar* chars, int length);
-
- // Interning
- static oop intern(Symbol* symbol, TRAPS);
- static oop intern(oop string, TRAPS);
- static oop intern(const char *utf8_string, TRAPS);
-
- // Debugging
- static void verify();
- static void dump(outputStream* st);
-
- enum VerifyMesgModes {
- _verify_quietly = 0,
- _verify_with_mesgs = 1
- };
-
- enum VerifyRetTypes {
- _verify_pass = 0,
- _verify_fail_continue = 1,
- _verify_fail_done = 2
- };
-
- static VerifyRetTypes compare_entries(int bkt1, int e_cnt1,
- HashtableEntry<oop, mtSymbol>* e_ptr1,
- int bkt2, int e_cnt2,
- HashtableEntry<oop, mtSymbol>* e_ptr2);
- static VerifyRetTypes verify_entry(int bkt, int e_cnt,
- HashtableEntry<oop, mtSymbol>* e_ptr,
- VerifyMesgModes mesg_mode);
- static int verify_and_compare_entries();
-
- // Sharing
- static void copy_buckets(char** top, char*end) {
- the_table()->Hashtable<oop, mtSymbol>::copy_buckets(top, end);
- }
- static void copy_table(char** top, char*end) {
- the_table()->Hashtable<oop, mtSymbol>::copy_table(top, end);
- }
- static void reverse() {
- the_table()->Hashtable<oop, mtSymbol>::reverse();
- }
-
- // Rehash the symbol table if it gets out of balance
- static void rehash_table();
- static bool needs_rehashing() { return _needs_rehashing; }
-
- // Parallel chunked scanning
- static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
- static int parallel_claimed_index() { return _parallel_claimed_idx; }
-};
#endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Fri May 16 14:35:37 2014 -0700
@@ -29,6 +29,7 @@
#include "classfile/loaderConstraints.hpp"
#include "classfile/placeholders.hpp"
#include "classfile/resolutionErrors.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "compiler/compileBroker.hpp"
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,7 +24,7 @@
#include "precompiled.hpp"
#include "classfile/classLoaderData.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp"
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri May 16 14:35:37 2014 -0700
@@ -28,6 +28,7 @@
#endif
#include "precompiled.hpp"
+#include "classfile/stringTable.hpp"
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
#include "gc_implementation/g1/bufferingOopClosure.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Fri May 16 14:35:37 2014 -0700
@@ -1,3 +1,4 @@
+
/*
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -23,7 +24,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,7 +23,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Fri May 16 14:35:37 2014 -0700
@@ -1,3 +1,4 @@
+
/*
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -23,7 +24,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "code/codeCache.hpp"
#include "gc_implementation/parallelScavenge/cardTableExtension.hpp"
#include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
--- a/hotspot/src/share/vm/libadt/dict.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/dict.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,31 +24,19 @@
#include "precompiled.hpp"
#include "libadt/dict.hpp"
-#include "memory/allocation.inline.hpp"
-#include "memory/resourceArea.hpp"
-#include "runtime/thread.hpp"
// Dictionaries - An Abstract Data Type
// %%%%% includes not needed with AVM framework - Ungar
-// #include "port.hpp"
-//IMPLEMENTATION
-// #include "dict.hpp"
-
#include <assert.h>
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
-// The iostream is not needed and it gets confused for gcc by the
-// define of bool.
-//
-// #include <iostream.h>
-
//------------------------------data-----------------------------------------
// String hash tables
#define MAXID 20
-static byte initflag = 0; // True after 1st initialization
+static uint8_t initflag = 0; // True after 1st initialization
static const char shft[MAXID] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6};
static short xsum[MAXID];
@@ -283,7 +271,7 @@
// CmpDict compares two dictionaries; they must have the same keys (their
// keys must match using CmpKey) and they must have the same values (pointer
// comparison). If so 1 is returned, if not 0 is returned.
-int32 Dict::operator ==(const Dict &d2) const {
+int32_t Dict::operator ==(const Dict &d2) const {
if( _cnt != d2._cnt ) return 0;
if( _hash != d2._hash ) return 0;
if( _cmp != d2._cmp ) return 0;
@@ -320,7 +308,7 @@
// C text shows excellent spreading of values for any size hash table.
int hashstr(const void *t) {
register char c, k = 0;
- register int32 sum = 0;
+ register int32_t sum = 0;
register const char *s = (const char *)t;
while( ((c = *s++) != '\0') && (k < MAXID-1) ) { // Get characters till null or MAXID-1
@@ -334,11 +322,7 @@
// Slimey cheap hash function; no guaranteed performance. Better than the
// default for pointers, especially on MS-DOS machines.
int hashptr(const void *key) {
-#ifdef __TURBOC__
- return ((intptr_t)key >> 16);
-#else // __TURBOC__
- return ((intptr_t)key >> 2);
-#endif
+ return ((intptr_t)key >> 2);
}
// Slimey cheap hash function; no guaranteed performance.
@@ -347,12 +331,12 @@
}
//------------------------------Key Comparator Functions---------------------
-int32 cmpstr(const void *k1, const void *k2) {
+int32_t cmpstr(const void *k1, const void *k2) {
return strcmp((const char *)k1,(const char *)k2);
}
// Cheap key comparator.
-int32 cmpkey(const void *key1, const void *key2) {
+int32_t cmpkey(const void *key1, const void *key2) {
if (key1 == key2) return 0;
intptr_t delta = (intptr_t)key1 - (intptr_t)key2;
if (delta > 0) return 1;
--- a/hotspot/src/share/vm/libadt/dict.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/dict.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,11 +25,12 @@
#ifndef SHARE_VM_LIBADT_DICT_HPP
#define SHARE_VM_LIBADT_DICT_HPP
-#include "libadt/port.hpp"
+// Dictionaries - An Abstract Data Type
-// Dictionaries - An Abstract Data Type
-//INTERFACE
-class ostream;
+#include "memory/allocation.inline.hpp"
+#include "memory/resourceArea.hpp"
+#include "runtime/thread.hpp"
+
class Dict;
// These dictionaries define a key-value mapping. They can be inserted to,
@@ -38,7 +39,7 @@
// key comparison routine determines if two keys are equal or not. A hash
// function can be provided; if it's not provided the key itself is used
// instead. A nice string hash function is included.
-typedef int32 (*CmpKey)(const void *key1, const void *key2);
+typedef int32_t (*CmpKey)(const void *key1, const void *key2);
typedef int (*Hash)(const void *key);
typedef void (*FuncDict)(const void *key, const void *val, Dict *d);
@@ -47,7 +48,7 @@
class Arena *_arena; // Where to draw storage from
class bucket *_bin; // Hash table is array of buckets
uint _size; // Size (# of slots) in hash table
- uint32 _cnt; // Number of key-value pairs in hash table
+ uint32_t _cnt; // Number of key-value pairs in hash table
const Hash _hash; // Hashing function
const CmpKey _cmp; // Key comparison function
void doubhash( void ); // Double hash table size
@@ -67,7 +68,7 @@
void Clear();
// Return # of key-value pairs in dict
- uint32 Size(void) const { return _cnt; }
+ uint32_t Size(void) const { return _cnt; }
// Insert inserts the given key-value pair into the dictionary. The prior
// value of the key is returned; NULL if the key was not previously defined.
@@ -81,7 +82,7 @@
// == compares two dictionaries; they must have the same keys (their keys
// must match using CmpKey) and they must have the same values (pointer
// comparison). If so 1 is returned, if not 0 is returned.
- int32 operator ==(const Dict &d) const; // Compare dictionaries for equal
+ int32_t operator ==(const Dict &d) const; // Compare dictionaries for equal
// Print out the dictionary contents as key-value pairs
void print();
@@ -96,9 +97,9 @@
int hashkey(const void *key);
// Key comparators
-int32 cmpstr(const void *k1, const void *k2);
+int32_t cmpstr(const void *k1, const void *k2);
// Slimey cheap key comparator.
-int32 cmpkey(const void *key1, const void *key2);
+int32_t cmpkey(const void *key1, const void *key2);
//------------------------------Iteration--------------------------------------
// The class of dictionary iterators. Fails in the presences of modifications
--- a/hotspot/src/share/vm/libadt/port.cpp Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- *
- */
-
-#include "precompiled.hpp"
-#include "libadt/port.hpp"
-
-// Code for portable compiling
-
-#ifdef __GNUC__
-#pragma implementation
-#endif
-
-// %%%%% includes not needed with AVM framework - Ungar
-// #include "port.hpp"
-
-// This is only used if turboc is used and it causes problems with
-// gcc.
-#ifdef __TURBOC__
-#include <iostream.h>
-#endif
-
-#include <stdio.h>
-
-//------------------------------gcd--------------------------------------------
-// Greatest common divisor
-uint32 gcd( register uint32 x, register uint32 y )
-{
- register uint32 tmp;
- while( x ) { // While not zero
- tmp = x; // Hold onto smaller x value
- x = y % x; // Compute modulus; since y>=x, 0 <= mod < x
- y = tmp; // y = old x
- }
- return y;
-}
-
-//-----------------------------------------------------------------------------
-// Find first 1, or return 32 if empty
-int ff1( uint32 mask )
-{
- unsigned i, n = 0;
-
- for( i=1, n=0; i; i<<=1, n++)
- if( mask&i ) return n;
- return 32;
-}
-
-//-----------------------------------------------------------------------------
-// Find highest 1, or return 32 if empty
-int fh1( uint32 mask )
-{
- unsigned i, n = 0;
-
- for( i=((uint32)1<<31), n=31; i; i>>=1, n--)
- if( mask&i ) return n;
- return 32;
-}
-
-//------------------------------rotate32---------------------------------------
-// Rotate 32bits. Postive rotates left (bits move toward high-order bit),
-// negative rotates right.
-uint32 rotate32( register uint32 x, register int32 cnt )
-{
- if( cnt >= 0 ) { // Positive rotates left
- cnt &= 31; // Mask off extra shift bits
- } else { // Negative rotates right
- cnt = (-cnt)&31; // Flip sign; mask extra shift bits
- cnt = 32-cnt; // Rotate right by big left rotation
- }
- return (x << cnt) | (x >> (32-cnt));
-}
-
-/* Disabled - we have another log2 in the system.
- This function doesn't work if used as substitute
- for the existing log2. Keep around until we have
- verified all uses of log2 do the correct thing!
-//------------------------------log2-------------------------------------------
-// Log base 2. Might also be called 'count leading zeros'. Log2(x) returns
-// an l such that (1L<<l) <= x < (2L<<l). log2(x) returns 32.
-uint log2( uint32 x )
-{
- register uint l = 32; // Log bits
- register int32 sx = x; // Treat as signed number
- while( sx >= 0 ) // While high bit is clear
- sx <<= 1, l--; // Shift bits left, count down log2
- return l;
-}
-*/
-
-//------------------------------print------------------------------------------
-// Print a pointer without modifying the contents
-#ifdef __TURBOC__
-ostream &ostream::operator << (const void *ptr)
-{
- return (*this) << "0x" << hex << (uint)ptr << dec;
-}
-#else
-/*ostream &operator << (ostream &os, const void *ptr)
-{
- return os << "0x" << hex << (uint)ptr << dec;
-}*/
-#endif
--- a/hotspot/src/share/vm/libadt/port.hpp Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 1997, 2013, 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.
- *
- */
-
-#ifndef SHARE_VM_LIBADT_PORT_HPP
-#define SHARE_VM_LIBADT_PORT_HPP
-
-#include "utilities/top.hpp"
-
-// Typedefs for portable compiling
-
-#if defined(__GNUC__)
-
-#define INTERFACE #pragma interface
-#define IMPLEMENTATION #pragma implementation
-//INTERFACE
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Access to the C++ class virtual function pointer
-// Put the class in the macro
-typedef void *VPTR;
-// G++ puts it at the end of the base class
-#define ACCESS_VPTR(class) VPTR&vptr(){return*(VPTR*)((char*)this+sizeof(class)-sizeof(void*));}
-
-#elif defined(__TURBOC__)
-
-#include <mem.h>
-#include <string.h>
-extern "C" int stricmp(const char *, const char *);
-inline void bcopy(const void *s, void *d, int l) { memmove(d,s,l); }
-inline void bzero(void *p, int l) { memset(p,0,l); }
-inline int bcmp(const void *s, const void *d, int l) { return memcmp(s,d,l); }
-inline int min( int a, int b) { return a < b ? a : b; }
-inline int max( int a, int b) { return a > b ? a : b; }
-//strcasecmp moved to globalDefinitions_visCPP.hpp
-//inline int strcasecmp(const char *s1, const char *s2) { return stricmp(s1,s2); }
-inline long abs( long x ) { return x < 0 ? -x : x; }
-// Access to the C++ class virtual function pointer
-// Put the class in the macro
-typedef void near *VPTR;
-// BorlandC puts it up front
-#define ACCESS_VPTR(class) VPTR&vptr(){return*(VPTR*)this;}
-
-#elif defined(__hpux)
-
-#define INTERFACE
-#define IMPLEMENTATION
-#define signed
-#include <strings.h>
-#include <stdlib.h>
-inline long min( long a, long b) { return a < b ? a : b; }
-inline long max( long a, long b) { return a > b ? a : b; }
-inline int min( int a, int b) { return a < b ? a : b; }
-inline int max( int a, int b) { return a > b ? a : b; }
-inline long abs( long x ) { return x < 0 ? -x : x; }
-
-#elif defined(__MOTO__)
-// Motorola's mcc
-#define INTERFACE
-#define IMPLEMENTATION
-#include <stdlib.h>
-#include <memory.h>
-inline int min( int a, int b) { return a < b ? a : b; }
-inline int max( int a, int b) { return a > b ? a : b; }
-
-#elif defined(_AIX)
-// IBM's xlC compiler
-#define INTERFACE
-#define IMPLEMENTATION
-#include <stdlib.h>
-#include <memory.h>
-
-#elif defined(_MSC_VER)
-// Microsoft Visual C++
-//#define INTERFACE
-#define IMPLEMENTATION
-#include <stdlib.h>
-#undef small
-//strcasecmp moved to globalDefinitions_visCPP.hpp
-//inline int strcasecmp(const char *s1, const char *s2) { return stricmp(s1,s2); }
-
-
-#elif defined(SPARC_WORKS)
-
-#define INTERFACE
-#define IMPLEMENTATION
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#elif defined(SOLARIS)
-
-#define INTERFACE
-#define IMPLEMENTATION
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-#elif defined(__TANDEM)
-
-// This case is for the Tandem Business Unit of Compaq Computer Corporation.
-// The Tandem case must precede the AT&T case,
-// because the Tandem c89 compiler also defines __cplusplus.
-
-#include "port_tandem.hpp"
-
-#elif defined(__cplusplus)
-// AT&Ts cfront
-#define INTERFACE
-#define IMPLEMENTATION
-#include <unistd.h>
-#define signed
-// #include <bstring.h>
-inline int min( int a, int b) { return a < b ? a : b; }
-inline int max( int a, int b) { return a > b ? a : b; }
-
-#else // All other machines
-
-#define signed
-extern "C" void bcopy(void *b1, void *b2, int len);
-inline int min( int a, int b) { return a < b ? a : b; }
-inline int max( int a, int b) { return a > b ? a : b; }
-
-#endif
-
-//-----------------------------------------------------------------------------
-// Safer memory allocations
-#ifdef SAFE_MEMORY
-#define malloc(size) safe_malloc(__FILE__,__LINE__,size)
-#define free(ptr) safe_free(__FILE__,__LINE__,ptr)
-#define realloc(ptr,size) safe_realloc(__FILE__,__LINE__,ptr,size)
-#define calloc(nitems,size) safe_calloc(__FILE__,__LINE__,nitems,size)
-#define strdup(ptr) safe_strdup(__FILE__,__LINE__,ptr)
-extern void *safe_malloc (const char *file, unsigned line, unsigned size);
-extern void safe_free (const char *file, unsigned line, void *ptr);
-extern void *safe_calloc (const char *file, unsigned line, unsigned nitems, unsigned size);
-extern void *safe_realloc(const char *file, unsigned line, void *ptr, unsigned size);
-extern char *safe_strdup (const char *file, unsigned line, const char *src);
-inline void *operator new( size_t size ) throw() { return malloc(size); }
-inline void operator delete( void *ptr ) { free(ptr); }
-#endif
-
-//-----------------------------------------------------------------------------
-// And now, the bit-size-specified integer sizes
-typedef signed char int8;
-typedef unsigned char uint8;
-typedef unsigned char byte;
-
-// All uses of *int16 changed to 32-bit to speed up compiler on Intel
-//typedef signed short int16; // Exactly 16bits signed
-//typedef unsigned short uint16; // Exactly 16bits unsigned
-//const unsigned int min_uint16 = 0x0000; // smallest uint16
-//const unsigned int max_uint16 = 0xFFFF; // largest uint16
-
-typedef unsigned int uint; // When you need a fast >=16bit unsigned value
-/*typedef int int; */ // When you need a fast >=16bit value
-const unsigned int max_uint = (uint)-1;
-typedef int32_t int32; // Exactly 32bits signed
-typedef uint32_t uint32; // Exactly 32bits unsigned
-
-// Bit-sized floating point and long thingies
-#ifndef __TANDEM
-// Do not define these for Tandem, because they conflict with typedefs in softieee.h.
-typedef float float32; // 32-bit float
-typedef double float64; // 64-bit float
-#endif // __TANDEM
-
-typedef jlong int64; // Java long for my 64-bit type
-typedef julong uint64; // Java long for my 64-bit type
-
-//-----------------------------------------------------------------------------
-// Nice constants
-uint32 gcd( uint32 x, uint32 y );
-int ff1( uint32 mask );
-int fh1( uint32 mask );
-uint32 rotate32( uint32 x, int32 cnt );
-
-
-//-----------------------------------------------------------------------------
-extern uint32 heap_totalmem; // Current total memory allocation
-extern uint32 heap_highwater; // Highwater mark to date for memory usage
-
-#endif // SHARE_VM_LIBADT_PORT_HPP
--- a/hotspot/src/share/vm/libadt/set.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/set.cpp Fri May 16 14:35:37 2014 -0700
@@ -28,20 +28,11 @@
// Sets - An Abstract Data Type
-// %%%%% includes not needed with AVM framework - Ungar
-// #include "port.hpp"
-//IMPLEMENTATION
-// #include "set.hpp"
-
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
-// Not needed and it causes terouble for gcc.
-//
-// #include <iostream.h>
-
//-------------------------Virtual Functions-----------------------------------
// These functions MUST be implemented by the inheriting class.
class SparseSet;
--- a/hotspot/src/share/vm/libadt/set.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/set.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,13 +25,10 @@
#ifndef SHARE_VM_LIBADT_SET_HPP
#define SHARE_VM_LIBADT_SET_HPP
-#include "libadt/port.hpp"
#include "memory/allocation.hpp"
// Sets - An Abstract Data Type
-//INTERFACE
-
class SparseSet;
class VectorSet;
class ListSet;
--- a/hotspot/src/share/vm/libadt/vectset.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/vectset.cpp Fri May 16 14:35:37 2014 -0700
@@ -28,15 +28,10 @@
// Vector Sets - An Abstract Data Type
-// %%%%% includes not needed with AVM framework - Ungar
-// #include "port.hpp"
-//IMPLEMENTATION
-// #include "vectset.hpp"
-
// BitsInByte is a lookup table which tells the number of bits that
// are in the looked-up number. It is very useful in VectorSet_Size.
-uint8 bitsInByte[256] = {
+uint8_t bitsInByte[256] = {
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
@@ -59,7 +54,7 @@
// Create a new, empty Set.
VectorSet::VectorSet(Arena *arena) : Set(arena) {
size = 2; // Small initial size
- data = (uint32 *)_set_arena->Amalloc(size*sizeof(uint32));
+ data = (uint32_t *)_set_arena->Amalloc(size*sizeof(uint32_t));
data[0] = 0; // No elements
data[1] = 0;
}
@@ -85,8 +80,8 @@
void VectorSet::slamin(const VectorSet& s)
{
size = s.size; // Use new size
- data = (uint32*)s._set_arena->Amalloc(size*sizeof(uint32)); // Make array of required size
- memcpy( data, s.data, size*sizeof(uint32) ); // Fill the array
+ data = (uint32_t*)s._set_arena->Amalloc(size*sizeof(uint32_t)); // Make array of required size
+ memcpy( data, s.data, size*sizeof(uint32_t) ); // Fill the array
}
//------------------------------grow-------------------------------------------
@@ -96,8 +91,8 @@
newsize = (newsize+31) >> 5; // Convert to longwords
uint x = size;
while( x < newsize ) x <<= 1;
- data = (uint32 *)_set_arena->Arealloc(data, size*sizeof(uint32), x*sizeof(uint32));
- memset((char *)(data + size), 0, (x - size)*sizeof(uint32));
+ data = (uint32_t *)_set_arena->Arealloc(data, size*sizeof(uint32_t), x*sizeof(uint32_t));
+ memset((char *)(data + size), 0, (x - size)*sizeof(uint32_t));
size = x;
}
@@ -106,7 +101,7 @@
Set &VectorSet::operator <<= (uint elem)
{
register uint word = elem >> 5; // Get the longword offset
- register uint32 mask = 1L << (elem & 31); // Get bit mask
+ register uint32_t mask = 1L << (elem & 31); // Get bit mask
if( word >= size ) // Need to grow set?
grow(elem+1); // Then grow it
@@ -121,7 +116,7 @@
register uint word = elem >> 5; // Get the longword offset
if( word >= size ) // Beyond the last?
return *this; // Then it's clear & return clear
- register uint32 mask = 1L << (elem & 31); // Get bit mask
+ register uint32_t mask = 1L << (elem & 31); // Get bit mask
data[word] &= ~mask; // Clear bit
return *this;
}
@@ -132,8 +127,8 @@
{
// NOTE: The intersection is never any larger than the smallest set.
if( s.size < size ) size = s.size; // Get smaller size
- register uint32 *u1 = data; // Pointer to the destination data
- register uint32 *u2 = s.data; // Pointer to the source data
+ register uint32_t *u1 = data; // Pointer to the destination data
+ register uint32_t *u2 = s.data; // Pointer to the source data
for( uint i=0; i<size; i++) // For data in set
*u1++ &= *u2++; // Copy and AND longwords
return *this; // Return set
@@ -152,14 +147,14 @@
{
// This many words must be unioned
register uint cnt = ((size<s.size)?size:s.size);
- register uint32 *u1 = data; // Pointer to the destination data
- register uint32 *u2 = s.data; // Pointer to the source data
+ register uint32_t *u1 = data; // Pointer to the destination data
+ register uint32_t *u2 = s.data; // Pointer to the source data
for( uint i=0; i<cnt; i++) // Copy and OR the two sets
*u1++ |= *u2++;
if( size < s.size ) { // Is set 2 larger than set 1?
// Extend result by larger set
- grow(s.size*sizeof(uint32)*8);
- memcpy(&data[cnt], u2, (s.size - cnt)*sizeof(uint32));
+ grow(s.size*sizeof(uint32_t)*8);
+ memcpy(&data[cnt], u2, (s.size - cnt)*sizeof(uint32_t));
}
return *this; // Return result set
}
@@ -177,8 +172,8 @@
{
// This many words must be unioned
register uint cnt = ((size<s.size)?size:s.size);
- register uint32 *u1 = data; // Pointer to the destination data
- register uint32 *u2 = s.data; // Pointer to the source data
+ register uint32_t *u1 = data; // Pointer to the destination data
+ register uint32_t *u2 = s.data; // Pointer to the source data
for( uint i=0; i<cnt; i++ ) // For data in set
*u1++ &= ~(*u2++); // A <-- A & ~B with longwords
return *this; // Return new set
@@ -199,17 +194,17 @@
// 1X -- B is a subset of A
int VectorSet::compare (const VectorSet &s) const
{
- register uint32 *u1 = data; // Pointer to the destination data
- register uint32 *u2 = s.data; // Pointer to the source data
- register uint32 AnotB = 0, BnotA = 0;
+ register uint32_t *u1 = data; // Pointer to the destination data
+ register uint32_t *u2 = s.data; // Pointer to the source data
+ register uint32_t AnotB = 0, BnotA = 0;
// This many words must be unioned
register uint cnt = ((size<s.size)?size:s.size);
// Get bits for both sets
uint i; // Exit value of loop
for( i=0; i<cnt; i++ ) { // For data in BOTH sets
- register uint32 A = *u1++; // Data from one guy
- register uint32 B = *u2++; // Data from other guy
+ register uint32_t A = *u1++; // Data from one guy
+ register uint32_t B = *u2++; // Data from other guy
AnotB |= (A & ~B); // Compute bits in A not B
BnotA |= (B & ~A); // Compute bits in B not A
}
@@ -250,8 +245,8 @@
// NOTE: The intersection is never any larger than the smallest set.
register uint small_size = ((size<s.size)?size:s.size);
- register uint32 *u1 = data; // Pointer to the destination data
- register uint32 *u2 = s.data; // Pointer to the source data
+ register uint32_t *u1 = data; // Pointer to the destination data
+ register uint32_t *u2 = s.data; // Pointer to the source data
for( uint i=0; i<small_size; i++) // For data in set
if( *u1++ & *u2++ ) // If any elements in common
return 0; // Then not disjoint
@@ -293,7 +288,7 @@
register uint word = elem >> 5; // Get the longword offset
if( word >= size ) // Beyond the last?
return 0; // Then it's clear
- register uint32 mask = 1L << (elem & 31); // Get bit mask
+ register uint32_t mask = 1L << (elem & 31); // Get bit mask
return ((data[word] & mask))!=0; // Return the sense of the bit
}
@@ -305,7 +300,7 @@
for( i=0; i<size; i++ )
if( data[i] )
break;
- uint32 word = data[i];
+ uint32_t word = data[i];
int j; // Exit value of loop
for( j= -1; word; j++, word>>=1 );
return (i<<5)+j;
@@ -316,11 +311,11 @@
void VectorSet::Clear(void)
{
if( size > 100 ) { // Reclaim storage only if huge
- FREE_RESOURCE_ARRAY(uint32,data,size);
+ FREE_RESOURCE_ARRAY(uint32_t,data,size);
size = 2; // Small initial size
- data = NEW_RESOURCE_ARRAY(uint32,size);
+ data = NEW_RESOURCE_ARRAY(uint32_t,size);
}
- memset( data, 0, size*sizeof(uint32) );
+ memset( data, 0, size*sizeof(uint32_t) );
}
//------------------------------Size-------------------------------------------
@@ -328,8 +323,8 @@
uint VectorSet::Size(void) const
{
uint sum = 0; // Cumulative size so far.
- uint8 *currByte = (uint8*)data;
- for( uint32 i = 0; i < (size<<2); i++) // While have bytes to process
+ uint8_t* currByte = (uint8_t*) data;
+ for( uint32_t i = 0; i < (size<<2); i++) // While have bytes to process
sum += bitsInByte[*currByte++]; // Add bits in current byte to size.
return sum;
}
@@ -343,7 +338,7 @@
//------------------------------hash-------------------------------------------
int VectorSet::hash() const
{
- uint32 _xor = 0;
+ uint32_t _xor = 0;
uint lim = ((size<4)?size:4);
for( uint i = 0; i < lim; i++ )
_xor ^= data[i];
--- a/hotspot/src/share/vm/libadt/vectset.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/libadt/vectset.hpp Fri May 16 14:35:37 2014 -0700
@@ -47,7 +47,7 @@
friend class VectorSetI; // Friendly iterator class
protected:
uint size; // Size of data IN LONGWORDS (32bits)
- uint32 *data; // The data, bit packed
+ uint32_t* data; // The data, bit packed
void slamin( const VectorSet& s ); // Initialize one set with another
int compare(const VectorSet &s) const; // Compare set contents
@@ -99,7 +99,7 @@
void Sort(void); // Sort before iterating
int hash() const; // Hash function
void Reset(void) { // Reset a set
- memset( data, 0, size*sizeof(uint32) );
+ memset( data, 0, size*sizeof(uint32_t) );
}
/* Removed for MCC BUG
@@ -108,7 +108,7 @@
// Expose internals for speed-critical fast iterators
uint word_size() const { return size; }
- uint32 *EXPOSE() const { return data; }
+ uint32_t* EXPOSE() const { return data; }
// Fast inlined "test and set". Replaces the idiom:
// if( visited[idx] ) return;
@@ -120,8 +120,8 @@
uint word = elem >> 5; // Get the longword offset
if( word >= size ) // Beyond the last?
return test_set_grow(elem); // Then grow; set; return 0;
- uint32 mask = 1L << (elem & 31); // Get bit mask
- uint32 datum = data[word] & mask;// Get bit
+ uint32_t mask = 1L << (elem & 31); // Get bit mask
+ uint32_t datum = data[word] & mask;// Get bit
data[word] |= mask; // Set bit
return datum; // Return bit
}
@@ -134,7 +134,7 @@
int test( uint elem ) const {
uint word = elem >> 5; // Get the longword offset
if( word >= size ) return 0; // Beyond the last?
- uint32 mask = 1L << (elem & 31); // Get bit mask
+ uint32_t mask = 1L << (elem & 31); // Get bit mask
return data[word] & mask; // Get bit
}
@@ -144,7 +144,7 @@
if( word >= size ) { // Beyond the last?
test_set_grow(elem); // Then grow and set
} else {
- uint32 mask = 1L << (elem & 31); // Get bit mask
+ uint32_t mask = 1L << (elem & 31); // Get bit mask
data[word] |= mask; // Set bit
}
}
@@ -164,7 +164,7 @@
friend class VectorSet;
const VectorSet *s;
uint i, j;
- uint32 mask;
+ uint32_t mask;
uint next(void);
public:
--- a/hotspot/src/share/vm/memory/allocation.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/memory/allocation.cpp Fri May 16 14:35:37 2014 -0700
@@ -686,40 +686,57 @@
// a memory leak. Use CHeapObj as the base class of such objects to make it explicit
// that they're allocated on the C heap.
// Commented out in product version to avoid conflicts with third-party C++ native code.
-// On certain platforms, such as Mac OS X (Darwin), in debug version, new is being called
-// from jdk source and causing data corruption. Such as
-// Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair
-// define ALLOW_OPERATOR_NEW_USAGE for platform on which global operator new allowed.
+//
+// In C++98/03 the throwing new operators are defined with the following signature:
+//
+// void* operator new(std::size_tsize) throw(std::bad_alloc);
+// void* operator new[](std::size_tsize) throw(std::bad_alloc);
+//
+// while all the other (non-throwing) new and delete operators are defined with an empty
+// throw clause (i.e. "operator delete(void* p) throw()") which means that they do not
+// throw any exceptions (see section 18.4 of the C++ standard).
//
-#ifndef ALLOW_OPERATOR_NEW_USAGE
-void* operator new(size_t size) throw() {
- assert(false, "Should not call global operator new");
+// In the new C++11/14 standard, the signature of the throwing new operators was changed
+// by completely omitting the throw clause (which effectively means they could throw any
+// exception) while all the other new/delete operators where changed to have a 'nothrow'
+// clause instead of an empty throw clause.
+//
+// Unfortunately, the support for exception specifications among C++ compilers is still
+// very fragile. While some more strict compilers like AIX xlC or HP aCC reject to
+// override the default throwing new operator with a user operator with an empty throw()
+// clause, the MS Visual C++ compiler warns for every non-empty throw clause like
+// throw(std::bad_alloc) that it will ignore the exception specification. The following
+// operator definitions have been checked to correctly work with all currently supported
+// compilers and they should be upwards compatible with C++11/14. Therefore
+// PLEASE BE CAREFUL if you change the signature of the following operators!
+
+void* operator new(size_t size) /* throw(std::bad_alloc) */ {
+ fatal("Should not call global operator new");
return 0;
}
-void* operator new [](size_t size) throw() {
- assert(false, "Should not call global operator new[]");
+void* operator new [](size_t size) /* throw(std::bad_alloc) */ {
+ fatal("Should not call global operator new[]");
return 0;
}
void* operator new(size_t size, const std::nothrow_t& nothrow_constant) throw() {
- assert(false, "Should not call global operator new");
+ fatal("Should not call global operator new");
return 0;
}
void* operator new [](size_t size, std::nothrow_t& nothrow_constant) throw() {
- assert(false, "Should not call global operator new[]");
+ fatal("Should not call global operator new[]");
return 0;
}
-void operator delete(void* p) {
- assert(false, "Should not call global delete");
+void operator delete(void* p) throw() {
+ fatal("Should not call global delete");
}
-void operator delete [](void* p) {
- assert(false, "Should not call global delete []");
+void operator delete [](void* p) throw() {
+ fatal("Should not call global delete []");
}
-#endif // ALLOW_OPERATOR_NEW_USAGE
void AllocatedObj::print() const { print_on(tty); }
void AllocatedObj::print_value() const { print_value_on(tty); }
--- a/hotspot/src/share/vm/memory/genMarkSweep.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,7 +24,7 @@
#include "precompiled.hpp"
#include "classfile/javaClasses.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "code/codeCache.hpp"
--- a/hotspot/src/share/vm/memory/sharedHeap.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/memory/sharedHeap.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,7 +23,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
--- a/hotspot/src/share/vm/memory/universe.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/memory/universe.cpp Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
#include "classfile/classLoader.hpp"
#include "classfile/classLoaderData.hpp"
#include "classfile/javaClasses.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "code/codeCache.hpp"
--- a/hotspot/src/share/vm/oops/constantPool.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/oops/constantPool.cpp Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
#include "classfile/classLoaderData.hpp"
#include "classfile/javaClasses.hpp"
#include "classfile/metadataOnStackMark.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "interpreter/linkResolver.hpp"
--- a/hotspot/src/share/vm/opto/block.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/block.cpp Fri May 16 14:35:37 2014 -0700
@@ -1268,7 +1268,6 @@
}
void UnionFind::reset( uint max ) {
- assert( max <= max_uint, "Must fit within uint" );
// Force the Union-Find mapping to be at least this large
extend(max,0);
// Initialize to be the ID mapping.
--- a/hotspot/src/share/vm/opto/chaitin.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/chaitin.hpp Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,6 @@
#define SHARE_VM_OPTO_CHAITIN_HPP
#include "code/vmreg.hpp"
-#include "libadt/port.hpp"
#include "memory/resourceArea.hpp"
#include "opto/connode.hpp"
#include "opto/live.hpp"
@@ -142,7 +141,7 @@
// Number of registers this live range uses when it colors
private:
- uint8 _num_regs; // 2 for Longs and Doubles, 1 for all else
+ uint8_t _num_regs; // 2 for Longs and Doubles, 1 for all else
// except _num_regs is kill count for fat_proj
public:
int num_regs() const { return _num_regs; }
@@ -151,7 +150,7 @@
private:
// Number of physical registers this live range uses when it colors
// Architecture and register-set dependent
- uint8 _reg_pressure;
+ uint8_t _reg_pressure;
public:
void set_reg_pressure(int i) { _reg_pressure = i; }
int reg_pressure() const { return _reg_pressure; }
--- a/hotspot/src/share/vm/opto/compile.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/compile.hpp Fri May 16 14:35:37 2014 -0700
@@ -32,7 +32,6 @@
#include "compiler/compilerOracle.hpp"
#include "compiler/compileBroker.hpp"
#include "libadt/dict.hpp"
-#include "libadt/port.hpp"
#include "libadt/vectset.hpp"
#include "memory/resourceArea.hpp"
#include "opto/idealGraphPrinter.hpp"
--- a/hotspot/src/share/vm/opto/divnode.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/divnode.cpp Fri May 16 14:35:37 2014 -0700
@@ -514,7 +514,7 @@
int widen = MAX2(i1->_widen, i2->_widen);
if( i2->is_con() && i2->get_con() != 0 ) {
- int32 d = i2->get_con(); // Divisor
+ int32_t d = i2->get_con(); // Divisor
jint lo, hi;
if( d >= 0 ) {
lo = i1->_lo/d;
@@ -536,7 +536,7 @@
// If the dividend is a constant
if( i1->is_con() ) {
- int32 d = i1->get_con();
+ int32_t d = i1->get_con();
if( d < 0 ) {
if( d == min_jint ) {
// (-min_jint) == min_jint == (min_jint / -1)
--- a/hotspot/src/share/vm/opto/domgraph.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/domgraph.cpp Fri May 16 14:35:37 2014 -0700
@@ -397,8 +397,9 @@
ntarjan[i]._control = NULL;
// Store the DFS order for the main loop
+ const uint fill_value = max_juint;
uint *dfsorder = NEW_RESOURCE_ARRAY(uint,C->unique()+1);
- memset(dfsorder, max_uint, (C->unique()+1) * sizeof(uint));
+ memset(dfsorder, fill_value, (C->unique()+1) * sizeof(uint));
// Tarjan's algorithm, almost verbatim:
// Step 1:
@@ -419,7 +420,7 @@
if( whead->in(j) == NULL || !whead->in(j)->is_CFG() )
continue; // Only process control nodes
uint b = dfsorder[whead->in(j)->_idx];
- if(b == max_uint) continue;
+ if(b == fill_value) continue;
NTarjan *vx = &ntarjan[b];
NTarjan *u = vx->EVAL();
if( u->_semi < w->_semi )
--- a/hotspot/src/share/vm/opto/indexSet.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/indexSet.cpp Fri May 16 14:35:37 2014 -0700
@@ -51,7 +51,7 @@
#endif
// What is the first set bit in a 5 bit integer?
-const byte IndexSetIterator::_first_bit[32] = {
+const uint8_t IndexSetIterator::_first_bit[32] = {
0, 0, 1, 0,
2, 0, 1, 0,
3, 0, 1, 0,
@@ -63,7 +63,7 @@
};
// What is the second set bit in a 5 bit integer?
-const byte IndexSetIterator::_second_bit[32] = {
+const uint8_t IndexSetIterator::_second_bit[32] = {
5, 5, 5, 1,
5, 2, 2, 1,
5, 3, 3, 1,
@@ -298,7 +298,7 @@
set_block(i, &_empty_block);
} else {
BitBlock *new_block = alloc_block();
- memcpy(new_block->words(), block->words(), sizeof(uint32) * words_per_block);
+ memcpy(new_block->words(), block->words(), sizeof(uint32_t) * words_per_block);
set_block(i, new_block);
}
}
--- a/hotspot/src/share/vm/opto/indexSet.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/indexSet.hpp Fri May 16 14:35:37 2014 -0700
@@ -106,12 +106,12 @@
// is used by IndexSet to mainting this free list.
union {
- uint32 _words[words_per_block];
+ uint32_t _words[words_per_block];
BitBlock *_next;
} _data;
// accessors
- uint32 *words() { return _data._words; }
+ uint32_t* words() { return _data._words; }
void set_next(BitBlock *next) { _data._next = next; }
BitBlock *next() { return _data._next; }
@@ -120,22 +120,22 @@
// not assume that the block index has been masked out.
void clear() {
- memset(words(), 0, sizeof(uint32) * words_per_block);
+ memset(words(), 0, sizeof(uint32_t) * words_per_block);
}
bool member(uint element) {
uint word_index = IndexSet::get_word_index(element);
uint bit_index = IndexSet::get_bit_index(element);
- return ((words()[word_index] & (uint32)(0x1 << bit_index)) != 0);
+ return ((words()[word_index] & (uint32_t)(0x1 << bit_index)) != 0);
}
bool insert(uint element) {
uint word_index = IndexSet::get_word_index(element);
uint bit_index = IndexSet::get_bit_index(element);
- uint32 bit = (0x1 << bit_index);
- uint32 before = words()[word_index];
+ uint32_t bit = (0x1 << bit_index);
+ uint32_t before = words()[word_index];
words()[word_index] = before | bit;
return ((before & bit) != 0);
}
@@ -144,8 +144,8 @@
uint word_index = IndexSet::get_word_index(element);
uint bit_index = IndexSet::get_bit_index(element);
- uint32 bit = (0x1 << bit_index);
- uint32 before = words()[word_index];
+ uint32_t bit = (0x1 << bit_index);
+ uint32_t before = words()[word_index];
words()[word_index] = before & ~bit;
return ((before & bit) != 0);
}
@@ -404,14 +404,14 @@
table_size = (1 << window_size) };
// For an integer of length window_size, what is the first set bit?
- static const byte _first_bit[table_size];
+ static const uint8_t _first_bit[table_size];
// For an integer of length window_size, what is the second set bit?
- static const byte _second_bit[table_size];
+ static const uint8_t _second_bit[table_size];
private:
// The current word we are inspecting
- uint32 _current;
+ uint32_t _current;
// What element number are we currently on?
uint _value;
@@ -420,7 +420,7 @@
uint _next_word;
// A pointer to the contents of the current block
- uint32 *_words;
+ uint32_t *_words;
// The index of the next block we will inspect
uint _next_block;
--- a/hotspot/src/share/vm/opto/live.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/live.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,7 +25,6 @@
#ifndef SHARE_VM_OPTO_LIVE_HPP
#define SHARE_VM_OPTO_LIVE_HPP
-#include "libadt/port.hpp"
#include "libadt/vectset.hpp"
#include "opto/block.hpp"
#include "opto/indexSet.hpp"
--- a/hotspot/src/share/vm/opto/loopnode.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/loopnode.hpp Fri May 16 14:35:37 2014 -0700
@@ -339,11 +339,11 @@
Node_List _body; // Loop body for inner loops
- uint8 _nest; // Nesting depth
- uint8 _irreducible:1, // True if irreducible
- _has_call:1, // True if has call safepoint
- _has_sfpt:1, // True if has non-call safepoint
- _rce_candidate:1; // True if candidate for range check elimination
+ uint8_t _nest; // Nesting depth
+ uint8_t _irreducible:1, // True if irreducible
+ _has_call:1, // True if has call safepoint
+ _has_sfpt:1, // True if has non-call safepoint
+ _rce_candidate:1; // True if candidate for range check elimination
Node_List* _safepts; // List of safepoints in this loop
Node_List* _required_safept; // A inner loop cannot delete these safepts;
--- a/hotspot/src/share/vm/opto/mulnode.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/mulnode.cpp Fri May 16 14:35:37 2014 -0700
@@ -235,23 +235,23 @@
const TypeInt *r1 = t1->is_int();
// Fetch endpoints of all ranges
- int32 lo0 = r0->_lo;
+ int32_t lo0 = r0->_lo;
double a = (double)lo0;
- int32 hi0 = r0->_hi;
+ int32_t hi0 = r0->_hi;
double b = (double)hi0;
- int32 lo1 = r1->_lo;
+ int32_t lo1 = r1->_lo;
double c = (double)lo1;
- int32 hi1 = r1->_hi;
+ int32_t hi1 = r1->_hi;
double d = (double)hi1;
// Compute all endpoints & check for overflow
- int32 A = lo0*lo1;
+ int32_t A = lo0*lo1;
if( (double)A != a*c ) return TypeInt::INT; // Overflow?
- int32 B = lo0*hi1;
+ int32_t B = lo0*hi1;
if( (double)B != a*d ) return TypeInt::INT; // Overflow?
- int32 C = hi0*lo1;
+ int32_t C = hi0*lo1;
if( (double)C != b*c ) return TypeInt::INT; // Overflow?
- int32 D = hi0*hi1;
+ int32_t D = hi0*hi1;
if( (double)D != b*d ) return TypeInt::INT; // Overflow?
if( A < B ) { lo0 = A; hi0 = B; } // Sort range endpoints
@@ -1228,12 +1228,12 @@
//
// const TypeInstPtr *o = t1->is_instptr();
// if( t1->singleton() )
- // return TypeInt::make( ((uint32)o->const_oop() + o->_offset) >> shift );
+ // return TypeInt::make( ((uint32_t)o->const_oop() + o->_offset) >> shift );
// }
// else if( t1->base() == Type::KlassPtr ) {
// const TypeKlassPtr *o = t1->is_klassptr();
// if( t1->singleton() )
- // return TypeInt::make( ((uint32)o->const_oop() + o->_offset) >> shift );
+ // return TypeInt::make( ((uint32_t)o->const_oop() + o->_offset) >> shift );
// }
return TypeInt::INT;
--- a/hotspot/src/share/vm/opto/node.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/node.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,7 +25,6 @@
#ifndef SHARE_VM_OPTO_NODE_HPP
#define SHARE_VM_OPTO_NODE_HPP
-#include "libadt/port.hpp"
#include "libadt/vectset.hpp"
#include "opto/compile.hpp"
#include "opto/type.hpp"
--- a/hotspot/src/share/vm/opto/output.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/output.cpp Fri May 16 14:35:37 2014 -0700
@@ -366,8 +366,8 @@
// third inserts nops where needed.
// Step one, perform a pessimistic sizing pass.
- uint last_call_adr = max_uint;
- uint last_avoid_back_to_back_adr = max_uint;
+ uint last_call_adr = max_juint;
+ uint last_avoid_back_to_back_adr = max_juint;
uint nop_size = (new (this) MachNopNode())->size(_regalloc);
for (uint i = 0; i < nblocks; i++) { // For all blocks
Block* block = _cfg->get_block(i);
@@ -479,7 +479,7 @@
// Step two, replace eligible long jumps.
bool progress = true;
- uint last_may_be_short_branch_adr = max_uint;
+ uint last_may_be_short_branch_adr = max_juint;
while (has_short_branch_candidate && progress) {
progress = false;
has_short_branch_candidate = false;
--- a/hotspot/src/share/vm/opto/parse2.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/parse2.cpp Fri May 16 14:35:37 2014 -0700
@@ -405,9 +405,9 @@
bool needs_guard = false;
int default_dest;
- int64 total_outlier_size = 0;
- int64 hi_size = ((int64)hi->hi()) - ((int64)hi->lo()) + 1;
- int64 lo_size = ((int64)lo->hi()) - ((int64)lo->lo()) + 1;
+ int64_t total_outlier_size = 0;
+ int64_t hi_size = ((int64_t)hi->hi()) - ((int64_t)hi->lo()) + 1;
+ int64_t lo_size = ((int64_t)lo->hi()) - ((int64_t)lo->lo()) + 1;
if (lo->dest() == hi->dest()) {
total_outlier_size = hi_size + lo_size;
@@ -429,7 +429,7 @@
}
// Find the total number of cases and ranges
- int64 num_cases = ((int64)hi->hi()) - ((int64)lo->lo()) + 1;
+ int64_t num_cases = ((int64_t)hi->hi()) - ((int64_t)lo->lo()) + 1;
int num_range = hi - lo + 1;
// Don't create table if: too large, too small, or too sparse.
@@ -473,7 +473,7 @@
// These are the switch destinations hanging off the jumpnode
int i = 0;
for (SwitchRange* r = lo; r <= hi; r++) {
- for (int64 j = r->lo(); j <= r->hi(); j++, i++) {
+ for (int64_t j = r->lo(); j <= r->hi(); j++, i++) {
Node* input = _gvn.transform(new (C) JumpProjNode(jtn, i, r->dest(), (int)(j - lowval)));
{
PreserveJVMState pjvms(this);
--- a/hotspot/src/share/vm/opto/phase.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/phase.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,7 +25,6 @@
#ifndef SHARE_VM_OPTO_PHASE_HPP
#define SHARE_VM_OPTO_PHASE_HPP
-#include "libadt/port.hpp"
#include "runtime/timer.hpp"
class Compile;
--- a/hotspot/src/share/vm/opto/regmask.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/regmask.cpp Fri May 16 14:35:37 2014 -0700
@@ -51,7 +51,7 @@
//-------------Non-zero bit search methods used by RegMask---------------------
// Find lowest 1, or return 32 if empty
-int find_lowest_bit( uint32 mask ) {
+int find_lowest_bit( uint32_t mask ) {
int n = 0;
if( (mask & 0xffff) == 0 ) {
mask >>= 16;
@@ -80,7 +80,7 @@
}
// Find highest 1, or return 32 if empty
-int find_hihghest_bit( uint32 mask ) {
+int find_hihghest_bit( uint32_t mask ) {
int n = 0;
if( mask > 0xffff ) {
mask >>= 16;
@@ -395,7 +395,7 @@
//------------------------------Size-------------------------------------------
// Compute size of register mask in bits
uint RegMask::Size() const {
- extern uint8 bitsInByte[256];
+ extern uint8_t bitsInByte[256];
uint sum = 0;
for( int i = 0; i < RM_SIZE; i++ )
sum +=
--- a/hotspot/src/share/vm/opto/regmask.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/regmask.hpp Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,6 @@
#define SHARE_VM_OPTO_REGMASK_HPP
#include "code/vmreg.hpp"
-#include "libadt/port.hpp"
#include "opto/optoreg.hpp"
#ifdef TARGET_ARCH_MODEL_x86_32
# include "adfiles/adGlobals_x86_32.hpp"
@@ -68,9 +67,9 @@
//-------------Non-zero bit search methods used by RegMask---------------------
// Find lowest 1, or return 32 if empty
-int find_lowest_bit( uint32 mask );
+int find_lowest_bit( uint32_t mask );
// Find highest 1, or return 32 if empty
-int find_hihghest_bit( uint32 mask );
+int find_hihghest_bit( uint32_t mask );
//------------------------------RegMask----------------------------------------
// The ADL file describes how to print the machine-specific registers, as well
--- a/hotspot/src/share/vm/opto/runtime.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/runtime.cpp Fri May 16 14:35:37 2014 -0700
@@ -960,7 +960,7 @@
} else {
// Receiver did not match any saved receiver and there is no empty row for it.
// Increment total counter to indicate polymorphic case.
- intptr_t* count_p = (intptr_t*)(((byte*)(data)) + in_bytes(CounterData::count_offset()));
+ intptr_t* count_p = (intptr_t*)(((uint8_t*)(data)) + in_bytes(CounterData::count_offset()));
*count_p += DataLayout::counter_increment;
}
JRT_END
--- a/hotspot/src/share/vm/opto/subnode.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/subnode.cpp Fri May 16 14:35:37 2014 -0700
@@ -242,8 +242,8 @@
const Type *SubINode::sub( const Type *t1, const Type *t2 ) const {
const TypeInt *r0 = t1->is_int(); // Handy access
const TypeInt *r1 = t2->is_int();
- int32 lo = r0->_lo - r1->_hi;
- int32 hi = r0->_hi - r1->_lo;
+ int32_t lo = r0->_lo - r1->_hi;
+ int32_t hi = r0->_hi - r1->_lo;
// We next check for 32-bit overflow.
// If that happens, we just assume all integers are possible.
--- a/hotspot/src/share/vm/opto/type.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/opto/type.hpp Fri May 16 14:35:37 2014 -0700
@@ -25,7 +25,6 @@
#ifndef SHARE_VM_OPTO_TYPE_HPP
#define SHARE_VM_OPTO_TYPE_HPP
-#include "libadt/port.hpp"
#include "opto/adlcVMDeps.hpp"
#include "runtime/handles.hpp"
--- a/hotspot/src/share/vm/precompiled/precompiled.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/precompiled/precompiled.hpp Fri May 16 14:35:37 2014 -0700
@@ -247,7 +247,6 @@
# include "utilities/yieldingWorkgroup.hpp"
#ifdef COMPILER2
# include "libadt/dict.hpp"
-# include "libadt/port.hpp"
# include "libadt/set.hpp"
# include "libadt/vectset.hpp"
# include "opto/addnode.hpp"
--- a/hotspot/src/share/vm/prims/jvm.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/prims/jvm.cpp Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
#include "classfile/classLoader.hpp"
#include "classfile/javaAssertions.hpp"
#include "classfile/javaClasses.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
--- a/hotspot/src/share/vm/prims/methodHandles.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,7 +23,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "compiler/compileBroker.hpp"
#include "interpreter/interpreter.hpp"
#include "interpreter/oopMapCache.hpp"
--- a/hotspot/src/share/vm/prims/whitebox.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/prims/whitebox.cpp Fri May 16 14:35:37 2014 -0700
@@ -27,7 +27,7 @@
#include "memory/universe.hpp"
#include "oops/oop.inline.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/classLoaderData.hpp"
#include "prims/whitebox.hpp"
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,6 +24,7 @@
#include "precompiled.hpp"
#include "classfile/javaAssertions.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/symbolTable.hpp"
#include "compiler/compilerOracle.hpp"
#include "memory/allocation.inline.hpp"
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp Fri May 16 14:35:37 2014 -0700
@@ -524,13 +524,6 @@
product_pd(bool, UseMembar, \
"(Unstable) Issues membars on thread state transitions") \
\
- /* Temp PPC Flag to allow disabling the use of lwsync on ppc platforms \
- * that don't support it. This will be replaced by processor detection \
- * logic. \
- */ \
- product(bool, UsePPCLWSYNC, true, \
- "Use lwsync instruction if true, else use slower sync") \
- \
develop(bool, CleanChunkPoolAsync, falseInEmbedded, \
"Clean the chunk pool asynchronously") \
\
--- a/hotspot/src/share/vm/runtime/init.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/init.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,7 +23,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "code/icBuffer.hpp"
#include "gc_interface/collectedHeap.hpp"
#include "interpreter/bytecodes.hpp"
--- a/hotspot/src/share/vm/runtime/java.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/java.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,7 +24,7 @@
#include "precompiled.hpp"
#include "classfile/classLoader.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "compiler/compileBroker.hpp"
--- a/hotspot/src/share/vm/runtime/reflection.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/reflection.cpp Fri May 16 14:35:37 2014 -0700
@@ -24,7 +24,7 @@
#include "precompiled.hpp"
#include "classfile/javaClasses.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/verifier.hpp"
#include "classfile/vmSymbols.hpp"
--- a/hotspot/src/share/vm/runtime/safepoint.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/safepoint.cpp Fri May 16 14:35:37 2014 -0700
@@ -23,7 +23,7 @@
*/
#include "precompiled.hpp"
-#include "classfile/symbolTable.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Fri May 16 14:35:37 2014 -0700
@@ -27,6 +27,7 @@
#include "classfile/javaClasses.hpp"
#include "classfile/loaderConstraints.hpp"
#include "classfile/placeholders.hpp"
+#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "ci/ciField.hpp"
#include "ci/ciInstance.hpp"
--- a/hotspot/src/share/vm/utilities/hashtable.cpp Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/src/share/vm/utilities/hashtable.cpp Fri May 16 14:35:37 2014 -0700
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "classfile/altHashing.hpp"
#include "classfile/javaClasses.hpp"
+#include "classfile/stringTable.hpp"
#include "memory/allocation.inline.hpp"
#include "memory/filemap.hpp"
#include "memory/resourceArea.hpp"
--- a/hotspot/test/Makefile Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/test/Makefile Fri May 16 14:35:37 2014 -0700
@@ -147,6 +147,11 @@
all: jtreg_tests
@$(ECHO) "Testing completed successfully"
+# Support "hotspot_" prefixed test make targets too
+# The hotspot_% targets are for example invoked by the top level Makefile
+hotspot_%:
+ $(MAKE) $*
+
# Prep for output
prep: clean
@$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
--- a/hotspot/test/TEST.groups Thu May 15 10:37:52 2014 -0700
+++ b/hotspot/test/TEST.groups Fri May 16 14:35:37 2014 -0700
@@ -66,7 +66,6 @@
gc/metaspace/TestMetaspacePerfCounters.java \
gc/metaspace/TestPerfCountersAndMemoryPools.java \
runtime/6819213/TestBootNativeLibraryPath.java \
- runtime/6925573/SortMethodsTest.java \
runtime/7158988/FieldMonitor.java \
runtime/7194254/Test7194254.java \
runtime/Metaspace/FragmentMetaspace.java \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/duplAttributes/DuplAttributes.jcod Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,1310 @@
+/*
+ * Copyright (c) 2014, 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 contains ten different sub-tests. Each sub-test consists of a
+ * class with a different case of an invalid duplicate attribute. The main
+ * test runs each of these tests individually. If any of them fail then the
+ * whole test fails.
+ */
+
+
+
+/*
+ * This test contains a class with invalid duplicate AnnotationDefault attributes.
+ */
+class AnnotationDefaultDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "AnnotationDefault"; // #9
+ Utf8 "LAnnotationDefaultI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "AnnotationDefaultDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "AnnotationDefaultDupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ ;
+
+ Attr(#9) { // AnnotationDefault
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end AnnotationDefault
+ // wrong:
+ ;
+ Attr(#9) { // AnnotationDefault
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end AnnotationDefault
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // AnnotationDefault
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end AnnotationDefault
+ } // Attributes
+
+} // end class
+
+
+
+/*
+ * This test contains a class with invalid duplicate RuntimeInvisibleAnnotations
+ * attributes.
+ */
+class ClassInvisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "RuntimeInvisibleAnnotations"; // #9
+ Utf8 "LClassInvisAnnotsI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "ClassInvisAnnotsDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "ClassInvisAnnotsDupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+// wrong:
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+// end wrong
+ } // Attributes
+
+} // end class
+
+
+
+/*
+ * This test contains a class with invalid duplicate RuntimeVisibleAnnotations
+ * attributes.
+ */
+class ClassVisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "RuntimeVisibleAnnotations"; // #9
+ Utf8 "LClassVisAnnotsI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "ClassVisAnnotsDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "ClassVisAnnotsDupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+// wrong:
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+// end wrong
+ } // Attributes
+
+} // end class
+
+
+
+/*
+ * This test contains a field with invalid duplicate RuntimeInvisibleAnnotations
+ * attributes.
+ */
+class FieldInvisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #4 #16; // #1
+ Method #17 #18; // #2
+ class #19; // #3
+ class #20; // #4
+ Utf8 "fld"; // #5
+ Utf8 "Ljava/util/ArrayList;"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "Ljava/util/ArrayList<Ljava/lang/Object;>;"; // #8
+ Utf8 "RuntimeInvisibleAnnotations"; // #9
+ Utf8 "LFieldInvisAnnotsI;"; // #10
+ Utf8 "<init>"; // #11
+ Utf8 "()V"; // #12
+ Utf8 "Code"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #11 #12; // #16
+ class #21; // #17
+ NameAndType #14 #15; // #18
+ Utf8 "FieldInvisAnnotsDup"; // #19
+ Utf8 "java/lang/Object"; // #20
+ Utf8 "FieldInvisAnnotsDupChecker"; // #21
+ } // Constant Pool
+
+ 0x0021; // access
+ #3;// this_cpx
+ #4;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ { // Member
+ 0x0001; // access
+ #5; // name_cpx
+ #6; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+ // wrong:
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+ // end wrong
+ } // Attributes
+ } // Member
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #11; // name_cpx
+ #12; // sig_cpx
+ [] { // Attributes
+ Attr(#13) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#13) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80002AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ } // Attributes
+} // end class
+
+
+
+/*
+ * This test contains a field with invalid duplicate RuntimeVisibleAnnotations
+ * attributes.
+ */
+class FieldVisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #4 #16; // #1
+ Method #17 #18; // #2
+ class #19; // #3
+ class #20; // #4
+ Utf8 "fld"; // #5
+ Utf8 "Ljava/util/ArrayList;"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "Ljava/util/ArrayList<Ljava/lang/Object;>;"; // #8
+ Utf8 "RuntimeVisibleAnnotations"; // #9
+ Utf8 "LFieldVisAnnotsI;"; // #10
+ Utf8 "<init>"; // #11
+ Utf8 "()V"; // #12
+ Utf8 "Code"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #11 #12; // #16
+ class #21; // #17
+ NameAndType #14 #15; // #18
+ Utf8 "FieldVisAnnotsDup"; // #19
+ Utf8 "java/lang/Object"; // #20
+ Utf8 "FieldVisAnnotsDupChecker"; // #21
+ } // Constant Pool
+
+ 0x0021; // access
+ #3;// this_cpx
+ #4;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ { // Member
+ 0x0001; // access
+ #5; // name_cpx
+ #6; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+ // wrong:
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+ // end wrong
+ } // Attributes
+ } // Member
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #11; // name_cpx
+ #12; // sig_cpx
+ [] { // Attributes
+ Attr(#13) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#13) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80002AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ } // Attributes
+} // end class
+
+
+
+/*
+ * This test contains a method with invalid duplicate RuntimeInvisibleAnnotations
+ * attributes.
+ */
+class MethInvisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "RuntimeInvisibleAnnotations"; // #9
+ Utf8 "LMethInvisAnnotsI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "MethInvisAnnotsDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "MethInvisAnnotsDupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ ;
+
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+ // wrong:
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeInvisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeInvisibleAnnotations
+ } // Attributes
+
+} // end class
+
+
+
+/*
+ * This test contains a method with invalid duplicate
+ * RuntimeInvisibleParameterAnnotations attributes.
+ */
+class MethInvisParamAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #4 #16; // #1
+ Method #17 #18; // #2
+ class #19; // #3
+ class #20; // #4
+ Utf8 "<init>"; // #5
+ Utf8 "()V"; // #6
+ Utf8 "Code"; // #7
+ Utf8 "m"; // #8
+ Utf8 "()I"; // #9
+ Utf8 "Signature"; // #10
+ Utf8 "<T:Ljava/lang/Object;>()I"; // #11
+ Utf8 "RuntimeInvisibleParameterAnnotations"; // #12
+ Utf8 "LMethInvisParamAnnotsI;"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #5 #6; // #16
+ class #21; // #17
+ NameAndType #14 #15; // #18
+ Utf8 "MethInvisParamAnnotsDup"; // #19
+ Utf8 "java/lang/Object"; // #20
+ Utf8 "MethInvisParamAnnotsDupChecker"; // #21
+ } // Constant Pool
+
+ 0x0021; // access
+ #3;// this_cpx
+ #4;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #5; // name_cpx
+ #6; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0001; // access
+ #8; // name_cpx
+ #9; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x03AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ ;
+ Attr(#10) { // Signature
+ #11;
+ } // end Signature
+ ;
+ Attr(#12) { // RuntimeInvisibleParameterAnnotations
+ 0x0001010000000D00;
+ 0x00;
+ } // end RuntimeInvisibleParameterAnnotations
+// wrong:
+ ;
+ Attr(#12) { // RuntimeInvisibleParameterAnnotations
+ 0x0001010000000D00;
+ 0x00;
+ } // end RuntimeInvisibleParameterAnnotations
+// end wrong
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80002AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ } // Attributes
+} // end class
+
+
+
+/*
+ * This test contains a method with invalid duplicate RuntimeVisibleAnnotations
+ * attributes.
+ */
+class MethVisAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "RuntimeVisibleAnnotations"; // #9
+ Utf8 "LMethodVisAnnotsDupI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "MethVisAnnotsDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "MethVisAnnotsDupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ ;
+
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+ // wrong:
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // RuntimeVisibleAnnotations
+ [] { // type annotations
+ { // type annotation
+ 0x00; // target_type
+ 0x00; // type_parameter_index
+ []b { // type_path
+ }
+
+ #10; // type_index
+ [] { // element_value_pairs
+ } // element_value_pairs
+ } // type annotation
+ } // type annotations
+ } // end RuntimeVisibleAnnotations
+ } // Attributes
+
+} // end class
+
+
+
+/*
+ * This test contains a method with invalid duplicate
+ * RuntimeVisibleParameterAnnotations attributes.
+ */
+class MethVisParamAnnotsDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #4 #16; // #1
+ Method #17 #18; // #2
+ class #19; // #3
+ class #20; // #4
+ Utf8 "<init>"; // #5
+ Utf8 "()V"; // #6
+ Utf8 "Code"; // #7
+ Utf8 "m"; // #8
+ Utf8 "()I"; // #9
+ Utf8 "Signature"; // #10
+ Utf8 "<T:Ljava/lang/Object;>()I"; // #11
+ Utf8 "RuntimeVisibleParameterAnnotations"; // #12
+ Utf8 "LMethVisParamAnnotsI;"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #5 #6; // #16
+ class #21; // #17
+ NameAndType #14 #15; // #18
+ Utf8 "MethVisParamAnnotsDup"; // #19
+ Utf8 "java/lang/Object"; // #20
+ Utf8 "MethVisParamAnnotsDupChecker"; // #21
+ } // Constant Pool
+
+ 0x0021; // access
+ #3;// this_cpx
+ #4;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #5; // name_cpx
+ #6; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0001; // access
+ #8; // name_cpx
+ #9; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x03AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ ;
+ Attr(#10) { // Signature
+ #11;
+ } // end Signature
+ ;
+ Attr(#12) { // RuntimeVisibleParameterAnnotations
+ 0x0001010000000D00;
+ 0x00;
+ } // end RuntimeVisibleParameterAnnotations
+// wrong:
+ ;
+ Attr(#12) { // RuntimeVisibleParameterAnnotations
+ 0x0001010000000D00;
+ 0x00;
+ } // end RuntimeVisibleParameterAnnotations
+// end wrong
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#7) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80002AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ } // Attributes
+} // end class
+
+
+
+/*
+ * This test contains a method with invalid duplicate SourceDebugExtension
+ * attributes.
+ */
+class SrcDbgExtDup {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #11; // #1
+ class #12; // #2
+ class #13; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "Signature"; // #7
+ Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
+ Utf8 "SourceDebugExtension"; // #9
+ Utf8 "LSrcDbgExtDupI;"; // #10
+ NameAndType #4 #5; // #11
+ Utf8 "SrcDbgExtDup"; // #12
+ Utf8 "java/lang/Object"; // #13
+ Utf8 "run"; // #14
+ Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
+ NameAndType #14 #15; // #16
+ class #19; // #17
+ Method #17 #16; // #18
+ Utf8 "SrcDbgExt_dupChecker"; // #19
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0009; // access
+ #14; // name_cpx
+ #15; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 2; // max_stack
+ 2; // max_locals
+ Bytes[]{
+ 0x2A2BB80012AC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ Attr(#7) { // Signature
+ #8;
+ } // end Signature
+ ;
+ Attr(#9) { // SourceDebugExtension
+ [] { // debug_extensions
+ { // type debug_extension
+ []b { // type_path
+ }
+ } // type debug_extension
+ } // type debug_extensions
+ } // end SourceDebugExtension
+// wrong:
+ ;
+ Attr(#9) { // SourceDebugExtension
+ [] { // debug_extensions
+ { // type debug_extension
+ []b { // type_path
+ }
+ } // type debug_extension
+ } // type debug_extensions
+ } // end SourceDebugExtension
+// end wrong
+ } // Attributes
+
+} // end class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/duplAttributes/DuplAttributesTest.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2014, 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 8040292
+ * @library /testlibrary
+ * @summary Throw exceptions when duplicate attributes are detected.
+ * @run main DuplAttributesTest
+ */
+
+import java.io.File;
+import com.oracle.java.testlibrary.*;
+
+public class DuplAttributesTest {
+
+ static final String testsrc = System.getProperty("test.src");
+
+ public static void runTest(String test, String result) throws Throwable {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ "-cp", testsrc + File.separator + "test.jar", test);
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("java.lang.ClassFormatError: Multiple " + result);
+ }
+
+ public static void main(String args[]) throws Throwable {
+ System.out.println("Regression test for bug 8040292");
+
+ runTest("ClassInvisAnnotsDup", "RuntimeInvisibleAnnotations");
+ runTest("ClassVisAnnotsDup", "RuntimeVisibleAnnotations");
+ runTest("SrcDbgExtDup", "SourceDebugExtension");
+
+ runTest("FieldInvisAnnotsDup", "RuntimeInvisibleAnnotations");
+ runTest("FieldVisAnnotsDup", "RuntimeVisibleAnnotations");
+
+ runTest("AnnotationDefaultDup", "AnnotationDefault");
+ runTest("MethInvisAnnotsDup", "RuntimeInvisibleAnnotations");
+ runTest("MethVisAnnotsDup", "RuntimeVisibleAnnotations");
+ runTest("MethInvisParamAnnotsDup", "RuntimeInvisibleParameterAnnotations");
+ runTest("MethVisParamAnnotsDup", "RuntimeVisibleParameterAnnotations");
+ }
+}
+
Binary file hotspot/test/runtime/duplAttributes/test.jar has changed
--- a/jaxp/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/jaxp/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
4ce98701efe3b28f6ce3ab23385445731e968af7 jdk9-b10
6b4280dceb00642f54d5bc1c2cb7d34c99a04992 jdk9-b11
e88cecf5a21b760ff7d7761c2db6bb8c82bc9f0c jdk9-b12
+5eaf717f6e36037a6d3744ffeee0e4c88e64a0d2 jdk9-b13
--- a/jaxws/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/jaxws/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -258,3 +258,4 @@
9af43f4d215f6f19b1767f6ac66da931b8ee9535 jdk9-b10
1f953ba7db2b535e19f0354abfee6d67605e0684 jdk9-b11
779f8b21c75f83e3918dac8499e4d0ecb3a54ed7 jdk9-b12
+3d42204854c9f703e3ccdc8891248e73057713ab jdk9-b13
--- a/jdk/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/jdk/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
ab06ba2894313a47e4969ca37792ff119c49e711 jdk9-b10
47feccd164b7187a0147693a922ee47c6629643c jdk9-b11
83d9bc20973de232cae45b139fdff8a4549c130f jdk9-b12
+c7c8002d02721e02131d104549ebeb8b379fb8d2 jdk9-b13
--- a/jdk/make/CopyFiles.gmk Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/CopyFiles.gmk Fri May 16 14:35:37 2014 -0700
@@ -367,8 +367,24 @@
POLICY_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.policy
POLICY_DST := $(JDK_OUTPUTDIR)/lib/security/java.policy
-$(POLICY_DST): $(POLICY_SRC)
- $(call install-file)
+POLICY_SRC_LIST :=
+
+ifeq ($(OPENJDK_TARGET_OS), windows)
+ POLICY_SRC_LIST += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/lib/security/java.policy
+endif
+ifndef OPENJDK
+ ifneq (, $(filter $(OPENJDK_TARGET_OS), windows solaris))
+ POLICY_SRC_LIST += $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS)/lib/security/java.policy
+ endif
+endif
+
+POLICY_SRC_LIST += $(POLICY_SRC)
+
+$(POLICY_DST): $(POLICY_SRC_LIST)
+ $(MKDIR) -p $(@D)
+ $(RM) $@ $@.tmp
+ $(foreach f,$(POLICY_SRC_LIST),$(CAT) $(f) >> $@.tmp;)
+ $(MV) $@.tmp $@
COPY_FILES += $(POLICY_DST)
--- a/jdk/make/data/tzdata/VERSION Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/data/tzdata/VERSION Fri May 16 14:35:37 2014 -0700
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2014b
+tzdata2014c
--- a/jdk/make/data/tzdata/africa Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/data/tzdata/africa Fri May 16 14:35:37 2014 -0700
@@ -358,11 +358,54 @@
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
# </a>
+# From Ahmad El-Dardiry (2014-05-07):
+# Egypt is to change back to Daylight system on May 15
+# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
+
+# From Gunther Vermier (2015-05-13):
+# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
+
+# From Paul Eggert (2014-05-13):
+# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
+# the change is because of blackouts in Cairo, even though Ahram Online (cited
+# above) says DST had no affect on electricity consumption. The AP story says
+# DST will not be observed during Ramadan. There is no information about when
+# DST will end. See:
+# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
+#
+# For now, guess that later transitions will use 2010's rules, and that
+# Egypt will agree with Morocco (see below) about the date Ramadan starts and
+# ends, though (unlike Morocco) it will switch at 00:00 standard time. In
+# Egypt the spring-forward transitions are removed for 2020-2022, when the
+# guessed spring-forward date falls during the estimated Ramadan, and all
+# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
+# outside the guessed daylight-saving time. Ramadan intrudes on the guessed
+# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
+
Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
Rule Egypt 2009 only - Aug 20 23:00s 0 -
Rule Egypt 2010 only - Aug 11 0:00 0 -
Rule Egypt 2010 only - Sep 10 0:00 1:00 S
Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
+Rule Egypt 2014 only - May 15 24:00 1:00 S
+Rule Egypt 2014 only - Jun 29 0:00s 0 -
+Rule Egypt 2014 only - Jul 29 0:00s 1:00 S
+Rule Egypt 2014 max - Sep lastThu 23:00s 0 -
+Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
+Rule Egypt 2015 only - Jun 18 0:00s 0 -
+Rule Egypt 2015 only - Jul 18 0:00s 1:00 S
+Rule Egypt 2016 only - Jun 7 0:00s 0 -
+Rule Egypt 2016 only - Jul 7 0:00s 1:00 S
+Rule Egypt 2017 only - May 27 0:00s 0 -
+Rule Egypt 2017 only - Jun 26 0:00s 1:00 S
+Rule Egypt 2018 only - May 16 0:00s 0 -
+Rule Egypt 2018 only - Jun 15 0:00s 1:00 S
+Rule Egypt 2019 only - May 6 0:00s 0 -
+Rule Egypt 2019 only - Jun 5 0:00s 1:00 S
+Rule Egypt 2020 only - May 24 0:00s 1:00 S
+Rule Egypt 2021 only - May 13 0:00s 1:00 S
+Rule Egypt 2022 only - May 3 0:00s 1:00 S
+Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
--- a/jdk/make/data/tzdata/asia Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/data/tzdata/asia Fri May 16 14:35:37 2014 -0700
@@ -1370,22 +1370,6 @@
# "Jordan will switch to winter time on Friday, October 27".
#
-# From Phil Pizzey (2009-04-02):
-# ...I think I may have spotted an error in the timezone data for
-# Jordan.
-# The current (2009d) asia file shows Jordan going to daylight
-# saving
-# time on the last Thursday in March.
-#
-# Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S
-#
-# However timeanddate.com, which I usually find reliable, shows Jordan
-# going to daylight saving time on the last Friday in March since 2002.
-# Please see
-# <a href="http://www.timeanddate.com/worldclock/timezone.html?n=11">
-# http://www.timeanddate.com/worldclock/timezone.html?n=11
-# </a>
-
# From Steffen Thorsen (2009-04-02):
# This single one might be good enough, (2009-03-24, Arabic):
# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279">
--- a/jdk/make/data/tzdata/europe Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/data/tzdata/europe Fri May 16 14:35:37 2014 -0700
@@ -2989,6 +2989,10 @@
# From Alexander Krivenyshev (2014-03-17):
# time change at 2:00 (2am) on March 30, 2014
# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
2:00 EU EE%sT 2014 Mar 30 2:00
4:00 - MSK
--- a/jdk/make/gensrc/GensrcMisc.gmk Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/gensrc/GensrcMisc.gmk Fri May 16 14:35:37 2014 -0700
@@ -62,25 +62,6 @@
##########################################################################################
-ifeq ($(OPENJDK_TARGET_OS_API), posix)
- UPSUFFIX := $(OPENJDK_TARGET_OS)
- ifeq ($(OPENJDK_TARGET_OS), macosx)
- UPSUFFIX := bsd
- endif
- # UNIXProcess.java is different for solaris and linux. We need to copy
- # the correct UNIXProcess.java over to $(JDK_OUTPUTDIR)/gensrc/java/lang/.
-
- $(JDK_OUTPUTDIR)/gensrc/java/lang/UNIXProcess.java: \
- $(JDK_TOPDIR)/src/solaris/classes/java/lang/UNIXProcess.java.$(UPSUFFIX)
- $(ECHO) $(LOG_INFO) Copying UNIXProcess.java.$(OPENJDK_TARGET_OS) to java/lang/UNIXProcess.java
- $(call install-file)
- $(CHMOD) u+rw $@
-
- GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc/java/lang/UNIXProcess.java
-endif
-
-##########################################################################################
-
GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc/sun/nio/ch/SocketOptionRegistry.java
GENSRC_SOR_SRC := $(JDK_TOPDIR)/make/src/native/genconstants/ch
--- a/jdk/make/profile-rtjar-includes.txt Thu May 15 10:37:52 2014 -0700
+++ b/jdk/make/profile-rtjar-includes.txt Fri May 16 14:35:37 2014 -0700
@@ -100,9 +100,7 @@
PROFILE_2_RTJAR_EXCLUDE_TYPES :=
-PROFILE_2_INCLUDE_METAINF_SERVICES := \
- META-INF/services/sun.util.spi.XmlPropertiesProvider
-
+PROFILE_2_INCLUDE_METAINF_SERVICES :=
PROFILE_3_RTJAR_INCLUDE_PACKAGES := \
com/sun/jmx \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/tools/attach/AttachOperationFailedException.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2014, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package com.sun.tools.attach;
+
+import java.io.IOException;
+
+/**
+ * Exception type to signal that an attach operation failed in the target VM.
+ *
+ * <p> This exception can be thrown by the various operations of
+ * {@link com.sun.tools.attach.VirtualMachine} when the operation
+ * fails in the target VM. If there is a communication error,
+ * a regular IOException will be thrown.
+ *
+ * @since 1.9
+ */
+@jdk.Exported
+public class AttachOperationFailedException extends IOException {
+
+ private static final long serialVersionUID = 2140308168167478043L;
+
+ /**
+ * Constructs an <code>AttachOperationFailedException</code> with
+ * the specified detail message.
+ *
+ * @param s the detail message.
+ */
+ public AttachOperationFailedException(String message) {
+ super(message);
+ }
+}
--- a/jdk/src/share/classes/com/sun/tools/attach/VirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/com/sun/tools/attach/VirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -564,8 +564,15 @@
*
* @return The system properties
*
+ * @throws AttachOperationFailedException
+ * If the target virtual machine is unable to complete the
+ * attach operation. A more specific error message will be
+ * given by {@link AttachOperationFailedException#getMessage()}.
+ *
* @throws IOException
- * If an I/O error occurs
+ * If an I/O error occurs, a communication error for example,
+ * that cannot be identified as an error to indicate that the
+ * operation failed in the target VM.
*
* @see java.lang.System#getProperties
* @see #loadAgentLibrary
@@ -591,8 +598,15 @@
*
* @return The agent properties
*
+ * @throws AttachOperationFailedException
+ * If the target virtual machine is unable to complete the
+ * attach operation. A more specific error message will be
+ * given by {@link AttachOperationFailedException#getMessage()}.
+ *
* @throws IOException
- * If an I/O error occurs
+ * If an I/O error occurs, a communication error for example,
+ * that cannot be identified as an error to indicate that the
+ * operation failed in the target VM.
*/
public abstract Properties getAgentProperties() throws IOException;
--- a/jdk/src/share/classes/java/lang/Character.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/Character.java Fri May 16 14:35:37 2014 -0700
@@ -4498,7 +4498,6 @@
* Character case is ignored for all of the valid script names.
* The en_US locale's case mapping rules are used to provide
* case-insensitive string comparisons for script name validation.
- * <p>
*
* @param scriptName A {@code UnicodeScript} name.
* @return The {@code UnicodeScript} constant identified
@@ -5503,7 +5502,7 @@
* '\u00D0' '\u00D1' '\u00D2' '\u00D3' '\u00D4' '\u00D5' '\u00D6' '\u00D8'
* '\u00D9' '\u00DA' '\u00DB' '\u00DC' '\u00DD' '\u00DE'
* </pre></blockquote>
- * <p> Many other Unicode characters are uppercase too.<p>
+ * <p> Many other Unicode characters are uppercase too.
*
* @param codePoint the character (Unicode code point) to be tested.
* @return {@code true} if the character is uppercase;
@@ -5581,7 +5580,7 @@
* <li>{@code LATIN CAPITAL LETTER N WITH SMALL LETTER J}
* <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z}
* </ul>
- * <p> Many other Unicode characters are titlecase too.<p>
+ * <p> Many other Unicode characters are titlecase too.
*
* @param codePoint the character (Unicode code point) to be tested.
* @return {@code true} if the character is titlecase;
@@ -6777,7 +6776,6 @@
* <li> It is {@code '\u005Cu001E'}, U+001E RECORD SEPARATOR.
* <li> It is {@code '\u005Cu001F'}, U+001F UNIT SEPARATOR.
* </ul>
- * <p>
*
* @param codePoint the character (Unicode code point) to be tested.
* @return {@code true} if the character is a Java whitespace
@@ -7121,7 +7119,6 @@
/**
* Converts the character (Unicode code point) argument to uppercase using
* information from the UnicodeData file.
- * <p>
*
* @param codePoint the character (Unicode code point) to be converted.
* @return either the uppercase equivalent of the character, if
--- a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Fri May 16 14:35:37 2014 -0700
@@ -62,6 +62,7 @@
//# Conditional mappings
//# ================================================================================
new Entry(0x03A3, new char[]{0x03C2}, new char[]{0x03A3}, null, FINAL_CASED), // # GREEK CAPITAL LETTER SIGMA
+ new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, null, 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
//# ================================================================================
//# Locale-sensitive mappings
@@ -77,8 +78,8 @@
//# ================================================================================
//# Turkish and Azeri
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
-// new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
+ new Entry(0x0130, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "tr", AFTER_I), // # COMBINING DOT ABOVE
new Entry(0x0307, new char[]{}, new char[]{0x0307}, "az", AFTER_I), // # COMBINING DOT ABOVE
new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
@@ -147,21 +148,25 @@
private static char[] lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) {
HashSet<Entry> set = entryTable.get(new Integer(src.codePointAt(index)));
+ char[] ret = null;
if (set != null) {
Iterator<Entry> iter = set.iterator();
String currentLang = locale.getLanguage();
while (iter.hasNext()) {
Entry entry = iter.next();
- String conditionLang= entry.getLanguage();
+ String conditionLang = entry.getLanguage();
if (((conditionLang == null) || (conditionLang.equals(currentLang))) &&
isConditionMet(src, index, locale, entry.getCondition())) {
- return (bLowerCasing ? entry.getLowerCase() : entry.getUpperCase());
+ ret = bLowerCasing ? entry.getLowerCase() : entry.getUpperCase();
+ if (conditionLang != null) {
+ break;
+ }
}
}
}
- return null;
+ return ret;
}
private static boolean isConditionMet(String src, int index, Locale locale, int condition) {
--- a/jdk/src/share/classes/java/lang/Math.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/Math.java Fri May 16 14:35:37 2014 -0700
@@ -1048,7 +1048,6 @@
* whereas {@code (-4 / 3) == -1}.
* </li>
* </ul>
- * <p>
*
* @param x the dividend
* @param y the divisor
--- a/jdk/src/share/classes/java/lang/Runtime.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/Runtime.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2014, 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
@@ -83,7 +83,7 @@
* blocks indefinitely.
*
* <p> The <tt>{@link System#exit(int) System.exit}</tt> method is the
- * conventional and convenient means of invoking this method. <p>
+ * conventional and convenient means of invoking this method.
*
* @param status
* Termination status. By convention, a nonzero status code
@@ -180,7 +180,7 @@
* method goes awry by, for example, corrupting internal data structures or
* attempting to access nonexistent memory. If the virtual machine aborts
* then no guarantee can be made about whether or not any shutdown hooks
- * will be run. <p>
+ * will be run.
*
* @param hook
* An initialized but unstarted <tt>{@link Thread}</tt> object
@@ -248,7 +248,7 @@
* hooks to be started and does not run uninvoked finalizers if
* finalization-on-exit has been enabled. If the shutdown sequence has
* already been initiated then this method does not wait for any running
- * shutdown hooks or finalizers to finish their work. <p>
+ * shutdown hooks or finalizers to finish their work.
*
* @param status
* Termination status. By convention, a nonzero status code
--- a/jdk/src/share/classes/java/lang/SecurityManager.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/SecurityManager.java Fri May 16 14:35:37 2014 -0700
@@ -1242,7 +1242,6 @@
* <code>super.checkPropertiesAccess</code>
* at the point the overridden method would normally throw an
* exception.
- * <p>
*
* @exception SecurityException if the calling thread does not have
* permission to access or modify the system properties.
@@ -1320,7 +1319,6 @@
* <code>super.checkPrintJobAccess</code>
* at the point the overridden method would normally throw an
* exception.
- * <p>
*
* @exception SecurityException if the calling thread does not have
* permission to initiate a print job request.
@@ -1566,7 +1564,6 @@
* <code>super.checkSetFactory</code>
* at the point the overridden method would normally throw an
* exception.
- * <p>
*
* @exception SecurityException if the calling thread does not have
* permission to specify a socket factory or a stream
--- a/jdk/src/share/classes/java/lang/String.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/String.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2014, 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
@@ -2583,6 +2583,9 @@
if (cp == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
return toLowerCaseEx(result, i, locale, false);
}
+ if (cp == '\u0130') { // LATIN CAPITAL LETTER I WITH DOT ABOVE
+ return toLowerCaseEx(result, i, locale, true);
+ }
cp = Character.toLowerCase(cp);
if (!Character.isBmpCodePoint(cp)) {
return toLowerCaseEx(result, i, locale, false);
@@ -2650,7 +2653,7 @@
* LATIN SMALL LETTER DOTLESS I character.
* To obtain correct results for locale insensitive strings, use
* {@code toLowerCase(Locale.ROOT)}.
- * <p>
+ *
* @return the {@code String}, converted to lowercase.
* @see java.lang.String#toLowerCase(Locale)
*/
@@ -2812,7 +2815,7 @@
* LATIN CAPITAL LETTER I WITH DOT ABOVE character.
* To obtain correct results for locale insensitive strings, use
* {@code toUpperCase(Locale.ROOT)}.
- * <p>
+ *
* @return the {@code String}, converted to uppercase.
* @see java.lang.String#toUpperCase(Locale)
*/
--- a/jdk/src/share/classes/java/lang/System.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/System.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2014, 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
@@ -133,7 +133,6 @@
* <p>First, if there is a security manager, its <code>checkPermission</code>
* method is called with a <code>RuntimePermission("setIO")</code> permission
* to see if it's ok to reassign the "standard" input stream.
- * <p>
*
* @param in the new standard input stream.
*
@@ -762,7 +761,6 @@
* permission. This may result in a SecurityException being thrown.
* If no exception is thrown, the specified property is set to the given
* value.
- * <p>
*
* @param key the name of the system property.
* @param value the value of the system property.
@@ -801,7 +799,6 @@
* is called with a <code>PropertyPermission(key, "write")</code>
* permission. This may result in a SecurityException being thrown.
* If no exception is thrown, the specified property is removed.
- * <p>
*
* @param key the name of the system property to be removed.
* @return the previous string value of the system property,
--- a/jdk/src/share/classes/java/lang/instrument/package.html Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/instrument/package.html Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
<!--
- Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2003, 2014, 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
@@ -140,7 +140,7 @@
<li><p>The system class loader (
{@link java.lang.ClassLoader#getSystemClassLoader ClassLoader.getSystemClassLoader}) must
- support a mechanism to add an agent JAR file to the system class path. <p></li>
+ support a mechanism to add an agent JAR file to the system class path.</li>
</ol>
<P>
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2014, 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
@@ -50,7 +50,7 @@
* <li>Combinator methods, which combine or transform pre-existing method handles into new ones.
* <li>Other factory methods to create method handles that emulate other common JVM operations or control flow patterns.
* </ul>
- * <p>
+ *
* @author John Rose, JSR 292 EG
* @since 1.7
*/
--- a/jdk/src/share/classes/java/lang/management/MemoryNotificationInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/management/MemoryNotificationInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -89,7 +89,7 @@
* Subsequent crossing of the usage threshold value does not cause
* further notification until the memory usage has returned
* to become less than the usage threshold value.
- * <p></li>
+ * </li>
* <li>A {@link #MEMORY_COLLECTION_THRESHOLD_EXCEEDED
* collection usage threshold exceeded notification}.
* <br>This notification will be emitted when
--- a/jdk/src/share/classes/java/lang/management/ThreadInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/management/ThreadInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -429,12 +429,12 @@
* <br>The thread is in the {@link java.lang.Thread.State#BLOCKED BLOCKED}
* state waiting to enter the <tt>synchronized</tt> statement
* or method.
- * <p></li>
+ * </li>
* <li>an object monitor to be notified by another thread.
* <br>The thread is in the {@link java.lang.Thread.State#WAITING WAITING}
* or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state
* due to a call to the {@link Object#wait Object.wait} method.
- * <p></li>
+ * </li>
* <li>a synchronization object responsible for the thread parking.
* <br>The thread is in the {@link java.lang.Thread.State#WAITING WAITING}
* or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state
--- a/jdk/src/share/classes/java/lang/management/package.html Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/lang/management/package.html Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
<!--
- Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2003, 2014, 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
@@ -31,7 +31,6 @@
Java virtual machine and other components in the Java runtime.
It allows both local and remote
monitoring and management of the running Java virtual machine.
-<p>
<h4><a name="MXBean">Platform MXBean</a></h4>
<p>
@@ -41,7 +40,6 @@
Each platform MXBean is a {@link java.lang.management.PlatformManagedObject}
with a unique
{@linkplain java.lang.management.PlatformManagedObject#getObjectName name}.
-<p>
<h4>ManagementFactory</h4>
<p>The {@link java.lang.management.ManagementFactory} class is the management
@@ -80,7 +78,6 @@
Java virtual machine and the runtime in the following ways:
<p>
<b>1. Direct access to an MXBean interface</b>
-<p>
<ul>
<li>Get an MXBean instance locally in the running Java virtual machine:
<pre>
@@ -100,7 +97,6 @@
// Get the standard attribute "VmVendor"
String vendor = mxbean.getVmVendor();
</pre>
-<p>
</li>
<li>Construct an MXBean proxy instance that forwards the
method calls to a given MBeanServer:
@@ -132,7 +128,7 @@
</li>
</ul>
<p>
-<b>2. Indirect access to an MXBean interface via MBeanServer</b><p>
+<b>2. Indirect access to an MXBean interface via MBeanServer</b>
<ul>
<li>Go through the
{@link java.lang.management.ManagementFactory#getPlatformMBeanServer
@@ -143,7 +139,7 @@
<em>JMX open types</em> which include basic data types,
{@link javax.management.openmbean.CompositeData CompositeData},
and {@link javax.management.openmbean.TabularData TabularData}
- defined in {@link javax.management.openmbean.OpenType OpenType}.<p>
+ defined in {@link javax.management.openmbean.OpenType OpenType}.
<pre>
MBeanServerConnection mbs;
--- a/jdk/src/share/classes/java/math/BigInteger.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/math/BigInteger.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -3597,7 +3597,7 @@
* Converts the specified BigInteger to a string and appends to
* {@code sb}. This implements the recursive Schoenhage algorithm
* for base conversions.
- * <p/>
+ * <p>
* See Knuth, Donald, _The Art of Computer Programming_, Vol. 2,
* Answers to Exercises (4.4) Question 14.
*
@@ -3646,7 +3646,7 @@
/**
* Returns the value radix^(2^exponent) from the cache.
* If this value doesn't already exist in the cache, it is added.
- * <p/>
+ * <p>
* This could be changed to a more complicated caching method using
* {@code Future}.
*/
--- a/jdk/src/share/classes/java/util/Properties.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/util/Properties.java Fri May 16 14:35:37 2014 -0700
@@ -37,7 +37,7 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
-import sun.util.spi.XmlPropertiesProvider;
+import jdk.internal.util.xml.PropertiesDefaultHandler;
/**
* The {@code Properties} class represents a persistent set of
@@ -877,7 +877,9 @@
public synchronized void loadFromXML(InputStream in)
throws IOException, InvalidPropertiesFormatException
{
- XmlSupport.load(this, Objects.requireNonNull(in));
+ Objects.requireNonNull(in);
+ PropertiesDefaultHandler handler = new PropertiesDefaultHandler();
+ handler.load(this, in);
in.close();
}
@@ -949,8 +951,10 @@
public void storeToXML(OutputStream os, String comment, String encoding)
throws IOException
{
- XmlSupport.save(this, Objects.requireNonNull(os), comment,
- Objects.requireNonNull(encoding));
+ Objects.requireNonNull(os);
+ Objects.requireNonNull(encoding);
+ PropertiesDefaultHandler handler = new PropertiesDefaultHandler();
+ handler.store(this, os, comment, encoding);
}
/**
@@ -1128,83 +1132,4 @@
private static final char[] hexDigit = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
-
- /**
- * Supporting class for loading/storing properties in XML format.
- *
- * <p> The {@code load} and {@code store} methods defined here delegate to a
- * system-wide {@code XmlPropertiesProvider}. On first invocation of either
- * method then the system-wide provider is located as follows: </p>
- *
- * <ol>
- * <li> If the system property {@code sun.util.spi.XmlPropertiesProvider}
- * is defined then it is taken to be the full-qualified name of a concrete
- * provider class. The class is loaded with the system class loader as the
- * initiating loader. If it cannot be loaded or instantiated using a zero
- * argument constructor then an unspecified error is thrown. </li>
- *
- * <li> If the system property is not defined then the service-provider
- * loading facility defined by the {@link ServiceLoader} class is used to
- * locate a provider with the system class loader as the initiating
- * loader and {@code sun.util.spi.XmlPropertiesProvider} as the service
- * type. If this process fails then an unspecified error is thrown. If
- * there is more than one service provider installed then it is
- * not specified as to which provider will be used. </li>
- *
- * <li> If the provider is not found by the above means then a system
- * default provider will be instantiated and used. </li>
- * </ol>
- */
- private static class XmlSupport {
-
- private static XmlPropertiesProvider loadProviderFromProperty(ClassLoader cl) {
- String cn = System.getProperty("sun.util.spi.XmlPropertiesProvider");
- if (cn == null)
- return null;
- try {
- Class<?> c = Class.forName(cn, true, cl);
- return (XmlPropertiesProvider)c.newInstance();
- } catch (ClassNotFoundException |
- IllegalAccessException |
- InstantiationException x) {
- throw new ServiceConfigurationError(null, x);
- }
- }
-
- private static XmlPropertiesProvider loadProviderAsService(ClassLoader cl) {
- Iterator<XmlPropertiesProvider> iterator =
- ServiceLoader.load(XmlPropertiesProvider.class, cl).iterator();
- return iterator.hasNext() ? iterator.next() : null;
- }
-
- private static XmlPropertiesProvider loadProvider() {
- return AccessController.doPrivileged(
- new PrivilegedAction<XmlPropertiesProvider>() {
- public XmlPropertiesProvider run() {
- ClassLoader cl = ClassLoader.getSystemClassLoader();
- XmlPropertiesProvider provider = loadProviderFromProperty(cl);
- if (provider != null)
- return provider;
- provider = loadProviderAsService(cl);
- if (provider != null)
- return provider;
- return new jdk.internal.util.xml.BasicXmlPropertiesProvider();
- }});
- }
-
- private static final XmlPropertiesProvider PROVIDER = loadProvider();
-
- static void load(Properties props, InputStream in)
- throws IOException, InvalidPropertiesFormatException
- {
- PROVIDER.load(props, in);
- }
-
- static void save(Properties props, OutputStream os, String comment,
- String encoding)
- throws IOException
- {
- PROVIDER.store(props, os, comment, encoding);
- }
- }
}
--- a/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java Fri May 16 14:35:37 2014 -0700
@@ -1532,10 +1532,12 @@
*
* @param corePoolSize the new core size
* @throws IllegalArgumentException if {@code corePoolSize < 0}
+ * or {@code corePoolSize} is greater than the {@linkplain
+ * #getMaximumPoolSize() maximum pool size}
* @see #getCorePoolSize
*/
public void setCorePoolSize(int corePoolSize) {
- if (corePoolSize < 0)
+ if (corePoolSize < 0 || maximumPoolSize < corePoolSize)
throw new IllegalArgumentException();
int delta = corePoolSize - this.corePoolSize;
this.corePoolSize = corePoolSize;
--- a/jdk/src/share/classes/javax/management/MBeanPermission.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/MBeanPermission.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -156,7 +156,7 @@
* </ul>
*
* <p>In a comma-separated list of actions, spaces are allowed before
- * and after each action.</p>
+ * and after each action.
*
* @since 1.5
*/
@@ -1129,7 +1129,7 @@
* Checks two MBeanPermission objects for equality. Checks
* that <i>obj</i> is an MBeanPermission, and has the same
* name and actions as this object.
- * <P>
+ *
* @param obj the object we are testing for equality with this object.
* @return true if obj is an MBeanPermission, and has the
* same name and actions as this MBeanPermission object.
--- a/jdk/src/share/classes/javax/management/MBeanServerPermission.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/MBeanServerPermission.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, 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
@@ -285,7 +285,7 @@
* Checks two MBeanServerPermission objects for equality. Checks that
* <i>obj</i> is an MBeanServerPermission, and represents the same
* list of allowable actions as this object.
- * <P>
+ *
* @param obj the object we are testing for equality with this object.
* @return true if the objects are equal.
*/
--- a/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanNotificationBroadcaster.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanNotificationBroadcaster.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -124,7 +124,7 @@
/**
* Sends an attributeChangeNotification which contains the old value and new value for the
* attribute to the registered AttributeChangeNotification listeners on the ModelMBean.
- * <P>
+ *
* @param oldValue The original value for the Attribute
* @param newValue The current value for the Attribute
* <PRE>
--- a/jdk/src/share/classes/javax/management/openmbean/CompositeType.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/CompositeType.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -81,29 +81,29 @@
* The Java class name of composite data values this composite type represents
* (ie the class name returned by the {@link OpenType#getClassName() getClassName} method)
* is set to the string value returned by <code>CompositeData.class.getName()</code>.
- * <p>
+ *
* @param typeName The name given to the composite type this instance represents; cannot be a null or empty string.
- * <br>
+ *
* @param description The human readable description of the composite type this instance represents;
* cannot be a null or empty string.
- * <br>
+ *
* @param itemNames The names of the items contained in the
* composite data values described by this <code>CompositeType</code> instance;
* cannot be null and should contain at least one element; no element can be a null or empty string.
* Note that the order in which the item names are given is not important to differentiate a
* <code>CompositeType</code> instance from another;
* the item names are internally stored sorted in ascending alphanumeric order.
- * <br>
+ *
* @param itemDescriptions The descriptions, in the same order as <var>itemNames</var>, of the items contained in the
* composite data values described by this <code>CompositeType</code> instance;
* should be of the same size as <var>itemNames</var>;
* no element can be null or an empty string.
- * <br>
+ *
* @param itemTypes The open type instances, in the same order as <var>itemNames</var>, describing the items contained
* in the composite data values described by this <code>CompositeType</code> instance;
* should be of the same size as <var>itemNames</var>;
* no element can be null.
- * <br>
+ *
* @throws IllegalArgumentException If <var>typeName</var> or <var>description</var> is a null or empty string,
* or <var>itemNames</var> or <var>itemDescriptions</var> or <var>itemTypes</var> is null,
* or any element of <var>itemNames</var> or <var>itemDescriptions</var>
@@ -111,7 +111,7 @@
* or any element of <var>itemTypes</var> is null,
* or <var>itemNames</var> or <var>itemDescriptions</var> or <var>itemTypes</var>
* are not of the same size.
- * <br>
+ *
* @throws OpenDataException If <var>itemNames</var> contains duplicate item names
* (case sensitive, but leading and trailing whitespaces removed).
*/
@@ -356,7 +356,7 @@
* <li>their type names are equal</li>
* <li>their items' names and types are equal</li>
* </ul>
- * <br>
+ *
* @param obj the object to be compared for equality with this <code>CompositeType</code> instance;
* if <var>obj</var> is <code>null</code>, <code>equals</code> returns <code>false</code>.
*
--- a/jdk/src/share/classes/javax/management/openmbean/OpenMBeanAttributeInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/OpenMBeanAttributeInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -113,7 +113,6 @@
* for any two <code>OpenMBeanAttributeInfo</code> instances <code>t1</code> and <code>t2</code>,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
- * <p>
*
* @return the hash code value for this <code>OpenMBeanAttributeInfo</code> instance
*/
--- a/jdk/src/share/classes/javax/management/openmbean/OpenMBeanConstructorInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/OpenMBeanConstructorInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -118,7 +118,6 @@
* for any two <code>OpenMBeanConstructorInfo</code> instances <code>t1</code> and <code>t2</code>,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
- * <p>
*
* @return the hash code value for this <code>OpenMBeanConstructorInfo</code> instance
*/
--- a/jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -168,7 +168,6 @@
* for any two <code>OpenMBeanInfo</code> instances <code>t1</code> and <code>t2</code>,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
- * <p>
*
* @return the hash code value for this <code>OpenMBeanInfo</code> instance
*/
--- a/jdk/src/share/classes/javax/management/openmbean/OpenMBeanOperationInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/OpenMBeanOperationInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -161,7 +161,7 @@
* for any two <code>OpenMBeanOperationInfo</code> instances <code>t1</code> and <code>t2</code>,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
- * <p>
+ *
*
* @return the hash code value for this <code>OpenMBeanOperationInfo</code> instance
*/
--- a/jdk/src/share/classes/javax/management/openmbean/OpenMBeanParameterInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/OpenMBeanParameterInfo.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -192,7 +192,6 @@
* for any two <code>OpenMBeanParameterInfo</code> instances <code>t1</code> and <code>t2</code>,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
- * <p>
*
* @return the hash code value for this <code>OpenMBeanParameterInfo</code> instance
*/
--- a/jdk/src/share/classes/javax/management/openmbean/TabularType.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/TabularType.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, 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
@@ -75,7 +75,7 @@
* The Java class name of tabular data values this tabular type represents
* (ie the class name returned by the {@link OpenType#getClassName() getClassName} method)
* is set to the string value returned by <code>TabularData.class.getName()</code>.
- * <p>
+ *
* @param typeName The name given to the tabular type this instance represents; cannot be a null or empty string.
* <br>
* @param description The human readable description of the tabular type this instance represents;
--- a/jdk/src/share/classes/javax/management/remote/JMXConnectorFactory.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/remote/JMXConnectorFactory.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -134,7 +134,7 @@
* <code>MalformedURLException</code> if there is none. An
* implementation may choose to find providers by other means. For
* example, it may support the <a
- * href="{@docRoot}/../technotes/guides/jar/jar.html#Service Provider">
+ * href="{@docRoot}/../technotes/guides/jar/jar.html#Service%20Provider">
* JAR conventions for service providers</a>, where the service
* interface is <code>JMXConnectorProvider</code>.</p>
*
--- a/jdk/src/share/classes/javax/management/remote/JMXConnectorServerFactory.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/remote/JMXConnectorServerFactory.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -125,7 +125,7 @@
* <code>MalformedURLException</code> if there is none. An
* implementation may choose to find providers by other means. For
* example, it may support the <a
- * href="{@docRoot}/../technotes/guides/jar/jar.html#Service Provider">
+ * href="{@docRoot}/../technotes/guides/jar/jar.html#Service%20Provider">
* JAR conventions for service providers</a>, where the service
* interface is <code>JMXConnectorServerProvider</code>.</p>
*
--- a/jdk/src/share/classes/javax/management/remote/JMXPrincipal.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/remote/JMXPrincipal.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -59,7 +59,7 @@
private String name;
/**
- * <p>Creates a JMXPrincipal for a given identity.</p>
+ * Creates a JMXPrincipal for a given identity.
*
* @param name the JMX Remote API name for this identity.
*
@@ -74,8 +74,6 @@
/**
* Returns the name of this principal.
*
- * <p>
- *
* @return the name of this <code>JMXPrincipal</code>.
*/
public String getName() {
@@ -85,8 +83,6 @@
/**
* Returns a string representation of this <code>JMXPrincipal</code>.
*
- * <p>
- *
* @return a string representation of this <code>JMXPrincipal</code>.
*/
public String toString() {
@@ -99,8 +95,6 @@
* <code>JMXPrincipal</code> and the two JMXPrincipals
* have the same name.
*
- * <p>
- *
* @param o Object to be compared for equality with this
* <code>JMXPrincipal</code>.
*
@@ -124,8 +118,6 @@
/**
* Returns a hash code for this <code>JMXPrincipal</code>.
*
- * <p>
- *
* @return a hash code for this <code>JMXPrincipal</code>.
*/
public int hashCode() {
--- a/jdk/src/share/classes/javax/management/remote/package.html Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/remote/package.html Fri May 16 14:35:37 2014 -0700
@@ -2,7 +2,7 @@
<head>
<title>JMX<sup><font size="-2">TM</font></sup> Remote API.</title>
<!--
-Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2002, 2014, 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
@@ -60,7 +60,7 @@
<li>User-defined connector protocols are also possible using the
{@link javax.management.remote.JMXConnectorFactory
JMXConnectorFactory} and, optionally, the Generic Connector
- (not part of this bundle, see note below).</p>
+ (not part of this bundle, see note below).
</ul>
<p><u>Note</u>: the optional packages implementing
--- a/jdk/src/share/classes/javax/management/remote/rmi/package.html Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/management/remote/rmi/package.html Fri May 16 14:35:37 2014 -0700
@@ -2,7 +2,7 @@
<head>
<title>RMI connector</title>
<!--
-Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2002, 2014, 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
@@ -240,12 +240,12 @@
that the RMI registry only allows registration from the local
host. So, in this case, <code>myhost</code> must be the name
(or a name) of the host that the connector server is running
- on.</p>
+ on.
<p>In this <code>JMXServiceURL</code>, the first <code>rmi:</code>
specifies the RMI
connector, while the second <code>rmi:</code> specifies the RMI
- registry.</p>
+ registry.
<p>As another example, if the <code>JMXServiceURL</code> is:
@@ -262,7 +262,7 @@
</pre>
which means entry <code>cn=this,ou=that</code> in the LDAP
- directory running on port 9999 of host <code>dirhost</code>.</p>
+ directory running on port 9999 of host <code>dirhost</code>.
<p>If the <code>JMXServiceURL</code> is:
@@ -280,7 +280,7 @@
For this case to work, the JNDI API must have been configured
appropriately to supply the information about what directory to
- use.</p>
+ use.
<p>In these examples, the host name <code>ignoredhost</code> is
not used by the connector server or its clients. It can be
--- a/jdk/src/share/classes/javax/script/ScriptEngineFactory.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/javax/script/ScriptEngineFactory.java Fri May 16 14:35:37 2014 -0700
@@ -160,7 +160,6 @@
* return ret;
* }
* } </pre>
- * <p>
*
* @param obj The name representing the object whose method is to be invoked. The
* name is the one used to create bindings using the <code>put</code> method of
--- a/jdk/src/share/classes/jdk/internal/util/xml/BasicXmlPropertiesProvider.java Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-package jdk.internal.util.xml;
-
-import java.util.Properties;
-import java.util.InvalidPropertiesFormatException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import sun.util.spi.XmlPropertiesProvider;
-
-/**
- * A {@code XmlPropertiesProvider} implementation that uses the UKit XML parser.
- */
-
-public class BasicXmlPropertiesProvider extends XmlPropertiesProvider {
-
- public BasicXmlPropertiesProvider() { }
-
- @Override
- public void load(Properties props, InputStream in)
- throws IOException, InvalidPropertiesFormatException
- {
- PropertiesDefaultHandler handler = new PropertiesDefaultHandler();
- handler.load(props, in);
- }
-
- @Override
- public void store(Properties props, OutputStream os, String comment,
- String encoding)
- throws IOException
- {
- PropertiesDefaultHandler handler = new PropertiesDefaultHandler();
- handler.store(props, os, comment, encoding);
- }
-}
--- a/jdk/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java Fri May 16 14:35:37 2014 -0700
@@ -123,7 +123,7 @@
writer.writeEndElement();
writer.writeEndDocument();
- writer.close();
+ writer.flush();
} catch (XMLStreamException e) {
if (e.getCause() instanceof UnsupportedEncodingException) {
throw (UnsupportedEncodingException) e.getCause();
--- a/jdk/src/share/classes/jdk/nio/zipfs/ZipFileSystem.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/jdk/nio/zipfs/ZipFileSystem.java Fri May 16 14:35:37 2014 -0700
@@ -41,6 +41,8 @@
import java.nio.file.spi.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.*;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -110,7 +112,9 @@
}
// sm and existence check
zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.READ);
- if (!Files.isWritable(zfpath))
+ boolean writeable = AccessController.doPrivileged(
+ (PrivilegedAction<Boolean>) () -> Files.isWritable(zfpath));
+ if (!writeable)
this.readOnly = true;
this.zc = ZipCoder.get(nameEncoding);
this.defaultdir = new ZipPath(this, getBytes(defaultDir));
@@ -262,9 +266,13 @@
}
beginWrite(); // lock and sync
try {
- sync();
- ch.close(); // close the ch just in case no update
- } finally { // and sync dose not close the ch
+ AccessController.doPrivileged((PrivilegedExceptionAction<Void>) () -> {
+ sync(); return null;
+ });
+ ch.close(); // close the ch just in case no update
+ } catch (PrivilegedActionException e) { // and sync dose not close the ch
+ throw (IOException)e.getException();
+ } finally {
endWrite();
}
@@ -281,8 +289,10 @@
synchronized (tmppaths) {
for (Path p: tmppaths) {
try {
- Files.deleteIfExists(p);
- } catch (IOException x) {
+ AccessController.doPrivileged(
+ (PrivilegedExceptionAction<Boolean>)() -> Files.deleteIfExists(p));
+ } catch (PrivilegedActionException e) {
+ IOException x = (IOException)e.getException();
if (ioe == null)
ioe = x;
else
--- a/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java Fri May 16 14:35:37 2014 -0700
@@ -34,8 +34,11 @@
import java.util.Random;
import sun.net.www.HeaderParser;
+import sun.net.NetProperties;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.security.PrivilegedAction;
+import java.security.AccessController;
import static sun.net.www.protocol.http.HttpURLConnection.HTTP_CONNECT;
/**
@@ -51,6 +54,23 @@
private String authMethod;
+ private final static String compatPropName = "http.auth.digest." +
+ "quoteParameters";
+
+ // true if http.auth.digest.quoteParameters Net property is true
+ private static final boolean delimCompatFlag;
+
+ static {
+ Boolean b = AccessController.doPrivileged(
+ new PrivilegedAction<Boolean>() {
+ public Boolean run() {
+ return NetProperties.getBoolean(compatPropName);
+ }
+ }
+ );
+ delimCompatFlag = (b == null) ? false : b.booleanValue();
+ }
+
// Authentication parameters defined in RFC2617.
// One instance of these may be shared among several DigestAuthentication
// instances as a result of a single authorization (for multiple domains)
@@ -206,7 +226,7 @@
}
/**
- * Reclaculates the request-digest and returns it.
+ * Recalculates the request-digest and returns it.
*
* <P> Used in the common case where the requestURI is simply the
* abs_path.
@@ -225,7 +245,7 @@
}
/**
- * Reclaculates the request-digest and returns it.
+ * Recalculates the request-digest and returns it.
*
* <P> Used when the requestURI is not the abs_path. The exact
* requestURI can be passed as a String.
@@ -357,24 +377,34 @@
ncfield = "\", nc=" + ncstring;
}
+ String algoS, qopS;
+
+ if (delimCompatFlag) {
+ // Put quotes around these String value parameters
+ algoS = ", algorithm=\"" + algorithm + "\"";
+ qopS = ", qop=\"auth\"";
+ } else {
+ // Don't put quotes around them, per the RFC
+ algoS = ", algorithm=" + algorithm;
+ qopS = ", qop=auth";
+ }
+
String value = authMethod
+ " username=\"" + pw.getUserName()
+ "\", realm=\"" + realm
+ "\", nonce=\"" + nonce
+ ncfield
+ ", uri=\"" + uri
- + "\", response=\"" + response
- + "\", algorithm=" + algorithm;
+ + "\", response=\"" + response + "\""
+ + algoS;
if (opaque != null) {
- value = value + ", opaque=\"" + opaque;
- value = value + "\"";
+ value += ", opaque=\"" + opaque + "\"";
}
if (cnonce != null) {
- value = value + ", cnonce=\"" + cnonce;
- value = value + "\"";
+ value += ", cnonce=\"" + cnonce + "\"";
}
if (qop) {
- value = value + ", qop=auth";
+ value += qopS;
}
return value;
}
--- a/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java Fri May 16 14:35:37 2014 -0700
@@ -74,8 +74,6 @@
throws IOException
{
// check events - CCE will be thrown if there are invalid elements
- if (events.length == 0)
- throw new IllegalArgumentException("No events to register");
final Set<WatchEvent.Kind<?>> eventSet =
new HashSet<WatchEvent.Kind<?>>(events.length);
for (WatchEvent.Kind<?> event: events) {
@@ -90,8 +88,6 @@
// OVERFLOW is ignored
if (event == StandardWatchEventKinds.OVERFLOW) {
- if (events.length == 1)
- throw new IllegalArgumentException("No events to register");
continue;
}
@@ -100,6 +96,8 @@
throw new NullPointerException("An element in event set is 'null'");
throw new UnsupportedOperationException(event.name());
}
+ if (eventSet.isEmpty())
+ throw new IllegalArgumentException("No events to register");
// A modifier may be used to specify the sensitivity level
SensitivityWatchEventModifier sensivity = SensitivityWatchEventModifier.MEDIUM;
--- a/jdk/src/share/classes/sun/security/validator/PKIXValidator.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/sun/security/validator/PKIXValidator.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, 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
@@ -60,9 +60,6 @@
AccessController.doPrivileged
(new GetBooleanAction("com.sun.net.ssl.checkRevocation"));
- // enable use of the validator if possible
- private final static boolean TRY_VALIDATOR = true;
-
private final Set<X509Certificate> trustedCerts;
private final PKIXBuilderParameters parameterTemplate;
private int certPathLength = -1;
@@ -75,48 +72,28 @@
PKIXValidator(String variant, Collection<X509Certificate> trustedCerts) {
super(TYPE_PKIX, variant);
- if (trustedCerts instanceof Set) {
- this.trustedCerts = (Set<X509Certificate>)trustedCerts;
- } else {
- this.trustedCerts = new HashSet<X509Certificate>(trustedCerts);
- }
- Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
+ this.trustedCerts = (trustedCerts instanceof Set) ?
+ (Set<X509Certificate>)trustedCerts :
+ new HashSet<X509Certificate>(trustedCerts);
+
+ Set<TrustAnchor> trustAnchors = new HashSet<>();
for (X509Certificate cert : trustedCerts) {
trustAnchors.add(new TrustAnchor(cert, null));
}
+
try {
parameterTemplate = new PKIXBuilderParameters(trustAnchors, null);
+ factory = CertificateFactory.getInstance("X.509");
} catch (InvalidAlgorithmParameterException e) {
throw new RuntimeException("Unexpected error: " + e.toString(), e);
- }
- setDefaultParameters(variant);
-
- // initCommon();
- if (TRY_VALIDATOR) {
- if (TRY_VALIDATOR == false) {
- return;
- }
- trustedSubjects = new HashMap<X500Principal, List<PublicKey>>();
- for (X509Certificate cert : trustedCerts) {
- X500Principal dn = cert.getSubjectX500Principal();
- List<PublicKey> keys;
- if (trustedSubjects.containsKey(dn)) {
- keys = trustedSubjects.get(dn);
- } else {
- keys = new ArrayList<PublicKey>();
- trustedSubjects.put(dn, keys);
- }
- keys.add(cert.getPublicKey());
- }
- try {
- factory = CertificateFactory.getInstance("X.509");
} catch (CertificateException e) {
throw new RuntimeException("Internal error", e);
}
+
+ setDefaultParameters(variant);
plugin = variant.equals(VAR_PLUGIN_CODE_SIGNING);
- } else {
- plugin = false;
- }
+
+ trustedSubjects = setTrustedSubjects();
}
PKIXValidator(String variant, PKIXBuilderParameters params) {
@@ -130,32 +107,40 @@
}
parameterTemplate = params;
- // initCommon();
- if (TRY_VALIDATOR) {
- if (TRY_VALIDATOR == false) {
- return;
- }
- trustedSubjects = new HashMap<X500Principal, List<PublicKey>>();
- for (X509Certificate cert : trustedCerts) {
- X500Principal dn = cert.getSubjectX500Principal();
- List<PublicKey> keys;
- if (trustedSubjects.containsKey(dn)) {
- keys = trustedSubjects.get(dn);
- } else {
- keys = new ArrayList<PublicKey>();
- trustedSubjects.put(dn, keys);
- }
- keys.add(cert.getPublicKey());
- }
try {
factory = CertificateFactory.getInstance("X.509");
} catch (CertificateException e) {
throw new RuntimeException("Internal error", e);
}
+
plugin = variant.equals(VAR_PLUGIN_CODE_SIGNING);
+
+ trustedSubjects = setTrustedSubjects();
+ }
+
+ /**
+ * Populate the trustedSubjects Map using the DN and public keys from
+ * the list of trusted certificates
+ *
+ * @return Map containing each subject DN and one or more public keys
+ * tied to those DNs.
+ */
+ private Map<X500Principal, List<PublicKey>> setTrustedSubjects() {
+ Map<X500Principal, List<PublicKey>> subjectMap = new HashMap<>();
+
+ for (X509Certificate cert : trustedCerts) {
+ X500Principal dn = cert.getSubjectX500Principal();
+ List<PublicKey> keys;
+ if (subjectMap.containsKey(dn)) {
+ keys = subjectMap.get(dn);
} else {
- plugin = false;
+ keys = new ArrayList<PublicKey>();
+ subjectMap.put(dn, keys);
}
+ keys.add(cert.getPublicKey());
+ }
+
+ return subjectMap;
}
public Collection<X509Certificate> getTrustedCertificates() {
@@ -217,7 +202,6 @@
pkixParameters.addCertPathChecker(algorithmChecker);
}
- if (TRY_VALIDATOR) {
// check that chain is in correct order and check if chain contains
// trust anchor
X500Principal prevIssuer = null;
@@ -287,7 +271,6 @@
(ValidatorException.T_NO_TRUST_ANCHOR);
}
// otherwise, fall back to builder
- }
return doBuild(chain, otherCerts, pkixParameters);
}
--- a/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -257,6 +257,20 @@
return value;
}
+ /*
+ * Utility method to read data into a String.
+ */
+ String readErrorMessage(InputStream sis) throws IOException {
+ byte b[] = new byte[1024];
+ int n;
+ StringBuffer message = new StringBuffer();
+ while ((n = sis.read(b)) != -1) {
+ message.append(new String(b, 0, n, "UTF-8"));
+ }
+ return message.toString();
+ }
+
+
// -- attach timeout support
private static long defaultAttachTimeout = 5000;
--- a/jdk/src/share/classes/sun/tools/jcmd/JCmd.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/classes/sun/tools/jcmd/JCmd.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, 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
@@ -33,10 +33,12 @@
import java.util.Comparator;
import java.net.URISyntaxException;
+import com.sun.tools.attach.AttachOperationFailedException;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
+
import sun.tools.attach.HotSpotVirtualMachine;
import sun.tools.jstat.JStatLogger;
import sun.jvmstat.monitor.Monitor;
@@ -119,6 +121,7 @@
pids.add(arg.getPid() + "");
}
+ boolean success = true;
for (String pid : pids) {
System.out.println(pid + ":");
if (arg.isListCounters()) {
@@ -126,11 +129,16 @@
} else {
try {
executeCommandForPid(pid, arg.getCommand());
+ } catch(AttachOperationFailedException ex) {
+ System.err.println(ex.getMessage());
+ success = false;
} catch(Exception ex) {
ex.printStackTrace();
+ success = false;
}
}
}
+ System.exit(success ? 0 : 1);
}
private static void executeCommandForPid(String pid, String command)
@@ -150,13 +158,18 @@
// read to EOF and just print output
byte b[] = new byte[256];
int n;
+ boolean messagePrinted = false;
do {
n = in.read(b);
if (n > 0) {
String s = new String(b, 0, n, "UTF-8");
System.out.print(s);
+ messagePrinted = true;
}
} while (n > 0);
+ if (!messagePrinted) {
+ System.out.println("Command executed successfully");
+ }
}
}
vm.detach();
--- a/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package sun.util.spi;
-
-import java.util.Properties;
-import java.util.InvalidPropertiesFormatException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Service-provider class for loading and storing {@link Properites} in XML
- * format.
- *
- * @see Properties#loadFromXML
- * @see Properties#storeToXML
- */
-
-public abstract class XmlPropertiesProvider {
-
- /**
- * Initializes a new instance of this class.
- */
- protected XmlPropertiesProvider() {
- // do nothing for now
- }
-
- /**
- * Loads all of the properties represented by the XML document on the
- * specified input stream into a properties table.
- *
- * @param props the properties table to populate
- * @param in the input stream from which to read the XML document
- * @throws IOException if reading from the specified input stream fails
- * @throws java.io.UnsupportedEncodingException if the document's encoding
- * declaration can be read and it specifies an encoding that is not
- * supported
- * @throws InvalidPropertiesFormatException Data on input stream does not
- * constitute a valid XML document with the mandated document type.
- *
- * @see Properties#loadFromXML
- */
- public abstract void load(Properties props, InputStream in)
- throws IOException, InvalidPropertiesFormatException;
-
- /**
- * Emits an XML document representing all of the properties in a given
- * table.
- *
- * @param props the properies to store
- * @param out the output stream on which to emit the XML document.
- * @param comment a description of the property list, can be @{code null}
- * @param encoding the name of a supported character encoding
- *
- * @throws IOException if writing to the specified output stream fails
- * @throws java.io.UnsupportedEncodingException if the encoding is not
- * supported by the implementation
- * @throws NullPointerException if {@code out} is null.
- * @throws ClassCastException if this {@code Properties} object
- * contains any keys or values that are not
- * {@code Strings}.
- *
- * @see Properties#storeToXML
- */
- public abstract void store(Properties props, OutputStream out,
- String comment, String encoding)
- throws IOException;
-}
--- a/jdk/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-sun.util.xml.PlatformXmlPropertiesProvider
--- a/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2003, 2013, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package sun.util.xml;
-
-import java.io.*;
-import java.util.*;
-import java.nio.charset.*;
-import java.util.Map.Entry;
-import org.xml.sax.*;
-import org.w3c.dom.*;
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-
-import sun.util.spi.XmlPropertiesProvider;
-
-/**
- * A {@code XmlPropertiesProvider} implementation that uses the JAXP API
- * for parsing.
- *
- * @author Michael McCloskey
- * @since 1.3
- */
-public class PlatformXmlPropertiesProvider extends XmlPropertiesProvider {
-
- // XML loading and saving methods for Properties
-
- // The required DTD URI for exported properties
- private static final String PROPS_DTD_URI =
- "http://java.sun.com/dtd/properties.dtd";
-
- private static final String PROPS_DTD =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
- "<!-- DTD for properties -->" +
- "<!ELEMENT properties ( comment?, entry* ) >"+
- "<!ATTLIST properties" +
- " version CDATA #FIXED \"1.0\">" +
- "<!ELEMENT comment (#PCDATA) >" +
- "<!ELEMENT entry (#PCDATA) >" +
- "<!ATTLIST entry " +
- " key CDATA #REQUIRED>";
-
- /**
- * Version number for the format of exported properties files.
- */
- private static final String EXTERNAL_XML_VERSION = "1.0";
-
- @Override
- public void load(Properties props, InputStream in)
- throws IOException, InvalidPropertiesFormatException
- {
- Document doc = null;
- try {
- doc = getLoadingDoc(in);
- } catch (SAXException saxe) {
- throw new InvalidPropertiesFormatException(saxe);
- }
- Element propertiesElement = doc.getDocumentElement();
- String xmlVersion = propertiesElement.getAttribute("version");
- if (xmlVersion.compareTo(EXTERNAL_XML_VERSION) > 0)
- throw new InvalidPropertiesFormatException(
- "Exported Properties file format version " + xmlVersion +
- " is not supported. This java installation can read" +
- " versions " + EXTERNAL_XML_VERSION + " or older. You" +
- " may need to install a newer version of JDK.");
- importProperties(props, propertiesElement);
- }
-
- static Document getLoadingDoc(InputStream in)
- throws SAXException, IOException
- {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setIgnoringElementContentWhitespace(true);
- dbf.setValidating(true);
- dbf.setCoalescing(true);
- dbf.setIgnoringComments(true);
- try {
- DocumentBuilder db = dbf.newDocumentBuilder();
- db.setEntityResolver(new Resolver());
- db.setErrorHandler(new EH());
- InputSource is = new InputSource(in);
- return db.parse(is);
- } catch (ParserConfigurationException x) {
- throw new Error(x);
- }
- }
-
- static void importProperties(Properties props, Element propertiesElement) {
- NodeList entries = propertiesElement.getChildNodes();
- int numEntries = entries.getLength();
- int start = numEntries > 0 &&
- entries.item(0).getNodeName().equals("comment") ? 1 : 0;
- for (int i=start; i<numEntries; i++) {
- Element entry = (Element)entries.item(i);
- if (entry.hasAttribute("key")) {
- Node n = entry.getFirstChild();
- String val = (n == null) ? "" : n.getNodeValue();
- props.setProperty(entry.getAttribute("key"), val);
- }
- }
- }
-
- @Override
- public void store(Properties props, OutputStream os, String comment,
- String encoding)
- throws IOException
- {
- // fast-fail for unsupported charsets as UnsupportedEncodingException may
- // not be thrown later (see JDK-8000621)
- try {
- Charset.forName(encoding);
- } catch (IllegalCharsetNameException | UnsupportedCharsetException x) {
- throw new UnsupportedEncodingException(encoding);
- }
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = null;
- try {
- db = dbf.newDocumentBuilder();
- } catch (ParserConfigurationException pce) {
- assert(false);
- }
- Document doc = db.newDocument();
- Element properties = (Element)
- doc.appendChild(doc.createElement("properties"));
-
- if (comment != null) {
- Element comments = (Element)properties.appendChild(
- doc.createElement("comment"));
- comments.appendChild(doc.createTextNode(comment));
- }
-
- synchronized (props) {
- for (Entry<Object, Object> e : props.entrySet()) {
- final Object k = e.getKey();
- final Object v = e.getValue();
- if (k instanceof String && v instanceof String) {
- Element entry = (Element)properties.appendChild(
- doc.createElement("entry"));
- entry.setAttribute("key", (String)k);
- entry.appendChild(doc.createTextNode((String)v));
- }
- }
- }
- emitDocument(doc, os, encoding);
- }
-
- static void emitDocument(Document doc, OutputStream os, String encoding)
- throws IOException
- {
- TransformerFactory tf = TransformerFactory.newInstance();
- Transformer t = null;
- try {
- t = tf.newTransformer();
- t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, PROPS_DTD_URI);
- t.setOutputProperty(OutputKeys.INDENT, "yes");
- t.setOutputProperty(OutputKeys.METHOD, "xml");
- t.setOutputProperty(OutputKeys.ENCODING, encoding);
- } catch (TransformerConfigurationException tce) {
- assert(false);
- }
- DOMSource doms = new DOMSource(doc);
- StreamResult sr = new StreamResult(os);
- try {
- t.transform(doms, sr);
- } catch (TransformerException te) {
- throw new IOException(te);
- }
- }
-
- private static class Resolver implements EntityResolver {
- public InputSource resolveEntity(String pid, String sid)
- throws SAXException
- {
- if (sid.equals(PROPS_DTD_URI)) {
- InputSource is;
- is = new InputSource(new StringReader(PROPS_DTD));
- is.setSystemId(PROPS_DTD_URI);
- return is;
- }
- throw new SAXException("Invalid system identifier: " + sid);
- }
- }
-
- private static class EH implements ErrorHandler {
- public void error(SAXParseException x) throws SAXException {
- throw x;
- }
- public void fatalError(SAXParseException x) throws SAXException {
- throw x;
- }
- public void warning(SAXParseException x) throws SAXException {
- throw x;
- }
- }
-
-}
--- a/jdk/src/share/lib/security/java.policy Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/share/lib/security/java.policy Fri May 16 14:35:37 2014 -0700
@@ -1,7 +1,39 @@
+// permissions required by each component
+grant codeBase "file:${java.home}/lib/ext/zipfs.jar" {
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
+ permission java.lang.RuntimePermission "fileSystemProvider";
+ permission java.util.PropertyPermission "*", "read";
+};
-// Standard extensions get all permissions by default
+grant codeBase "file:${java.home}/lib/ext/cldrdata.jar" {
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.text.*";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.util.*";
+ permission java.util.PropertyPermission "*", "read";
+};
+
+grant codeBase "file:${java.home}/lib/ext/localedata.jar" {
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.text.*";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.util.*";
+ permission java.util.PropertyPermission "*", "read";
+};
-grant codeBase "file:${{java.ext.dirs}}/*" {
+grant codeBase "file:${java.home}/lib/ext/dnsns.jar" {
+ permission java.security.AllPermission;
+};
+
+grant codeBase "file:${java.home}/lib/ext/nashorn.jar" {
+ permission java.security.AllPermission;
+};
+
+grant codeBase "file:${java.home}/lib/ext/sunec.jar" {
+ permission java.security.AllPermission;
+};
+
+grant codeBase "file:${java.home}/lib/ext/sunjce_provider.jar" {
+ permission java.security.AllPermission;
+};
+
+grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" {
permission java.security.AllPermission;
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,827 @@
+/*
+ * Copyright (c) 1995, 2014, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+package java.lang;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.Locale;
+import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.security.AccessController;
+import static java.security.AccessController.doPrivileged;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * java.lang.Process subclass in the UNIX environment.
+ *
+ * @author Mario Wolczko and Ross Knippel.
+ * @author Konstantin Kladko (ported to Linux and Bsd)
+ * @author Martin Buchholz
+ * @author Volker Simonis (ported to AIX)
+ */
+final class UNIXProcess extends Process {
+ private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
+ = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
+
+ private final int pid;
+ private int exitcode;
+ private boolean hasExited;
+
+ private /* final */ OutputStream stdin;
+ private /* final */ InputStream stdout;
+ private /* final */ InputStream stderr;
+
+ // only used on Solaris
+ private /* final */ DeferredCloseInputStream stdout_inner_stream;
+
+ private static enum LaunchMechanism {
+ // order IS important!
+ FORK,
+ POSIX_SPAWN,
+ VFORK
+ }
+
+ private static enum Platform {
+
+ LINUX(LaunchMechanism.VFORK, LaunchMechanism.FORK),
+
+ BSD(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
+
+ SOLARIS(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK),
+
+ AIX(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK);
+
+ final LaunchMechanism defaultLaunchMechanism;
+ final Set<LaunchMechanism> validLaunchMechanisms;
+
+ Platform(LaunchMechanism ... launchMechanisms) {
+ this.defaultLaunchMechanism = launchMechanisms[0];
+ this.validLaunchMechanisms =
+ EnumSet.copyOf(Arrays.asList(launchMechanisms));
+ }
+
+ private String helperPath(String javahome, String osArch) {
+ switch (this) {
+ case SOLARIS:
+ if (osArch.equals("x86")) { osArch = "i386"; }
+ else if (osArch.equals("x86_64")) { osArch = "amd64"; }
+ // fall through...
+ case LINUX:
+ case AIX:
+ return javahome + "/lib/" + osArch + "/jspawnhelper";
+
+ case BSD:
+ return javahome + "/lib/jspawnhelper";
+
+ default:
+ throw new AssertionError("Unsupported platform: " + this);
+ }
+ }
+
+ String helperPath() {
+ return AccessController.doPrivileged(
+ (PrivilegedAction<String>) () ->
+ helperPath(System.getProperty("java.home"),
+ System.getProperty("os.arch"))
+ );
+ }
+
+ LaunchMechanism launchMechanism() {
+ return AccessController.doPrivileged(
+ (PrivilegedAction<LaunchMechanism>) () -> {
+ String s = System.getProperty(
+ "jdk.lang.Process.launchMechanism");
+ LaunchMechanism lm;
+ if (s == null) {
+ lm = defaultLaunchMechanism;
+ s = lm.name().toLowerCase(Locale.ENGLISH);
+ } else {
+ try {
+ lm = LaunchMechanism.valueOf(
+ s.toUpperCase(Locale.ENGLISH));
+ } catch (IllegalArgumentException e) {
+ lm = null;
+ }
+ }
+ if (lm == null || !validLaunchMechanisms.contains(lm)) {
+ throw new Error(
+ s + " is not a supported " +
+ "process launch mechanism on this platform."
+ );
+ }
+ return lm;
+ }
+ );
+ }
+
+ static Platform get() {
+ String osName = AccessController.doPrivileged(
+ (PrivilegedAction<String>) () -> System.getProperty("os.name")
+ );
+
+ if (osName.equals("Linux")) { return LINUX; }
+ if (osName.contains("OS X")) { return BSD; }
+ if (osName.equals("SunOS")) { return SOLARIS; }
+ if (osName.equals("AIX")) { return AIX; }
+
+ throw new Error(osName + " is not a supported OS platform.");
+ }
+ }
+
+ private static final Platform platform = Platform.get();
+ private static final LaunchMechanism launchMechanism = platform.launchMechanism();
+ private static final byte[] helperpath = toCString(platform.helperPath());
+
+ private static byte[] toCString(String s) {
+ if (s == null)
+ return null;
+ byte[] bytes = s.getBytes();
+ byte[] result = new byte[bytes.length + 1];
+ System.arraycopy(bytes, 0,
+ result, 0,
+ bytes.length);
+ result[result.length-1] = (byte)0;
+ return result;
+ }
+
+ /* this is for the reaping thread */
+ private native int waitForProcessExit(int pid);
+
+ /**
+ * Creates a process. Depending on the {@code mode} flag, this is done by
+ * one of the following mechanisms:
+ * <pre>
+ * 1 - fork(2) and exec(2)
+ * 2 - posix_spawn(3P)
+ * 3 - vfork(2) and exec(2)
+ *
+ * (4 - clone(2) and exec(2) - obsolete and currently disabled in native code)
+ * </pre>
+ * @param fds an array of three file descriptors.
+ * Indexes 0, 1, and 2 correspond to standard input,
+ * standard output and standard error, respectively. On
+ * input, a value of -1 means to create a pipe to connect
+ * child and parent processes. On output, a value which
+ * is not -1 is the parent pipe fd corresponding to the
+ * pipe which has been created. An element of this array
+ * is -1 on input if and only if it is <em>not</em> -1 on
+ * output.
+ * @return the pid of the subprocess
+ */
+ private native int forkAndExec(int mode, byte[] helperpath,
+ byte[] prog,
+ byte[] argBlock, int argc,
+ byte[] envBlock, int envc,
+ byte[] dir,
+ int[] fds,
+ boolean redirectErrorStream)
+ throws IOException;
+
+ /**
+ * The thread pool of "process reaper" daemon threads.
+ */
+ private static final Executor processReaperExecutor =
+ doPrivileged((PrivilegedAction<Executor>) () -> {
+
+ ThreadGroup tg = Thread.currentThread().getThreadGroup();
+ while (tg.getParent() != null) tg = tg.getParent();
+ ThreadGroup systemThreadGroup = tg;
+
+ ThreadFactory threadFactory = grimReaper -> {
+ // Our thread stack requirement is quite modest.
+ Thread t = new Thread(systemThreadGroup, grimReaper,
+ "process reaper", 32768);
+ t.setDaemon(true);
+ // A small attempt (probably futile) to avoid priority inversion
+ t.setPriority(Thread.MAX_PRIORITY);
+ return t;
+ };
+
+ return Executors.newCachedThreadPool(threadFactory);
+ });
+
+ UNIXProcess(final byte[] prog,
+ final byte[] argBlock, final int argc,
+ final byte[] envBlock, final int envc,
+ final byte[] dir,
+ final int[] fds,
+ final boolean redirectErrorStream)
+ throws IOException {
+
+ pid = forkAndExec(launchMechanism.ordinal() + 1,
+ helperpath,
+ prog,
+ argBlock, argc,
+ envBlock, envc,
+ dir,
+ fds,
+ redirectErrorStream);
+
+ try {
+ doPrivileged((PrivilegedExceptionAction<Void>) () -> {
+ initStreams(fds);
+ return null;
+ });
+ } catch (PrivilegedActionException ex) {
+ throw (IOException) ex.getException();
+ }
+ }
+
+ static FileDescriptor newFileDescriptor(int fd) {
+ FileDescriptor fileDescriptor = new FileDescriptor();
+ fdAccess.set(fileDescriptor, fd);
+ return fileDescriptor;
+ }
+
+ void initStreams(int[] fds) throws IOException {
+ switch (platform) {
+ case LINUX:
+ case BSD:
+ stdin = (fds[0] == -1) ?
+ ProcessBuilder.NullOutputStream.INSTANCE :
+ new ProcessPipeOutputStream(fds[0]);
+
+ stdout = (fds[1] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ProcessPipeInputStream(fds[1]);
+
+ stderr = (fds[2] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ProcessPipeInputStream(fds[2]);
+
+ processReaperExecutor.execute(() -> {
+ int exitcode = waitForProcessExit(pid);
+
+ synchronized (this) {
+ this.exitcode = exitcode;
+ this.hasExited = true;
+ this.notifyAll();
+ }
+
+ if (stdout instanceof ProcessPipeInputStream)
+ ((ProcessPipeInputStream) stdout).processExited();
+
+ if (stderr instanceof ProcessPipeInputStream)
+ ((ProcessPipeInputStream) stderr).processExited();
+
+ if (stdin instanceof ProcessPipeOutputStream)
+ ((ProcessPipeOutputStream) stdin).processExited();
+ });
+ break;
+
+ case SOLARIS:
+ stdin = (fds[0] == -1) ?
+ ProcessBuilder.NullOutputStream.INSTANCE :
+ new BufferedOutputStream(
+ new FileOutputStream(newFileDescriptor(fds[0])));
+
+ stdout = (fds[1] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new BufferedInputStream(
+ stdout_inner_stream =
+ new DeferredCloseInputStream(
+ newFileDescriptor(fds[1])));
+
+ stderr = (fds[2] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new DeferredCloseInputStream(newFileDescriptor(fds[2]));
+
+ /*
+ * For each subprocess forked a corresponding reaper task
+ * is submitted. That task is the only thread which waits
+ * for the subprocess to terminate and it doesn't hold any
+ * locks while doing so. This design allows waitFor() and
+ * exitStatus() to be safely executed in parallel (and they
+ * need no native code).
+ */
+ processReaperExecutor.execute(() -> {
+ int exitcode = waitForProcessExit(pid);
+
+ synchronized (this) {
+ this.exitcode = exitcode;
+ this.hasExited = true;
+ this.notifyAll();
+ }
+ });
+ break;
+
+ case AIX:
+ stdin = (fds[0] == -1) ?
+ ProcessBuilder.NullOutputStream.INSTANCE :
+ new ProcessPipeOutputStream(fds[0]);
+
+ stdout = (fds[1] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new DeferredCloseProcessPipeInputStream(fds[1]);
+
+ stderr = (fds[2] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new DeferredCloseProcessPipeInputStream(fds[2]);
+
+ processReaperExecutor.execute(() -> {
+ int exitcode = waitForProcessExit(pid);
+
+ synchronized (this) {
+ this.exitcode = exitcode;
+ this.hasExited = true;
+ this.notifyAll();
+ }
+
+ if (stdout instanceof DeferredCloseProcessPipeInputStream)
+ ((DeferredCloseProcessPipeInputStream) stdout).processExited();
+
+ if (stderr instanceof DeferredCloseProcessPipeInputStream)
+ ((DeferredCloseProcessPipeInputStream) stderr).processExited();
+
+ if (stdin instanceof ProcessPipeOutputStream)
+ ((ProcessPipeOutputStream) stdin).processExited();
+ });
+ break;
+
+ default: throw new AssertionError("Unsupported platform: " + platform);
+ }
+ }
+
+ public OutputStream getOutputStream() {
+ return stdin;
+ }
+
+ public InputStream getInputStream() {
+ return stdout;
+ }
+
+ public InputStream getErrorStream() {
+ return stderr;
+ }
+
+ public synchronized int waitFor() throws InterruptedException {
+ while (!hasExited) {
+ wait();
+ }
+ return exitcode;
+ }
+
+ @Override
+ public synchronized boolean waitFor(long timeout, TimeUnit unit)
+ throws InterruptedException
+ {
+ if (hasExited) return true;
+ if (timeout <= 0) return false;
+
+ long timeoutAsNanos = unit.toNanos(timeout);
+ long startTime = System.nanoTime();
+ long rem = timeoutAsNanos;
+
+ while (!hasExited && (rem > 0)) {
+ wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
+ rem = timeoutAsNanos - (System.nanoTime() - startTime);
+ }
+ return hasExited;
+ }
+
+ public synchronized int exitValue() {
+ if (!hasExited) {
+ throw new IllegalThreadStateException("process hasn't exited");
+ }
+ return exitcode;
+ }
+
+ private static native void destroyProcess(int pid, boolean force);
+
+ private void destroy(boolean force) {
+ switch (platform) {
+ case LINUX:
+ case BSD:
+ case AIX:
+ // There is a risk that pid will be recycled, causing us to
+ // kill the wrong process! So we only terminate processes
+ // that appear to still be running. Even with this check,
+ // there is an unavoidable race condition here, but the window
+ // is very small, and OSes try hard to not recycle pids too
+ // soon, so this is quite safe.
+ synchronized (this) {
+ if (!hasExited)
+ destroyProcess(pid, force);
+ }
+ try { stdin.close(); } catch (IOException ignored) {}
+ try { stdout.close(); } catch (IOException ignored) {}
+ try { stderr.close(); } catch (IOException ignored) {}
+ break;
+
+ case SOLARIS:
+ // There is a risk that pid will be recycled, causing us to
+ // kill the wrong process! So we only terminate processes
+ // that appear to still be running. Even with this check,
+ // there is an unavoidable race condition here, but the window
+ // is very small, and OSes try hard to not recycle pids too
+ // soon, so this is quite safe.
+ synchronized (this) {
+ if (!hasExited)
+ destroyProcess(pid, force);
+ try {
+ stdin.close();
+ if (stdout_inner_stream != null)
+ stdout_inner_stream.closeDeferred(stdout);
+ if (stderr instanceof DeferredCloseInputStream)
+ ((DeferredCloseInputStream) stderr)
+ .closeDeferred(stderr);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ break;
+
+ default: throw new AssertionError("Unsupported platform: " + platform);
+ }
+ }
+
+ public void destroy() {
+ destroy(false);
+ }
+
+ @Override
+ public Process destroyForcibly() {
+ destroy(true);
+ return this;
+ }
+
+ @Override
+ public synchronized boolean isAlive() {
+ return !hasExited;
+ }
+
+ private static native void init();
+
+ static {
+ init();
+ }
+
+ /**
+ * A buffered input stream for a subprocess pipe file descriptor
+ * that allows the underlying file descriptor to be reclaimed when
+ * the process exits, via the processExited hook.
+ *
+ * This is tricky because we do not want the user-level InputStream to be
+ * closed until the user invokes close(), and we need to continue to be
+ * able to read any buffered data lingering in the OS pipe buffer.
+ */
+ private static class ProcessPipeInputStream extends BufferedInputStream {
+ private final Object closeLock = new Object();
+
+ ProcessPipeInputStream(int fd) {
+ super(new FileInputStream(newFileDescriptor(fd)));
+ }
+ private static byte[] drainInputStream(InputStream in)
+ throws IOException {
+ int n = 0;
+ int j;
+ byte[] a = null;
+ while ((j = in.available()) > 0) {
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
+ n += in.read(a, n, j);
+ }
+ return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
+ }
+
+ /** Called by the process reaper thread when the process exits. */
+ synchronized void processExited() {
+ synchronized (closeLock) {
+ try {
+ InputStream in = this.in;
+ // this stream is closed if and only if: in == null
+ if (in != null) {
+ byte[] stragglers = drainInputStream(in);
+ in.close();
+ this.in = (stragglers == null) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ByteArrayInputStream(stragglers);
+ }
+ } catch (IOException ignored) {}
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ // BufferedInputStream#close() is not synchronized unlike most other
+ // methods. Synchronizing helps avoid race with processExited().
+ synchronized (closeLock) {
+ super.close();
+ }
+ }
+ }
+
+ /**
+ * A buffered output stream for a subprocess pipe file descriptor
+ * that allows the underlying file descriptor to be reclaimed when
+ * the process exits, via the processExited hook.
+ */
+ private static class ProcessPipeOutputStream extends BufferedOutputStream {
+ ProcessPipeOutputStream(int fd) {
+ super(new FileOutputStream(newFileDescriptor(fd)));
+ }
+
+ /** Called by the process reaper thread when the process exits. */
+ synchronized void processExited() {
+ OutputStream out = this.out;
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException ignored) {
+ // We know of no reason to get an IOException, but if
+ // we do, there's nothing else to do but carry on.
+ }
+ this.out = ProcessBuilder.NullOutputStream.INSTANCE;
+ }
+ }
+ }
+
+ // A FileInputStream that supports the deferment of the actual close
+ // operation until the last pending I/O operation on the stream has
+ // finished. This is required on Solaris because we must close the stdin
+ // and stdout streams in the destroy method in order to reclaim the
+ // underlying file descriptors. Doing so, however, causes any thread
+ // currently blocked in a read on one of those streams to receive an
+ // IOException("Bad file number"), which is incompatible with historical
+ // behavior. By deferring the close we allow any pending reads to see -1
+ // (EOF) as they did before.
+ //
+ private static class DeferredCloseInputStream extends FileInputStream
+ {
+ DeferredCloseInputStream(FileDescriptor fd) {
+ super(fd);
+ }
+
+ private Object lock = new Object(); // For the following fields
+ private boolean closePending = false;
+ private int useCount = 0;
+ private InputStream streamToClose;
+
+ private void raise() {
+ synchronized (lock) {
+ useCount++;
+ }
+ }
+
+ private void lower() throws IOException {
+ synchronized (lock) {
+ useCount--;
+ if (useCount == 0 && closePending) {
+ streamToClose.close();
+ }
+ }
+ }
+
+ // stc is the actual stream to be closed; it might be this object, or
+ // it might be an upstream object for which this object is downstream.
+ //
+ private void closeDeferred(InputStream stc) throws IOException {
+ synchronized (lock) {
+ if (useCount == 0) {
+ stc.close();
+ } else {
+ closePending = true;
+ streamToClose = stc;
+ }
+ }
+ }
+
+ public void close() throws IOException {
+ synchronized (lock) {
+ useCount = 0;
+ closePending = false;
+ }
+ super.close();
+ }
+
+ public int read() throws IOException {
+ raise();
+ try {
+ return super.read();
+ } finally {
+ lower();
+ }
+ }
+
+ public int read(byte[] b) throws IOException {
+ raise();
+ try {
+ return super.read(b);
+ } finally {
+ lower();
+ }
+ }
+
+ public int read(byte[] b, int off, int len) throws IOException {
+ raise();
+ try {
+ return super.read(b, off, len);
+ } finally {
+ lower();
+ }
+ }
+
+ public long skip(long n) throws IOException {
+ raise();
+ try {
+ return super.skip(n);
+ } finally {
+ lower();
+ }
+ }
+
+ public int available() throws IOException {
+ raise();
+ try {
+ return super.available();
+ } finally {
+ lower();
+ }
+ }
+ }
+
+ /**
+ * A buffered input stream for a subprocess pipe file descriptor
+ * that allows the underlying file descriptor to be reclaimed when
+ * the process exits, via the processExited hook.
+ *
+ * This is tricky because we do not want the user-level InputStream to be
+ * closed until the user invokes close(), and we need to continue to be
+ * able to read any buffered data lingering in the OS pipe buffer.
+ *
+ * On AIX this is especially tricky, because the 'close()' system call
+ * will block if another thread is at the same time blocked in a file
+ * operation (e.g. 'read()') on the same file descriptor. We therefore
+ * combine 'ProcessPipeInputStream' approach used on Linux and Bsd
+ * with the DeferredCloseInputStream approach used on Solaris. This means
+ * that every potentially blocking operation on the file descriptor
+ * increments a counter before it is executed and decrements it once it
+ * finishes. The 'close()' operation will only be executed if there are
+ * no pending operations. Otherwise it is deferred after the last pending
+ * operation has finished.
+ *
+ */
+ private static class DeferredCloseProcessPipeInputStream
+ extends BufferedInputStream {
+
+ private final Object closeLock = new Object();
+ private int useCount = 0;
+ private boolean closePending = false;
+
+ DeferredCloseProcessPipeInputStream(int fd) {
+ super(new FileInputStream(newFileDescriptor(fd)));
+ }
+
+ private InputStream drainInputStream(InputStream in)
+ throws IOException {
+ int n = 0;
+ int j;
+ byte[] a = null;
+ synchronized (closeLock) {
+ if (buf == null) // asynchronous close()?
+ return null; // discard
+ j = in.available();
+ }
+ while (j > 0) {
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
+ synchronized (closeLock) {
+ if (buf == null) // asynchronous close()?
+ return null; // discard
+ n += in.read(a, n, j);
+ j = in.available();
+ }
+ }
+ return (a == null) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
+ }
+
+ /** Called by the process reaper thread when the process exits. */
+ synchronized void processExited() {
+ try {
+ InputStream in = this.in;
+ if (in != null) {
+ InputStream stragglers = drainInputStream(in);
+ in.close();
+ this.in = stragglers;
+ }
+ } catch (IOException ignored) { }
+ }
+
+ private void raise() {
+ synchronized (closeLock) {
+ useCount++;
+ }
+ }
+
+ private void lower() throws IOException {
+ synchronized (closeLock) {
+ useCount--;
+ if (useCount == 0 && closePending) {
+ closePending = false;
+ super.close();
+ }
+ }
+ }
+
+ @Override
+ public int read() throws IOException {
+ raise();
+ try {
+ return super.read();
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException {
+ raise();
+ try {
+ return super.read(b);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException {
+ raise();
+ try {
+ return super.read(b, off, len);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public long skip(long n) throws IOException {
+ raise();
+ try {
+ return super.skip(n);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int available() throws IOException {
+ raise();
+ try {
+ return super.available();
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ // BufferedInputStream#close() is not synchronized unlike most other
+ // methods. Synchronizing helps avoid racing with drainInputStream().
+ synchronized (closeLock) {
+ if (useCount == 0) {
+ super.close();
+ }
+ else {
+ closePending = true;
+ }
+ }
+ }
+ }
+}
--- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-/*
- * Copyright (c) 1995, 2013, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package java.lang;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.security.AccessController;
-import static java.security.AccessController.doPrivileged;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * java.lang.Process subclass in the UNIX environment.
- *
- * @author Mario Wolczko and Ross Knippel.
- * @author Konstantin Kladko (ported to Linux)
- * @author Martin Buchholz
- * @author Volker Simonis (ported to AIX)
- */
-final class UNIXProcess extends Process {
- private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
- = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
-
- private final int pid;
- private int exitcode;
- private boolean hasExited;
-
- private /* final */ OutputStream stdin;
- private /* final */ InputStream stdout;
- private /* final */ InputStream stderr;
-
- private static enum LaunchMechanism {
- FORK(1),
- POSIX_SPAWN(2);
-
- private int value;
- LaunchMechanism(int x) {value = x;}
- };
-
- /* On AIX, the default is to spawn */
- private static final LaunchMechanism launchMechanism;
- private static byte[] helperpath;
-
- private static byte[] toCString(String s) {
- if (s == null)
- return null;
- byte[] bytes = s.getBytes();
- byte[] result = new byte[bytes.length + 1];
- System.arraycopy(bytes, 0,
- result, 0,
- bytes.length);
- result[result.length-1] = (byte)0;
- return result;
- }
-
- static {
- launchMechanism = AccessController.doPrivileged(
- new PrivilegedAction<LaunchMechanism>()
- {
- public LaunchMechanism run() {
- String javahome = System.getProperty("java.home");
- String osArch = System.getProperty("os.arch");
-
- helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper");
- String s = System.getProperty(
- "jdk.lang.Process.launchMechanism", "posix_spawn");
-
- try {
- return LaunchMechanism.valueOf(s.toUpperCase());
- } catch (IllegalArgumentException e) {
- throw new Error(s + " is not a supported " +
- "process launch mechanism on this platform.");
- }
- }
- });
- }
-
- /* this is for the reaping thread */
- private native int waitForProcessExit(int pid);
-
- /**
- * Create a process. Depending on the mode flag, this is done by
- * one of the following mechanisms.
- * - fork(2) and exec(2)
- * - clone(2) and exec(2)
- * - vfork(2) and exec(2)
- *
- * @param fds an array of three file descriptors.
- * Indexes 0, 1, and 2 correspond to standard input,
- * standard output and standard error, respectively. On
- * input, a value of -1 means to create a pipe to connect
- * child and parent processes. On output, a value which
- * is not -1 is the parent pipe fd corresponding to the
- * pipe which has been created. An element of this array
- * is -1 on input if and only if it is <em>not</em> -1 on
- * output.
- * @return the pid of the subprocess
- */
- private native int forkAndExec(int mode, byte[] helperpath,
- byte[] prog,
- byte[] argBlock, int argc,
- byte[] envBlock, int envc,
- byte[] dir,
- int[] fds,
- boolean redirectErrorStream)
- throws IOException;
-
- /**
- * The thread factory used to create "process reaper" daemon threads.
- */
- private static class ProcessReaperThreadFactory implements ThreadFactory {
- private final static ThreadGroup group = getRootThreadGroup();
-
- private static ThreadGroup getRootThreadGroup() {
- return doPrivileged(new PrivilegedAction<ThreadGroup> () {
- public ThreadGroup run() {
- ThreadGroup root = Thread.currentThread().getThreadGroup();
- while (root.getParent() != null)
- root = root.getParent();
- return root;
- }});
- }
-
- public Thread newThread(Runnable grimReaper) {
- // Our thread stack requirement is quite modest.
- Thread t = new Thread(group, grimReaper, "process reaper", 32768);
- t.setDaemon(true);
- // A small attempt (probably futile) to avoid priority inversion
- t.setPriority(Thread.MAX_PRIORITY);
- return t;
- }
- }
-
- /**
- * The thread pool of "process reaper" daemon threads.
- */
- private static final Executor processReaperExecutor =
- doPrivileged(new PrivilegedAction<Executor>() {
- public Executor run() {
- return Executors.newCachedThreadPool
- (new ProcessReaperThreadFactory());
- }});
-
- UNIXProcess(final byte[] prog,
- final byte[] argBlock, final int argc,
- final byte[] envBlock, final int envc,
- final byte[] dir,
- final int[] fds,
- final boolean redirectErrorStream)
- throws IOException {
-
- pid = forkAndExec(launchMechanism.value,
- helperpath,
- prog,
- argBlock, argc,
- envBlock, envc,
- dir,
- fds,
- redirectErrorStream);
-
- try {
- doPrivileged(new PrivilegedExceptionAction<Void>() {
- public Void run() throws IOException {
- initStreams(fds);
- return null;
- }});
- } catch (PrivilegedActionException ex) {
- throw (IOException) ex.getException();
- }
- }
-
- static FileDescriptor newFileDescriptor(int fd) {
- FileDescriptor fileDescriptor = new FileDescriptor();
- fdAccess.set(fileDescriptor, fd);
- return fileDescriptor;
- }
-
- void initStreams(int[] fds) throws IOException {
- stdin = (fds[0] == -1) ?
- ProcessBuilder.NullOutputStream.INSTANCE :
- new ProcessPipeOutputStream(fds[0]);
-
- stdout = (fds[1] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[1]);
-
- stderr = (fds[2] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[2]);
-
- processReaperExecutor.execute(new Runnable() {
- public void run() {
- int exitcode = waitForProcessExit(pid);
- UNIXProcess.this.processExited(exitcode);
- }});
- }
-
- void processExited(int exitcode) {
- synchronized (this) {
- this.exitcode = exitcode;
- hasExited = true;
- notifyAll();
- }
-
- if (stdout instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stdout).processExited();
-
- if (stderr instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stderr).processExited();
-
- if (stdin instanceof ProcessPipeOutputStream)
- ((ProcessPipeOutputStream) stdin).processExited();
- }
-
- public OutputStream getOutputStream() {
- return stdin;
- }
-
- public InputStream getInputStream() {
- return stdout;
- }
-
- public InputStream getErrorStream() {
- return stderr;
- }
-
- public synchronized int waitFor() throws InterruptedException {
- while (!hasExited) {
- wait();
- }
- return exitcode;
- }
-
- @Override
- public synchronized boolean waitFor(long timeout, TimeUnit unit)
- throws InterruptedException
- {
- if (hasExited) return true;
- if (timeout <= 0) return false;
-
- long timeoutAsNanos = unit.toNanos(timeout);
- long startTime = System.nanoTime();
- long rem = timeoutAsNanos;
-
- while (!hasExited && (rem > 0)) {
- wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
- rem = timeoutAsNanos - (System.nanoTime() - startTime);
- }
- return hasExited;
- }
-
- public synchronized int exitValue() {
- if (!hasExited) {
- throw new IllegalThreadStateException("process hasn't exited");
- }
- return exitcode;
- }
-
- private static native void destroyProcess(int pid, boolean force);
- private void destroy(boolean force) {
- // There is a risk that pid will be recycled, causing us to
- // kill the wrong process! So we only terminate processes
- // that appear to still be running. Even with this check,
- // there is an unavoidable race condition here, but the window
- // is very small, and OSes try hard to not recycle pids too
- // soon, so this is quite safe.
- synchronized (this) {
- if (!hasExited)
- destroyProcess(pid, force);
- }
- try { stdin.close(); } catch (IOException ignored) {}
- try { stdout.close(); } catch (IOException ignored) {}
- try { stderr.close(); } catch (IOException ignored) {}
- }
-
- public void destroy() {
- destroy(false);
- }
-
- @Override
- public Process destroyForcibly() {
- destroy(true);
- return this;
- }
-
- @Override
- public synchronized boolean isAlive() {
- return !hasExited;
- }
-
- private static native void init();
-
- static {
- init();
- }
-
- /**
- * A buffered input stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- *
- * This is tricky because we do not want the user-level InputStream to be
- * closed until the user invokes close(), and we need to continue to be
- * able to read any buffered data lingering in the OS pipe buffer.
- *
- * On AIX this is especially tricky, because the 'close()' system call
- * will block if another thread is at the same time blocked in a file
- * operation (e.g. 'read()') on the same file descriptor. We therefore
- * combine this 'ProcessPipeInputStream' with the DeferredCloseInputStream
- * approach used on Solaris (see "UNIXProcess.java.solaris"). This means
- * that every potentially blocking operation on the file descriptor
- * increments a counter before it is executed and decrements it once it
- * finishes. The 'close()' operation will only be executed if there are
- * no pending operations. Otherwise it is deferred after the last pending
- * operation has finished.
- *
- */
- static class ProcessPipeInputStream extends BufferedInputStream {
- private final Object closeLock = new Object();
- private int useCount = 0;
- private boolean closePending = false;
-
- ProcessPipeInputStream(int fd) {
- super(new FileInputStream(newFileDescriptor(fd)));
- }
-
- private InputStream drainInputStream(InputStream in)
- throws IOException {
- int n = 0;
- int j;
- byte[] a = null;
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- j = in.available();
- }
- while (j > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
- synchronized (closeLock) {
- if (buf == null) // asynchronous close()?
- return null; // discard
- n += in.read(a, n, j);
- j = in.available();
- }
- }
- return (a == null) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- try {
- InputStream in = this.in;
- if (in != null) {
- InputStream stragglers = drainInputStream(in);
- in.close();
- this.in = stragglers;
- }
- } catch (IOException ignored) { }
- }
-
- private void raise() {
- synchronized (closeLock) {
- useCount++;
- }
- }
-
- private void lower() throws IOException {
- synchronized (closeLock) {
- useCount--;
- if (useCount == 0 && closePending) {
- closePending = false;
- super.close();
- }
- }
- }
-
- @Override
- public int read() throws IOException {
- raise();
- try {
- return super.read();
- } finally {
- lower();
- }
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- raise();
- try {
- return super.read(b);
- } finally {
- lower();
- }
- }
-
- @Override
- public int read(byte[] b, int off, int len) throws IOException {
- raise();
- try {
- return super.read(b, off, len);
- } finally {
- lower();
- }
- }
-
- @Override
- public long skip(long n) throws IOException {
- raise();
- try {
- return super.skip(n);
- } finally {
- lower();
- }
- }
-
- @Override
- public int available() throws IOException {
- raise();
- try {
- return super.available();
- } finally {
- lower();
- }
- }
-
- @Override
- public void close() throws IOException {
- // BufferedInputStream#close() is not synchronized unlike most other methods.
- // Synchronizing helps avoid racing with drainInputStream().
- synchronized (closeLock) {
- if (useCount == 0) {
- super.close();
- }
- else {
- closePending = true;
- }
- }
- }
- }
-
- /**
- * A buffered output stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- */
- static class ProcessPipeOutputStream extends BufferedOutputStream {
- ProcessPipeOutputStream(int fd) {
- super(new FileOutputStream(newFileDescriptor(fd)));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- OutputStream out = this.out;
- if (out != null) {
- try {
- out.close();
- } catch (IOException ignored) {
- // We know of no reason to get an IOException, but if
- // we do, there's nothing else to do but carry on.
- }
- this.out = ProcessBuilder.NullOutputStream.INSTANCE;
- }
- }
- }
-}
--- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,408 +0,0 @@
-/*
- * Copyright (c) 1995, 2013, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package java.lang;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.security.AccessController;
-import static java.security.AccessController.doPrivileged;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * java.lang.Process subclass in the UNIX environment.
- *
- * @author Mario Wolczko and Ross Knippel.
- * @author Konstantin Kladko (ported to Bsd)
- * @author Martin Buchholz
- */
-final class UNIXProcess extends Process {
- private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
- = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
-
- private final int pid;
- private int exitcode;
- private boolean hasExited;
-
- private /* final */ OutputStream stdin;
- private /* final */ InputStream stdout;
- private /* final */ InputStream stderr;
-
- private static enum LaunchMechanism {
- FORK(1),
- POSIX_SPAWN(2);
-
- private int value;
- LaunchMechanism(int x) {value = x;}
- };
-
- /* On BSD, the default is to spawn */
- private static final LaunchMechanism launchMechanism;
- private static byte[] helperpath;
-
- private static byte[] toCString(String s) {
- if (s == null)
- return null;
- byte[] bytes = s.getBytes();
- byte[] result = new byte[bytes.length + 1];
- System.arraycopy(bytes, 0,
- result, 0,
- bytes.length);
- result[result.length-1] = (byte)0;
- return result;
- }
-
- static {
- launchMechanism = AccessController.doPrivileged(
- new PrivilegedAction<LaunchMechanism>()
- {
- public LaunchMechanism run() {
- String javahome = System.getProperty("java.home");
-
- helperpath = toCString(javahome + "/lib/jspawnhelper");
- String s = System.getProperty(
- "jdk.lang.Process.launchMechanism", "posix_spawn");
-
- try {
- return LaunchMechanism.valueOf(s.toUpperCase());
- } catch (IllegalArgumentException e) {
- throw new Error(s + " is not a supported " +
- "process launch mechanism on this platform.");
- }
- }
- });
- }
-
- /* this is for the reaping thread */
- private native int waitForProcessExit(int pid);
-
- /**
- * Create a process. Depending on the mode flag, this is done by
- * one of the following mechanisms.
- * - fork(2) and exec(2)
- * - posix_spawn(2)
- *
- * @param fds an array of three file descriptors.
- * Indexes 0, 1, and 2 correspond to standard input,
- * standard output and standard error, respectively. On
- * input, a value of -1 means to create a pipe to connect
- * child and parent processes. On output, a value which
- * is not -1 is the parent pipe fd corresponding to the
- * pipe which has been created. An element of this array
- * is -1 on input if and only if it is <em>not</em> -1 on
- * output.
- * @return the pid of the subprocess
- */
- private native int forkAndExec(int mode, byte[] helperpath,
- byte[] prog,
- byte[] argBlock, int argc,
- byte[] envBlock, int envc,
- byte[] dir,
- int[] fds,
- boolean redirectErrorStream)
- throws IOException;
-
- /**
- * The thread factory used to create "process reaper" daemon threads.
- */
- private static class ProcessReaperThreadFactory implements ThreadFactory {
- private final static ThreadGroup group = getRootThreadGroup();
-
- private static ThreadGroup getRootThreadGroup() {
- return doPrivileged(new PrivilegedAction<ThreadGroup> () {
- public ThreadGroup run() {
- ThreadGroup root = Thread.currentThread().getThreadGroup();
- while (root.getParent() != null)
- root = root.getParent();
- return root;
- }});
- }
-
- public Thread newThread(Runnable grimReaper) {
- // Our thread stack requirement is quite modest.
- Thread t = new Thread(group, grimReaper, "process reaper", 32768);
- t.setDaemon(true);
- // A small attempt (probably futile) to avoid priority inversion
- t.setPriority(Thread.MAX_PRIORITY);
- return t;
- }
- }
-
- /**
- * The thread pool of "process reaper" daemon threads.
- */
- private static final Executor processReaperExecutor =
- doPrivileged(new PrivilegedAction<Executor>() {
- public Executor run() {
- return Executors.newCachedThreadPool
- (new ProcessReaperThreadFactory());
- }});
-
- UNIXProcess(final byte[] prog,
- final byte[] argBlock, final int argc,
- final byte[] envBlock, final int envc,
- final byte[] dir,
- final int[] fds,
- final boolean redirectErrorStream)
- throws IOException {
-
- pid = forkAndExec(launchMechanism.value,
- helperpath,
- prog,
- argBlock, argc,
- envBlock, envc,
- dir,
- fds,
- redirectErrorStream);
-
- try {
- doPrivileged(new PrivilegedExceptionAction<Void>() {
- public Void run() throws IOException {
- initStreams(fds);
- return null;
- }});
- } catch (PrivilegedActionException ex) {
- throw (IOException) ex.getException();
- }
- }
-
- static FileDescriptor newFileDescriptor(int fd) {
- FileDescriptor fileDescriptor = new FileDescriptor();
- fdAccess.set(fileDescriptor, fd);
- return fileDescriptor;
- }
-
- void initStreams(int[] fds) throws IOException {
- stdin = (fds[0] == -1) ?
- ProcessBuilder.NullOutputStream.INSTANCE :
- new ProcessPipeOutputStream(fds[0]);
-
- stdout = (fds[1] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[1]);
-
- stderr = (fds[2] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[2]);
-
- processReaperExecutor.execute(new Runnable() {
- public void run() {
- int exitcode = waitForProcessExit(pid);
- UNIXProcess.this.processExited(exitcode);
- }});
- }
-
- void processExited(int exitcode) {
- synchronized (this) {
- this.exitcode = exitcode;
- hasExited = true;
- notifyAll();
- }
-
- if (stdout instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stdout).processExited();
-
- if (stderr instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stderr).processExited();
-
- if (stdin instanceof ProcessPipeOutputStream)
- ((ProcessPipeOutputStream) stdin).processExited();
- }
-
- public OutputStream getOutputStream() {
- return stdin;
- }
-
- public InputStream getInputStream() {
- return stdout;
- }
-
- public InputStream getErrorStream() {
- return stderr;
- }
-
- public synchronized int waitFor() throws InterruptedException {
- while (!hasExited) {
- wait();
- }
- return exitcode;
- }
-
- @Override
- public synchronized boolean waitFor(long timeout, TimeUnit unit)
- throws InterruptedException
- {
- if (hasExited) return true;
- if (timeout <= 0) return false;
-
- long timeoutAsNanos = unit.toNanos(timeout);
- long startTime = System.nanoTime();
- long rem = timeoutAsNanos;
-
- while (!hasExited && (rem > 0)) {
- wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
- rem = timeoutAsNanos - (System.nanoTime() - startTime);
- }
- return hasExited;
- }
-
- public synchronized int exitValue() {
- if (!hasExited) {
- throw new IllegalThreadStateException("process hasn't exited");
- }
- return exitcode;
- }
-
- private static native void destroyProcess(int pid, boolean force);
- private void destroy(boolean force) {
- // There is a risk that pid will be recycled, causing us to
- // kill the wrong process! So we only terminate processes
- // that appear to still be running. Even with this check,
- // there is an unavoidable race condition here, but the window
- // is very small, and OSes try hard to not recycle pids too
- // soon, so this is quite safe.
- synchronized (this) {
- if (!hasExited)
- destroyProcess(pid, force);
- }
- try { stdin.close(); } catch (IOException ignored) {}
- try { stdout.close(); } catch (IOException ignored) {}
- try { stderr.close(); } catch (IOException ignored) {}
- }
-
- public void destroy() {
- destroy(false);
- }
-
- @Override
- public Process destroyForcibly() {
- destroy(true);
- return this;
- }
-
- @Override
- public synchronized boolean isAlive() {
- return !hasExited;
- }
-
- private static native void init();
-
- static {
- init();
- }
-
- /**
- * A buffered input stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- *
- * This is tricky because we do not want the user-level InputStream to be
- * closed until the user invokes close(), and we need to continue to be
- * able to read any buffered data lingering in the OS pipe buffer.
- */
- static class ProcessPipeInputStream extends BufferedInputStream {
- private final Object closeLock = new Object();
-
- ProcessPipeInputStream(int fd) {
- super(new FileInputStream(newFileDescriptor(fd)));
- }
- private static byte[] drainInputStream(InputStream in)
- throws IOException {
- int n = 0;
- int j;
- byte[] a = null;
- while ((j = in.available()) > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
- n += in.read(a, n, j);
- }
- return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- synchronized (closeLock) {
- try {
- InputStream in = this.in;
- // this stream is closed if and only if: in == null
- if (in != null) {
- byte[] stragglers = drainInputStream(in);
- in.close();
- this.in = (stragglers == null) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ByteArrayInputStream(stragglers);
- }
- } catch (IOException ignored) {}
- }
- }
-
- @Override
- public void close() throws IOException {
- // BufferedInputStream#close() is not synchronized unlike most other methods.
- // Synchronizing helps avoid race with processExited().
- synchronized (closeLock) {
- super.close();
- }
- }
- }
-
- /**
- * A buffered output stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- */
- static class ProcessPipeOutputStream extends BufferedOutputStream {
- ProcessPipeOutputStream(int fd) {
- super(new FileOutputStream(newFileDescriptor(fd)));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- OutputStream out = this.out;
- if (out != null) {
- try {
- out.close();
- } catch (IOException ignored) {
- // We know of no reason to get an IOException, but if
- // we do, there's nothing else to do but carry on.
- }
- this.out = ProcessBuilder.NullOutputStream.INSTANCE;
- }
- }
- }
-}
--- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,410 +0,0 @@
-/*
- * Copyright (c) 1995, 2013, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package java.lang;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.security.AccessController;
-import static java.security.AccessController.doPrivileged;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * java.lang.Process subclass in the UNIX environment.
- *
- * @author Mario Wolczko and Ross Knippel.
- * @author Konstantin Kladko (ported to Linux)
- * @author Martin Buchholz
- */
-final class UNIXProcess extends Process {
- private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
- = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
-
- private final int pid;
- private int exitcode;
- private boolean hasExited;
-
- private /* final */ OutputStream stdin;
- private /* final */ InputStream stdout;
- private /* final */ InputStream stderr;
-
- private static enum LaunchMechanism {
- FORK(1),
- VFORK(3);
-
- private int value;
- LaunchMechanism(int x) {value = x;}
- };
-
- /* default is VFORK on Linux */
- private static final LaunchMechanism launchMechanism;
- private static byte[] helperpath;
-
- private static byte[] toCString(String s) {
- if (s == null)
- return null;
- byte[] bytes = s.getBytes();
- byte[] result = new byte[bytes.length + 1];
- System.arraycopy(bytes, 0,
- result, 0,
- bytes.length);
- result[result.length-1] = (byte)0;
- return result;
- }
-
- static {
- launchMechanism = AccessController.doPrivileged(
- new PrivilegedAction<LaunchMechanism>()
- {
- public LaunchMechanism run() {
- String javahome = System.getProperty("java.home");
- String osArch = System.getProperty("os.arch");
-
- helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper");
- String s = System.getProperty(
- "jdk.lang.Process.launchMechanism", "vfork");
-
- try {
- return LaunchMechanism.valueOf(s.toUpperCase());
- } catch (IllegalArgumentException e) {
- throw new Error(s + " is not a supported " +
- "process launch mechanism on this platform.");
- }
- }
- });
- }
-
- /* this is for the reaping thread */
- private native int waitForProcessExit(int pid);
-
- /**
- * Create a process. Depending on the mode flag, this is done by
- * one of the following mechanisms.
- * - fork(2) and exec(2)
- * - clone(2) and exec(2)
- * - vfork(2) and exec(2)
- *
- * @param fds an array of three file descriptors.
- * Indexes 0, 1, and 2 correspond to standard input,
- * standard output and standard error, respectively. On
- * input, a value of -1 means to create a pipe to connect
- * child and parent processes. On output, a value which
- * is not -1 is the parent pipe fd corresponding to the
- * pipe which has been created. An element of this array
- * is -1 on input if and only if it is <em>not</em> -1 on
- * output.
- * @return the pid of the subprocess
- */
- private native int forkAndExec(int mode, byte[] helperpath,
- byte[] prog,
- byte[] argBlock, int argc,
- byte[] envBlock, int envc,
- byte[] dir,
- int[] fds,
- boolean redirectErrorStream)
- throws IOException;
-
- /**
- * The thread factory used to create "process reaper" daemon threads.
- */
- private static class ProcessReaperThreadFactory implements ThreadFactory {
- private final static ThreadGroup group = getRootThreadGroup();
-
- private static ThreadGroup getRootThreadGroup() {
- return doPrivileged(new PrivilegedAction<ThreadGroup> () {
- public ThreadGroup run() {
- ThreadGroup root = Thread.currentThread().getThreadGroup();
- while (root.getParent() != null)
- root = root.getParent();
- return root;
- }});
- }
-
- public Thread newThread(Runnable grimReaper) {
- // Our thread stack requirement is quite modest.
- Thread t = new Thread(group, grimReaper, "process reaper", 32768);
- t.setDaemon(true);
- // A small attempt (probably futile) to avoid priority inversion
- t.setPriority(Thread.MAX_PRIORITY);
- return t;
- }
- }
-
- /**
- * The thread pool of "process reaper" daemon threads.
- */
- private static final Executor processReaperExecutor =
- doPrivileged(new PrivilegedAction<Executor>() {
- public Executor run() {
- return Executors.newCachedThreadPool
- (new ProcessReaperThreadFactory());
- }});
-
- UNIXProcess(final byte[] prog,
- final byte[] argBlock, final int argc,
- final byte[] envBlock, final int envc,
- final byte[] dir,
- final int[] fds,
- final boolean redirectErrorStream)
- throws IOException {
-
- pid = forkAndExec(launchMechanism.value,
- helperpath,
- prog,
- argBlock, argc,
- envBlock, envc,
- dir,
- fds,
- redirectErrorStream);
-
- try {
- doPrivileged(new PrivilegedExceptionAction<Void>() {
- public Void run() throws IOException {
- initStreams(fds);
- return null;
- }});
- } catch (PrivilegedActionException ex) {
- throw (IOException) ex.getException();
- }
- }
-
- static FileDescriptor newFileDescriptor(int fd) {
- FileDescriptor fileDescriptor = new FileDescriptor();
- fdAccess.set(fileDescriptor, fd);
- return fileDescriptor;
- }
-
- void initStreams(int[] fds) throws IOException {
- stdin = (fds[0] == -1) ?
- ProcessBuilder.NullOutputStream.INSTANCE :
- new ProcessPipeOutputStream(fds[0]);
-
- stdout = (fds[1] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[1]);
-
- stderr = (fds[2] == -1) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ProcessPipeInputStream(fds[2]);
-
- processReaperExecutor.execute(new Runnable() {
- public void run() {
- int exitcode = waitForProcessExit(pid);
- UNIXProcess.this.processExited(exitcode);
- }});
- }
-
- void processExited(int exitcode) {
- synchronized (this) {
- this.exitcode = exitcode;
- hasExited = true;
- notifyAll();
- }
-
- if (stdout instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stdout).processExited();
-
- if (stderr instanceof ProcessPipeInputStream)
- ((ProcessPipeInputStream) stderr).processExited();
-
- if (stdin instanceof ProcessPipeOutputStream)
- ((ProcessPipeOutputStream) stdin).processExited();
- }
-
- public OutputStream getOutputStream() {
- return stdin;
- }
-
- public InputStream getInputStream() {
- return stdout;
- }
-
- public InputStream getErrorStream() {
- return stderr;
- }
-
- public synchronized int waitFor() throws InterruptedException {
- while (!hasExited) {
- wait();
- }
- return exitcode;
- }
-
- @Override
- public synchronized boolean waitFor(long timeout, TimeUnit unit)
- throws InterruptedException
- {
- if (hasExited) return true;
- if (timeout <= 0) return false;
-
- long timeoutAsNanos = unit.toNanos(timeout);
- long startTime = System.nanoTime();
- long rem = timeoutAsNanos;
-
- while (!hasExited && (rem > 0)) {
- wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
- rem = timeoutAsNanos - (System.nanoTime() - startTime);
- }
- return hasExited;
- }
-
- public synchronized int exitValue() {
- if (!hasExited) {
- throw new IllegalThreadStateException("process hasn't exited");
- }
- return exitcode;
- }
-
- private static native void destroyProcess(int pid, boolean force);
- private void destroy(boolean force) {
- // There is a risk that pid will be recycled, causing us to
- // kill the wrong process! So we only terminate processes
- // that appear to still be running. Even with this check,
- // there is an unavoidable race condition here, but the window
- // is very small, and OSes try hard to not recycle pids too
- // soon, so this is quite safe.
- synchronized (this) {
- if (!hasExited)
- destroyProcess(pid, force);
- }
- try { stdin.close(); } catch (IOException ignored) {}
- try { stdout.close(); } catch (IOException ignored) {}
- try { stderr.close(); } catch (IOException ignored) {}
- }
-
- public void destroy() {
- destroy(false);
- }
-
- @Override
- public Process destroyForcibly() {
- destroy(true);
- return this;
- }
-
- @Override
- public synchronized boolean isAlive() {
- return !hasExited;
- }
-
- private static native void init();
-
- static {
- init();
- }
-
- /**
- * A buffered input stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- *
- * This is tricky because we do not want the user-level InputStream to be
- * closed until the user invokes close(), and we need to continue to be
- * able to read any buffered data lingering in the OS pipe buffer.
- */
- static class ProcessPipeInputStream extends BufferedInputStream {
- private final Object closeLock = new Object();
-
- ProcessPipeInputStream(int fd) {
- super(new FileInputStream(newFileDescriptor(fd)));
- }
- private static byte[] drainInputStream(InputStream in)
- throws IOException {
- int n = 0;
- int j;
- byte[] a = null;
- while ((j = in.available()) > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
- n += in.read(a, n, j);
- }
- return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- synchronized (closeLock) {
- try {
- InputStream in = this.in;
- // this stream is closed if and only if: in == null
- if (in != null) {
- byte[] stragglers = drainInputStream(in);
- in.close();
- this.in = (stragglers == null) ?
- ProcessBuilder.NullInputStream.INSTANCE :
- new ByteArrayInputStream(stragglers);
- }
- } catch (IOException ignored) {}
- }
- }
-
- @Override
- public void close() throws IOException {
- // BufferedInputStream#close() is not synchronized unlike most other methods.
- // Synchronizing helps avoid race with processExited().
- synchronized (closeLock) {
- super.close();
- }
- }
- }
-
- /**
- * A buffered output stream for a subprocess pipe file descriptor
- * that allows the underlying file descriptor to be reclaimed when
- * the process exits, via the processExited hook.
- */
- static class ProcessPipeOutputStream extends BufferedOutputStream {
- ProcessPipeOutputStream(int fd) {
- super(new FileOutputStream(newFileDescriptor(fd)));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
- OutputStream out = this.out;
- if (out != null) {
- try {
- out.close();
- } catch (IOException ignored) {
- // We know of no reason to get an IOException, but if
- // we do, there's nothing else to do but carry on.
- }
- this.out = ProcessBuilder.NullOutputStream.INSTANCE;
- }
- }
- }
-}
--- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,395 +0,0 @@
-/*
- * Copyright (c) 1995, 2013, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package java.lang;
-
-import java.io.*;
-import java.util.concurrent.TimeUnit;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/* java.lang.Process subclass in the UNIX environment.
- *
- * @author Mario Wolczko and Ross Knippel.
- */
-
-final class UNIXProcess extends Process {
- private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
- = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
-
- private final int pid;
- private int exitcode;
- private boolean hasExited;
-
- private OutputStream stdin_stream;
- private InputStream stdout_stream;
- private DeferredCloseInputStream stdout_inner_stream;
- private InputStream stderr_stream;
-
- private static enum LaunchMechanism {
- FORK(1),
- POSIX_SPAWN(2);
-
- private int value;
- LaunchMechanism(int x) {value = x;}
- };
-
- /* On Solaris, the default is to spawn */
- private static final LaunchMechanism launchMechanism;
- private static byte[] helperpath;
-
- private static byte[] toCString(String s) {
- if (s == null)
- return null;
- byte[] bytes = s.getBytes();
- byte[] result = new byte[bytes.length + 1];
- System.arraycopy(bytes, 0,
- result, 0,
- bytes.length);
- result[result.length-1] = (byte)0;
- return result;
- }
-
- static {
- launchMechanism = AccessController.doPrivileged(
- new PrivilegedAction<LaunchMechanism>()
- {
- public LaunchMechanism run() {
- String javahome = System.getProperty("java.home");
- String osArch = System.getProperty("os.arch");
- if (osArch.equals("x86")) {
- osArch = "i386";
- } else if (osArch.equals("x86_64")) {
- osArch = "amd64";
- }
-
- helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper");
- String s = System.getProperty(
- "jdk.lang.Process.launchMechanism", "posix_spawn");
-
- try {
- return LaunchMechanism.valueOf(s.toUpperCase());
- } catch (IllegalArgumentException e) {
- throw new Error(s + " is not a supported " +
- "process launch mechanism on this platform.");
- }
- }
- });
- }
-
- /* this is for the reaping thread */
- private native int waitForProcessExit(int pid);
-
- /**
- * Create a process. Depending on the mode flag, this is done by
- * one of the following mechanisms.
- * - fork(2) and exec(2)
- * - posix_spawn(2)
- *
- * @param std_fds array of file descriptors. Indexes 0, 1, and
- * 2 correspond to standard input, standard output and
- * standard error, respectively. On input, a value of -1
- * means to create a pipe to connect child and parent
- * processes. On output, a value which is not -1 is the
- * parent pipe fd corresponding to the pipe which has
- * been created. An element of this array is -1 on input
- * if and only if it is <em>not</em> -1 on output.
- * @return the pid of the subprocess
- */
- private native int forkAndExec(int mode, byte[] helperpath,
- byte[] prog,
- byte[] argBlock, int argc,
- byte[] envBlock, int envc,
- byte[] dir,
- int[] std_fds,
- boolean redirectErrorStream)
- throws IOException;
-
- UNIXProcess(final byte[] prog,
- final byte[] argBlock, int argc,
- final byte[] envBlock, int envc,
- final byte[] dir,
- final int[] std_fds,
- final boolean redirectErrorStream)
- throws IOException {
- pid = forkAndExec(launchMechanism.value,
- helperpath,
- prog,
- argBlock, argc,
- envBlock, envc,
- dir,
- std_fds,
- redirectErrorStream);
-
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction<Void>() { public Void run() {
- if (std_fds[0] == -1)
- stdin_stream = ProcessBuilder.NullOutputStream.INSTANCE;
- else {
- FileDescriptor stdin_fd = new FileDescriptor();
- fdAccess.set(stdin_fd, std_fds[0]);
- stdin_stream = new BufferedOutputStream(
- new FileOutputStream(stdin_fd));
- }
-
- if (std_fds[1] == -1)
- stdout_stream = ProcessBuilder.NullInputStream.INSTANCE;
- else {
- FileDescriptor stdout_fd = new FileDescriptor();
- fdAccess.set(stdout_fd, std_fds[1]);
- stdout_inner_stream = new DeferredCloseInputStream(stdout_fd);
- stdout_stream = new BufferedInputStream(stdout_inner_stream);
- }
-
- if (std_fds[2] == -1)
- stderr_stream = ProcessBuilder.NullInputStream.INSTANCE;
- else {
- FileDescriptor stderr_fd = new FileDescriptor();
- fdAccess.set(stderr_fd, std_fds[2]);
- stderr_stream = new DeferredCloseInputStream(stderr_fd);
- }
-
- return null; }});
-
- /*
- * For each subprocess forked a corresponding reaper thread
- * is started. That thread is the only thread which waits
- * for the subprocess to terminate and it doesn't hold any
- * locks while doing so. This design allows waitFor() and
- * exitStatus() to be safely executed in parallel (and they
- * need no native code).
- */
-
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction<Void>() { public Void run() {
- Thread t = new Thread("process reaper") {
- public void run() {
- int res = waitForProcessExit(pid);
- synchronized (UNIXProcess.this) {
- hasExited = true;
- exitcode = res;
- UNIXProcess.this.notifyAll();
- }
- }
- };
- t.setDaemon(true);
- t.start();
- return null; }});
- }
-
- public OutputStream getOutputStream() {
- return stdin_stream;
- }
-
- public InputStream getInputStream() {
- return stdout_stream;
- }
-
- public InputStream getErrorStream() {
- return stderr_stream;
- }
-
- public synchronized int waitFor() throws InterruptedException {
- while (!hasExited) {
- wait();
- }
- return exitcode;
- }
-
- @Override
- public synchronized boolean waitFor(long timeout, TimeUnit unit)
- throws InterruptedException
- {
- if (hasExited) return true;
- if (timeout <= 0) return false;
-
- long timeoutAsNanos = unit.toNanos(timeout);
- long startTime = System.nanoTime();
- long rem = timeoutAsNanos;
-
- while (!hasExited && (rem > 0)) {
- wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
- rem = timeoutAsNanos - (System.nanoTime() - startTime);
- }
- return hasExited;
- }
-
- public synchronized int exitValue() {
- if (!hasExited) {
- throw new IllegalThreadStateException("process hasn't exited");
- }
- return exitcode;
- }
-
- private static native void destroyProcess(int pid, boolean force);
- private synchronized void destroy(boolean force) {
- // There is a risk that pid will be recycled, causing us to
- // kill the wrong process! So we only terminate processes
- // that appear to still be running. Even with this check,
- // there is an unavoidable race condition here, but the window
- // is very small, and OSes try hard to not recycle pids too
- // soon, so this is quite safe.
- if (!hasExited)
- destroyProcess(pid, force);
- try {
- stdin_stream.close();
- if (stdout_inner_stream != null)
- stdout_inner_stream.closeDeferred(stdout_stream);
- if (stderr_stream instanceof DeferredCloseInputStream)
- ((DeferredCloseInputStream) stderr_stream)
- .closeDeferred(stderr_stream);
- } catch (IOException e) {
- // ignore
- }
- }
-
- public void destroy() {
- destroy(false);
- }
-
- @Override
- public Process destroyForcibly() {
- destroy(true);
- return this;
- }
-
- @Override
- public synchronized boolean isAlive() {
- return !hasExited;
- }
-
- // A FileInputStream that supports the deferment of the actual close
- // operation until the last pending I/O operation on the stream has
- // finished. This is required on Solaris because we must close the stdin
- // and stdout streams in the destroy method in order to reclaim the
- // underlying file descriptors. Doing so, however, causes any thread
- // currently blocked in a read on one of those streams to receive an
- // IOException("Bad file number"), which is incompatible with historical
- // behavior. By deferring the close we allow any pending reads to see -1
- // (EOF) as they did before.
- //
- private static class DeferredCloseInputStream
- extends FileInputStream
- {
-
- private DeferredCloseInputStream(FileDescriptor fd) {
- super(fd);
- }
-
- private Object lock = new Object(); // For the following fields
- private boolean closePending = false;
- private int useCount = 0;
- private InputStream streamToClose;
-
- private void raise() {
- synchronized (lock) {
- useCount++;
- }
- }
-
- private void lower() throws IOException {
- synchronized (lock) {
- useCount--;
- if (useCount == 0 && closePending) {
- streamToClose.close();
- }
- }
- }
-
- // stc is the actual stream to be closed; it might be this object, or
- // it might be an upstream object for which this object is downstream.
- //
- private void closeDeferred(InputStream stc) throws IOException {
- synchronized (lock) {
- if (useCount == 0) {
- stc.close();
- } else {
- closePending = true;
- streamToClose = stc;
- }
- }
- }
-
- public void close() throws IOException {
- synchronized (lock) {
- useCount = 0;
- closePending = false;
- }
- super.close();
- }
-
- public int read() throws IOException {
- raise();
- try {
- return super.read();
- } finally {
- lower();
- }
- }
-
- public int read(byte[] b) throws IOException {
- raise();
- try {
- return super.read(b);
- } finally {
- lower();
- }
- }
-
- public int read(byte[] b, int off, int len) throws IOException {
- raise();
- try {
- return super.read(b, off, len);
- } finally {
- lower();
- }
- }
-
- public long skip(long n) throws IOException {
- raise();
- try {
- return super.skip(n);
- } finally {
- lower();
- }
- }
-
- public int available() throws IOException {
- raise();
- try {
- return super.available();
- } finally {
- lower();
- }
- }
-
- }
-
- private static native void init();
-
- static {
- init();
- }
-}
--- a/jdk/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -24,14 +24,14 @@
*/
package sun.tools.attach;
-import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.AttachOperationFailedException;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.spi.AttachProvider;
+
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
-import java.util.Properties;
/*
* Bsd implementation of HotSpotVirtualMachine
@@ -191,6 +191,8 @@
}
if (completionStatus != 0) {
+ // read from the stream and use that as the error message
+ String message = readErrorMessage(sis);
sis.close();
// In the event of a protocol mismatch then the target VM
@@ -205,7 +207,11 @@
if (cmd.equals("load")) {
throw new AgentLoadException("Failed to load agent library");
} else {
- throw new IOException("Command failed in target VM");
+ if (message == null) {
+ throw new AttachOperationFailedException("Command failed in target VM");
+ } else {
+ throw new AttachOperationFailedException(message);
+ }
}
}
@@ -237,8 +243,9 @@
if ((off < 0) || (off > bs.length) || (len < 0) ||
((off + len) > bs.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
- } else if (len == 0)
+ } else if (len == 0) {
return 0;
+ }
return BsdVirtualMachine.read(s, bs, off, len);
}
--- a/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/classes/sun/tools/attach/LinuxVirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -24,14 +24,14 @@
*/
package sun.tools.attach;
-import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.AttachOperationFailedException;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.spi.AttachProvider;
+
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
-import java.util.Properties;
/*
* Linux implementation of HotSpotVirtualMachine
@@ -207,6 +207,8 @@
}
if (completionStatus != 0) {
+ // read from the stream and use that as the error message
+ String message = readErrorMessage(sis);
sis.close();
// In the event of a protocol mismatch then the target VM
@@ -221,7 +223,11 @@
if (cmd.equals("load")) {
throw new AgentLoadException("Failed to load agent library");
} else {
- throw new IOException("Command failed in target VM");
+ if (message == null) {
+ throw new AttachOperationFailedException("Command failed in target VM");
+ } else {
+ throw new AttachOperationFailedException(message);
+ }
}
}
--- a/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/classes/sun/tools/attach/SolarisVirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -24,15 +24,15 @@
*/
package sun.tools.attach;
-import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.AttachOperationFailedException;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.spi.AttachProvider;
+
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;
-import java.util.Properties;
/*
* Solaris implementation of HotSpotVirtualMachine.
@@ -147,11 +147,17 @@
// If non-0 it means an error but we need to special-case the
// "load" command to ensure that the right exception is thrown.
if (completionStatus != 0) {
+ // read from the stream and use that as the error message
+ String message = readErrorMessage(sis);
sis.close();
if (cmd.equals("load")) {
throw new AgentLoadException("Failed to load agent library");
} else {
- throw new IOException("Command failed in target VM");
+ if (message == null) {
+ throw new AttachOperationFailedException("Command failed in target VM");
+ } else {
+ throw new AttachOperationFailedException(message);
+ }
}
}
--- a/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -200,14 +200,14 @@
len = remaining;
}
- RESTARTABLE(read(fd, buf+off, len), n);
+ RESTARTABLE(read(fd, buf, len), n);
if (n == -1) {
JNU_ThrowIOExceptionWithLastError(env, "read");
} else {
if (n == 0) {
n = -1; // EOF
} else {
- (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off));
+ (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf));
}
}
return n;
--- a/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/native/sun/tools/attach/LinuxVirtualMachine.c Fri May 16 14:35:37 2014 -0700
@@ -418,14 +418,14 @@
len = remaining;
}
- RESTARTABLE(read(fd, buf+off, len), n);
+ RESTARTABLE(read(fd, buf, len), n);
if (n == -1) {
JNU_ThrowIOExceptionWithLastError(env, "read");
} else {
if (n == 0) {
n = -1; // EOF
} else {
- (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off));
+ (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf));
}
}
return n;
--- a/jdk/src/solaris/native/sun/tools/attach/SolarisVirtualMachine.c Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/solaris/native/sun/tools/attach/SolarisVirtualMachine.c Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -161,14 +161,14 @@
len = remaining;
}
- RESTARTABLE(read(fd, buf+off, len), n);
+ RESTARTABLE(read(fd, buf, len), n);
if (n == -1) {
JNU_ThrowIOExceptionWithLastError(env, "read");
} else {
if (n == 0) {
n = -1; // EOF
} else {
- (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off));
+ (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf));
}
}
return n;
--- a/jdk/src/windows/classes/sun/tools/attach/WindowsVirtualMachine.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/windows/classes/sun/tools/attach/WindowsVirtualMachine.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -24,15 +24,15 @@
*/
package sun.tools.attach;
-import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.AttachOperationFailedException;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.spi.AttachProvider;
+
import sun.tools.attach.HotSpotVirtualMachine;
+
import java.io.IOException;
-import java.io.File;
import java.io.InputStream;
-import java.util.Properties;
import java.util.Random;
public class WindowsVirtualMachine extends HotSpotVirtualMachine {
@@ -105,11 +105,17 @@
// read completion status
int status = readInt(is);
if (status != 0) {
+ // read from the stream and use that as the error message
+ String message = readErrorMessage(is);
// special case the load command so that the right exception is thrown
if (cmd.equals("load")) {
throw new AgentLoadException("Failed to load agent library");
} else {
- throw new IOException("Command failed in target VM");
+ if (message == null) {
+ throw new AttachOperationFailedException("Command failed in target VM");
+ } else {
+ throw new AttachOperationFailedException(message);
+ }
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/windows/lib/security/java.policy Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,3 @@
+grant codeBase "file:${java.home}/lib/ext/sunmscapi.jar" {
+ permission java.security.AllPermission;
+};
--- a/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c Thu May 15 10:37:52 2014 -0700
+++ b/jdk/src/windows/native/sun/tools/attach/WindowsVirtualMachine.c Fri May 16 14:35:37 2014 -0700
@@ -343,7 +343,7 @@
if (nread == 0) {
return (jint)-1; // EOF
} else {
- (*env)->SetByteArrayRegion(env, ba, off, (jint)nread, (jbyte *)(buf+off));
+ (*env)->SetByteArrayRegion(env, ba, off, (jint)nread, (jbyte *)(buf));
}
}
--- a/jdk/test/TEST.groups Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/TEST.groups Fri May 16 14:35:37 2014 -0700
@@ -97,7 +97,8 @@
jdk_nio = \
java/nio \
- sun/nio
+ sun/nio \
+ jdk/nio
jdk_net = \
java/net \
@@ -203,7 +204,6 @@
com/sun/jndi \
com/sun/corba \
lib/testlibrary \
- jdk/nio/zipfs \
sample
#
--- a/jdk/test/com/sun/management/HotSpotDiagnosticMXBean/CheckOrigin.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/com/sun/management/HotSpotDiagnosticMXBean/CheckOrigin.java Fri May 16 14:35:37 2014 -0700
@@ -26,6 +26,7 @@
* @bug 8028994
* @author Staffan Larsen
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main CheckOrigin
*/
--- a/jdk/test/com/sun/tools/attach/BasicTests.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/com/sun/tools/attach/BasicTests.java Fri May 16 14:35:37 2014 -0700
@@ -38,7 +38,7 @@
* @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
* @summary Basic unit tests for the VM attach mechanism.
* @library /lib/testlibrary
- * @run build Agent BadAgent RedefineAgent Application Shutdown RedefineDummy RunnerUtil
+ * @run build jdk.testlibrary.* Agent BadAgent RedefineAgent Application Shutdown RedefineDummy RunnerUtil
* @run main BasicTests
*
* This test will perform a number of basic attach tests.
--- a/jdk/test/com/sun/tools/attach/PermissionTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/com/sun/tools/attach/PermissionTest.java Fri May 16 14:35:37 2014 -0700
@@ -34,7 +34,7 @@
* @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
* @summary Basic unit tests for the VM attach mechanism.
* @library /lib/testlibrary
- * @run build Application Shutdown
+ * @run build jdk.testlibrary.* Application Shutdown
* @run main PermissionTest
*
* Unit test for Attach API -
--- a/jdk/test/com/sun/tools/attach/ProviderTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/com/sun/tools/attach/ProviderTest.java Fri May 16 14:35:37 2014 -0700
@@ -33,7 +33,7 @@
* @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
* @summary Basic unit tests for the VM attach mechanism.
* @library /lib/testlibrary
- * @run build SimpleProvider
+ * @run build jdk.testlibrary.* SimpleProvider
* @run main ProviderTest
*
* The test will attach and detach to/from the running Application.
--- a/jdk/test/java/io/BufferedInputStream/LargeCopyWithMark.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/io/BufferedInputStream/LargeCopyWithMark.java Fri May 16 14:35:37 2014 -0700
@@ -26,6 +26,7 @@
* @summary BufferedInputStream calculates negative array size with large
* streams and mark
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main/othervm LargeCopyWithMark
*/
--- a/jdk/test/java/lang/ProcessBuilder/SecurityManagerClinit.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/ProcessBuilder/SecurityManagerClinit.java Fri May 16 14:35:37 2014 -0700
@@ -54,9 +54,6 @@
System.getProperty("java.home") +
File.separator + "bin" + File.separator + "java";
- // A funky contrived security setup, just for bug repro purposes.
- java.security.Security.setProperty("package.access", "java.util");
-
final Policy policy =
new Policy
(new FilePermission("<<ALL FILES>>", "execute"),
--- a/jdk/test/java/lang/String/ToLowerCase.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/String/ToLowerCase.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, 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
@@ -23,7 +23,7 @@
/*
@test
- @bug 4217441 4533872 4900935 8020037 8032012
+ @bug 4217441 4533872 4900935 8020037 8032012 8041791
@summary toLowerCase should lower-case Greek Sigma correctly depending
on the context (final/non-final). Also it should handle
Locale specific (lt, tr, and az) lowercasings and supplementary
@@ -72,8 +72,10 @@
// I-dot tests
test("\u0130", turkish, "i");
test("\u0130", az, "i");
- test("\u0130", lt, "i");
- test("\u0130", Locale.US, "i");
+ test("\u0130", lt, "\u0069\u0307");
+ test("\u0130", Locale.US, "\u0069\u0307");
+ test("\u0130", Locale.JAPAN, "\u0069\u0307");
+ test("\u0130", Locale.ROOT, "\u0069\u0307");
// Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
test("I\u0307", turkish, "i");
@@ -111,6 +113,12 @@
if (cp >= Character.MIN_HIGH_SURROGATE && cp <= Character.MAX_HIGH_SURROGATE) {
continue;
}
+ if (cp == 0x0130) {
+ // Although UnicodeData.txt has the lower case char as \u0069, it should be
+ // handled with the rules in SpecialCasing.txt, i.e., \u0069\u0307 in
+ // non Turkic locales.
+ continue;
+ }
int lowerCase = Character.toLowerCase(cp);
if (lowerCase == -1) { //Character.ERROR
continue;
--- a/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java Fri May 16 14:35:37 2014 -0700
@@ -30,7 +30,7 @@
* @bug 6289149
* @summary test when the agent's class is missing the premain() function.
* @library /lib/testlibrary
- * @run build DummyMain
+ * @run build jdk.testlibrary.* DummyMain
* @run shell ../MakeJAR3.sh NoPremainAgent
* @run main NoPremainAgentTest
*/
--- a/jdk/test/java/lang/instrument/PremainClass/PremainClassTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/instrument/PremainClass/PremainClassTest.java Fri May 16 14:35:37 2014 -0700
@@ -30,7 +30,7 @@
* @bug 5055293
* @summary Test non ascii characters in the Premain-Class attribute.
* @library /lib/testlibrary
- * @run build DummyMain
+ * @run build jdk.testlibrary.* DummyMain
* @run main PremainClassTest
*/
public class PremainClassTest {
--- a/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java Fri May 16 14:35:37 2014 -0700
@@ -30,7 +30,7 @@
* @bug 6289149
* @summary test when the agent's class has a zero arg premain() function.
* @library /lib/testlibrary
- * @run build DummyMain
+ * @run build jdk.testlibrary.* DummyMain
* @run shell ../MakeJAR3.sh ZeroArgPremainAgent
* @run main ZeroArgPremainAgentTest
*/
--- a/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java Fri May 16 14:35:37 2014 -0700
@@ -31,7 +31,7 @@
* @author Mandy Chung
*
* @library /lib/testlibrary/
- * @build CollectionUsageThreshold MemoryUtil RunUtil
+ * @build jdk.testlibrary.* CollectionUsageThreshold MemoryUtil RunUtil
* @run main/timeout=300 CollectionUsageThreshold
*/
--- a/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/lang/management/MemoryMXBean/LowMemoryTest.java Fri May 16 14:35:37 2014 -0700
@@ -31,7 +31,7 @@
* @author Mandy Chung
*
* @library /lib/testlibrary/
- * @build LowMemoryTest MemoryUtil RunUtil
+ * @build jdk.testlibrary.* LowMemoryTest MemoryUtil RunUtil
* @run main/timeout=600 LowMemoryTest
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/Authenticator/B8034170.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+/**
+ * @test
+ * @bug 8034170
+ * @summary Digest authentication interop issue
+ * @run main/othervm B8034170 unquoted
+ * @run main/othervm -Dhttp.auth.digest.quoteParameters=true B8034170 quoted
+ */
+
+public class B8034170 {
+
+ static boolean expectQuotes;
+
+ static class BasicServer extends Thread {
+
+ ServerSocket server;
+
+ Socket s;
+ InputStream is;
+ OutputStream os;
+
+ static final String realm = "wallyworld";
+
+ String reply1 = "HTTP/1.1 401 Unauthorized\r\n"+
+ "WWW-Authenticate: Digest realm=\""+realm+"\", qop=\"auth\"" +
+ ", nonce=\"8989de95ea2402b64d73cecdb15da255\"" +
+ ", opaque=\"bbfb4c9ee92ddccc73521c3e6e841ba2\"\r\n\r\n";
+
+ String OKreply = "HTTP/1.1 200 OK\r\n"+
+ "Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
+ "Server: Apache/1.3.14 (Unix)\r\n" +
+ "Connection: close\r\n" +
+ "Content-Type: text/plain; charset=iso-8859-1\r\n" +
+ "Content-Length: 10\r\n\r\n";
+
+ String ERRreply = "HTTP/1.1 500 Internal server error\r\n"+
+ "Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
+ "Server: Apache/1.3.14 (Unix)\r\n" +
+ "Connection: close\r\n" +
+ "Content-Length: 0\r\n\r\n";
+
+ BasicServer (ServerSocket s) {
+ server = s;
+ }
+
+ int readAll (Socket s, byte[] buf) throws IOException {
+ int pos = 0;
+ InputStream is = s.getInputStream ();
+ // wait two seconds for request, as client doesn't close
+ // the connection
+ s.setSoTimeout(2000);
+ try {
+ int n;
+ while ((n=is.read(buf, pos, buf.length-pos)) > 0)
+ pos +=n;
+ } catch (SocketTimeoutException x) { }
+ return pos;
+ }
+
+ public void run () {
+ byte[] buf = new byte[5000];
+ try {
+ System.out.println ("Server 1: accept");
+ s = server.accept ();
+ System.out.println ("accepted");
+ os = s.getOutputStream();
+ os.write (reply1.getBytes());
+ readAll (s, buf);
+ s.close ();
+
+ System.out.println ("Server 2: accept");
+ s = server.accept ();
+ System.out.println ("accepted");
+ os = s.getOutputStream();
+ int count = readAll (s, buf);
+ String reply = new String(buf, 0, count);
+
+ boolean error;
+
+ if (expectQuotes) {
+ error = false;
+ if (!reply.contains("qop=\"auth\"")) {
+ System.out.println ("Expecting quoted qop. Not found");
+ error = true;
+ }
+ if (!reply.contains("algorithm=\"MD5\"")) {
+ System.out.println ("Expecting quoted algorithm. Not found");
+ error = true;
+ }
+ } else {
+ error = false;
+ if (!reply.contains("qop=auth")) {
+ System.out.println ("Expecting unquoted qop. Not found");
+ error = true;
+ }
+ if (!reply.contains("algorithm=MD5")) {
+ System.out.println ("Expecting unquoted algorithm. Not found");
+ error = true;
+ }
+ }
+ if (error) {
+ os.write(ERRreply.getBytes());
+ os.flush();
+ s.close();
+ } else {
+ os.write((OKreply+"HelloWorld").getBytes());
+ os.flush();
+ s.close();
+ }
+ }
+ catch (Exception e) {
+ System.out.println (e);
+ }
+ finished ();
+ }
+
+ public synchronized void finished () {
+ notifyAll();
+ }
+
+ }
+
+ static class MyAuthenticator3 extends Authenticator {
+ PasswordAuthentication pw;
+ MyAuthenticator3 () {
+ super ();
+ pw = new PasswordAuthentication ("user", "passwordNotCheckedAnyway".toCharArray());
+ }
+
+ public PasswordAuthentication getPasswordAuthentication ()
+ {
+ System.out.println ("Auth called");
+ return pw;
+ }
+ }
+
+
+ static void read (InputStream is) throws IOException {
+ int c;
+ System.out.println ("reading");
+ while ((c=is.read()) != -1) {
+ System.out.write (c);
+ }
+ System.out.println ("");
+ System.out.println ("finished reading");
+ }
+
+ public static void main (String args[]) throws Exception {
+ expectQuotes = args[0].equals("quoted");
+
+ MyAuthenticator3 auth = new MyAuthenticator3 ();
+ Authenticator.setDefault (auth);
+ ServerSocket ss = new ServerSocket (0);
+ int port = ss.getLocalPort ();
+ BasicServer server = new BasicServer (ss);
+ synchronized (server) {
+ server.start();
+ System.out.println ("client 1");
+ URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
+ URLConnection urlc = url.openConnection ();
+ InputStream is = urlc.getInputStream ();
+ read (is);
+ is.close ();
+ }
+ }
+}
--- a/jdk/test/java/net/URLPermission/nstest/lookup.sh Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/net/URLPermission/nstest/lookup.sh Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
# @library /lib/testlibrary
# @compile -XDignore.symbol.file=true SimpleNameService.java
# LookupTest.java SimpleNameServiceDescriptor.java
-# @build jdk.testlibrary.Utils
+# @build jdk.testlibrary.*
# @run shell/timeout=50 lookup.sh
#
--- a/jdk/test/java/util/Properties/CompatibilityTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/util/Properties/CompatibilityTest.java Fri May 16 14:35:37 2014 -0700
@@ -25,8 +25,6 @@
* @test
* @bug 8005280 8004371
* @summary Compatibility test
- * @run main CompatibilityTest
- * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=jdk.internal.util.xml.BasicXmlPropertiesProvider CompatibilityTest
*/
import java.io.FileInputStream;
--- a/jdk/test/java/util/Properties/ConcurrentLoadAndStoreXML.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/util/Properties/ConcurrentLoadAndStoreXML.java Fri May 16 14:35:37 2014 -0700
@@ -25,9 +25,6 @@
* @bug 8005281
* @summary Test that the Properties storeToXML and loadFromXML methods are
* thread safe
- * @run main ConcurrentLoadAndStoreXML
- * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=jdk.internal.util.xml.BasicXmlPropertiesProvider ConcurrentLoadAndStoreXML
-
*/
import java.io.*;
--- a/jdk/test/java/util/Properties/CustomProvider.java Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * 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 8000354
- * @summary Test
- * @compile -XDignore.symbol.file CustomProvider.java MyXmlPropertiesProvider.java
- * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=MyXmlPropertiesProvider CustomProvider
- */
-
-import java.util.*;
-import java.io.*;
-
-/**
- * Sanity test to verify that the property sun.util.spi.XmlPropertiesProvider
- * can be used to specify a custom provider for loading/storing properties
- * in XML format.
- */
-public class CustomProvider {
-
- public static void main(String[] args) throws IOException {
- String provider = System.getProperty("sun.util.spi.XmlPropertiesProvider");
- assertTrue(provider != null, "sun.util.spi.XmlPropertiesProvider not set");
-
- OutputStream out = new ByteArrayOutputStream();
- InputStream in = new ByteArrayInputStream(new byte[100]);
-
- Properties props;
-
- props = new Properties();
- props.loadFromXML(in);
-
- props = System.getProperties();
- props.storeToXML(out, "comment");
- props.storeToXML(out, "comment", "UTF-8");
-
- // check that the provider's load and store methods have been invoked
-
- assertTrue(MyXmlPropertiesProvider.createCount() == 1,
- "Provider should only be created once");
- assertTrue(MyXmlPropertiesProvider.loadCount() == 1,
- "load method expected to be called once");
- assertTrue(MyXmlPropertiesProvider.storeCount() == 2,
- "store method expected to be called twice");
- }
-
- static void assertTrue(boolean b, String msg) {
- if (!b) throw new RuntimeException(msg);
- }
-}
--- a/jdk/test/java/util/Properties/LoadAndStoreXML.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/util/Properties/LoadAndStoreXML.java Fri May 16 14:35:37 2014 -0700
@@ -23,16 +23,28 @@
/*
* @test
- * @bug 8000354 8000685 8004371
+ * @bug 8000354 8000685 8004371 8043119
* @summary Basic test of storeToXML and loadToXML
- * @run main LoadAndStoreXML
- * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=jdk.internal.util.xml.BasicXmlPropertiesProvider LoadAndStoreXML
*/
-import java.io.*;
-import java.util.*;
-import java.security.*;
-import java.nio.file.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.InvalidPropertiesFormatException;
+import java.util.Properties;
+import java.util.PropertyPermission;
public class LoadAndStoreXML {
@@ -66,6 +78,50 @@
}
/**
+ * A {@code ByteArrayInputStream} that allows testing if the
+ * {@code close} method has been invoked.
+ */
+ static class TestInputStream extends ByteArrayInputStream {
+ private boolean closed;
+
+ TestInputStream(byte[] buf) {
+ super(buf);
+ }
+
+ boolean isOpen() {
+ return !closed;
+ }
+
+ public void close() throws IOException {
+ try {
+ super.close();
+ } finally {
+ closed = true;
+ }
+ }
+ }
+
+ /**
+ * A {@code ByteArrayOutputStream} that allows testing if the
+ * {@code close} method has been invoked.
+ */
+ static class TestOutputStream extends ByteArrayOutputStream {
+ private boolean closed;
+
+ boolean isOpen() {
+ return !closed;
+ }
+
+ public void close() throws IOException {
+ try {
+ super.close();
+ } finally {
+ closed = true;
+ }
+ }
+ }
+
+ /**
* Sanity test that properties saved with Properties#storeToXML can be
* read with Properties#loadFromXML.
*/
@@ -79,12 +135,16 @@
props.put("k4", "\u7532\u9aa8\u6587");
props.put("k5", "<java.home>/lib/jaxp.properties");
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ TestOutputStream out = new TestOutputStream();
props.storeToXML(out, null, encoding);
+ if (!out.isOpen())
+ throw new RuntimeException("OutputStream closed by storeToXML");
Properties p = new Properties();
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ TestInputStream in = new TestInputStream(out.toByteArray());
p.loadFromXML(in);
+ if (in.isOpen())
+ throw new RuntimeException("InputStream not closed by loadFromXML");
if (!p.equals(props)) {
System.err.println("stored: " + props);
--- a/jdk/test/java/util/Properties/LoadAndStoreXMLWithDefaults.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/java/util/Properties/LoadAndStoreXMLWithDefaults.java Fri May 16 14:35:37 2014 -0700
@@ -35,58 +35,17 @@
*/
public class LoadAndStoreXMLWithDefaults {
- public static enum StoreMethod {
- // Note: this case will test the default provider when available,
- // and the basic provider when it's not.
- PROPERTIES {
- @Override
- public String writeToXML(Properties p) throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- p.storeToXML(baos, "Test 8016344");
- return baos.toString();
- }
- @Override
- public Properties loadFromXML(String xml, Properties defaults)
- throws IOException {
- final ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes("UTF-8"));
- Properties p = new Properties(defaults);
- p.loadFromXML(bais);
- return p;
- }
- },
- // Note: this case always test the basic provider, which is always available.
- // so sometimes it's just a dup with the previous case...
- BASICPROVIDER {
- @Override
- public String writeToXML(Properties p) throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- jdk.internal.util.xml.BasicXmlPropertiesProvider provider =
- new jdk.internal.util.xml.BasicXmlPropertiesProvider();
- provider.store(p, baos, "Test 8016344", "UTF-8");
- return baos.toString();
- }
- @Override
- public Properties loadFromXML(String xml, Properties defaults)
- throws IOException {
- final ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes("UTF-8"));
- Properties p = new Properties(defaults);
- jdk.internal.util.xml.BasicXmlPropertiesProvider provider =
- new jdk.internal.util.xml.BasicXmlPropertiesProvider();
- provider.load(p, bais);
- return p;
- }
- };
- public abstract String writeToXML(Properties p) throws IOException;
- public abstract Properties loadFromXML(String xml, Properties defaults)
- throws IOException;
- public String displayName() {
- switch(this) {
- case PROPERTIES: return "Properties.storeToXML";
- case BASICPROVIDER: return "BasicXmlPropertiesProvider.store";
- default:
- throw new UnsupportedOperationException(this.name());
- }
- }
+ static String writeToXML(Properties props) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ props.storeToXML(baos, "Test 8016344");
+ return baos.toString();
+ }
+
+ static Properties loadFromXML(String xml, Properties defaults) throws IOException {
+ ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes("UTF-8"));
+ Properties props = new Properties(defaults);
+ props.loadFromXML(bais);
+ return props;
}
static enum Objects { OBJ1, OBJ2, OBJ3 };
@@ -106,63 +65,59 @@
p3.setProperty("p1.and.p2.and.p3.prop", "prop9-p3");
p3.setProperty("p2.and.p3.prop", "prop10-p3");
- for (StoreMethod m : StoreMethod.values()) {
- System.out.println("Testing with " + m.displayName());
- Properties P1 = m.loadFromXML(m.writeToXML(p1), null);
- Properties P2 = m.loadFromXML(m.writeToXML(p2), P1);
- Properties P3 = m.loadFromXML(m.writeToXML(p3), P2);
+ Properties P1 = loadFromXML(writeToXML(p1), null);
+ Properties P2 = loadFromXML(writeToXML(p2), P1);
+ Properties P3 = loadFromXML(writeToXML(p3), P2);
- testResults(m, p1, P1, p2, P2, p3, P3);
+ testResults(p1, P1, p2, P2, p3, P3);
- // Now check that properties whose keys or values are objects
- // are skipped.
+ // Now check that properties whose keys or values are objects
+ // are skipped.
- System.out.println("Testing with " + m.displayName() + " and Objects");
- P1.put("p1.object.prop", Objects.OBJ1);
- P1.put(Objects.OBJ1, "p1.object.prop");
- P1.put("p2.object.prop", "p2.object.prop");
- P2.put("p2.object.prop", Objects.OBJ2);
- P2.put(Objects.OBJ2, "p2.object.prop");
- P3.put("p3.object.prop", Objects.OBJ3);
- P3.put(Objects.OBJ3, "p3.object.prop");
+ P1.put("p1.object.prop", Objects.OBJ1);
+ P1.put(Objects.OBJ1, "p1.object.prop");
+ P1.put("p2.object.prop", "p2.object.prop");
+ P2.put("p2.object.prop", Objects.OBJ2);
+ P2.put(Objects.OBJ2, "p2.object.prop");
+ P3.put("p3.object.prop", Objects.OBJ3);
+ P3.put(Objects.OBJ3, "p3.object.prop");
- Properties PP1 = m.loadFromXML(m.writeToXML(P1), null);
- Properties PP2 = m.loadFromXML(m.writeToXML(P2), PP1);
- Properties PP3 = m.loadFromXML(m.writeToXML(P3), PP2);
+ Properties PP1 = loadFromXML(writeToXML(P1), null);
+ Properties PP2 = loadFromXML(writeToXML(P2), PP1);
+ Properties PP3 = loadFromXML(writeToXML(P3), PP2);
- p1.setProperty("p2.object.prop", "p2.object.prop");
- try {
- testResults(m, p1, PP1, p2, PP2, p3, PP3);
- } finally {
- p1.remove("p2.object.prop");
- }
+ p1.setProperty("p2.object.prop", "p2.object.prop");
+ try {
+ testResults(p1, PP1, p2, PP2, p3, PP3);
+ } finally {
+ p1.remove("p2.object.prop");
}
}
- public static void testResults(StoreMethod m, Properties... pps) {
+ public static void testResults(Properties... pps) {
for (int i=0 ; i < pps.length ; i += 2) {
if (!pps[i].equals(pps[i+1])) {
- System.err.println(m.displayName() +": P" + (i/2+1)
+ System.err.println("P" + (i/2+1)
+ " Reloaded properties differ from original");
System.err.println("\toriginal: " + pps[i]);
System.err.println("\treloaded: " + pps[i+1]);
- throw new RuntimeException(m.displayName() +": P" + (i/2+1)
+ throw new RuntimeException("P" + (i/2+1)
+ " Reloaded properties differ from original");
}
if (!pps[i].keySet().equals(pps[i+1].keySet())) {
- System.err.println(m.displayName() +": P" + (i/2+1)
+ System.err.println("P" + (i/2+1)
+ " Reloaded property names differ from original");
System.err.println("\toriginal: " + pps[i].keySet());
System.err.println("\treloaded: " + pps[i+1].keySet());
- throw new RuntimeException(m.displayName() +": P" + (i/2+1)
+ throw new RuntimeException("P" + (i/2+1)
+ " Reloaded property names differ from original");
}
if (!pps[i].stringPropertyNames().equals(pps[i+1].stringPropertyNames())) {
- System.err.println(m.displayName() +": P" + (i/2+1)
+ System.err.println("P" + (i/2+1)
+ " Reloaded string property names differ from original");
System.err.println("\toriginal: " + pps[i].stringPropertyNames());
System.err.println("\treloaded: " + pps[i+1].stringPropertyNames());
- throw new RuntimeException(m.displayName() +": P" + (i/2+1)
+ throw new RuntimeException("P" + (i/2+1)
+ " Reloaded string property names differ from original");
}
}
--- a/jdk/test/java/util/Properties/MyXmlPropertiesProvider.java Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-
-import java.util.*;
-import java.io.*;
-
-public class MyXmlPropertiesProvider
- extends sun.util.spi.XmlPropertiesProvider
-{
- private static int createCount;
- private static int loadCount;
- private static int storeCount;
-
- static int createCount() { return createCount; }
- static int loadCount() { return loadCount; }
- static int storeCount() { return storeCount; }
-
- public MyXmlPropertiesProvider() {
- createCount++;
- }
-
- @Override
- public void load(Properties props, InputStream in)
- throws IOException, InvalidPropertiesFormatException
- {
- loadCount++;
- }
-
- @Override
- public void store(Properties props, OutputStream out,
- String comment, String encoding)
- throws IOException
- {
- storeCount++;
- }
-}
--- a/jdk/test/javax/management/monitor/StartStopTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/javax/management/monitor/StartStopTest.java Fri May 16 14:35:37 2014 -0700
@@ -28,7 +28,7 @@
* monitors are started and stopped in a loop.
* @author Luis-Miguel Alventosa
* @library /lib/testlibrary
- * @run build jdk.testlibrary.Utils
+ * @build jdk.testlibrary.*
* @run clean StartStopTest
* @run build StartStopTest
* @run main/othervm/timeout=300 StartStopTest 1
--- a/jdk/test/jdk/nio/zipfs/Basic.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/jdk/nio/zipfs/Basic.java Fri May 16 14:35:37 2014 -0700
@@ -31,8 +31,11 @@
/**
*
* @test
- * @bug 8038500
+ * @bug 8038500 8040059
* @summary Basic test for zip provider
+ *
+ * @run main Basic
+ * @run main/othervm/policy=test.policy Basic
*/
public class Basic {
--- a/jdk/test/jdk/nio/zipfs/PathOps.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/jdk/nio/zipfs/PathOps.java Fri May 16 14:35:37 2014 -0700
@@ -29,8 +29,11 @@
/**
*
* @test
- * @bug 8038500
+ * @bug 8038500 8040059
* @summary Tests path operations for zip provider.
+ *
+ * @run main PathOps
+ * @run main/othervm/policy=test.policy.readonly PathOps
*/
public class PathOps {
--- a/jdk/test/jdk/nio/zipfs/ZFSTests.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/jdk/nio/zipfs/ZFSTests.java Fri May 16 14:35:37 2014 -0700
@@ -22,8 +22,11 @@
*/
/* @test
- @bug 7156873
- @summary ZipFileSystem regression tests
+ * @bug 7156873 8040059
+ * @summary ZipFileSystem regression tests
+ *
+ * @run main ZFSTests
+ * @run main/othervm/policy=test.policy ZFSTests
*/
--- a/jdk/test/jdk/nio/zipfs/ZipFSTester.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/jdk/nio/zipfs/ZipFSTester.java Fri May 16 14:35:37 2014 -0700
@@ -40,8 +40,10 @@
*
* @test
* @bug 6990846 7009092 7009085 7015391 7014948 7005986 7017840 7007596
- * 7157656 8002390 7012868 7012856 8015728 8038500
+ * 7157656 8002390 7012868 7012856 8015728 8038500 8040059
* @summary Test Zip filesystem provider
+ * @run main ZipFSTester
+ * @run main/othervm/policy=test.policy ZipFSTester
*/
public class ZipFSTester {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/jdk/nio/zipfs/test.policy Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,16 @@
+grant codeBase "file:${java.home}/lib/ext/zipfs.jar" {
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write";
+ permission java.lang.RuntimePermission "fileSystemProvider";
+ permission java.util.PropertyPermission "*", "read";
+};
+
+grant codeBase "file:${java.home}/lib/ext/sunpkcs11.jar" {
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*";
+};
+
+grant {
+ permission java.io.FilePermission "<<ALL FILES>>","read,write,delete";
+ permission java.util.PropertyPermission "test.jdk","read";
+ permission java.util.PropertyPermission "test.src","read";
+ permission java.util.PropertyPermission "user.dir","read";
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/jdk/nio/zipfs/test.policy.readonly Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,12 @@
+grant codeBase "file:${java.home}/lib/ext/zipfs.jar" {
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write";
+ permission java.lang.RuntimePermission "fileSystemProvider";
+ permission java.util.PropertyPermission "*", "read";
+};
+
+grant {
+ permission java.io.FilePermission "<<ALL FILES>>","read";
+ permission java.util.PropertyPermission "test.jdk","read";
+ permission java.util.PropertyPermission "test.src","read";
+ permission java.util.PropertyPermission "user.dir","read";
+};
--- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.java Fri May 16 14:35:37 2014 -0700
@@ -30,12 +30,24 @@
import java.security.*;
public class Ext_AllPolicy {
- public static void main (String[] args) {
- FilePermission mine = new FilePermission("/tmp/bar", "read");
- SecurityManager sm = System.getSecurityManager();
+ public static void main (String[] args) {
+ boolean allPerms = args.length == 1 && args[0].equals("AllPermission");
+ FilePermission mine = new FilePermission("/tmp/bar", "read");
+ SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(mine);
+ if (sm != null) {
+ try {
+ sm.checkPermission(mine);
+ if (!allPerms) {
+ // Default has no privilege.
+ throw new RuntimeException(mine + " expected to deny access");
}
+ } catch (AccessControlException e) {
+ if (allPerms) {
+ // expected all permissions granted
+ throw e;
+ }
+ }
}
+ }
}
--- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh Fri May 16 14:35:37 2014 -0700
@@ -22,7 +22,7 @@
#
# @test
-# @bug 4215035
+# @bug 4215035 8040059
# @summary standard extensions path is hard-coded in default system policy file
#
# @build Ext_AllPolicy
@@ -81,6 +81,9 @@
rm Ext_AllPolicy.class
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} \
- -Djava.security.manager -Djava.ext.dirs="${TESTCLASSES}" Ext_AllPolicy
+ -Djava.security.manager -Djava.ext.dirs="${TESTCLASSES}" Ext_AllPolicy || exit 10
+${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} \
+ -Djava.security.policy=${TESTSRC}${FS}test.policy \
+ -Djava.security.manager -Djava.ext.dirs="${TESTCLASSES}" Ext_AllPolicy AllPermission
exit $?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/lib/security/java.policy/test.policy Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,3 @@
+grant codeBase "file:${{java.ext.dirs}}/*" {
+ permission java.security.AllPermission;
+};
--- a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java Fri May 16 14:35:37 2014 -0700
@@ -41,7 +41,7 @@
* @test
* @bug 6434402 8004926
* @library /lib/testlibrary
- * @build jdk.testlibrary.ProcessTools
+ * @build jdk.testlibrary.*
* @build TestManager TestApplication CustomLauncherTest
* @run main/othervm CustomLauncherTest
* @author Jaroslav Bachorik
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, 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
@@ -616,7 +616,7 @@
final boolean[] checks = new boolean[3];
jcmd(
line -> {
- if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
+ if (line.contains("java.lang.RuntimeException: Invalid agent state")) {
checks[0] = true;
}
},
@@ -627,7 +627,7 @@
jcmd(
line -> {
- if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
+ if (line.contains("java.lang.RuntimeException: Invalid agent state")) {
checks[1] = true;
}
},
--- a/jdk/test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java Fri May 16 14:35:37 2014 -0700
@@ -28,6 +28,7 @@
* @author Robert Field
* @library /lib/testlibrary
* @compile -XDignore.symbol.file ManyNewInstanceAnonTest.java
+ * @build jdk.testlibrary.*
* @run main ClassFileInstaller ManyNewInstanceAnonTest
* @run main/othervm -Xbootclasspath/a:. -Xverify:all ManyNewInstanceAnonTest
* @run main/othervm -Xbootclasspath/a:. -Xverify:all -Dsun.reflection.noInflation=true ManyNewInstanceAnonTest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/validator/ConstructorTest.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,467 @@
+/*
+ * Copyright (c) 2014, 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 6996377
+ * @summary shrink duplicate code in the constructor of PKIXValidator
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.security.cert.TrustAnchor;
+import java.security.cert.PKIXBuilderParameters;
+import java.security.cert.X509CertSelector;
+import javax.security.auth.x500.X500Principal;
+import java.util.Date;
+import java.util.List;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Enumeration;
+import java.util.Collection;
+import sun.security.validator.Validator;
+import sun.security.validator.PKIXValidator;
+
+public class ConstructorTest {
+
+ // COMMON-OPTS: All certs created with the following common options:
+ // -keystore <STORE> -storepass <PASS> -keypass <PASS> -keyalg rsa
+ // -keysize 2048 -validity 720 -sigalg sha256withrsa
+
+ // keytool <COMMON-OPTS> -alias root -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC3jCCAcagAwIBAgIEInKZgjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRS\n" +
+ "b290MB4XDTE0MDUwODE4MjcwOFoXDTE2MDQyNzE4MjcwOFowDzENMAsGA1UEAxME\n" +
+ "Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIzgMkrCZD7PuoFb\n" +
+ "fmtAd2+Td6nA9sgBd8Z3NjQgP6nwyn79svaVV9XAVLTrLian72wV/1Kbq/6HUXQQ\n" +
+ "AqyUAvobDwXeIAmE4+D7qcZxiEJgVNr2Ddv1bbS8Y0/Ta72qzjFiEPMO3Y2GP52C\n" +
+ "ssKQpsdNttHfM9c73cKUspobc3p51k2lkynheshCSNOWxR/Rvsl/gcbEFg8vIEHV\n" +
+ "oJPwKSrABc4sWiiXQj0yLVW+DKVEFuWNqqitcikQLZFpgOYv8P1SjhJFkcA9s0oN\n" +
+ "sbvKO2VF141h161i0AFddTsGE85A3j42qEdwQ0cs9gyAoeU865TFvxCuhSqSgJ3a\n" +
+ "Mdgn7ssCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw\n" +
+ "HQYDVR0OBBYEFFQY2UJynMSoS7Tf/+DvNPp/ZxXfMA0GCSqGSIb3DQEBCwUAA4IB\n" +
+ "AQAeXRQnEhxNl8lrcGY1U1LbIdrNMlGnc0JbgwiVYwRlE3+u4GvDae1VueXyY6nw\n" +
+ "8m63H3Q/Do9/72aw2Q0FSwvDg+k5ssj+gXQ3Gyx8xsVPJEG0TizOSwnWiZtWu65w\n" +
+ "14p5TB8P8wdPEs6sfE9oheiKhDRjBZHIfqMd4DaBiM9N9qHpSwTJc02BB2KnGwga\n" +
+ "yiYNJbce7GFKn/exryj972n/Nl4xy1WdZrRwTBbV21/GINw+xdXn1+FD95EGqGlr\n" +
+ "Sb4+G7U7Ydo+xFpVQnrqxZe98pI5W2bG7VSKvIzcPxfL5/tjwtNaqhiD7wIBNHVx\n" +
+ "ZeJevm41O9qFQEdXNyVGpB+u\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias int -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String INTERMED =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC/jCCAeagAwIBAgIEDkzdijANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRS\n" +
+ "b290MB4XDTE0MDUwODE4MjcyNFoXDTE2MDQyNzE4MjcyNFowDjEMMAoGA1UEAxMD\n" +
+ "SW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwslILfgvXPxdRgu8\n" +
+ "4SnrZJsSzb/XvYwYGAKTSvsDaI1nXypBbwDGz87+YPpZSJcExcS8I8GBKqN6kXIh\n" +
+ "YvJ9yMGJX8wdwoMQpw2ZfJpzfw9Nqtlhv8/q5kPlaDghJ+nGNwy5lyYNOzDMVht0\n" +
+ "1XQG65C+l7m52lDJ478tGRZEFkx0aTh2QUBI59iNji6r2Buyeiijhg4YBrvIlYLK\n" +
+ "OAHxru4N/Y2Cq3ECUUvm7Lf8tM8yrINS8FLT+pmNcLj8AKkGW8cFFaiGPMyon0/m\n" +
+ "4iJB7ZaeG+BGm9TvBv93cphAsM2tY+S+P/dLfI01ltucibPkSglmquUSA0xW9ilv\n" +
+ "PEYWqQIDAQABo2MwYTAfBgNVHSMEGDAWgBRUGNlCcpzEqEu03//g7zT6f2cV3zAP\n" +
+ "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU1jeG+pzz\n" +
+ "WnHa+0PfJNw9JTrZaoMwDQYJKoZIhvcNAQELBQADggEBABRshh0oJ8Dq87Tgcf3w\n" +
+ "ERVZ/uDWKj76UXWQ3uvKMhnNxKN/vs1rCfhovkptn39CXndOb8m6UkvmMjDtJsiO\n" +
+ "Oq/DiR6NngCy5yJ5hMuBsdQ2QVvdiqG4Sb+vOaQ2TNQNEHEWC7sB0ztImjxlqDtq\n" +
+ "yvof5pd8pHeZJNyDo5cHw1cpoUI9GLz6CK5i0wUlBvsYERIX5aRqxqdtKgBefHFN\n" +
+ "S2ChTRB16A5C1h+Lu79KnoeS33lZt1VeebIA7hvaHkqhGGpncutEYgT8QNFFpjM8\n" +
+ "yFCjZG+ZuUD/s5hd/xHnPdJzR+RWVKMjjVCTpnni3+NHXo2fh0G8YFhdHQ2F/YFI\n" +
+ "ig0=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias user -ext ku:c=digitalSignature
+ // -ext eku=clientAuth
+ private static final String USER =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDAjCCAeqgAwIBAgIEKgsK2DANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDEwNJ\n" +
+ "bnQwHhcNMTQwNTA4MTgyNzI3WhcNMTYwNDI3MTgyNzI3WjAPMQ0wCwYDVQQDEwRV\n" +
+ "c2VyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBFLJZ1liQAEkEyJ\n" +
+ "9vAiViRXtDDV+lc62DR4DBj1/Vsw9djVOxmwDKM0+jj83F4Qn9vulr+xp2aZzx4Y\n" +
+ "GiJgbtoxPvZmwNv4MPCNX+fgl/+C0nFKOoSYfHb/tK0Jj6u8HOmQqkbSmGJd/yRL\n" +
+ "qavapRvhS94tFhiNK7wwLAK9AZ+r7cTEBtUSqfaS7mY7tUsERcZs6z3+rmsuxWw6\n" +
+ "/xnNTIVWjdUSbEnjZCdkfZ0cjFONotL6aKoa6YXzohzgA5c3SJZqscEaz4yPkMvl\n" +
+ "7bGy7cn6xjfbb5V3oNqo1dtF3Jm8zp0q8Zgvc47l+DAoGIHSpDhPGX+qSWOTwRla\n" +
+ "QT6NDwIDAQABo2cwZTAfBgNVHSMEGDAWgBTWN4b6nPNacdr7Q98k3D0lOtlqgzAT\n" +
+ "BgNVHSUEDDAKBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFE/p\n" +
+ "UEn8+capIj2+V+7GoxUhdVnWMA0GCSqGSIb3DQEBCwUAA4IBAQBkEyFJ/1CCMoU3\n" +
+ "C1sYoq4Wt36z3e4Z2rMjfpFXcagqOQaq+hq+/eG8gDE50tOp30nZF7BxSv0RKnxa\n" +
+ "KSkrKcupwgPJOZZWVR6ycV3xWm4QleLuDJh3NdK0o8vvIwLQP47fXURzEXTpGodl\n" +
+ "+hGx7jcghsOKftBDCaleywam4jcZ5YPfp5Ayev0pK/Euf0kZgZAhRM33uJVVfEns\n" +
+ "UotoGK7SL6hZMCrreVlXygof19p531Ps5xMqu0y2u2xztjVQJ+gPU5zcYbjByUl+\n" +
+ "pY+wDPb8XU1EoLl7J5UyayXlk0c3KG/5f+CrVi2HtRfCcKLBf8/MH6OFIpX9O77p\n" +
+ "Qq3r+W/l\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias red-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String RED_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC5jCCAc6gAwIBAgIEWK8vRTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhS\n" +
+ "ZWQgUm9vdDAeFw0xNDA1MDgxODI3MTNaFw0xNjA0MjcxODI3MTNaMBMxETAPBgNV\n" +
+ "BAMTCFJlZCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjpMy\n" +
+ "Qh5yq4R3DrwsWaBZoCR+gda4a1PjGpjlQW/Au6R3hwUDAunkQIz/sX1CnLLJ7cks\n" +
+ "4m6ba2wjYE3NbVP9D3HozLAv2ErB75/F3evRu5UvzkGLkamyHJBY0xEyFyOaD4MC\n" +
+ "hhlo8dDEY++YL8Od+m4i56fYXQlTT94u20I+6hZxeIpJxFSHyouZg06jb+URibi0\n" +
+ "e7I3JApWghgcDfgEXZWlCmB8IswYPdd+XWRFDNc4rSWueRP+SeQOFx9x1jM6+skP\n" +
+ "DGLpuaChO7cqsUxYnsEx9zhdxQ+v4V3vOye/GigpRaO7WvgPB4g5sYhFlwZ/tp+A\n" +
+ "KQebXExXCGOOQUoFEwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB\n" +
+ "/wQEAwIBBjAdBgNVHQ4EFgQUYL8o0Ku7Irg33xzCgA4q1PFz6IQwDQYJKoZIhvcN\n" +
+ "AQELBQADggEBAGSVpI7Qmb0oupBCs+tXlJ4/+TX6eBGcHydaT/2hlgEEdT7S7y6O\n" +
+ "iMC8C8wlEKTLZ6MJSxjeFTIO62OkTjCsGtk+BHTaE81QL5rxjGFkvtuQrwck8gHg\n" +
+ "fAb7daF9ZVLz6B8+cX047xZHx9ZGM/ID+GJg/3fk17WA2BhW1Xkzskby5AWpBDol\n" +
+ "i6+zEod0uZhpHiWwVSfHlEA+rnkhW632oVaVNNDkeUhsCxrU0k7nlQx8bG5bmUso\n" +
+ "1MaPP1kRKvcy0UGx6q3s8pcrKw0X1S66n7HV+WbQebg83U0MVE1r/J0Cfi0jMS/x\n" +
+ "ZUVXs7rjCGFhwfiT/kybKD8adrGHSmLhKs0=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias orange-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String ORANGE_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC7DCCAdSgAwIBAgIEQPSszTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtP\n" +
+ "cmFuZ2UgUm9vdDAeFw0xNDA1MDgxODI3MTRaFw0xNjA0MjcxODI3MTRaMBYxFDAS\n" +
+ "BgNVBAMTC09yYW5nZSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
+ "AQEAknfh3lKWVQxl2w/eRSza6+0+zeTtMkQFCEFpGJsisDK5XOU1HcJMP4QUteWM\n" +
+ "tg1SGO9bjpiKqJ7JVRnzOC3q6erBj2LmwpWW7p12tg6ENOQfsy6tRZLlQWMFGBkT\n" +
+ "Tatsg9HwKpr6itvk2wERh18AcIqSjtN94kGTljP1qf9gMd31G5d/HyG6EwMZukJm\n" +
+ "4/EFpzh3fVwr/EN1WzrYlsBOA+3Tru/k0p8wP6Bomrx1vAEUqRWSLWxsa7we76jL\n" +
+ "H/kMkyWENyjd/A2c5CwscoG+KSx9cifYnSqrUAmpY88KKuZG2Y1+9ablUEwXW4Gh\n" +
+ "RYLCGIgxp6NrtFG/eUcDBgtEwQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
+ "A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUPvRE9j3GPGcc3dNGrVrQoWDb9RMwDQYJ\n" +
+ "KoZIhvcNAQELBQADggEBADjPTuHXMbXc2Kn+i+dnBiQCWcjzaox4KWV4MNO7vkvi\n" +
+ "ADBk5/vVM+HTzwL+gZNwE96/agcOzwHZ8/Dz4aA3zzmAmQB4bt+pUa0iyGvX6+F5\n" +
+ "IH1kd4kBnSBMc76fRcEJnebhrXFgTlps5VELMVcEOn3Q4nt+gVfXmPStTkFjM1/4\n" +
+ "fQggsScLpE2TVkk3oS52NIzG/vyBIt3W0gX20hlQobA2vziJDx8xy/+qe5igyp5F\n" +
+ "WScwSQE8qeuoDJYJRxpxZ7kq8NiHxfGPw5Hjn518zBz2VKJOsJYmckAMFIdS//kM\n" +
+ "NUysH6gFksW/PHy75QkbtD4OFtb2zp01ERuf5OoJavs=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias yellow-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String YELLOW_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC7DCCAdSgAwIBAgIEfLA7azANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtZ\n" +
+ "ZWxsb3cgUm9vdDAeFw0xNDA1MDgxODI3MTZaFw0xNjA0MjcxODI3MTZaMBYxFDAS\n" +
+ "BgNVBAMTC1llbGxvdyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
+ "AQEAgLMOpzIR8LyALox2AvItM42VjFDp1EyHU0faJZCpwVbQPJ2f+8Gr7XuTv1uZ\n" +
+ "Ixe6JjcyGNHZG0NuFmMFbK2Y7cg3PdQBjcm+x68iSWzyEUuhytSKSLUt6i+xAg+9\n" +
+ "h9UGXlBNarVjWq63tPt8HK/YHxt9Ber0iriF3SEUsgMOzRrLw1mw35SmgidRp19y\n" +
+ "yNXlgQfylEAVtYD9IYhxTm/j9NL3rTgqXiKjvNAVjAUrD2I2nK5WQqO2hmQr9x/9\n" +
+ "EqgIK03dw0ps7/XL+gpd+zwGZqDr9pbFnko4badiE4AJqPlm6u/Tdc0dSkLu/oXq\n" +
+ "Ex4iqtM0TP5+oeDXGZv6EprzKQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
+ "A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUp0/g/PqT9jDVGKSsBh997Kg9KBIwDQYJ\n" +
+ "KoZIhvcNAQELBQADggEBAG4vr5UkWUEA9qNU6wBNg5yySS6KhNVyBDMReyX6qsz6\n" +
+ "yUIeGU/UC8LwdB+Tl3S+FZyUlsx+gwh1n0ei7eOV58cCeWmZ3sUWvLTwsY9iBNyt\n" +
+ "HkItOCDO+JEjgo7OhEBlzYkD4MkwAjaYnT4tU41BSnlTR4+jK77f/b1oMVzDv2tL\n" +
+ "+JAiem04TEoGO97uZ94l6gKwwGO35uejGEUPhFPLtxo+yR2QQqX0S8smG88pCQ82\n" +
+ "6XscdvRTjSfkuI3LiqNORS0fGZ3ykxDCkDLZZ1mSg1h2/3xOUEbFQ0phhMrnr2Rl\n" +
+ "mWNGYCam2jns4qmMnbzPIwQduvRkz1O1lusbLNFpcdY=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias green-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String GREEN_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC6jCCAdKgAwIBAgIENWwt8TANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwpH\n" +
+ "cmVlbiBSb290MB4XDTE0MDUwODE4MjcxOFoXDTE2MDQyNzE4MjcxOFowFTETMBEG\n" +
+ "A1UEAxMKR3JlZW4gUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" +
+ "AKHvh3FRJghpNtLqIk5UDSGkcA3rtEygRsFa51ucwNQ1x4SXOVnsNHZZW66RuKOn\n" +
+ "6wjS8+xctNnMIy1XNXa2nlAswQVe75xX0jfGMB4w0MlaqLK9HrU479WrWmrBjz/P\n" +
+ "vvHY8x1CIfTMjOtLO9yxbYQrXsEz6JKxAz6/+ErbkvUjBynezZdJNXgURVz5HmFx\n" +
+ "e/SUbSALX+Kx+/+hXggaQdwlrpoDl/Nqm6S1iR5xtdZB1CEauIwFDSWOG1TjR1Hp\n" +
+ "8OSGb0AhwwM5FzIxevwgKke6WHFKf5p4lcpiQZqmhgqyFbARUfUjYX3WzQTmrJ/q\n" +
+ "87OMIJasvmkNEYkNbrSmI9kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\n" +
+ "HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHG7s0KrfUsnl/3/UGYbCrdXTZtcMA0GCSqG\n" +
+ "SIb3DQEBCwUAA4IBAQBUe18kbDHeqsxM17ahr30hvjdxMkYLkLcGoSOlSI8sFBu6\n" +
+ "jG4JZvvFXw2ZqMQTLSALvsSZ9wkfS8tDCNEHRvCB6aqW4tjp9ddkfe+56WINzTv6\n" +
+ "Ibqwg2JGsOzWttpUA5OPLfODbMqOYzT101toF3sKteX0yyiF/SfMTXR5Jv0uo/dp\n" +
+ "sFeJtWFfhy/Q0jiEAz945BBoSHCIF7Fs4vcls7gNJxfap66W8lamjzFyMDsnlz+b\n" +
+ "sSLWZmvwM+R/RfL1Q3LPCcZWLiP9WSAO4hUoju1E9WeWHHjlPwJJ/iRECL9cnHRt\n" +
+ "Z7/kOlNLGxKvpEbY4xqH0zE07UWPCCBlemk/6jlO\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias blue-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String BLUE_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC6DCCAdCgAwIBAgIEX3XC9zANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlC\n" +
+ "bHVlIFJvb3QwHhcNMTQwNTA4MTgyNzIwWhcNMTYwNDI3MTgyNzIwWjAUMRIwEAYD\n" +
+ "VQQDEwlCbHVlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCY\n" +
+ "pc4r8mfgGGeiYlvHSrEIlp6djHS489P7eqoQRqmS5U/I0lLGNu7QZsY240a9a84S\n" +
+ "2t6VpZID5juK8AF2v4psShsqgfj+RjVev8FJE/D5j8B4QZ+HmbLJIl80f+YOPaLG\n" +
+ "HX1eNktLx3S2gkIKHVdn7q3o4DdXBO+YdaBA56lL4l+dWFtto65+5Sjy4yfyvWJz\n" +
+ "MylXjP/wiC0T3C0NcQX3AIu2tjY2u9lrVbem2rIi0kPFIoYvstKiqXMc/sRf2CfO\n" +
+ "it5k629HsbvdACVRZFxU3Lz25oP4HGz1kq1cpiIS+W3gQQmCKu9XqzpNRThG0SEL\n" +
+ "jaH9E4pZDnZiRCr+Mxm1AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P\n" +
+ "AQH/BAQDAgEGMB0GA1UdDgQWBBS5ebHO4iamr3n0+KtxJYAitg9QcTANBgkqhkiG\n" +
+ "9w0BAQsFAAOCAQEAGjh/UzERw+skEK4zM1zfL1RsZnUlFu7mTbOBGgccewHWC+MM\n" +
+ "AQbLo0m4NTEbRoW6fFcAESgE61ZZBLkmhcjXBunNJq6O1hMDpppYA806eG6GcZmK\n" +
+ "rLOZljxx4D1YC17vMEVsMF9XgIj5dLWceJjotZzNxe+miwXLEkxaGIMe/n2VtCoR\n" +
+ "BSrGrAeCsFZ7G2NRWUxUEVJrhLnVZJDt6fHd43BCVnV191PyF5TuB08nijyCoJoS\n" +
+ "/WJkYHxx3vUUfDE5E4UE+iY80BHnAPxiNKwO3XsWjeqbJ8PS+5AvShdG5QdFBhKe\n" +
+ "/tJTZLs0UEubKdaWd5ZgsXP3913bJm/mBo+eJA==\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias indigo-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String INDIGO_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC7DCCAdSgAwIBAgIESdUmczANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtJ\n" +
+ "bmRpZ28gUm9vdDAeFw0xNDA1MDgxODI3MjFaFw0xNjA0MjcxODI3MjFaMBYxFDAS\n" +
+ "BgNVBAMTC0luZGlnbyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
+ "AQEA2opDa3wDxQrX6GjffbDGtXyvKw0/vhZTeus4cxdZIYF3CWkGbeurDIhPUKRO\n" +
+ "Azact0SECJuMXVxkB5vQKBmHRByNh8ugFfzXWi7/rteXTNjLNKnzVr8plbMvzwM7\n" +
+ "zjIgm0mTRbwv6gZmUbgfmO9FCB8zlV4hYbYbFTJn7GlVPpqZkZNNMTyJkOPxMzXD\n" +
+ "yaToxyR0uY3cMv9pmks3GxU2XoGTFuqptbL9XFSpwrm5BRfWuJDP1t8moLHQZ5iu\n" +
+ "tkCz6MVYcrhTlV/UY0PSGcmUvAu83sNBfIGjme0RIiERy02gLJnSZ/M9r1ukCUJE\n" +
+ "Z6At+9TsNCYNPgW5vcjNLO63/wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
+ "A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU8eJ+kMmanqF+IcAQTjxSMv+VR7kwDQYJ\n" +
+ "KoZIhvcNAQELBQADggEBAGRB4C5qYXXJJnEGzJZf8S974SaeLmEvHlmaQPOuCxME\n" +
+ "tCeBoWQqD9qTDVy39izzjA4uE/fCMVCkyr1QL+588dtMI8jJfbzx+TxnlDWlJcMM\n" +
+ "5J8EJPNEy7eR6qqpFncvjmbXzf16XfzL9qSXwHYCvpo25nEEH801y2njJE2gGzZT\n" +
+ "raYRFuwzsZLiSV5TyO5MbRXiZLebDXfE/wXukor87pjGpx1/kevjH/g66OpaIBzu\n" +
+ "IfLePEOekTKXHF1zL89uYHwpUVCzfhO5hNQlSsTCuBkBifSTYm4ixoATi/C2kqze\n" +
+ "WHUK179u1+7v6xRONLQxe1JDftdlHHVg7DSeTY59euo=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ // keytool <COMMON-OPTS> -alias violet-ta-key -ext bc:critical=ca:true
+ // -ext ku:critical=keyCertSign,cRLSign
+ private static final String VIOLET_ROOT =
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIC7DCCAdSgAwIBAgIEXwgmLDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtW\n" +
+ "aW9sZXQgUm9vdDAeFw0xNDA1MDgxODI3MjNaFw0xNjA0MjcxODI3MjNaMBYxFDAS\n" +
+ "BgNVBAMTC1Zpb2xldCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
+ "AQEAvElr11MoHUNfnx6nBy4NSXFFzA68g57ohTt+sspEn3wzuPErugMypReHLhtH\n" +
+ "CTrs45T0KU8P4Gi5QHnsBs8yC3QCHNPugo2A4zP+ciTqp+1gRNxQ9wzKSzCoseJg\n" +
+ "RMQflGFzuEe7gWwYfrsDfD1sJCubfBtBUFCSYf1ZSZbdEMrc3RPtC35Ge+3XRxFZ\n" +
+ "KdzH8l7gQTtgAmRQmK+i4jwzSHV/Iu2yiRdhjqIZUezf3pYFfJlmfAY5ruQBKkc+\n" +
+ "KRgdmKanpLbmAo/+3q6snt8V09CoQ+6Cz+P9P0yOxiiwr/6jg9WtHA3ujvtf3dGj\n" +
+ "EeB8SmzXHFZErQIn+QbrJ3/izwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
+ "A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUlxlHI8JTrX86r4ezgDLICo6rApowDQYJ\n" +
+ "KoZIhvcNAQELBQADggEBALnfWZx6LC9vDMI8vBH/vbyk2ZQtiQFRt3kbwKtlrw65\n" +
+ "/bqeGXcQ1Lh9gDzp+uGYSfuDNvtJO6xmfny0W5j5WQVJxs+iWyoJfYxeG0kBZut+\n" +
+ "hbxJPlehBwhveuznZbeTN3RXeBi8MSxnBD/WC1e2rnfnrxoLfYZ1BSUP8LaIzC32\n" +
+ "vd6WCgnJRXputlGvnOoAT1WduWonhd7lCoqbtZksw7o0smuAn2mSnod8j948rzzt\n" +
+ "uDQVao/3tCyoX4NSom2hWooPltk5FTdF9cZKfbaU5TPV+U30RN7/UWY/dCvL1fMq\n" +
+ "1kvtJbkh+UMHvszHOxlgjk+3J76Wx0PFjNaIfbj2bmk=\n" +
+ "-----END CERTIFICATE-----\n";
+
+ public static final String[] rootArrayPEM = { RED_ROOT, ORANGE_ROOT,
+ YELLOW_ROOT, GREEN_ROOT, BLUE_ROOT, INDIGO_ROOT, VIOLET_ROOT, ROOT };
+
+ /**
+ * @param args {cacerts keystore, cert chain}
+ */
+ public static void main(String[] args) throws Exception {
+ Set<X509Certificate> trustedCertSet = new HashSet<>();
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+ for (String pemCert : rootArrayPEM) {
+ trustedCertSet.add(makeCertFromPEM(pemCert));
+ }
+
+ testCtorByCollection(trustedCertSet);
+
+ testCtorByPKIXBuilderParams(trustedCertSet);
+ }
+
+ public static X509Certificate makeCertFromPEM(String pemCert)
+ throws CertificateException {
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ ByteArrayInputStream is = new ByteArrayInputStream(pemCert.getBytes());
+
+ return ((X509Certificate)cf.generateCertificate(is));
+ }
+
+ public static void showValidatedChain(Validator v, X509Certificate[] chain,
+ Set<X509Certificate> otherCerts) throws Exception {
+ for (X509Certificate cert : v.validate(chain, otherCerts)) {
+ System.out.println("\tSubj: " + cert.getSubjectX500Principal() +
+ " Iss: " + cert.getIssuerX500Principal());
+ }
+ }
+
+ public static Set<TrustAnchor> makeTrustAnchorSet(
+ Set<X509Certificate> certSet) throws Exception {
+ Set<TrustAnchor> anchors = new HashSet<>();
+
+ for (Certificate cert : certSet) {
+ anchors.add(new TrustAnchor((X509Certificate)cert, null));
+ }
+
+ return anchors;
+ }
+
+ public static void testCtorByCollection(Set<X509Certificate> certSet)
+ throws Exception {
+ Validator valOK;
+ Validator valNoGood;
+ X509Certificate[] chain = new X509Certificate[1];
+ Set<X509Certificate> intermeds = new HashSet<>();
+
+ // Case 1: Make a PKIXValidator with valid arguments
+ // Expected result: Well-formed PKIXValidator
+ System.out.println("Constructor test 1: Valid inputs");
+ valOK = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, certSet);
+
+ // Convert our user cert from PEM format, then do the same for
+ // its intermediate signer and add that as a helper for path building
+ chain[0] = makeCertFromPEM(USER);
+ intermeds.add(makeCertFromPEM(INTERMED));
+ PKIXBuilderParameters pbParams = ((PKIXValidator)valOK).getParameters();
+ pbParams.setDate(new Date(1426399200000L)); // 03-15-2014 6:00:00 GMT
+
+ // See if we can build a trusted path to a root to make sure
+ // everything still works as expected.
+ showValidatedChain(valOK, chain, intermeds);
+
+ // Case 2: Make a PKIXValidator with null anchor list.
+ // Expected result: throw NullPointerException
+ System.out.println("Constructor test 2: null trustedCerts");
+ try {
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, (Collection<X509Certificate>)null);
+ // Throw something non Runtime-related to indicate we shouldn't
+ // have succeeded on construction.
+ throw new IOException(
+ "Constructor did not throw NullPointerException");
+ } catch (NullPointerException npe) {
+ System.out.println("\tCaught Exception (" + npe.toString() +
+ ") [PASS])");
+ }
+
+ // Case 3: Try putting a null reference into a populated TA List
+ // Expected result: throw NullPointerException
+ System.out.println("Constructor test 3: null in trustedCerts list");
+ try {
+ certSet.add(null);
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, certSet);
+ // Throw something non Runtime-related to indicate we shouldn't
+ // have succeeded on construction.
+ throw new IOException("Constructor did not throw RuntimeException");
+ } catch (NullPointerException npe) {
+ System.out.println("\tCaught Exception (" + npe.toString() +
+ ") [PASS])");
+ } finally {
+ // Return the certSet list to its original state
+ certSet.remove(null);
+ }
+
+ // Case 4: Provide an empty List as the X509Certificate collection
+ // Expected result: throw RuntimeException
+ System.out.println("Constructor test 4: empty trustedCerts list");
+ try {
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, new ArrayList<X509Certificate>());
+ // Throw something non Runtime-related to indicate we shouldn't
+ // have succeeded on construction.
+ throw new IOException("Constructor did not throw RuntimeException");
+ } catch (RuntimeException re) {
+ System.out.println("\tCaught RuntimeException (" + re.toString() +
+ ") [PASS])");
+ }
+
+ // Case 5: Provide an invalid variant
+ // Expected result: successful construction.
+ // Note: subsequent calls to validate may throw CertificateException
+ // if the submitted chain has a length > 1.
+ System.out.println("Constructor test 5: Unsupported variant");
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
+ "BogusVariant", certSet);
+ System.out.println("\tSuccessful construction [PASS]");
+
+ // Case 6: Provide a null variant
+ // Expected result: throw NullPointerException
+ System.out.println("Constructor test 6: null variant");
+ try {
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX, null,
+ certSet);
+ // Throw something non Runtime-related to indicate we shouldn't
+ // have succeeded on construction.
+ throw new IOException(
+ "Constructor did not throw NullPointerException");
+ } catch (NullPointerException npe) {
+ System.out.println("\tCaught RuntimeException (" + npe.toString() +
+ ") [PASS])");
+ }
+ }
+
+ public static void testCtorByPKIXBuilderParams(Set<X509Certificate> certSet)
+ throws Exception {
+ Set<TrustAnchor> taSet = makeTrustAnchorSet(certSet);
+ Validator valOK;
+ Validator valNoGood;
+ X509Certificate[] chain = new X509Certificate[1];
+ Set<X509Certificate> intermeds = new HashSet<>();
+
+ // Case 7: Make a PKIXValidator with valid arguments
+ // Expected result: Well-formed PKIXValidator object
+ System.out.println("Constructor test 7: Valid inputs");
+
+ // Set up the PKIXBuilderParameters
+ X509CertSelector sel = new X509CertSelector();
+ sel.setSubject("CN=User");
+ PKIXBuilderParameters pbParams = new PKIXBuilderParameters(taSet, sel);
+ pbParams.setRevocationEnabled(false);
+ pbParams.setDate(new Date(1426399200000L)); // 03-15-2014 6:00:00 GMT
+
+ valOK = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, pbParams);
+
+ // Convert our user cert from PEM format, then do the same for
+ // its intermediate signer and add that as a helper for path building
+ chain[0] = makeCertFromPEM(USER);
+ intermeds.add(makeCertFromPEM(INTERMED));
+
+ showValidatedChain(valOK, chain, intermeds);
+
+ // Case 8: Make a PKIXValidator but provide a null PKIXBuilderParameters
+ // Expected result: throw NullPointerException
+ System.out.println("Constructor test 8: null params");
+ try {
+ valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
+ Validator.VAR_GENERIC, (PKIXBuilderParameters)null);
+ // Throw something non Runtime-related to indicate we shouldn't
+ // have succeeded on construction.
+ throw new IOException(
+ "Constructor did not throw NullPointerException");
+ } catch (NullPointerException npe) {
+ System.out.println("\tCaught RuntimeException (" + npe.toString() +
+ ") [PASS])");
+ }
+ }
+}
--- a/jdk/test/sun/tools/jcmd/TestJcmdDefaults.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/tools/jcmd/TestJcmdDefaults.java Fri May 16 14:35:37 2014 -0700
@@ -39,6 +39,7 @@
* @test
* @bug 7104647
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main TestJcmdDefaults
*/
public class TestJcmdDefaults {
--- a/jdk/test/sun/tools/jcmd/TestJcmdSanity.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/tools/jcmd/TestJcmdSanity.java Fri May 16 14:35:37 2014 -0700
@@ -40,6 +40,7 @@
* @test
* @bug 7104647 7154822
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main TestJcmdSanity
*/
public class TestJcmdSanity {
--- a/jdk/test/sun/tools/jmap/BasicJMapTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/tools/jmap/BasicJMapTest.java Fri May 16 14:35:37 2014 -0700
@@ -34,6 +34,7 @@
* @bug 6321286
* @summary Unit test for jmap utility
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main BasicJMapTest
*/
public class BasicJMapTest {
--- a/jdk/test/sun/tools/jstack/BasicJStackTest.java Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/tools/jstack/BasicJStackTest.java Fri May 16 14:35:37 2014 -0700
@@ -32,6 +32,7 @@
* @bug 6260070
* @summary Unit test for jstack utility
* @library /lib/testlibrary
+ * @build jdk.testlibrary.*
* @run main BasicJStackTest
*/
public class BasicJStackTest {
--- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION Fri May 16 14:35:37 2014 -0700
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2014b
+tzdata2014c
--- a/jdk/test/sun/util/calendar/zi/tzdata/africa Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/util/calendar/zi/tzdata/africa Fri May 16 14:35:37 2014 -0700
@@ -358,11 +358,54 @@
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
# </a>
+# From Ahmad El-Dardiry (2014-05-07):
+# Egypt is to change back to Daylight system on May 15
+# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
+
+# From Gunther Vermier (2015-05-13):
+# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
+
+# From Paul Eggert (2014-05-13):
+# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
+# the change is because of blackouts in Cairo, even though Ahram Online (cited
+# above) says DST had no affect on electricity consumption. The AP story says
+# DST will not be observed during Ramadan. There is no information about when
+# DST will end. See:
+# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
+#
+# For now, guess that later transitions will use 2010's rules, and that
+# Egypt will agree with Morocco (see below) about the date Ramadan starts and
+# ends, though (unlike Morocco) it will switch at 00:00 standard time. In
+# Egypt the spring-forward transitions are removed for 2020-2022, when the
+# guessed spring-forward date falls during the estimated Ramadan, and all
+# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
+# outside the guessed daylight-saving time. Ramadan intrudes on the guessed
+# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
+
Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
Rule Egypt 2009 only - Aug 20 23:00s 0 -
Rule Egypt 2010 only - Aug 11 0:00 0 -
Rule Egypt 2010 only - Sep 10 0:00 1:00 S
Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
+Rule Egypt 2014 only - May 15 24:00 1:00 S
+Rule Egypt 2014 only - Jun 29 0:00s 0 -
+Rule Egypt 2014 only - Jul 29 0:00s 1:00 S
+Rule Egypt 2014 max - Sep lastThu 23:00s 0 -
+Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
+Rule Egypt 2015 only - Jun 18 0:00s 0 -
+Rule Egypt 2015 only - Jul 18 0:00s 1:00 S
+Rule Egypt 2016 only - Jun 7 0:00s 0 -
+Rule Egypt 2016 only - Jul 7 0:00s 1:00 S
+Rule Egypt 2017 only - May 27 0:00s 0 -
+Rule Egypt 2017 only - Jun 26 0:00s 1:00 S
+Rule Egypt 2018 only - May 16 0:00s 0 -
+Rule Egypt 2018 only - Jun 15 0:00s 1:00 S
+Rule Egypt 2019 only - May 6 0:00s 0 -
+Rule Egypt 2019 only - Jun 5 0:00s 1:00 S
+Rule Egypt 2020 only - May 24 0:00s 1:00 S
+Rule Egypt 2021 only - May 13 0:00s 1:00 S
+Rule Egypt 2022 only - May 3 0:00s 1:00 S
+Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
--- a/jdk/test/sun/util/calendar/zi/tzdata/asia Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/util/calendar/zi/tzdata/asia Fri May 16 14:35:37 2014 -0700
@@ -1370,22 +1370,6 @@
# "Jordan will switch to winter time on Friday, October 27".
#
-# From Phil Pizzey (2009-04-02):
-# ...I think I may have spotted an error in the timezone data for
-# Jordan.
-# The current (2009d) asia file shows Jordan going to daylight
-# saving
-# time on the last Thursday in March.
-#
-# Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S
-#
-# However timeanddate.com, which I usually find reliable, shows Jordan
-# going to daylight saving time on the last Friday in March since 2002.
-# Please see
-# <a href="http://www.timeanddate.com/worldclock/timezone.html?n=11">
-# http://www.timeanddate.com/worldclock/timezone.html?n=11
-# </a>
-
# From Steffen Thorsen (2009-04-02):
# This single one might be good enough, (2009-03-24, Arabic):
# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279">
--- a/jdk/test/sun/util/calendar/zi/tzdata/europe Thu May 15 10:37:52 2014 -0700
+++ b/jdk/test/sun/util/calendar/zi/tzdata/europe Fri May 16 14:35:37 2014 -0700
@@ -2989,6 +2989,10 @@
# From Alexander Krivenyshev (2014-03-17):
# time change at 2:00 (2am) on March 30, 2014
# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
2:00 EU EE%sT 2014 Mar 30 2:00
4:00 - MSK
--- a/langtools/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/langtools/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -255,3 +255,4 @@
7736a820af6f15cef9a1499f122e40abc83b2fbd jdk9-b10
f04fccfbd880c819affc3ef33e0083aab9556409 jdk9-b11
72efbe612e494f98b9c3ede1b4a3d02304e1e9cc jdk9-b12
+2c8bb81b5d48161019218c7604fa88c67edc6105 jdk9-b13
--- a/langtools/make/netbeans/langtools/nbproject/project.properties Thu May 15 10:37:52 2014 -0700
+++ b/langtools/make/netbeans/langtools/nbproject/project.properties Fri May 16 14:35:37 2014 -0700
@@ -1,3 +1,34 @@
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# - Neither the name of Oracle nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Fri May 16 14:35:37 2014 -0700
@@ -878,8 +878,9 @@
*/
static abstract class DocComparator<T extends Doc> implements Comparator<Doc> {
/**
- * compares two parameter arrays by first comparing the length of the arrays, and
- * then each Type of the parameter in the array.
+ * compares two parameter arrays by comparing each Type of the parameter in the array,
+ * as possible, if the matched strings are identical, and have mismatched array lengths
+ * then compare the lengths.
* @param params1 the first parameter array.
* @param params2 the first parameter array.
* @return a negative integer, zero, or a positive integer as the first
@@ -889,17 +890,14 @@
if (params1.length == 0 && params2.length == 0) {
return 0;
}
- int result = Integer.compare(params1.length, params2.length);
- if (result != 0) {
- return result;
- }
- for (int i = 0; i < params1.length; i++) {
- result = compareStrings(params1[i].typeName(), params2[i].typeName());
+ // try to compare as many as possible
+ for (int i = 0; i < params1.length && i < params2.length; i++) {
+ int result = compareStrings(params1[i].typeName(), params2[i].typeName());
if (result != 0) {
return result;
}
}
- return 0;
+ return Integer.compare(params1.length, params2.length);
}
/**
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Attribute.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Attribute.java Fri May 16 14:35:37 2014 -0700
@@ -118,7 +118,8 @@
: types.erasure(type);
return new Type.ClassType(types.syms.classType.getEnclosingType(),
List.of(arg),
- types.syms.classType.tsym);
+ types.syms.classType.tsym,
+ Type.noAnnotations);
}
public String toString() {
return classType + ".class";
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Printer.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Printer.java Fri May 16 14:35:37 2014 -0700
@@ -28,7 +28,6 @@
import java.util.Locale;
import com.sun.tools.javac.api.Messages;
-import com.sun.tools.javac.code.Type.AnnotatedType;
import com.sun.tools.javac.code.Type.ArrayType;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.*;
@@ -150,14 +149,16 @@
@Override
public String visitCapturedType(CapturedType t, Locale locale) {
if (seenCaptured.contains(t))
- return localize(locale, "compiler.misc.type.captureof.1",
- capturedVarId(t, locale));
+ return printAnnotations(t) +
+ localize(locale, "compiler.misc.type.captureof.1",
+ capturedVarId(t, locale));
else {
try {
seenCaptured = seenCaptured.prepend(t);
- return localize(locale, "compiler.misc.type.captureof",
- capturedVarId(t, locale),
- visit(t.wildcard, locale));
+ return printAnnotations(t) +
+ localize(locale, "compiler.misc.type.captureof",
+ capturedVarId(t, locale),
+ visit(t.wildcard, locale));
}
finally {
seenCaptured = seenCaptured.tail;
@@ -167,15 +168,16 @@
@Override
public String visitForAll(ForAll t, Locale locale) {
- return "<" + visitTypes(t.tvars, locale) + ">" + visit(t.qtype, locale);
+ return printAnnotations(t) + "<" + visitTypes(t.tvars, locale) +
+ ">" + visit(t.qtype, locale);
}
@Override
public String visitUndetVar(UndetVar t, Locale locale) {
if (t.inst != null) {
- return visit(t.inst, locale);
+ return printAnnotations(t) + visit(t.inst, locale);
} else {
- return visit(t.qtype, locale) + "?";
+ return printAnnotations(t) + visit(t.qtype, locale) + "?";
}
}
@@ -187,25 +189,34 @@
return res.toString();
}
- void printBaseElementType(Type t, StringBuilder sb, Locale locale) {
+ private String printAnnotations(Type t) {
+ return printAnnotations(t, false);
+ }
+
+ private String printAnnotations(Type t, boolean prefix) {
+ StringBuilder sb = new StringBuilder();
+ List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
+ if (!annos.isEmpty()) {
+ if (prefix) sb.append(' ');
+ sb.append(annos);
+ sb.append(' ');
+ }
+ return sb.toString();
+ }
+
+ private void printBaseElementType(Type t, StringBuilder sb, Locale locale) {
Type arrel = t;
while (arrel.hasTag(TypeTag.ARRAY)) {
- arrel = arrel.unannotatedType();
arrel = ((ArrayType) arrel).elemtype;
}
sb.append(visit(arrel, locale));
}
- void printBrackets(Type t, StringBuilder sb, Locale locale) {
+ private void printBrackets(Type t, StringBuilder sb, Locale locale) {
Type arrel = t;
while (arrel.hasTag(TypeTag.ARRAY)) {
- if (arrel.isAnnotated()) {
- sb.append(' ');
- sb.append(arrel.getAnnotationMirrors());
- sb.append(' ');
- }
+ sb.append(printAnnotations(arrel, true));
sb.append("[]");
- arrel = arrel.unannotatedType();
arrel = ((ArrayType) arrel).elemtype;
}
}
@@ -216,8 +227,10 @@
if (t.getEnclosingType().hasTag(CLASS) && t.tsym.owner.kind == Kinds.TYP) {
buf.append(visit(t.getEnclosingType(), locale));
buf.append('.');
+ buf.append(printAnnotations(t));
buf.append(className(t, false, locale));
} else {
+ buf.append(printAnnotations(t));
buf.append(className(t, true, locale));
}
if (t.getTypeArguments().nonEmpty()) {
@@ -230,7 +243,8 @@
@Override
public String visitMethodType(MethodType t, Locale locale) {
- return "(" + printMethodArgs(t.argtypes, false, locale) + ")" + visit(t.restype, locale);
+ return "(" + printMethodArgs(t.argtypes, false, locale) + ")" +
+ visit(t.restype, locale);
}
@Override
@@ -243,6 +257,7 @@
StringBuilder s = new StringBuilder();
s.append(t.kind);
if (t.kind != UNBOUND) {
+ s.append(printAnnotations(t));
s.append(visit(t.type, locale));
}
return s.toString();
@@ -258,28 +273,6 @@
return visitType(t, locale);
}
- @Override
- public String visitAnnotatedType(AnnotatedType t, Locale locale) {
- if (t.getAnnotationMirrors().nonEmpty()) {
- if (t.unannotatedType().hasTag(TypeTag.ARRAY)) {
- StringBuilder res = new StringBuilder();
- printBaseElementType(t, res, locale);
- printBrackets(t, res, locale);
- return res.toString();
- } else if (t.unannotatedType().hasTag(TypeTag.CLASS) &&
- t.unannotatedType().getEnclosingType() != Type.noType) {
- return visit(t.unannotatedType().getEnclosingType(), locale) +
- ". " +
- t.getAnnotationMirrors() +
- " " + className((ClassType)t.unannotatedType(), false, locale);
- } else {
- return t.getAnnotationMirrors() + " " + visit(t.unannotatedType(), locale);
- }
- } else {
- return visit(t.unannotatedType(), locale);
- }
- }
-
public String visitType(Type t, Locale locale) {
String s = (t.tsym == null || t.tsym.name == null)
? localize(locale, "compiler.misc.type.none")
@@ -345,8 +338,8 @@
args = args.tail;
buf.append(',');
}
- if (args.head.unannotatedType().hasTag(TypeTag.ARRAY)) {
- buf.append(visit(((ArrayType) args.head.unannotatedType()).elemtype, locale));
+ if (args.head.hasTag(TypeTag.ARRAY)) {
+ buf.append(visit(((ArrayType) args.head).elemtype, locale));
if (args.head.getAnnotationMirrors().nonEmpty()) {
buf.append(' ');
buf.append(args.head.getAnnotationMirrors());
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java Fri May 16 14:35:37 2014 -0700
@@ -234,7 +234,7 @@
public boolean allowGraphInference() {
return compareTo(JDK1_8) >= 0;
}
- public boolean allowStructuralMostSpecific() {
+ public boolean allowFunctionalInterfaceMostSpecific() {
return compareTo(JDK1_8) >= 0;
}
public static SourceVersion toSourceVersion(Source source) {
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Fri May 16 14:35:37 2014 -0700
@@ -956,7 +956,7 @@
this(
flags,
name,
- new ClassType(Type.noType, null, null),
+ new ClassType(Type.noType, null, null, Type.noAnnotations),
owner);
this.type.tsym = this;
}
@@ -992,7 +992,8 @@
public Type erasure(Types types) {
if (erasure_field == null)
erasure_field = new ClassType(types.erasure(type.getEnclosingType()),
- List.<Type>nil(), this);
+ List.<Type>nil(), this,
+ type.getAnnotationMirrors());
return erasure_field;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Fri May 16 14:35:37 2014 -0700
@@ -80,6 +80,9 @@
/** Constant type: special type to be used for marking stuck trees. */
public static final JCNoType stuckType = new JCNoType();
+ public static final List<Attribute.TypeCompound> noAnnotations =
+ List.nil();
+
/** If this switch is turned on, the names of type variables
* and anonymous classes are printed with hashcodes appended.
*/
@@ -89,6 +92,10 @@
*/
public TypeSymbol tsym;
+ /** The type annotations on this type.
+ */
+ protected final List<Attribute.TypeCompound> annos;
+
/**
* Checks if the current type tag is equal to the given tag.
* @return true if tag is equal to the current type tag.
@@ -173,10 +180,15 @@
public <R,S> R accept(Type.Visitor<R,S> v, S s) { return v.visitType(this, s); }
- /** Define a type given its tag and type symbol
+ /** Define a type given its tag, type symbol, and type annotations
*/
- public Type(TypeSymbol tsym) {
+ public Type(TypeSymbol tsym, List<Attribute.TypeCompound> annos) {
+ if(annos == null) {
+ Assert.error("Attempting to create type " + tsym + " with null type annotations");
+ }
+
this.tsym = tsym;
+ this.annos = annos;
}
/** An abstract class for mappings from types to types
@@ -225,25 +237,15 @@
return this;
}
- public Type annotatedType(List<Attribute.TypeCompound> annos) {
- return new AnnotatedType(annos, this);
- }
+ public abstract Type annotatedType(List<Attribute.TypeCompound> annos);
public boolean isAnnotated() {
- return false;
- }
-
- /**
- * If this is an annotated type, return the underlying type.
- * Otherwise, return the type itself.
- */
- public Type unannotatedType() {
- return this;
+ return !annos.isEmpty();
}
@Override
public List<Attribute.TypeCompound> getAnnotationMirrors() {
- return List.nil();
+ return annos;
}
@@ -272,16 +274,35 @@
return ts;
}
+ protected void appendAnnotationsString(StringBuilder sb,
+ boolean prefix) {
+ if (isAnnotated()) {
+ if (prefix) {
+ sb.append(" ");
+ }
+ sb.append(annos);
+ sb.append(" ");
+ }
+ }
+
+ protected void appendAnnotationsString(StringBuilder sb) {
+ appendAnnotationsString(sb, false);
+ }
+
/** The Java source which this type represents.
*/
public String toString() {
- String s = (tsym == null || tsym.name == null)
- ? "<none>"
- : tsym.name.toString();
+ StringBuilder sb = new StringBuilder();
+ appendAnnotationsString(sb);
+ if (tsym == null || tsym.name == null) {
+ sb.append("<none>");
+ } else {
+ sb.append(tsym.name);
+ }
if (moreInfo && hasTag(TYPEVAR)) {
- s = s + hashCode();
+ sb.append(hashCode());
}
- return s;
+ return sb.toString();
}
/**
@@ -333,8 +354,8 @@
args = args.tail;
buf.append(',');
}
- if (args.head.unannotatedType().hasTag(ARRAY)) {
- buf.append(((ArrayType)args.head.unannotatedType()).elemtype);
+ if (args.head.hasTag(ARRAY)) {
+ buf.append(((ArrayType)args.head).elemtype);
if (args.head.getAnnotationMirrors().nonEmpty()) {
buf.append(args.head.getAnnotationMirrors());
}
@@ -486,12 +507,22 @@
TypeTag tag;
public JCPrimitiveType(TypeTag tag, TypeSymbol tsym) {
- super(tsym);
+ this(tag, tsym, noAnnotations);
+ }
+
+ public JCPrimitiveType(TypeTag tag, TypeSymbol tsym,
+ List<Attribute.TypeCompound> annos) {
+ super(tsym, annos);
this.tag = tag;
Assert.check(tag.isPrimitive);
}
@Override
+ public Type annotatedType(List<Attribute.TypeCompound> annos) {
+ return new JCPrimitiveType(tag, tsym, annos);
+ }
+
+ @Override
public boolean isNumeric() {
return tag != BOOLEAN;
}
@@ -517,7 +548,7 @@
@Override
public Type constType(Object constValue) {
final Object value = constValue;
- return new JCPrimitiveType(tag, tsym) {
+ return new JCPrimitiveType(tag, tsym, annos) {
@Override
public Object constValue() {
return value;
@@ -601,17 +632,35 @@
}
public WildcardType(Type type, BoundKind kind, TypeSymbol tsym) {
- super(tsym);
+ this(type, kind, tsym, null, noAnnotations);
+ }
+
+ public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
+ List<Attribute.TypeCompound> annos) {
+ this(type, kind, tsym, null, annos);
+ }
+
+ public WildcardType(WildcardType t, TypeVar bound,
+ List<Attribute.TypeCompound> annos) {
+ this(t.type, t.kind, t.tsym, bound, annos);
+ }
+
+ public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
+ TypeVar bound) {
+ this(type, kind, tsym, noAnnotations);
+ }
+
+ public WildcardType(Type type, BoundKind kind, TypeSymbol tsym,
+ TypeVar bound, List<Attribute.TypeCompound> annos) {
+ super(tsym, annos);
this.type = Assert.checkNonNull(type);
this.kind = kind;
- }
- public WildcardType(WildcardType t, TypeVar bound) {
- this(t.type, t.kind, t.tsym, bound);
+ this.bound = bound;
}
- public WildcardType(Type type, BoundKind kind, TypeSymbol tsym, TypeVar bound) {
- this(type, kind, tsym);
- this.bound = bound;
+ @Override
+ public WildcardType annotatedType(List<Attribute.TypeCompound> annos) {
+ return new WildcardType(type, kind, tsym, bound, annos);
}
@Override
@@ -658,6 +707,7 @@
boolean isPrintingBound = false;
public String toString() {
StringBuilder s = new StringBuilder();
+ appendAnnotationsString(s);
s.append(kind.toString());
if (kind != UNBOUND)
s.append(type);
@@ -679,7 +729,7 @@
if (t == type)
return this;
else
- return new WildcardType(t, kind, tsym, bound);
+ return new WildcardType(t, kind, tsym, bound, annos);
}
public Type getExtendsBound() {
@@ -736,7 +786,12 @@
public List<Type> all_interfaces_field;
public ClassType(Type outer, List<Type> typarams, TypeSymbol tsym) {
- super(tsym);
+ this(outer, typarams, tsym, noAnnotations);
+ }
+
+ public ClassType(Type outer, List<Type> typarams, TypeSymbol tsym,
+ List<Attribute.TypeCompound> annos) {
+ super(tsym, annos);
this.outer_field = outer;
this.typarams_field = typarams;
this.allparams_field = null;
@@ -754,6 +809,15 @@
}
@Override
+ public ClassType annotatedType(List<Attribute.TypeCompound> annos) {
+ final ClassType out = new ClassType(outer_field, typarams_field, tsym, annos);
+ out.allparams_field = allparams_field;
+ out.supertype_field = supertype_field;
+ out.interfaces_field = interfaces_field;
+ return out;
+ }
+
+ @Override
public TypeTag getTag() {
return CLASS;
}
@@ -765,7 +829,7 @@
public Type constType(Object constValue) {
final Object value = constValue;
- return new ClassType(getEnclosingType(), typarams_field, tsym) {
+ return new ClassType(getEnclosingType(), typarams_field, tsym, annos) {
@Override
public Object constValue() {
return value;
@@ -781,6 +845,7 @@
*/
public String toString() {
StringBuilder buf = new StringBuilder();
+ appendAnnotationsString(buf);
if (getEnclosingType().hasTag(CLASS) && tsym.owner.kind == TYP) {
buf.append(getEnclosingType().toString());
buf.append(".");
@@ -806,7 +871,7 @@
return s.toString();
} else if (sym.name.isEmpty()) {
String s;
- ClassType norm = (ClassType) tsym.type.unannotatedType();
+ ClassType norm = (ClassType) tsym.type;
if (norm == null) {
s = Log.getLocalizedString("anonymous.class", (Object)null);
} else if (norm.interfaces_field != null && norm.interfaces_field.nonEmpty()) {
@@ -858,7 +923,7 @@
return
getEnclosingType().isErroneous() ||
isErroneous(getTypeArguments()) ||
- this != tsym.type.unannotatedType() && tsym.type.isErroneous();
+ this != tsym.type && tsym.type.isErroneous();
}
public boolean isParameterized() {
@@ -897,7 +962,7 @@
List<Type> typarams = getTypeArguments();
List<Type> typarams1 = map(typarams, f);
if (outer1 == outer && typarams1 == typarams) return this;
- else return new ClassType(outer1, typarams1, tsym);
+ else return new ClassType(outer1, typarams1, tsym, annos);
}
public boolean contains(Type elem) {
@@ -924,7 +989,12 @@
public static class ErasedClassType extends ClassType {
public ErasedClassType(Type outer, TypeSymbol tsym) {
- super(outer, List.<Type>nil(), tsym);
+ this(outer, tsym, noAnnotations);
+ }
+
+ public ErasedClassType(Type outer, TypeSymbol tsym,
+ List<Attribute.TypeCompound> annos) {
+ super(outer, List.<Type>nil(), tsym, annos);
}
@Override
@@ -938,7 +1008,9 @@
final List<? extends Type> alternatives_field;
public UnionClassType(ClassType ct, List<? extends Type> alternatives) {
- super(ct.outer_field, ct.typarams_field, ct.tsym);
+ // Presently no way to refer to this type directly, so we
+ // cannot put annotations directly on it.
+ super(ct.outer_field, ct.typarams_field, ct.tsym, noAnnotations);
allparams_field = ct.allparams_field;
supertype_field = ct.supertype_field;
interfaces_field = ct.interfaces_field;
@@ -971,7 +1043,9 @@
public boolean allInterfaces;
public IntersectionClassType(List<Type> bounds, ClassSymbol csym, boolean allInterfaces) {
- super(Type.noType, List.<Type>nil(), csym);
+ // Presently no way to refer to this type directly, so we
+ // cannot put annotations directly on it.
+ super(Type.noType, List.<Type>nil(), csym, noAnnotations);
this.allInterfaces = allInterfaces;
Assert.check((csym.flags() & COMPOUND) != 0);
supertype_field = bounds.head;
@@ -1011,11 +1085,21 @@
public Type elemtype;
public ArrayType(Type elemtype, TypeSymbol arrayClass) {
- super(arrayClass);
+ this(elemtype, arrayClass, noAnnotations);
+ }
+
+ public ArrayType(Type elemtype, TypeSymbol arrayClass,
+ List<Attribute.TypeCompound> annos) {
+ super(arrayClass, annos);
this.elemtype = elemtype;
}
@Override
+ public ArrayType annotatedType(List<Attribute.TypeCompound> annos) {
+ return new ArrayType(elemtype, tsym, annos);
+ }
+
+ @Override
public TypeTag getTag() {
return ARRAY;
}
@@ -1025,7 +1109,11 @@
}
public String toString() {
- return elemtype + "[]";
+ StringBuilder sb = new StringBuilder();
+ sb.append(elemtype);
+ appendAnnotationsString(sb, true);
+ sb.append("[]");
+ return sb.toString();
}
public boolean equals(Object obj) {
@@ -1068,7 +1156,7 @@
}
public ArrayType makeVarargs() {
- return new ArrayType(elemtype, tsym) {
+ return new ArrayType(elemtype, tsym, annos) {
@Override
public boolean isVarargs() {
return true;
@@ -1079,7 +1167,7 @@
public Type map(Mapping f) {
Type elemtype1 = f.apply(elemtype);
if (elemtype1 == elemtype) return this;
- else return new ArrayType(elemtype1, tsym);
+ else return new ArrayType(elemtype1, tsym, annos);
}
public boolean contains(Type elem) {
@@ -1117,13 +1205,20 @@
Type restype,
List<Type> thrown,
TypeSymbol methodClass) {
- super(methodClass);
+ // Presently no way to refer to a method type directly, so
+ // we cannot put type annotations on it.
+ super(methodClass, noAnnotations);
this.argtypes = argtypes;
this.restype = restype;
this.thrown = thrown;
}
@Override
+ public MethodType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate a method type");
+ }
+
+ @Override
public TypeTag getTag() {
return METHOD;
}
@@ -1138,7 +1233,13 @@
* should be.
*/
public String toString() {
- return "(" + argtypes + ")" + restype;
+ StringBuilder sb = new StringBuilder();
+ appendAnnotationsString(sb);
+ sb.append('(');
+ sb.append(argtypes);
+ sb.append(')');
+ sb.append(restype);
+ return sb.toString();
}
public List<Type> getParameterTypes() { return argtypes; }
@@ -1197,7 +1298,13 @@
public static class PackageType extends Type implements NoType {
PackageType(TypeSymbol tsym) {
- super(tsym);
+ // Package types cannot be annotated
+ super(tsym, noAnnotations);
+ }
+
+ @Override
+ public PackageType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate a package type");
}
@Override
@@ -1245,18 +1352,29 @@
public Type lower;
public TypeVar(Name name, Symbol owner, Type lower) {
- super(null);
+ this(name, owner, lower, noAnnotations);
+ }
+
+ public TypeVar(Name name, Symbol owner, Type lower,
+ List<Attribute.TypeCompound> annos) {
+ super(null, annos);
tsym = new TypeVariableSymbol(0, name, this, owner);
this.lower = lower;
}
- public TypeVar(TypeSymbol tsym, Type bound, Type lower) {
- super(tsym);
+ public TypeVar(TypeSymbol tsym, Type bound, Type lower,
+ List<Attribute.TypeCompound> annos) {
+ super(tsym, annos);
this.bound = bound;
this.lower = lower;
}
@Override
+ public TypeVar annotatedType(List<Attribute.TypeCompound> annos) {
+ return new TypeVar(tsym, bound, lower, annos);
+ }
+
+ @Override
public TypeTag getTag() {
return TYPEVAR;
}
@@ -1317,13 +1435,29 @@
Symbol owner,
Type upper,
Type lower,
- WildcardType wildcard) {
- super(name, owner, lower);
+ WildcardType wildcard,
+ List<Attribute.TypeCompound> annos) {
+ super(name, owner, lower, annos);
this.lower = Assert.checkNonNull(lower);
this.bound = upper;
this.wildcard = wildcard;
}
+ public CapturedType(TypeSymbol tsym,
+ Type bound,
+ Type upper,
+ Type lower,
+ WildcardType wildcard,
+ List<Attribute.TypeCompound> annos) {
+ super(tsym, bound, lower, annos);
+ this.wildcard = wildcard;
+ }
+
+ @Override
+ public CapturedType annotatedType(List<Attribute.TypeCompound> annos) {
+ return new CapturedType(tsym, bound, bound, lower, wildcard, annos);
+ }
+
@Override
public <R,S> R accept(Type.Visitor<R,S> v, S s) {
return v.visitCapturedType(this, s);
@@ -1336,18 +1470,22 @@
@Override
public String toString() {
- return "capture#"
- + (hashCode() & 0xFFFFFFFFL) % Printer.PRIME
- + " of "
- + wildcard;
+ StringBuilder sb = new StringBuilder();
+ appendAnnotationsString(sb);
+ sb.append("capture#");
+ sb.append((hashCode() & 0xFFFFFFFFL) % Printer.PRIME);
+ sb.append(" of ");
+ sb.append(wildcard);
+ return sb.toString();
}
}
public static abstract class DelegatedType extends Type {
public Type qtype;
public TypeTag tag;
- public DelegatedType(TypeTag tag, Type qtype) {
- super(qtype.tsym);
+ public DelegatedType(TypeTag tag, Type qtype,
+ List<Attribute.TypeCompound> annos) {
+ super(qtype.tsym, annos);
this.tag = tag;
this.qtype = qtype;
}
@@ -1373,17 +1511,28 @@
public List<Type> tvars;
public ForAll(List<Type> tvars, Type qtype) {
- super(FORALL, (MethodType)qtype);
+ super(FORALL, (MethodType)qtype, noAnnotations);
this.tvars = tvars;
}
@Override
+ public ForAll annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate forall type");
+ }
+
+ @Override
public <R,S> R accept(Type.Visitor<R,S> v, S s) {
return v.visitForAll(this, s);
}
public String toString() {
- return "<" + tvars + ">" + qtype;
+ StringBuilder sb = new StringBuilder();
+ appendAnnotationsString(sb);
+ sb.append('<');
+ sb.append(tvars);
+ sb.append('>');
+ sb.append(qtype);
+ return sb.toString();
}
public List<Type> getTypeArguments() { return tvars; }
@@ -1479,7 +1628,8 @@
}
public UndetVar(TypeVar origin, Types types) {
- super(UNDETVAR, origin);
+ // This is a synthesized internal type, so we cannot annotate it.
+ super(UNDETVAR, origin, noAnnotations);
bounds = new EnumMap<>(InferenceBound.class);
List<Type> declaredBounds = types.getBounds(origin);
declaredCount = declaredBounds.length();
@@ -1489,7 +1639,15 @@
}
public String toString() {
- return (inst == null) ? qtype + "?" : inst.toString();
+ StringBuilder sb = new StringBuilder();
+ appendAnnotationsString(sb);
+ if (inst == null) {
+ sb.append(qtype);
+ sb.append('?');
+ } else {
+ sb.append(inst);
+ }
+ return sb.toString();
}
public String debugString() {
@@ -1507,6 +1665,11 @@
}
@Override
+ public UndetVar annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate an UndetVar type");
+ }
+
+ @Override
public boolean isPartial() {
return true;
}
@@ -1659,7 +1822,15 @@
*/
public static class JCNoType extends Type implements NoType {
public JCNoType() {
- super(null);
+ // Need to use List.nil(), because JCNoType constructor
+ // gets called in static initializers in Type, where
+ // noAnnotations is also defined.
+ super(null, List.<Attribute.TypeCompound>nil());
+ }
+
+ @Override
+ public JCNoType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate JCNoType");
}
@Override
@@ -1686,7 +1857,13 @@
public static class JCVoidType extends Type implements NoType {
public JCVoidType() {
- super(null);
+ // Void cannot be annotated
+ super(null, noAnnotations);
+ }
+
+ @Override
+ public JCVoidType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate void type");
}
@Override
@@ -1715,7 +1892,13 @@
static class BottomType extends Type implements NullType {
public BottomType() {
- super(null);
+ // Bottom is a synthesized internal type, so it cannot be annotated
+ super(null, noAnnotations);
+ }
+
+ @Override
+ public BottomType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate bottom type");
}
@Override
@@ -1759,7 +1942,12 @@
private Type originalType = null;
public ErrorType(Type originalType, TypeSymbol tsym) {
- super(noType, List.<Type>nil(), null);
+ this(originalType, tsym, noAnnotations);
+ }
+
+ public ErrorType(Type originalType, TypeSymbol tsym,
+ List<Attribute.TypeCompound> typeAnnotations) {
+ super(noType, List.<Type>nil(), null, typeAnnotations);
this.tsym = tsym;
this.originalType = (originalType == null ? noType : originalType);
}
@@ -1772,6 +1960,11 @@
}
@Override
+ public ErrorType annotatedType(List<Attribute.TypeCompound> annos) {
+ return new ErrorType(originalType, tsym, annos);
+ }
+
+ @Override
public TypeTag getTag() {
return ERROR;
}
@@ -1827,182 +2020,17 @@
}
}
- public static class AnnotatedType extends Type
- implements
- javax.lang.model.type.ArrayType,
- javax.lang.model.type.DeclaredType,
- javax.lang.model.type.PrimitiveType,
- javax.lang.model.type.TypeVariable,
- javax.lang.model.type.WildcardType {
- /** The type annotations on this type.
- */
- private List<Attribute.TypeCompound> typeAnnotations;
-
- /** The underlying type that is annotated.
- */
- private Type underlyingType;
-
- protected AnnotatedType(List<Attribute.TypeCompound> typeAnnotations,
- Type underlyingType) {
- super(underlyingType.tsym);
- this.typeAnnotations = typeAnnotations;
- this.underlyingType = underlyingType;
- Assert.check(typeAnnotations != null && typeAnnotations.nonEmpty(),
- "Can't create AnnotatedType without annotations: " + underlyingType);
- Assert.check(!underlyingType.isAnnotated(),
- "Can't annotate already annotated type: " + underlyingType +
- "; adding: " + typeAnnotations);
- }
-
- @Override
- public TypeTag getTag() {
- return underlyingType.getTag();
- }
+ public static class UnknownType extends Type {
- @Override
- public boolean isAnnotated() {
- return true;
- }
-
- @Override
- public List<Attribute.TypeCompound> getAnnotationMirrors() {
- return typeAnnotations;
- }
-
-
- @Override
- public TypeKind getKind() {
- return underlyingType.getKind();
- }
-
- @Override
- public Type unannotatedType() {
- return underlyingType;
- }
-
- @Override
- public <R,S> R accept(Type.Visitor<R,S> v, S s) {
- return v.visitAnnotatedType(this, s);
- }
-
- @Override
- public <R, P> R accept(TypeVisitor<R, P> v, P p) {
- return underlyingType.accept(v, p);
- }
-
- @Override
- public Type map(Mapping f) {
- underlyingType.map(f);
- return this;
+ public UnknownType() {
+ // Unknown is a synthesized internal type, so it cannot be
+ // annotated.
+ super(null, noAnnotations);
}
@Override
- public Type constType(Object constValue) { return underlyingType.constType(constValue); }
- @Override
- public Type getEnclosingType() { return underlyingType.getEnclosingType(); }
-
- @Override
- public Type getReturnType() { return underlyingType.getReturnType(); }
- @Override
- public List<Type> getTypeArguments() { return underlyingType.getTypeArguments(); }
- @Override
- public List<Type> getParameterTypes() { return underlyingType.getParameterTypes(); }
- @Override
- public Type getReceiverType() { return underlyingType.getReceiverType(); }
- @Override
- public List<Type> getThrownTypes() { return underlyingType.getThrownTypes(); }
- @Override
- public Type getUpperBound() { return underlyingType.getUpperBound(); }
- @Override
- public Type getLowerBound() { return underlyingType.getLowerBound(); }
-
- @Override
- public boolean isErroneous() { return underlyingType.isErroneous(); }
- @Override
- public boolean isCompound() { return underlyingType.isCompound(); }
- @Override
- public boolean isInterface() { return underlyingType.isInterface(); }
- @Override
- public List<Type> allparams() { return underlyingType.allparams(); }
- @Override
- public boolean isPrimitive() { return underlyingType.isPrimitive(); }
- @Override
- public boolean isPrimitiveOrVoid() { return underlyingType.isPrimitiveOrVoid(); }
- @Override
- public boolean isNumeric() { return underlyingType.isNumeric(); }
- @Override
- public boolean isReference() { return underlyingType.isReference(); }
- @Override
- public boolean isNullOrReference() { return underlyingType.isNullOrReference(); }
- @Override
- public boolean isPartial() { return underlyingType.isPartial(); }
- @Override
- public boolean isParameterized() { return underlyingType.isParameterized(); }
- @Override
- public boolean isRaw() { return underlyingType.isRaw(); }
- @Override
- public boolean isFinal() { return underlyingType.isFinal(); }
- @Override
- public boolean isSuperBound() { return underlyingType.isSuperBound(); }
- @Override
- public boolean isExtendsBound() { return underlyingType.isExtendsBound(); }
- @Override
- public boolean isUnbound() { return underlyingType.isUnbound(); }
-
- @Override
- public String toString() {
- // This method is only used for internal debugging output.
- // See
- // com.sun.tools.javac.code.Printer.visitAnnotatedType(AnnotatedType, Locale)
- // for the user-visible logic.
- if (typeAnnotations != null &&
- !typeAnnotations.isEmpty()) {
- return "(" + typeAnnotations.toString() + " :: " + underlyingType.toString() + ")";
- } else {
- return "({} :: " + underlyingType.toString() +")";
- }
- }
-
- @Override
- public boolean contains(Type t) { return underlyingType.contains(t); }
-
- @Override
- public Type withTypeVar(Type t) {
- // Don't create a new AnnotatedType, as 'this' will
- // get its annotations set later.
- underlyingType = underlyingType.withTypeVar(t);
- return this;
- }
-
- // TODO: attach annotations?
- @Override
- public TypeSymbol asElement() { return underlyingType.asElement(); }
-
- // TODO: attach annotations?
- @Override
- public MethodType asMethodType() { return underlyingType.asMethodType(); }
-
- @Override
- public void complete() { underlyingType.complete(); }
-
- @Override
- public TypeMirror getComponentType() { return ((ArrayType)underlyingType).getComponentType(); }
-
- // The result is an ArrayType, but only in the model sense, not the Type sense.
- public Type makeVarargs() {
- return ((ArrayType) underlyingType).makeVarargs().annotatedType(typeAnnotations);
- }
-
- @Override
- public TypeMirror getExtendsBound() { return ((WildcardType)underlyingType).getExtendsBound(); }
- @Override
- public TypeMirror getSuperBound() { return ((WildcardType)underlyingType).getSuperBound(); }
- }
-
- public static class UnknownType extends Type {
-
- public UnknownType() {
- super(null);
+ public UnknownType annotatedType(List<Attribute.TypeCompound> annos) {
+ throw new AssertionError("Cannot annotate unknown type");
}
@Override
@@ -2046,7 +2074,6 @@
R visitForAll(ForAll t, S s);
R visitUndetVar(UndetVar t, S s);
R visitErrorType(ErrorType t, S s);
- R visitAnnotatedType(AnnotatedType t, S s);
R visitType(Type t, S s);
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java Fri May 16 14:35:37 2014 -0700
@@ -326,15 +326,21 @@
public int getCatchType() {
Assert.check(hasCatchType(),
- "exception_index does not contain a valid catch type");
- return (-this.exception_index) - 1 ;
+ "exception_index does not contain valid catch info");
+ return ((-this.exception_index) - 1) & 0xff ;
}
- public void setCatchType(final int catchType) {
+ public int getStartPos() {
+ Assert.check(hasCatchType(),
+ "exception_index does not contain valid catch info");
+ return ((-this.exception_index) - 1) >> 8 ;
+ }
+
+ public void setCatchInfo(final int catchType, final int startPos) {
Assert.check(this.exception_index < 0,
"exception_index already contains a bytecode index");
Assert.check(catchType >= 0, "Expected a valid catch type");
- this.exception_index = -(catchType + 1);
+ this.exception_index = -((catchType | startPos << 8) + 1);
}
/**
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Fri May 16 14:35:37 2014 -0700
@@ -32,7 +32,6 @@
import javax.tools.JavaFileObject;
import com.sun.tools.javac.code.Attribute.TypeCompound;
-import com.sun.tools.javac.code.Type.AnnotatedType;
import com.sun.tools.javac.code.Type.ArrayType;
import com.sun.tools.javac.code.Type.CapturedType;
import com.sun.tools.javac.code.Type.ClassType;
@@ -331,7 +330,6 @@
// Note that we don't use the result, the call to
// typeWithAnnotations side-effects the type annotation positions.
// This is important for constructors of nested classes.
-
sym.appendUniqueTypeAttributes(typeAnnotations);
return;
}
@@ -391,14 +389,15 @@
private Type typeWithAnnotations(final JCTree typetree, final Type type,
final List<Attribute.TypeCompound> annotations,
final List<Attribute.TypeCompound> onlyTypeAnnotations) {
- // System.out.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
+ //System.err.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
// typetree, type, annotations, onlyTypeAnnotations);
if (annotations.isEmpty()) {
return type;
}
if (type.hasTag(TypeTag.ARRAY)) {
- Type.ArrayType arType = (Type.ArrayType) type.unannotatedType();
- Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym);
+ Type.ArrayType arType = (Type.ArrayType) type;
+ Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym,
+ Type.noAnnotations);
Type toreturn;
if (type.isAnnotated()) {
toreturn = tomodify.annotatedType(type.getAnnotationMirrors());
@@ -413,13 +412,15 @@
while (arType.elemtype.hasTag(TypeTag.ARRAY)) {
if (arType.elemtype.isAnnotated()) {
Type aelemtype = arType.elemtype;
- arType = (Type.ArrayType) aelemtype.unannotatedType();
+ arType = (Type.ArrayType) aelemtype;
ArrayType prevToMod = tomodify;
- tomodify = new Type.ArrayType(null, arType.tsym);
+ tomodify = new Type.ArrayType(null, arType.tsym,
+ Type.noAnnotations);
prevToMod.elemtype = tomodify.annotatedType(arType.elemtype.getAnnotationMirrors());
} else {
arType = (Type.ArrayType) arType.elemtype;
- tomodify.elemtype = new Type.ArrayType(null, arType.tsym);
+ tomodify.elemtype = new Type.ArrayType(null, arType.tsym,
+ Type.noAnnotations);
tomodify = (Type.ArrayType) tomodify.elemtype;
}
arTree = arrayTypeTree(arTree.elemtype);
@@ -569,6 +570,7 @@
private Type typeWithAnnotations(final Type type,
final Type stopAt,
final List<Attribute.TypeCompound> annotations) {
+ //System.err.println("typeWithAnnotations " + type + " " + annotations + " stopAt " + stopAt);
Visitor<Type, List<TypeCompound>> visitor =
new Type.Visitor<Type, List<Attribute.TypeCompound>>() {
@Override
@@ -579,7 +581,8 @@
return t.annotatedType(s);
} else {
ClassType ret = new ClassType(t.getEnclosingType().accept(this, s),
- t.typarams_field, t.tsym);
+ t.typarams_field, t.tsym,
+ t.getAnnotationMirrors());
ret.all_interfaces_field = t.all_interfaces_field;
ret.allparams_field = t.allparams_field;
ret.interfaces_field = t.interfaces_field;
@@ -590,18 +593,14 @@
}
@Override
- public Type visitAnnotatedType(AnnotatedType t, List<TypeCompound> s) {
- return t.unannotatedType().accept(this, s).annotatedType(t.getAnnotationMirrors());
- }
-
- @Override
public Type visitWildcardType(WildcardType t, List<TypeCompound> s) {
return t.annotatedType(s);
}
@Override
public Type visitArrayType(ArrayType t, List<TypeCompound> s) {
- ArrayType ret = new ArrayType(t.elemtype.accept(this, s), t.tsym);
+ ArrayType ret = new ArrayType(t.elemtype.accept(this, s), t.tsym,
+ t.getAnnotationMirrors());
return ret;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Fri May 16 14:35:37 2014 -0700
@@ -131,7 +131,7 @@
* @return the upper bound of the given type
*/
public Type upperBound(Type t) {
- return upperBound.visit(t).unannotatedType();
+ return upperBound.visit(t);
}
// where
private final MapVisitor<Void> upperBound = new MapVisitor<Void>() {
@@ -205,7 +205,7 @@
WildcardType unb = new WildcardType(syms.objectType,
BoundKind.UNBOUND,
syms.boundClass,
- (TypeVar)parms.head.unannotatedType());
+ (TypeVar)parms.head);
if (!containsType(args.head, unb))
return false;
parms = parms.tail;
@@ -269,7 +269,9 @@
List<Type> opens = openVars.toList();
ListBuffer<Type> qs = new ListBuffer<>();
for (List<Type> iter = opens; iter.nonEmpty(); iter = iter.tail) {
- qs.append(new WildcardType(syms.objectType, BoundKind.UNBOUND, syms.boundClass, (TypeVar) iter.head.unannotatedType()));
+ qs.append(new WildcardType(syms.objectType, BoundKind.UNBOUND,
+ syms.boundClass, (TypeVar) iter.head,
+ Type.noAnnotations));
}
res = subst(res, opens, qs.toList());
}
@@ -599,12 +601,12 @@
//simply replace the wildcards with its bound
for (Type t : formalInterface.getTypeArguments()) {
if (actualTypeargs.head.hasTag(WILDCARD)) {
- WildcardType wt = (WildcardType)actualTypeargs.head.unannotatedType();
+ WildcardType wt = (WildcardType)actualTypeargs.head;
Type bound;
switch (wt.kind) {
case EXTENDS:
case UNBOUND:
- CapturedType capVar = (CapturedType)capturedTypeargs.head.unannotatedType();
+ CapturedType capVar = (CapturedType)capturedTypeargs.head;
//use declared bound if it doesn't depend on formal type-args
bound = capVar.bound.containsAny(capturedSite.getTypeArguments()) ?
wt.type : capVar.bound;
@@ -642,7 +644,8 @@
csym.members_field = new Scope(csym);
MethodSymbol instDescSym = new MethodSymbol(descSym.flags(), descSym.name, descType, csym);
csym.members_field.enter(instDescSym);
- Type.ClassType ctype = new Type.ClassType(Type.noType, List.<Type>nil(), csym);
+ Type.ClassType ctype = new Type.ClassType(Type.noType, List.<Type>nil(), csym,
+ Type.noAnnotations);
ctype.supertype_field = syms.objectType;
ctype.interfaces_field = targets;
csym.type = ctype;
@@ -747,8 +750,6 @@
//where
private boolean isSubtypeUncheckedInternal(Type t, Type s, Warner warn) {
if (t.hasTag(ARRAY) && s.hasTag(ARRAY)) {
- t = t.unannotatedType();
- s = s.unannotatedType();
if (((ArrayType)t).elemtype.isPrimitive()) {
return isSameType(elemtype(t), elemtype(s));
} else {
@@ -776,8 +777,6 @@
if (!t.hasTag(ARRAY) || isReifiable(t)) {
return;
}
- t = t.unannotatedType();
- s = s.unannotatedType();
ArrayType from = (ArrayType)t;
boolean shouldWarn = false;
switch (s.getTag()) {
@@ -810,12 +809,6 @@
if (t == s)
return true;
- t = t.unannotatedType();
- s = s.unannotatedType();
-
- if (t == s)
- return true;
-
if (s.isPartial())
return isSuperType(s, t);
@@ -828,8 +821,9 @@
}
// Generally, if 's' is a type variable, recur on lower bound; but
- // for alpha <: CAP, alpha should get upper bound CAP
- if (!t.hasTag(UNDETVAR)) {
+ // for inference variables and intersections, we need to keep 's'
+ // (see JLS 4.10.2 for intersections and 18.2.3 for inference vars)
+ if (!t.hasTag(UNDETVAR) && !t.isCompound()) {
// TODO: JDK-8039198, bounds checking sometimes passes in a wildcard as s
Type lower = cvarLowerBound(wildLowerBound(s));
if (s != lower)
@@ -899,12 +893,14 @@
if (s.isSuperBound() && !s.isExtendsBound()) {
s = new WildcardType(syms.objectType,
BoundKind.UNBOUND,
- syms.boundClass);
+ syms.boundClass,
+ s.getAnnotationMirrors());
changed = true;
} else if (s != orig) {
s = new WildcardType(upperBound(s),
BoundKind.EXTENDS,
- syms.boundClass);
+ syms.boundClass,
+ s.getAnnotationMirrors());
changed = true;
}
rewrite.append(s);
@@ -918,14 +914,11 @@
@Override
public Boolean visitClassType(ClassType t, Type s) {
Type sup = asSuper(t, s.tsym);
- return sup != null
- && sup.tsym == s.tsym
- // You're not allowed to write
- // Vector<Object> vec = new Vector<String>();
- // But with wildcards you can write
- // Vector<? extends Object> vec = new Vector<String>();
- // which means that subtype checking must be done
- // here instead of same-type checking (via containsType).
+ if (sup == null) return false;
+ // If t is an intersection, sup might not be a class type
+ if (!sup.hasTag(CLASS)) return isSubtypeNoCapture(sup, s);
+ return sup.tsym == s.tsym
+ // Check type variable containment
&& (!s.isParameterized() || containsTypeRecursive(s, sup))
&& isSubtypeNoCapture(sup.getEnclosingType(),
s.getEnclosingType());
@@ -1107,7 +1100,7 @@
if (s.hasTag(TYPEVAR)) {
//type-substitution does not preserve type-var types
//check that type var symbols and bounds are indeed the same
- return sameTypeVars((TypeVar)t.unannotatedType(), (TypeVar)s.unannotatedType());
+ return sameTypeVars((TypeVar)t, (TypeVar)s);
}
else {
//special case for s == ? super X, where upper(s) = u
@@ -1149,9 +1142,9 @@
HashSet<UniqueType> set = new HashSet<>();
for (Type x : interfaces(t))
- set.add(new UniqueType(x.unannotatedType(), Types.this));
+ set.add(new UniqueType(x, Types.this));
for (Type x : interfaces(s)) {
- if (!set.remove(new UniqueType(x.unannotatedType(), Types.this)))
+ if (!set.remove(new UniqueType(x, Types.this)))
return false;
}
return (set.isEmpty());
@@ -1256,30 +1249,47 @@
if (!s.hasTag(WILDCARD)) {
return false;
} else {
- WildcardType t2 = (WildcardType)s.unannotatedType();
+ WildcardType t2 = (WildcardType)s;
return t.kind == t2.kind &&
isSameType(t.type, t2.type, true);
}
}
};
- /**
- * A version of LooseSameTypeVisitor that takes AnnotatedTypes
- * into account.
- */
- TypeRelation isSameAnnotatedType = new LooseSameTypeVisitor() {
+ // </editor-fold>
+
+ TypeRelation isSameAnnotatedType = new LooseSameTypeVisitor() {
+ private Boolean compareAnnotations(Type t1, Type t2) {
+ List<Attribute.TypeCompound> annos1 = t1.getAnnotationMirrors();
+ List<Attribute.TypeCompound> annos2 = t2.getAnnotationMirrors();
+ return annos1.containsAll(annos2) && annos2.containsAll(annos1);
+ }
+
+ @Override
+ public Boolean visitType(Type t, Type s) {
+ return compareAnnotations(t, s) && super.visitType(t, s);
+ }
+
@Override
- public Boolean visitAnnotatedType(AnnotatedType t, Type s) {
- if (!s.isAnnotated())
- return false;
- if (!t.getAnnotationMirrors().containsAll(s.getAnnotationMirrors()))
- return false;
- if (!s.getAnnotationMirrors().containsAll(t.getAnnotationMirrors()))
- return false;
- return visit(t.unannotatedType(), s);
+ public Boolean visitWildcardType(WildcardType t, Type s) {
+ return compareAnnotations(t, s) && super.visitWildcardType(t, s);
+ }
+
+ @Override
+ public Boolean visitClassType(ClassType t, Type s) {
+ return compareAnnotations(t, s) && super.visitClassType(t, s);
+ }
+
+ @Override
+ public Boolean visitArrayType(ArrayType t, Type s) {
+ return compareAnnotations(t, s) && super.visitArrayType(t, s);
+ }
+
+ @Override
+ public Boolean visitForAll(ForAll t, Type s) {
+ return compareAnnotations(t, s) && super.visitForAll(t, s);
}
};
- // </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Contains Type">
public boolean containedBy(Type t, Type s) {
@@ -1287,7 +1297,7 @@
case UNDETVAR:
if (s.hasTag(WILDCARD)) {
UndetVar undetvar = (UndetVar)t;
- WildcardType wt = (WildcardType)s.unannotatedType();
+ WildcardType wt = (WildcardType)s;
switch(wt.kind) {
case UNBOUND: //similar to ? extends Object
case EXTENDS: {
@@ -1354,7 +1364,7 @@
private Type U(Type t) {
while (t.hasTag(WILDCARD)) {
- WildcardType w = (WildcardType)t.unannotatedType();
+ WildcardType w = (WildcardType)t;
if (w.isSuperBound())
return w.bound == null ? syms.objectType : w.bound.bound;
else
@@ -1365,7 +1375,7 @@
private Type L(Type t) {
while (t.hasTag(WILDCARD)) {
- WildcardType w = (WildcardType)t.unannotatedType();
+ WildcardType w = (WildcardType)t;
if (w.isExtendsBound())
return syms.botType;
else
@@ -1424,15 +1434,15 @@
};
public boolean isCaptureOf(Type s, WildcardType t) {
- if (!s.hasTag(TYPEVAR) || !((TypeVar)s.unannotatedType()).isCaptured())
+ if (!s.hasTag(TYPEVAR) || !((TypeVar)s).isCaptured())
return false;
- return isSameWildcard(t, ((CapturedType)s.unannotatedType()).wildcard);
+ return isSameWildcard(t, ((CapturedType)s).wildcard);
}
public boolean isSameWildcard(WildcardType t, Type s) {
if (!s.hasTag(WILDCARD))
return false;
- WildcardType w = (WildcardType)s.unannotatedType();
+ WildcardType w = (WildcardType)s;
return w.kind == t.kind && w.type == t.type;
}
@@ -1541,8 +1551,8 @@
if (t.isCompound() || s.isCompound()) {
return !t.isCompound() ?
- visitIntersectionType((IntersectionClassType)s.unannotatedType(), t, true) :
- visitIntersectionType((IntersectionClassType)t.unannotatedType(), s, false);
+ visitIntersectionType((IntersectionClassType)s, t, true) :
+ visitIntersectionType((IntersectionClassType)t, s, false);
}
if (s.hasTag(CLASS) || s.hasTag(ARRAY)) {
@@ -1873,7 +1883,6 @@
case WILDCARD:
return elemtype(upperBound(t));
case ARRAY:
- t = t.unannotatedType();
return ((ArrayType)t).elemtype;
case FORALL:
return elemtype(((ForAll)t).qtype);
@@ -1920,7 +1929,7 @@
if (t.hasTag(VOID) || t.hasTag(PACKAGE)) {
Assert.error("Type t must not be a VOID or PACKAGE type, " + t.toString());
}
- return new ArrayType(t, syms.arrayClass);
+ return new ArrayType(t, syms.arrayClass, Type.noAnnotations);
}
// </editor-fold>
@@ -1959,16 +1968,18 @@
return t;
Type st = supertype(t);
- if (st.hasTag(CLASS) || st.hasTag(TYPEVAR) || st.hasTag(ERROR)) {
+ if (st.hasTag(CLASS) || st.hasTag(TYPEVAR)) {
Type x = asSuper(st, sym);
if (x != null)
return x;
}
if ((sym.flags() & INTERFACE) != 0) {
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
- Type x = asSuper(l.head, sym);
- if (x != null)
- return x;
+ if (!l.head.hasTag(ERROR)) {
+ Type x = asSuper(l.head, sym);
+ if (x != null)
+ return x;
+ }
}
}
return null;
@@ -2175,56 +2186,65 @@
}
private Type erasure(Type t, boolean recurse) {
- if (t.isPrimitive())
+ if (t.isPrimitive()) {
return t; /* fast special case */
- else
- return erasure.visit(t, recurse);
+ } else {
+ Type out = erasure.visit(t, recurse);
+ return out;
+ }
}
// where
private SimpleVisitor<Type, Boolean> erasure = new SimpleVisitor<Type, Boolean>() {
public Type visitType(Type t, Boolean recurse) {
if (t.isPrimitive())
return t; /*fast special case*/
- else
- return t.map(recurse ? erasureRecFun : erasureFun);
+ else {
+ final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
+ Type erased = t.map(recurse ? erasureRecFun : erasureFun);
+ if (!annos.isEmpty()) {
+ erased = erased.annotatedType(annos);
+ }
+ return erased;
+ }
}
@Override
public Type visitWildcardType(WildcardType t, Boolean recurse) {
- return erasure(upperBound(t), recurse);
+ final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
+ Type erased = erasure(upperBound(t), recurse);
+ if (!annos.isEmpty()) {
+ erased = erased.annotatedType(annos);
+ }
+ return erased;
}
@Override
public Type visitClassType(ClassType t, Boolean recurse) {
Type erased = t.tsym.erasure(Types.this);
+ List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
if (recurse) {
erased = new ErasedClassType(erased.getEnclosingType(),erased.tsym);
}
+ if (!annos.isEmpty()) {
+ erased = erased.annotatedType(annos);
+ }
return erased;
}
@Override
public Type visitTypeVar(TypeVar t, Boolean recurse) {
- return erasure(t.bound, recurse);
+ final List<Attribute.TypeCompound> annos = t.getAnnotationMirrors();
+ Type erased = erasure(t.bound, recurse);
+ if (!annos.isEmpty()) {
+ erased = erased.annotatedType(annos);
+ }
+ return erased;
}
@Override
public Type visitErrorType(ErrorType t, Boolean recurse) {
return t;
}
-
- @Override
- public Type visitAnnotatedType(AnnotatedType t, Boolean recurse) {
- Type erased = erasure(t.unannotatedType(), recurse);
- if (erased.isAnnotated()) {
- // This can only happen when the underlying type is a
- // type variable and the upper bound of it is annotated.
- // The annotation on the type variable overrides the one
- // on the bound.
- erased = ((AnnotatedType)erased).unannotatedType();
- }
- return erased.annotatedType(t.getAnnotationMirrors());
- }
};
private Mapping erasureFun = new Mapping ("erasure") {
@@ -2550,7 +2570,8 @@
public Type visitClassType(ClassType t, Void ignored) {
Type outer1 = classBound(t.getEnclosingType());
if (outer1 != t.getEnclosingType())
- return new ClassType(outer1, t.getTypeArguments(), t.tsym);
+ return new ClassType(outer1, t.getTypeArguments(), t.tsym,
+ t.getAnnotationMirrors());
else
return t;
}
@@ -2965,7 +2986,8 @@
if (typarams1 == typarams && outer1 == outer)
return t;
else
- return new ClassType(outer1, typarams1, t.tsym);
+ return new ClassType(outer1, typarams1, t.tsym,
+ t.getAnnotationMirrors());
} else {
Type st = subst(supertype(t));
List<Type> is = upperBounds(subst(interfaces(t)));
@@ -2986,7 +3008,8 @@
} else {
if (t.isExtendsBound() && bound.isExtendsBound())
bound = upperBound(bound);
- return new WildcardType(bound, t.kind, syms.boundClass, t.bound);
+ return new WildcardType(bound, t.kind, syms.boundClass,
+ t.bound, t.getAnnotationMirrors());
}
}
@@ -2996,7 +3019,7 @@
if (elemtype == t.elemtype)
return t;
else
- return new ArrayType(elemtype, t.tsym);
+ return new ArrayType(elemtype, t.tsym, t.getAnnotationMirrors());
}
@Override
@@ -3006,7 +3029,7 @@
//if 'to' types contain variables that are free in 't'
List<Type> freevars = newInstances(t.tvars);
t = new ForAll(freevars,
- Types.this.subst(t.qtype, t.tvars, freevars));
+ Types.this.subst(t.qtype, t.tvars, freevars));
}
List<Type> tvars1 = substBounds(t.tvars, from, to);
Type qtype1 = subst(t.qtype);
@@ -3015,7 +3038,8 @@
} else if (tvars1 == t.tvars) {
return new ForAll(tvars1, qtype1);
} else {
- return new ForAll(tvars1, Types.this.subst(qtype1, t.tvars, tvars1));
+ return new ForAll(tvars1,
+ Types.this.subst(qtype1, t.tvars, tvars1));
}
}
@@ -3045,7 +3069,8 @@
ListBuffer<Type> newTvars = new ListBuffer<>();
// create new type variables without bounds
for (Type t : tvars) {
- newTvars.append(new TypeVar(t.tsym, null, syms.botType));
+ newTvars.append(new TypeVar(t.tsym, null, syms.botType,
+ t.getAnnotationMirrors()));
}
// the new bounds should use the new type variables in place
// of the old
@@ -3071,7 +3096,8 @@
return t;
else {
// create new type variable without bounds
- TypeVar tv = new TypeVar(t.tsym, null, syms.botType);
+ TypeVar tv = new TypeVar(t.tsym, null, syms.botType,
+ t.getAnnotationMirrors());
// the new bound should use the new type variable in place
// of the old
tv.bound = subst(bound1, List.<Type>of(t), List.<Type>of(tv));
@@ -3112,7 +3138,7 @@
return tvars1;
}
private static final Mapping newInstanceFun = new Mapping("newInstanceFun") {
- public Type apply(Type t) { return new TypeVar(t.tsym, t.getUpperBound(), t.getLowerBound()); }
+ public Type apply(Type t) { return new TypeVar(t.tsym, t.getUpperBound(), t.getLowerBound(), t.getAnnotationMirrors()); }
};
// </editor-fold>
@@ -3185,7 +3211,6 @@
* graph. Undefined for all but reference types.
*/
public int rank(Type t) {
- t = t.unannotatedType();
switch(t.getTag()) {
case CLASS: {
ClassType cls = (ClassType)t;
@@ -3267,7 +3292,7 @@
for (Type t : tvars) {
if (!first) s.append(", ");
first = false;
- appendTyparamString(((TypeVar)t.unannotatedType()), s);
+ appendTyparamString(((TypeVar)t), s);
}
s.append('>');
return s.toString();
@@ -3439,12 +3464,14 @@
m = new WildcardType(lub(upperBound(act1.head),
upperBound(act2.head)),
BoundKind.EXTENDS,
- syms.boundClass);
+ syms.boundClass,
+ Type.noAnnotations);
mergeCache.remove(pair);
} else {
m = new WildcardType(syms.objectType,
BoundKind.UNBOUND,
- syms.boundClass);
+ syms.boundClass,
+ Type.noAnnotations);
}
merged.append(m.withTypeVar(typarams.head));
}
@@ -3453,7 +3480,10 @@
typarams = typarams.tail;
}
Assert.check(act1.isEmpty() && act2.isEmpty() && typarams.isEmpty());
- return new ClassType(class1.getEnclosingType(), merged.toList(), class1.tsym);
+ // There is no spec detailing how type annotations are to
+ // be inherited. So set it to noAnnotations for now
+ return new ClassType(class1.getEnclosingType(), merged.toList(),
+ class1.tsym, Type.noAnnotations);
}
/**
@@ -3571,7 +3601,8 @@
}
}
// lub(A[], B[]) is lub(A, B)[]
- return new ArrayType(lub(elements), syms.arrayClass);
+ return new ArrayType(lub(elements), syms.arrayClass,
+ Type.noAnnotations);
case CLASS_BOUND:
// calculate lub(A, B)
@@ -3932,7 +3963,6 @@
t = subst(type1, t.tsym.type.getTypeArguments(), t.getTypeArguments());
}
}
- t = t.unannotatedType();
ClassType cls = (ClassType)t;
if (cls.isRaw() || !cls.isParameterized())
return cls;
@@ -3951,9 +3981,9 @@
!currentS.isEmpty()) {
if (currentS.head != currentT.head) {
captured = true;
- WildcardType Ti = (WildcardType)currentT.head.unannotatedType();
+ WildcardType Ti = (WildcardType)currentT.head;
Type Ui = currentA.head.getUpperBound();
- CapturedType Si = (CapturedType)currentS.head.unannotatedType();
+ CapturedType Si = (CapturedType)currentS.head;
if (Ui == null)
Ui = syms.objectType;
switch (Ti.kind) {
@@ -3986,7 +4016,8 @@
return erasure(t); // some "rare" type involved
if (captured)
- return new ClassType(cls.getEnclosingType(), S, cls.tsym);
+ return new ClassType(cls.getEnclosingType(), S, cls.tsym,
+ cls.getAnnotationMirrors());
else
return t;
}
@@ -3995,7 +4026,6 @@
ListBuffer<Type> result = new ListBuffer<>();
for (Type t : types) {
if (t.hasTag(WILDCARD)) {
- t = t.unannotatedType();
Type bound = ((WildcardType)t).getExtendsBound();
if (bound == null)
bound = syms.objectType;
@@ -4003,7 +4033,8 @@
syms.noSymbol,
bound,
syms.botType,
- (WildcardType)t));
+ (WildcardType)t,
+ Type.noAnnotations));
} else {
result.append(t);
}
@@ -4089,7 +4120,7 @@
private boolean giveWarning(Type from, Type to) {
List<Type> bounds = to.isCompound() ?
- ((IntersectionClassType)to.unannotatedType()).getComponents() : List.of(to);
+ ((IntersectionClassType)to).getComponents() : List.of(to);
for (Type b : bounds) {
Type subFrom = asSub(from, b.tsym);
if (b.isParameterized() &&
@@ -4354,7 +4385,7 @@
Type B(Type t) {
while (t.hasTag(WILDCARD)) {
- WildcardType w = (WildcardType)t.unannotatedType();
+ WildcardType w = (WildcardType)t;
t = high ?
w.getExtendsBound() :
w.getSuperBound();
@@ -4380,12 +4411,14 @@
return new WildcardType(syms.objectType,
BoundKind.UNBOUND,
syms.boundClass,
- formal);
+ formal,
+ Type.noAnnotations);
} else {
return new WildcardType(bound,
BoundKind.EXTENDS,
syms.boundClass,
- formal);
+ formal,
+ Type.noAnnotations);
}
}
@@ -4402,12 +4435,14 @@
return new WildcardType(syms.objectType,
BoundKind.UNBOUND,
syms.boundClass,
- formal);
+ formal,
+ Type.noAnnotations);
} else {
return new WildcardType(bound,
BoundKind.SUPER,
syms.boundClass,
- formal);
+ formal,
+ Type.noAnnotations);
}
}
@@ -4429,7 +4464,7 @@
public boolean equals(Object obj) {
return (obj instanceof UniqueType) &&
- types.isSameAnnotatedType(type, ((UniqueType)obj).type);
+ types.isSameType(type, ((UniqueType)obj).type);
}
public String toString() {
@@ -4464,8 +4499,6 @@
public R visitForAll(ForAll t, S s) { return visitType(t, s); }
public R visitUndetVar(UndetVar t, S s) { return visitType(t, s); }
public R visitErrorType(ErrorType t, S s) { return visitType(t, s); }
- // Pretend annotations don't exist
- public R visitAnnotatedType(AnnotatedType t, S s) { return visit(t.unannotatedType(), s); }
}
/**
@@ -4596,7 +4629,6 @@
* Assemble signature of given type in string buffer.
*/
public void assembleSig(Type type) {
- type = type.unannotatedType();
switch (type.getTag()) {
case BYTE:
append('B');
@@ -4693,7 +4725,6 @@
}
public void assembleClassSig(Type type) {
- type = type.unannotatedType();
ClassType ct = (ClassType) type;
ClassSymbol c = (ClassSymbol) ct.tsym;
classReference(c);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Fri May 16 14:35:37 2014 -0700
@@ -517,6 +517,10 @@
return new ResultInfo(pkind, pt, newContext);
}
+ protected ResultInfo dup(Type newPt, CheckContext newContext) {
+ return new ResultInfo(pkind, newPt, newContext);
+ }
+
@Override
public String toString() {
if (pt != null) {
@@ -1865,8 +1869,10 @@
return new ClassType(restype.getEnclosingType(),
List.<Type>of(new WildcardType(types.erasure(qualifierType),
BoundKind.EXTENDS,
- syms.boundClass)),
- restype.tsym);
+ syms.boundClass,
+ Type.noAnnotations)),
+ restype.tsym,
+ restype.getAnnotationMirrors());
} else {
return restype;
}
@@ -2036,7 +2042,8 @@
} else if (TreeInfo.isDiamond(tree)) {
ClassType site = new ClassType(clazztype.getEnclosingType(),
clazztype.tsym.type.getTypeArguments(),
- clazztype.tsym);
+ clazztype.tsym,
+ clazztype.getAnnotationMirrors());
Env<AttrContext> diamondEnv = localEnv.dup(tree);
diamondEnv.info.selectSuper = cdef != null;
@@ -2255,7 +2262,8 @@
owntype = elemtype;
for (List<JCExpression> l = tree.dims; l.nonEmpty(); l = l.tail) {
attribExpr(l.head, localEnv, syms.intType);
- owntype = new ArrayType(owntype, syms.arrayClass);
+ owntype = new ArrayType(owntype, syms.arrayClass,
+ Type.noAnnotations);
}
} else {
// we are seeing an untyped aggregate { ... }
@@ -2272,7 +2280,8 @@
}
if (tree.elems != null) {
attribExprs(tree.elems, localEnv, elemtype);
- owntype = new ArrayType(elemtype, syms.arrayClass);
+ owntype = new ArrayType(elemtype, syms.arrayClass,
+ Type.noAnnotations);
}
if (!types.isReifiable(elemtype))
log.error(tree.pos(), "generic.array.creation");
@@ -2763,7 +2772,7 @@
targetError = false;
}
- JCDiagnostic detailsDiag = ((Resolve.ResolveError)refSym).getDiagnostic(JCDiagnostic.DiagnosticType.FRAGMENT,
+ JCDiagnostic detailsDiag = ((Resolve.ResolveError)refSym.baseSymbol()).getDiagnostic(JCDiagnostic.DiagnosticType.FRAGMENT,
that, exprType.tsym, exprType, that.name, argtypes, typeargtypes);
JCDiagnostic.DiagnosticType diagKind = targetError ?
@@ -2838,7 +2847,8 @@
ResultInfo checkInfo =
resultInfo.dup(newMethodTemplate(
desc.getReturnType().hasTag(VOID) ? Type.noType : desc.getReturnType(),
- that.kind.isUnbound() ? argtypes.tail : argtypes, typeargtypes));
+ that.kind.isUnbound() ? argtypes.tail : argtypes, typeargtypes),
+ new FunctionalReturnContext(resultInfo.checkContext));
Type refType = checkId(that, lookupHelper.site, refSym, localEnv, checkInfo);
@@ -3244,7 +3254,7 @@
if (skind == TYP) {
Type elt = site;
while (elt.hasTag(ARRAY))
- elt = ((ArrayType)elt.unannotatedType()).elemtype;
+ elt = ((ArrayType)elt).elemtype;
if (elt.hasTag(TYPEVAR)) {
log.error(tree.pos(), "type.var.cant.be.deref");
result = types.createErrorType(tree.type);
@@ -3557,7 +3567,8 @@
normOuter = types.erasure(ownOuter);
if (normOuter != ownOuter)
owntype = new ClassType(
- normOuter, List.<Type>nil(), owntype.tsym);
+ normOuter, List.<Type>nil(), owntype.tsym,
+ owntype.getAnnotationMirrors());
}
}
break;
@@ -3861,7 +3872,7 @@
public void visitTypeArray(JCArrayTypeTree tree) {
Type etype = attribType(tree.elemtype, env);
- Type type = new ArrayType(etype, syms.arrayClass);
+ Type type = new ArrayType(etype, syms.arrayClass, Type.noAnnotations);
result = check(tree, type, TYP, resultInfo);
}
@@ -3909,7 +3920,8 @@
clazzOuter = site;
}
}
- owntype = new ClassType(clazzOuter, actuals, clazztype.tsym);
+ owntype = new ClassType(clazzOuter, actuals, clazztype.tsym,
+ clazztype.getAnnotationMirrors());
} else {
if (formals.length() != 0) {
log.error(tree.pos(), "wrong.number.type.args",
@@ -4060,7 +4072,8 @@
: attribType(tree.inner, env);
result = check(tree, new WildcardType(chk.checkRefType(tree.pos(), type),
tree.kind.kind,
- syms.boundClass),
+ syms.boundClass,
+ Type.noAnnotations),
TYP, resultInfo);
}
@@ -4088,7 +4101,7 @@
public void run() {
List<Attribute.TypeCompound> compounds = fromAnnotations(annotations);
Assert.check(annotations.size() == compounds.size());
- tree.type = tree.type.unannotatedType().annotatedType(compounds);
+ tree.type = tree.type.annotatedType(compounds);
}
});
}
@@ -4470,6 +4483,7 @@
}
}
public void visitVarDef(final JCVariableDecl tree) {
+ //System.err.println("validateTypeAnnotations.visitVarDef " + tree);
if (tree.sym != null && tree.sym.type != null)
validateAnnotatedType(tree.vartype, tree.sym.type);
scan(tree.mods);
@@ -4512,6 +4526,7 @@
super.visitNewArray(tree);
}
public void visitClassDef(JCClassDecl tree) {
+ //System.err.println("validateTypeAnnotations.visitClassDef " + tree);
if (sigOnly) {
scan(tree.mods);
scan(tree.typarams);
@@ -4540,7 +4555,7 @@
* can occur.
*/
private void validateAnnotatedType(final JCTree errtree, final Type type) {
- // System.out.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
+ //System.err.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
if (type.isPrimitiveOrVoid()) {
return;
@@ -4578,8 +4593,7 @@
}
} else if (enclTr.hasTag(ANNOTATED_TYPE)) {
JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr;
- if (enclTy == null ||
- enclTy.hasTag(NONE)) {
+ if (enclTy == null || enclTy.hasTag(NONE)) {
if (at.getAnnotations().size() == 1) {
log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute);
} else {
@@ -4598,16 +4612,16 @@
} else if (enclTr.hasTag(JCTree.Tag.WILDCARD)) {
JCWildcard wc = (JCWildcard) enclTr;
if (wc.getKind() == JCTree.Kind.EXTENDS_WILDCARD) {
- validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getExtendsBound());
+ validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getExtendsBound());
} else if (wc.getKind() == JCTree.Kind.SUPER_WILDCARD) {
- validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getSuperBound());
+ validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy).getSuperBound());
} else {
// Nothing to do for UNBOUND
}
repeat = false;
} else if (enclTr.hasTag(TYPEARRAY)) {
JCArrayTypeTree art = (JCArrayTypeTree) enclTr;
- validateAnnotatedType(art.getType(), ((ArrayType)enclTy.unannotatedType()).getComponentType());
+ validateAnnotatedType(art.getType(), ((ArrayType)enclTy).getComponentType());
repeat = false;
} else if (enclTr.hasTag(TYPEUNION)) {
JCTypeUnion ut = (JCTypeUnion) enclTr;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Fri May 16 14:35:37 2014 -0700
@@ -2234,11 +2234,11 @@
if (t.hasTag(TYPEVAR) && (t.tsym.flags() & UNATTRIBUTED) != 0)
return;
if (seen.contains(t)) {
- tv = (TypeVar)t.unannotatedType();
+ tv = (TypeVar)t;
tv.bound = types.createErrorType(t);
log.error(pos, "cyclic.inheritance", t);
} else if (t.hasTag(TYPEVAR)) {
- tv = (TypeVar)t.unannotatedType();
+ tv = (TypeVar)t;
seen = seen.prepend(tv);
for (Type b : types.getBounds(tv))
checkNonCyclic1(pos, b, seen);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Fri May 16 14:35:37 2014 -0700
@@ -134,13 +134,18 @@
SpeculativeCache speculativeCache;
DeferredType(JCExpression tree, Env<AttrContext> env) {
- super(null);
+ super(null, noAnnotations);
this.tree = tree;
this.env = attr.copyEnv(env);
this.speculativeCache = new SpeculativeCache();
}
@Override
+ public DeferredType annotatedType(List<Attribute.TypeCompound> typeAnnotations) {
+ throw new AssertionError("Cannot annotate a deferred type");
+ }
+
+ @Override
public TypeTag getTag() {
return DEFERRED;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Fri May 16 14:35:37 2014 -0700
@@ -373,7 +373,7 @@
List<Type> upperBounds = uv.getBounds(InferenceBound.UPPER);
if (Type.containsAny(upperBounds, vars)) {
TypeSymbol fresh_tvar = new TypeVariableSymbol(Flags.SYNTHETIC, uv.qtype.tsym.name, null, uv.qtype.tsym.owner);
- fresh_tvar.type = new TypeVar(fresh_tvar, types.makeCompoundType(uv.getBounds(InferenceBound.UPPER)), null);
+ fresh_tvar.type = new TypeVar(fresh_tvar, types.makeCompoundType(uv.getBounds(InferenceBound.UPPER)), null, Type.noAnnotations);
todo.append(uv);
uv.inst = fresh_tvar.type;
} else if (upperBounds.nonEmpty()) {
@@ -1505,7 +1505,9 @@
LOWER.solve(uv, inferenceContext) :
infer.syms.botType;
CapturedType prevCaptured = (CapturedType)uv.qtype;
- return new CapturedType(prevCaptured.tsym.name, prevCaptured.tsym.owner, upper, lower, prevCaptured.wildcard);
+ return new CapturedType(prevCaptured.tsym.name, prevCaptured.tsym.owner,
+ upper, lower, prevCaptured.wildcard,
+ Type.noAnnotations);
}
};
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Fri May 16 14:35:37 2014 -0700
@@ -28,7 +28,6 @@
import java.util.*;
import com.sun.tools.javac.code.*;
-import com.sun.tools.javac.code.Type.AnnotatedType;
import com.sun.tools.javac.jvm.*;
import com.sun.tools.javac.main.Option.PkgInfo;
import com.sun.tools.javac.tree.*;
@@ -452,7 +451,8 @@
ClassSymbol outerCacheClass = outerCacheClass();
this.mapVar = new VarSymbol(STATIC | SYNTHETIC | FINAL,
varName,
- new ArrayType(syms.intType, syms.arrayClass),
+ new ArrayType(syms.intType, syms.arrayClass,
+ Type.noAnnotations),
outerCacheClass);
enterSynthetic(pos, mapVar, outerCacheClass.members());
}
@@ -493,7 +493,8 @@
syms.lengthVar);
JCExpression mapVarInit = make
.NewArray(make.Type(syms.intType), List.of(size), null)
- .setType(new ArrayType(syms.intType, syms.arrayClass));
+ .setType(new ArrayType(syms.intType, syms.arrayClass,
+ Type.noAnnotations));
// try { $SwitchMap$Color[red.ordinal()] = 1; } catch (java.lang.NoSuchFieldError ex) {}
ListBuffer<JCStatement> stmts = new ListBuffer<>();
@@ -1979,7 +1980,7 @@
List.<JCExpression>of(make.Literal(INT, 0).setType(syms.intType)),
null);
newcache.type = new ArrayType(types.erasure(outerCacheClass.type),
- syms.arrayClass);
+ syms.arrayClass, Type.noAnnotations);
// forNameSym := java.lang.Class.forName(
// String s,boolean init,ClassLoader loader)
@@ -2568,7 +2569,8 @@
Name valuesName = names.fromString(target.syntheticNameChar() + "VALUES");
while (tree.sym.members().lookup(valuesName).scope != null) // avoid name clash
valuesName = names.fromString(valuesName + "" + target.syntheticNameChar());
- Type arrayType = new ArrayType(types.erasure(tree.type), syms.arrayClass);
+ Type arrayType = new ArrayType(types.erasure(tree.type),
+ syms.arrayClass, Type.noAnnotations);
VarSymbol valuesVar = new VarSymbol(PRIVATE|FINAL|STATIC|SYNTHETIC,
valuesName,
arrayType,
@@ -2841,7 +2843,7 @@
tree.underlyingType = translate(tree.underlyingType);
// but maintain type annotations in the type.
if (tree.type.isAnnotated()) {
- tree.type = tree.underlyingType.type.unannotatedType().annotatedType(tree.type.getAnnotationMirrors());
+ tree.type = tree.underlyingType.type.annotatedType(tree.type.getAnnotationMirrors());
} else if (tree.underlyingType.type.isAnnotated()) {
tree.type = tree.underlyingType.type;
}
@@ -3145,7 +3147,8 @@
JCNewArray boxedArgs = make.NewArray(make.Type(varargsElement),
List.<JCExpression>nil(),
elems.toList());
- boxedArgs.type = new ArrayType(varargsElement, syms.arrayClass);
+ boxedArgs.type = new ArrayType(varargsElement, syms.arrayClass,
+ Type.noAnnotations);
result.append(boxedArgs);
} else {
if (args.length() != 1) throw new AssertionError(args);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Fri May 16 14:35:37 2014 -0700
@@ -457,7 +457,8 @@
* to the symbol table.
*/
private void addEnumMembers(JCClassDecl tree, Env<AttrContext> env) {
- JCExpression valuesType = make.Type(new ArrayType(tree.sym.type, syms.arrayClass));
+ JCExpression valuesType = make.Type(new ArrayType(tree.sym.type, syms.arrayClass,
+ Type.noAnnotations));
// public static T[] values() { return ???; }
JCMethodDecl values = make.
@@ -677,7 +678,7 @@
//because varargs is represented in the tree as a
//modifier on the parameter declaration, and not as a
//distinct type of array node.
- ArrayType atype = (ArrayType)tree.vartype.type.unannotatedType();
+ ArrayType atype = (ArrayType)tree.vartype.type;
tree.vartype.type = atype.makeVarargs();
}
Scope enclScope = enter.enterScope(env);
@@ -1255,11 +1256,13 @@
ClassType ct = (ClassType) sym.type;
Assert.check(ct.typarams_field.isEmpty());
if (n == 1) {
- TypeVar v = new TypeVar(names.fromString("T"), sym, syms.botType);
+ TypeVar v = new TypeVar(names.fromString("T"), sym, syms.botType,
+ Type.noAnnotations);
ct.typarams_field = ct.typarams_field.prepend(v);
} else {
for (int i = n; i > 0; i--) {
- TypeVar v = new TypeVar(names.fromString("T" + i), sym, syms.botType);
+ TypeVar v = new TypeVar(names.fromString("T" + i), sym,
+ syms.botType, Type.noAnnotations);
ct.typarams_field = ct.typarams_field.prepend(v);
}
}
@@ -1310,8 +1313,8 @@
}
Type mType = new MethodType(argtypes, null, thrown, c);
Type initType = typarams.nonEmpty() ?
- new ForAll(typarams, mType) :
- mType;
+ new ForAll(typarams, mType) :
+ mType;
MethodSymbol init = new MethodSymbol(flags, names.init,
initType, c);
init.params = createDefaultConstructorParams(make, baseInit, init,
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Fri May 16 14:35:37 2014 -0700
@@ -94,7 +94,7 @@
public final boolean boxingEnabled;
public final boolean varargsEnabled;
public final boolean allowMethodHandles;
- public final boolean allowStructuralMostSpecific;
+ public final boolean allowFunctionalInterfaceMostSpecific;
private final boolean debugResolve;
private final boolean compactMethodDiags;
final EnumSet<VerboseResolutionMode> verboseResolutionMode;
@@ -135,7 +135,7 @@
verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
Target target = Target.instance(context);
allowMethodHandles = target.hasMethodHandles();
- allowStructuralMostSpecific = source.allowStructuralMostSpecific();
+ allowFunctionalInterfaceMostSpecific = source.allowFunctionalInterfaceMostSpecific();
polymorphicSignatureScope = new Scope(syms.noSymbol);
inapplicableMethodException = new InapplicableMethodException(diags);
@@ -1084,50 +1084,47 @@
}
public boolean compatible(Type found, Type req, Warner warn) {
- if (!allowStructuralMostSpecific || actual == null) {
- return super.compatible(found, req, warn);
- } else {
- switch (actual.getTag()) {
- case DEFERRED:
- DeferredType dt = (DeferredType) actual;
- DeferredType.SpeculativeCache.Entry e = dt.speculativeCache.get(deferredAttrContext.msym, deferredAttrContext.phase);
- return (e == null || e.speculativeTree == deferredAttr.stuckTree)
- ? super.compatible(found, req, warn) :
- mostSpecific(found, req, e.speculativeTree, warn);
- default:
- return standaloneMostSpecific(found, req, actual, warn);
+ if (allowFunctionalInterfaceMostSpecific &&
+ unrelatedFunctionalInterfaces(found, req) &&
+ (actual != null && actual.getTag() == DEFERRED)) {
+ DeferredType dt = (DeferredType) actual;
+ DeferredType.SpeculativeCache.Entry e =
+ dt.speculativeCache.get(deferredAttrContext.msym, deferredAttrContext.phase);
+ if (e != null && e.speculativeTree != deferredAttr.stuckTree) {
+ return functionalInterfaceMostSpecific(found, req, e.speculativeTree, warn);
}
}
+ return super.compatible(found, req, warn);
}
- private boolean mostSpecific(Type t, Type s, JCTree tree, Warner warn) {
- MostSpecificChecker msc = new MostSpecificChecker(t, s, warn);
+ /** Whether {@code t} and {@code s} are unrelated functional interface types. */
+ private boolean unrelatedFunctionalInterfaces(Type t, Type s) {
+ return types.isFunctionalInterface(t.tsym) &&
+ types.isFunctionalInterface(s.tsym) &&
+ types.asSuper(t, s.tsym) == null &&
+ types.asSuper(s, t.tsym) == null;
+ }
+
+ /** Parameters {@code t} and {@code s} are unrelated functional interface types. */
+ private boolean functionalInterfaceMostSpecific(Type t, Type s, JCTree tree, Warner warn) {
+ FunctionalInterfaceMostSpecificChecker msc = new FunctionalInterfaceMostSpecificChecker(t, s, warn);
msc.scan(tree);
return msc.result;
}
- boolean polyMostSpecific(Type t1, Type t2, Warner warn) {
- return (!t1.isPrimitive() && t2.isPrimitive())
- ? true : super.compatible(t1, t2, warn);
- }
-
- boolean standaloneMostSpecific(Type t1, Type t2, Type exprType, Warner warn) {
- return (exprType.isPrimitive() == t1.isPrimitive()
- && exprType.isPrimitive() != t2.isPrimitive())
- ? true : super.compatible(t1, t2, warn);
- }
-
/**
- * Structural checker for most specific.
+ * Tests whether one functional interface type can be considered more specific
+ * than another unrelated functional interface type for the scanned expression.
*/
- class MostSpecificChecker extends DeferredAttr.PolyScanner {
+ class FunctionalInterfaceMostSpecificChecker extends DeferredAttr.PolyScanner {
final Type t;
final Type s;
final Warner warn;
boolean result;
- MostSpecificChecker(Type t, Type s, Warner warn) {
+ /** Parameters {@code t} and {@code s} are unrelated functional interface types. */
+ FunctionalInterfaceMostSpecificChecker(Type t, Type s, Warner warn) {
this.t = t;
this.s = s;
this.warn = warn;
@@ -1136,102 +1133,96 @@
@Override
void skip(JCTree tree) {
- result &= standaloneMostSpecific(t, s, tree.type, warn);
+ result &= false;
}
@Override
public void visitConditional(JCConditional tree) {
- if (tree.polyKind == PolyKind.STANDALONE) {
- result &= standaloneMostSpecific(t, s, tree.type, warn);
- } else {
- super.visitConditional(tree);
- }
- }
-
- @Override
- public void visitApply(JCMethodInvocation tree) {
- result &= (tree.polyKind == PolyKind.STANDALONE)
- ? standaloneMostSpecific(t, s, tree.type, warn)
- : polyMostSpecific(t, s, warn);
- }
-
- @Override
- public void visitNewClass(JCNewClass tree) {
- result &= (tree.polyKind == PolyKind.STANDALONE)
- ? standaloneMostSpecific(t, s, tree.type, warn)
- : polyMostSpecific(t, s, warn);
+ scan(tree.truepart);
+ scan(tree.falsepart);
}
@Override
public void visitReference(JCMemberReference tree) {
- if (types.isFunctionalInterface(t.tsym) &&
- types.isFunctionalInterface(s.tsym)) {
- Type desc_t = types.findDescriptorType(t);
- Type desc_s = types.findDescriptorType(s);
- if (types.isSameTypes(desc_t.getParameterTypes(),
- inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
- if (types.asSuper(t, s.tsym) != null ||
- types.asSuper(s, t.tsym) != null) {
- result &= MostSpecificCheckContext.super.compatible(t, s, warn);
- } else if (!desc_s.getReturnType().hasTag(VOID)) {
- //perform structural comparison
- Type ret_t = desc_t.getReturnType();
- Type ret_s = desc_s.getReturnType();
- result &= ((tree.refPolyKind == PolyKind.STANDALONE)
- ? standaloneMostSpecific(ret_t, ret_s, tree.sym.type.getReturnType(), warn)
- : polyMostSpecific(ret_t, ret_s, warn));
- } else {
- return;
- }
+ Type desc_t = types.findDescriptorType(t);
+ Type desc_s = types.findDescriptorType(s);
+ // use inference variables here for more-specific inference (18.5.4)
+ if (!types.isSameTypes(desc_t.getParameterTypes(),
+ inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
+ result &= false;
+ } else {
+ // compare return types
+ Type ret_t = desc_t.getReturnType();
+ Type ret_s = desc_s.getReturnType();
+ if (ret_s.hasTag(VOID)) {
+ result &= true;
+ } else if (ret_t.hasTag(VOID)) {
+ result &= false;
+ } else if (ret_t.isPrimitive() != ret_s.isPrimitive()) {
+ boolean retValIsPrimitive =
+ tree.refPolyKind == PolyKind.STANDALONE &&
+ tree.sym.type.getReturnType().isPrimitive();
+ result &= (retValIsPrimitive == ret_t.isPrimitive()) &&
+ (retValIsPrimitive != ret_s.isPrimitive());
+ } else {
+ result &= MostSpecificCheckContext.super.compatible(ret_t, ret_s, warn);
}
- } else {
- result &= false;
}
}
@Override
public void visitLambda(JCLambda tree) {
- if (types.isFunctionalInterface(t.tsym) &&
- types.isFunctionalInterface(s.tsym)) {
- Type desc_t = types.findDescriptorType(t);
- Type desc_s = types.findDescriptorType(s);
- if (types.isSameTypes(desc_t.getParameterTypes(),
- inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
- if (types.asSuper(t, s.tsym) != null ||
- types.asSuper(s, t.tsym) != null) {
- result &= MostSpecificCheckContext.super.compatible(t, s, warn);
- } else if (!desc_s.getReturnType().hasTag(VOID)) {
- //perform structural comparison
- Type ret_t = desc_t.getReturnType();
- Type ret_s = desc_s.getReturnType();
- scanLambdaBody(tree, ret_t, ret_s);
- } else {
- return;
+ Type desc_t = types.findDescriptorType(t);
+ Type desc_s = types.findDescriptorType(s);
+ // use inference variables here for more-specific inference (18.5.4)
+ if (!types.isSameTypes(desc_t.getParameterTypes(),
+ inferenceContext().asUndetVars(desc_s.getParameterTypes()))) {
+ result &= false;
+ } else {
+ // compare return types
+ Type ret_t = desc_t.getReturnType();
+ Type ret_s = desc_s.getReturnType();
+ if (ret_s.hasTag(VOID)) {
+ result &= true;
+ } else if (ret_t.hasTag(VOID)) {
+ result &= false;
+ } else if (unrelatedFunctionalInterfaces(ret_t, ret_s)) {
+ for (JCExpression expr : lambdaResults(tree)) {
+ result &= functionalInterfaceMostSpecific(ret_t, ret_s, expr, warn);
}
+ } else if (ret_t.isPrimitive() != ret_s.isPrimitive()) {
+ for (JCExpression expr : lambdaResults(tree)) {
+ boolean retValIsPrimitive = expr.isStandalone() && expr.type.isPrimitive();
+ result &= (retValIsPrimitive == ret_t.isPrimitive()) &&
+ (retValIsPrimitive != ret_s.isPrimitive());
+ }
+ } else {
+ result &= MostSpecificCheckContext.super.compatible(ret_t, ret_s, warn);
}
- } else {
- result &= false;
}
}
//where
- void scanLambdaBody(JCLambda lambda, final Type t, final Type s) {
+ private List<JCExpression> lambdaResults(JCLambda lambda) {
if (lambda.getBodyKind() == JCTree.JCLambda.BodyKind.EXPRESSION) {
- result &= MostSpecificCheckContext.this.mostSpecific(t, s, lambda.body, warn);
+ return List.of((JCExpression) lambda.body);
} else {
+ final ListBuffer<JCExpression> buffer = new ListBuffer<>();
DeferredAttr.LambdaReturnScanner lambdaScanner =
new DeferredAttr.LambdaReturnScanner() {
@Override
public void visitReturn(JCReturn tree) {
if (tree.expr != null) {
- result &= MostSpecificCheckContext.this.mostSpecific(t, s, tree.expr, warn);
+ buffer.append(tree.expr);
}
}
};
lambdaScanner.scan(lambda.body);
+ return buffer.toList();
}
}
}
+
}
public MethodCheck mostSpecificCheck(List<Type> actuals, boolean strict) {
@@ -1435,7 +1426,7 @@
return bestSoFar;
} else if (useVarargs && (sym.flags() & VARARGS) == 0) {
return bestSoFar.kind >= ERRONEOUS ?
- new BadVarargsMethod((ResolveError)bestSoFar) :
+ new BadVarargsMethod((ResolveError)bestSoFar.baseSymbol()) :
bestSoFar;
}
Assert.check(sym.kind < AMBIGUOUS);
@@ -1527,14 +1518,22 @@
if (m2SignatureMoreSpecific) return m2;
return ambiguityError(m1, m2);
case AMBIGUOUS:
- //check if m1 is more specific than all ambiguous methods in m2
+ //compare m1 to ambiguous methods in m2
AmbiguityError e = (AmbiguityError)m2.baseSymbol();
+ boolean m1MoreSpecificThanAnyAmbiguous = true;
+ boolean allAmbiguousMoreSpecificThanM1 = true;
for (Symbol s : e.ambiguousSyms) {
- if (mostSpecific(argtypes, m1, s, env, site, allowBoxing, useVarargs) != m1) {
- return e.addAmbiguousSymbol(m1);
- }
+ Symbol moreSpecific = mostSpecific(argtypes, m1, s, env, site, allowBoxing, useVarargs);
+ m1MoreSpecificThanAnyAmbiguous &= moreSpecific == m1;
+ allAmbiguousMoreSpecificThanM1 &= moreSpecific == s;
}
- return m1;
+ if (m1MoreSpecificThanAnyAmbiguous)
+ return m1;
+ //if m1 is more specific than some ambiguous methods, but other ambiguous methods are
+ //more specific than m1, add it as a new ambiguous method:
+ if (!allAmbiguousMoreSpecificThanM1)
+ e.addAmbiguousSymbol(m1);
+ return e;
default:
throw new AssertionError();
}
@@ -2195,7 +2194,7 @@
List<Type> typeargtypes,
LogResolveHelper logResolveHelper) {
if (sym.kind >= AMBIGUOUS) {
- ResolveError errSym = (ResolveError)sym;
+ ResolveError errSym = (ResolveError)sym.baseSymbol();
sym = errSym.access(name, qualified ? site.tsym : syms.noSymbol);
argtypes = logResolveHelper.getArgumentTypes(errSym, sym, name, argtypes);
if (logResolveHelper.resolveDiagnosticNeeded(site, argtypes, typeargtypes)) {
@@ -2584,7 +2583,7 @@
sym = super.access(env, pos, location, sym);
} else {
final JCDiagnostic details = sym.kind == WRONG_MTH ?
- ((InapplicableSymbolError)sym).errCandidate().snd :
+ ((InapplicableSymbolError)sym.baseSymbol()).errCandidate().snd :
null;
sym = new InapplicableSymbolError(sym.kind, "diamondError", currentResolutionContext) {
@Override
@@ -2631,7 +2630,7 @@
((ForAll)sym.type).tvars :
List.<Type>nil();
Type constrType = new ForAll(site.tsym.type.getTypeArguments().appendList(oldParams),
- types.createMethodTypeWithReturn(sym.type.asMethodType(), site));
+ types.createMethodTypeWithReturn(sym.type.asMethodType(), site));
MethodSymbol newConstr = new MethodSymbol(sym.flags(), names.init, constrType, site.tsym) {
@Override
public Symbol baseSymbol() {
@@ -2992,12 +2991,12 @@
return true;
case WRONG_MTH:
InapplicableSymbolError errSym =
- (InapplicableSymbolError)s;
+ (InapplicableSymbolError)s.baseSymbol();
return new Template(MethodCheckDiag.ARITY_MISMATCH.regex())
.matches(errSym.errCandidate().snd);
case WRONG_MTHS:
InapplicableSymbolsError errSyms =
- (InapplicableSymbolsError)s;
+ (InapplicableSymbolsError)s.baseSymbol();
return errSyms.filterCandidates(errSyms.mapCandidates()).isEmpty();
case WRONG_STATICNESS:
return false;
@@ -3272,7 +3271,7 @@
List<Type> typeargtypes, MethodResolutionPhase maxPhase) {
super(referenceTree, names.init, site, argtypes, typeargtypes, maxPhase);
if (site.isRaw()) {
- this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym);
+ this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym, site.getAnnotationMirrors());
needsInference = true;
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Fri May 16 14:35:37 2014 -0700
@@ -624,18 +624,18 @@
case '+': {
sigp++;
Type t = sigToType();
- return new WildcardType(t, BoundKind.EXTENDS,
- syms.boundClass);
+ return new WildcardType(t, BoundKind.EXTENDS, syms.boundClass,
+ Type.noAnnotations);
}
case '*':
sigp++;
return new WildcardType(syms.objectType, BoundKind.UNBOUND,
- syms.boundClass);
+ syms.boundClass, Type.noAnnotations);
case '-': {
sigp++;
Type t = sigToType();
- return new WildcardType(t, BoundKind.SUPER,
- syms.boundClass);
+ return new WildcardType(t, BoundKind.SUPER, syms.boundClass,
+ Type.noAnnotations);
}
case 'B':
sigp++;
@@ -680,7 +680,8 @@
return syms.booleanType;
case '[':
sigp++;
- return new ArrayType(sigToType(), syms.arrayClass);
+ return new ArrayType(sigToType(), syms.arrayClass,
+ Type.noAnnotations);
case '(':
sigp++;
List<Type> argtypes = sigToTypes(')');
@@ -735,7 +736,8 @@
try {
return (outer == Type.noType) ?
t.erasure(types) :
- new ClassType(outer, List.<Type>nil(), t);
+ new ClassType(outer, List.<Type>nil(), t,
+ Type.noAnnotations);
} finally {
sbp = startSbp;
}
@@ -745,7 +747,8 @@
ClassSymbol t = syms.enterClass(names.fromUtf(signatureBuffer,
startSbp,
sbp - startSbp));
- outer = new ClassType(outer, sigToTypes('>'), t) {
+ outer = new ClassType(outer, sigToTypes('>'), t,
+ Type.noAnnotations) {
boolean completed = false;
@Override
public Type getEnclosingType() {
@@ -808,7 +811,8 @@
t = syms.enterClass(names.fromUtf(signatureBuffer,
startSbp,
sbp - startSbp));
- outer = new ClassType(outer, List.<Type>nil(), t);
+ outer = new ClassType(outer, List.<Type>nil(), t,
+ Type.noAnnotations);
}
signatureBuffer[sbp++] = (byte)'$';
continue;
@@ -871,7 +875,8 @@
Name name = names.fromUtf(signature, start, sigp - start);
TypeVar tvar;
if (sigEnterPhase) {
- tvar = new TypeVar(name, currentOwner, syms.botType);
+ tvar = new TypeVar(name, currentOwner, syms.botType,
+ Type.noAnnotations);
typevars.enter(tvar.tsym);
} else {
tvar = (TypeVar)findTypeVar(name);
@@ -910,7 +915,8 @@
// we don't know for sure if this owner is correct. It could
// be a method and there is no way to tell before reading the
// enclosing method attribute.
- TypeVar t = new TypeVar(name, currentOwner, syms.botType);
+ TypeVar t = new TypeVar(name, currentOwner, syms.botType,
+ Type.noAnnotations);
missingTypeVariables = missingTypeVariables.prepend(t);
// System.err.println("Missing type var " + name);
return t;
@@ -1534,35 +1540,41 @@
// local variable
case LOCAL_VARIABLE: {
final int table_length = nextChar();
- final TypeAnnotationPosition position =
- TypeAnnotationPosition.localVariable(readTypePath());
-
- position.lvarOffset = new int[table_length];
- position.lvarLength = new int[table_length];
- position.lvarIndex = new int[table_length];
+ final int[] newLvarOffset = new int[table_length];
+ final int[] newLvarLength = new int[table_length];
+ final int[] newLvarIndex = new int[table_length];
for (int i = 0; i < table_length; ++i) {
- position.lvarOffset[i] = nextChar();
- position.lvarLength[i] = nextChar();
- position.lvarIndex[i] = nextChar();
+ newLvarOffset[i] = nextChar();
+ newLvarLength[i] = nextChar();
+ newLvarIndex[i] = nextChar();
}
+
+ final TypeAnnotationPosition position =
+ TypeAnnotationPosition.localVariable(readTypePath());
+ position.lvarOffset = newLvarOffset;
+ position.lvarLength = newLvarLength;
+ position.lvarIndex = newLvarIndex;
return position;
}
// resource variable
case RESOURCE_VARIABLE: {
final int table_length = nextChar();
- final TypeAnnotationPosition position =
- TypeAnnotationPosition.resourceVariable(readTypePath());
-
- position.lvarOffset = new int[table_length];
- position.lvarLength = new int[table_length];
- position.lvarIndex = new int[table_length];
+ final int[] newLvarOffset = new int[table_length];
+ final int[] newLvarLength = new int[table_length];
+ final int[] newLvarIndex = new int[table_length];
for (int i = 0; i < table_length; ++i) {
- position.lvarOffset[i] = nextChar();
- position.lvarLength[i] = nextChar();
- position.lvarIndex[i] = nextChar();
+ newLvarOffset[i] = nextChar();
+ newLvarLength[i] = nextChar();
+ newLvarIndex[i] = nextChar();
}
+
+ final TypeAnnotationPosition position =
+ TypeAnnotationPosition.resourceVariable(readTypePath());
+ position.lvarOffset = newLvarOffset;
+ position.lvarLength = newLvarLength;
+ position.lvarIndex = newLvarIndex;
return position;
}
// exception parameter
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Fri May 16 14:35:37 2014 -0700
@@ -286,7 +286,6 @@
*/
@Override
public void assembleSig(Type type) {
- type = type.unannotatedType();
switch (type.getTag()) {
case UNINITIALIZED_THIS:
case UNINITIALIZED_OBJECT:
@@ -354,7 +353,7 @@
} else if (t.hasTag(ARRAY)) {
return typeSig(types.erasure(t));
} else {
- throw new AssertionError("xClassName");
+ throw new AssertionError("xClassName expects class or array type, got " + t);
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Code.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Code.java Fri May 16 14:35:37 2014 -0700
@@ -928,7 +928,7 @@
if (o instanceof Pool.MethodHandle) return syms.methodHandleType;
if (o instanceof UniqueType) return typeForPool(((UniqueType)o).type);
if (o instanceof Type) {
- Type ty = ((Type)o).unannotatedType();
+ Type ty = (Type) o;
if (ty instanceof Type.ArrayType) return syms.classType;
if (ty instanceof Type.MethodType) return syms.methodTypeType;
@@ -1579,8 +1579,8 @@
/** Add a catch clause to code.
*/
- public void addCatch(
- char startPc, char endPc, char handlerPc, char catchType) {
+ public void addCatch(char startPc, char endPc,
+ char handlerPc, char catchType) {
catchInfo.append(new char[]{startPc, endPc, handlerPc, catchType});
}
@@ -2149,7 +2149,7 @@
for (Attribute.TypeCompound ta : lv.sym.getRawTypeAttributes()) {
TypeAnnotationPosition p = ta.position;
if (p.hasCatchType()) {
- final int idx = findExceptionIndex(p.getCatchType());
+ final int idx = findExceptionIndex(p);
if (idx == -1)
Assert.error("Could not find exception index for type annotation " +
ta + " on exception parameter");
@@ -2159,14 +2159,17 @@
}
}
- private int findExceptionIndex(int catchType) {
+ private int findExceptionIndex(TypeAnnotationPosition p) {
+ final int catchType = p.getCatchType();
+ final int startPos = p.getStartPos();
+ final int len = catchInfo.length();
List<char[]> iter = catchInfo.toList();
- int len = catchInfo.length();
for (int i = 0; i < len; ++i) {
char[] catchEntry = iter.head;
iter = iter.tail;
- char ct = catchEntry[3];
- if (catchType == ct) {
+ int ct = catchEntry[3];
+ int sp = catchEntry[0];
+ if (catchType == ct && sp == startPos) {
return i;
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Fri May 16 14:35:37 2014 -0700
@@ -317,10 +317,6 @@
int makeRef(DiagnosticPosition pos, Type type) {
checkDimension(pos, type);
if (type.isAnnotated()) {
- // Treat annotated types separately - we don't want
- // to collapse all of them - at least for annotated
- // exceptions.
- // TODO: review this.
return pool.put((Object)type);
} else {
return pool.put(type.hasTag(CLASS) ? (Object)type.tsym : (Object)type);
@@ -1647,7 +1643,7 @@
if (subCatch.type.isAnnotated()) {
for (Attribute.TypeCompound tc :
subCatch.type.getAnnotationMirrors()) {
- tc.position.setCatchType(catchType);
+ tc.position.setCatchInfo(catchType, startpc);
}
}
}
@@ -1664,7 +1660,7 @@
if (subCatch.type.isAnnotated()) {
for (Attribute.TypeCompound tc :
subCatch.type.getAnnotationMirrors()) {
- tc.position.setCatchType(catchType);
+ tc.position.setCatchInfo(catchType, startpc);
}
}
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/JNIWriter.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/JNIWriter.java Fri May 16 14:35:37 2014 -0700
@@ -674,11 +674,6 @@
}
@Override
- public R visitAnnotatedType(Type.AnnotatedType t, P p) {
- return defaultAction(t, p);
- }
-
- @Override
public R visitType(Type t, P p) {
return defaultAction(t, p);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java Fri May 16 14:35:37 2014 -0700
@@ -102,10 +102,11 @@
*/
public int put(Object value) {
value = makePoolValue(value);
-// assert !(value instanceof Type.TypeVar);
+ Assert.check(!(value instanceof Type.TypeVar));
+ Assert.check(!(value instanceof Types.UniqueType &&
+ ((UniqueType) value).type instanceof Type.TypeVar));
Integer index = indices.get(value);
if (index == null) {
-// System.err.println("put " + value + " " + value.getClass());//DEBUG
index = pp;
indices.put(value, index);
pool = ArrayUtils.ensureCapacity(pool, pp);
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/UninitializedType.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/UninitializedType.java Fri May 16 14:35:37 2014 -0700
@@ -26,6 +26,7 @@
package com.sun.tools.javac.jvm;
import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.TypeTag.UNINITIALIZED_OBJECT;
import static com.sun.tools.javac.code.TypeTag.UNINITIALIZED_THIS;
@@ -41,19 +42,27 @@
class UninitializedType extends Type.DelegatedType {
public static UninitializedType uninitializedThis(Type qtype) {
- return new UninitializedType(UNINITIALIZED_THIS, qtype, -1);
+ return new UninitializedType(UNINITIALIZED_THIS, qtype, -1,
+ qtype.getAnnotationMirrors());
}
public static UninitializedType uninitializedObject(Type qtype, int offset) {
- return new UninitializedType(UNINITIALIZED_OBJECT, qtype, offset);
+ return new UninitializedType(UNINITIALIZED_OBJECT, qtype, offset,
+ qtype.getAnnotationMirrors());
}
public final int offset; // PC where allocation took place
- private UninitializedType(TypeTag tag, Type qtype, int offset) {
- super(tag, qtype);
+ private UninitializedType(TypeTag tag, Type qtype, int offset,
+ List<Attribute.TypeCompound> typeAnnotations) {
+ super(tag, qtype, typeAnnotations);
this.offset = offset;
}
+ @Override
+ public UninitializedType annotatedType(List<Attribute.TypeCompound> typeAnnotations) {
+ return new UninitializedType(tag, qtype, offset, typeAnnotations);
+ }
+
Type initializedType() {
return qtype;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri May 16 14:35:37 2014 -0700
@@ -35,9 +35,6 @@
import java.util.Queue;
import java.util.ResourceBundle;
import java.util.Set;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.annotation.processing.Processor;
import javax.lang.model.SourceVersion;
@@ -1292,11 +1289,16 @@
* Perform dataflow checks on an attributed parse tree.
*/
protected void flow(Env<AttrContext> env, Queue<Env<AttrContext>> results) {
+ if (compileStates.isDone(env, CompileState.FLOW)) {
+ results.add(env);
+ return;
+ }
+
try {
if (shouldStop(CompileState.FLOW))
return;
- if (relax || compileStates.isDone(env, CompileState.FLOW)) {
+ if (relax) {
results.add(env);
return;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/model/JavacTypes.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/model/JavacTypes.java Fri May 16 14:35:37 2014 -0700
@@ -168,7 +168,8 @@
case PACKAGE:
throw new IllegalArgumentException(componentType.toString());
}
- return new Type.ArrayType((Type) componentType, syms.arrayClass);
+ return new Type.ArrayType((Type) componentType, syms.arrayClass,
+ Type.noAnnotations);
}
public WildcardType getWildcardType(TypeMirror extendsBound,
@@ -193,7 +194,8 @@
case DECLARED:
case ERROR:
case TYPEVAR:
- return new Type.WildcardType(bound, bkind, syms.boundClass);
+ return new Type.WildcardType(bound, bkind, syms.boundClass,
+ Type.noAnnotations);
default:
throw new IllegalArgumentException(bound.toString());
}
@@ -243,7 +245,8 @@
}
// TODO: Would like a way to check that type args match formals.
- return (DeclaredType) new Type.ClassType(outer, targs.toList(), sym);
+ return (DeclaredType) new Type.ClassType(outer, targs.toList(), sym,
+ Type.noAnnotations);
}
/**
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri May 16 14:35:37 2014 -0700
@@ -1089,7 +1089,8 @@
for (ClassSymbol cs : symtab.classes.values()) {
if (cs.classfile != null || cs.kind == Kinds.ERR) {
cs.reset();
- cs.type = new ClassType(cs.type.getEnclosingType(), null, cs);
+ cs.type = new ClassType(cs.type.getEnclosingType(),
+ null, cs, Type.noAnnotations);
if (cs.completer == null) {
cs.completer = initialCompleter;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Fri May 16 14:35:37 2014 -0700
@@ -643,6 +643,9 @@
super.setPos(pos);
return this;
}
+
+ public boolean isPoly() { return false; }
+ public boolean isStandalone() { return true; }
}
/**
@@ -663,6 +666,9 @@
/** is this poly expression a 'true' poly expression? */
public PolyKind polyKind;
+
+ @Override public boolean isPoly() { return polyKind == PolyKind.POLY; }
+ @Override public boolean isStandalone() { return polyKind == PolyKind.STANDALONE; }
}
/**
--- a/langtools/src/share/classes/com/sun/tools/javadoc/AnnotatedTypeImpl.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/AnnotatedTypeImpl.java Fri May 16 14:35:37 2014 -0700
@@ -65,7 +65,7 @@
@Override
public com.sun.javadoc.Type underlyingType() {
- return TypeMaker.getType(env, type.unannotatedType(), true, false);
+ return TypeMaker.getType(env, type, true, false);
}
@Override
--- a/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Fri May 16 14:35:37 2014 -0700
@@ -140,9 +140,6 @@
*/
static String getTypeString(DocEnv env, Type t, boolean full) {
// TODO: should annotations be included here?
- if (t.isAnnotated()) {
- t = t.unannotatedType();
- }
switch (t.getTag()) {
case ARRAY:
StringBuilder s = new StringBuilder();
--- a/langtools/test/Makefile Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/Makefile Fri May 16 14:35:37 2014 -0700
@@ -186,6 +186,12 @@
JTREG_OPTIONS += -timeoutFactor:$(JTREG_TIMEOUT_FACTOR)
endif
+# Default verbosity setting for jtreg
+JTREG_VERBOSE = fail,error,nopass
+
+# Default verbosity setting for jck
+JCK_VERBOSE = non-pass
+
# Assertions: some tests show failures when assertions are enabled.
# Since javac is typically loaded via the bootclassloader (either via TESTJAVA
# or TESTBOOTCLASSPATH), you may need -esa to enable assertions in javac.
@@ -256,6 +262,8 @@
# Version of java used to run jtreg. Should normally be the same as TESTJAVA
# TESTJAVA
# Version of java to be tested.
+# JTREG_VERBOSE
+# Verbosity setting for jtreg
# JTREG_OPTIONS
# Additional options for jtreg
# JTREG_TESTDIRS
@@ -273,7 +281,7 @@
JT_JAVA=$(JT_JAVA) $(JTREG) \
-J-Xmx512m \
-vmoption:-Xmx768m \
- -a -ignore:quiet -v:fail,error,nopass \
+ -a -ignore:quiet $(if $(JTREG_VERBOSE),-v:$(JTREG_VERBOSE)) \
-r:$(JTREG_OUTPUT_DIR)/JTreport \
-w:$(JTREG_OUTPUT_DIR)/JTwork \
-jdk:$(TESTJAVA) \
@@ -312,6 +320,8 @@
# Default is JDK 7
# TESTJAVA
# Version of java to be tested.
+# JCK_VERBOSE
+# Verbosity setting for jtjck
# JCK_COMPILER_OPTIONS
# Additional options for JCK-compiler
# JCK_COMPILER_TESTDIRS
@@ -325,9 +335,9 @@
@rm -f -r $(JCK_COMPILER_OUTPUT_DIR)/work $(JCK_COMPILER_OUTPUT_DIR)/report \
$(JCK_COMPILER_OUTPUT_DIR)/diff.html $(JCK_COMPILER_OUTPUT_DIR)/status.txt
@mkdir -p $(JCK_COMPILER_OUTPUT_DIR)
- $(JT_JAVA)/bin/java -XX:MaxPermSize=256m -Xmx512m \
+ $(JT_JAVA)/bin/java -Xmx512m \
-jar $(JCK_HOME)/JCK-compiler-8/lib/jtjck.jar \
- -v:non-pass \
+ $(if $(JCK_VERBOSE),-v:$(JCK_VERBOSE)) \
-r:$(JCK_COMPILER_OUTPUT_DIR)/report \
-w:$(JCK_COMPILER_OUTPUT_DIR)/work \
-jdk:$(TESTJAVA) \
@@ -361,6 +371,8 @@
# Version of java used to run JCK. Should normally be the same as TESTJAVA
# TESTJAVA
# Version of java to be tested.
+# JCK_VERBOSE
+# Verbosity setting for jtjck
# JCK_RUNTIME_OPTIONS
# Additional options for JCK-runtime
# JCK_RUNTIME_TESTDIRS
@@ -374,9 +386,9 @@
@rm -f -r $(JCK_RUNTIME_OUTPUT_DIR)/work $(JCK_RUNTIME_OUTPUT_DIR)/report \
$(JCK_RUNTIME_OUTPUT_DIR)/diff.html $(JCK_RUNTIME_OUTPUT_DIR)/status.txt
@mkdir -p $(JCK_RUNTIME_OUTPUT_DIR)
- $(JT_JAVA)/bin/java -XX:MaxPermSize=256m -Xmx512m \
+ $(JT_JAVA)/bin/java -Xmx512m \
-jar $(JCK_HOME)/JCK-runtime-8/lib/jtjck.jar \
- -v:non-pass \
+ $(if $(JCK_VERBOSE),-v:$(JCK_VERBOSE)) \
-r:$(JCK_RUNTIME_OUTPUT_DIR)/report \
-w:$(JCK_RUNTIME_OUTPUT_DIR)/work \
-jdk:$(TESTJAVA) \
--- a/langtools/test/com/sun/javadoc/5093723/T5093723.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/5093723/T5093723.java Fri May 16 14:35:37 2014 -0700
@@ -25,23 +25,24 @@
* @test
* @bug 5093723
* @summary REGRESSION: ClassCastException in SingleIndexWriter
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build T5093723
* @run main T5093723
*/
public class T5093723 extends JavadocTester {
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR + ".out", "-Xdoclint:none",
- SRC_DIR + "/DocumentedClass.java",
- SRC_DIR + "/UndocumentedClass.java"
- };
+ public static void main(String... args) throws Exception {
+ T5093723 tester = new T5093723();
+ tester.runTests();
+ }
- public static void main(String... args) {
- T5093723 tester = new T5093723();
- if (tester.runJavadoc(ARGS) != 0)
- throw new AssertionError("non-zero return code from javadoc");
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-Xdoclint:none",
+ testSrc("DocumentedClass.java"),
+ testSrc("UndocumentedClass.java"));
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java Fri May 16 14:35:37 2014 -0700
@@ -26,142 +26,31 @@
* @bug 4706779 4956908
* @summary Add text equivalent of class tree ASCII art for accessibility
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main AccessAsciiArt
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class AccessAsciiArt {
-
- private static final String BUGID = "4706779-4956908";
- private static final String BUGNAME = "AccessAsciiArt";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
+public class AccessAsciiArt extends JavadocTester {
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "-sourcepath", srcdir,
- "p1", "p1.subpkg"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ AccessAsciiArt tester = new AccessAsciiArt();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Test the top line of the class tree
- {
-"<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
- TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
-
- // Test the second line of the class tree
- {
-"<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
- TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
-
- // Test the third line of the class tree
- {
-"<li>p1.subpkg.SSC</li>",
- TMPDEST_DIR1 + "p1/subpkg/SSC.html" },
-
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "p1", "p1.subpkg");
+ checkExit(Exit.OK);
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.indexOf(stringToFind);
+ checkOutput("p1/subpkg/SSC.html", true,
+ // Test the top line of the class tree
+ "<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
+ // Test the second line of the class tree
+ "<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
+ // Test the third line of the class tree
+ "<li>p1.subpkg.SSC</li>");
}
}
--- a/langtools/test/com/sun/javadoc/AccessFrameTitle/AccessFrameTitle.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessFrameTitle/AccessFrameTitle.java Fri May 16 14:35:37 2014 -0700
@@ -26,141 +26,32 @@
* @bug 4636655
* @summary Add title attribute to <FRAME> tags for accessibility
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main AccessFrameTitle
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class AccessFrameTitle {
-
- private static final String BUGID = "4636655";
- private static final String BUGNAME = "AccessFrameTitle";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
+public class AccessFrameTitle extends JavadocTester {
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ AccessFrameTitle tester = new AccessFrameTitle();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Testing only for the presence of the title attributes.
- // To make this test more robust, only
- // the initial part of each title string is tested for,
- // in case the ending part of the string later changes
-
- { "title=\"All classes and interfaces (except non-static nested types)\"",
- TMPDEST_DIR1 + "index.html" },
-
- { "title=\"All Packages\"",
- TMPDEST_DIR1 + "index.html" },
-
- { "title=\"Package, class and interface descriptions\"",
- TMPDEST_DIR1 + "index.html" },
-
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.indexOf(stringToFind);
+ // Testing only for the presence of the title attributes.
+ // To make this test more robust, only
+ // the initial part of each title string is tested for,
+ // in case the ending part of the string later changes
+ checkOutput("index.html", true,
+ "title=\"All classes and interfaces (except non-static nested types)\"",
+ "title=\"All Packages\"",
+ "title=\"Package, class and interface descriptions\"");
}
}
--- a/langtools/test/com/sun/javadoc/AccessH1/AccessH1.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessH1/AccessH1.java Fri May 16 14:35:37 2014 -0700
@@ -26,141 +26,35 @@
* @bug 4636667 7052425 8016549
* @summary Use <H1, <H2>, and <H3> in proper sequence for accessibility
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main AccessH1
*/
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class AccessH1 {
-
- protected static final String NL = System.getProperty("line.separator");
-
- private static final String BUGID = "4636667-7052425";
- private static final String BUGNAME = "AccessH1";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
+public class AccessH1 extends JavadocTester {
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "-doctitle", "Document Title",
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ AccessH1 tester = new AccessH1();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
- // Test the style sheet
- {
- "h1 {\n" +
- " font-size:20px;\n" +
- "}",
- TMPDEST_DIR1 + "stylesheet.css"
- },
- // Test the doc title in the overview page
- {
- "<h1 class=\"title\">Document Title</h1>",
- TMPDEST_DIR1 + "overview-summary.html"
- }
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-doctitle", "Document Title",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
+ // Test the style sheet
+ checkOutput("stylesheet.css", true,
+ "h1 {\n"
+ + " font-size:20px;\n"
+ + "}");
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.replace(NL, "\n").indexOf(stringToFind);
+ // Test the doc title in the overview page
+ checkOutput("overview-summary.html", true,
+ "<h1 class=\"title\">Document Title</h1>");
}
}
--- a/langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java Fri May 16 14:35:37 2014 -0700
@@ -26,150 +26,40 @@
* @bug 4638136 7198273 8025633
* @summary Add ability to skip over nav bar for accessibility
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main AccessSkipNav
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class AccessSkipNav {
-
- protected static final String NL = System.getProperty("line.separator");
-
- private static final String BUGID = "4638136 - 7198273";
- private static final String BUGNAME = "AccessSkipNav";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
+public class AccessSkipNav extends JavadocTester {
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ AccessSkipNav tester = new AccessSkipNav();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Testing only for the presence of the <a href> and <a name>
-
- // Top navbar <a href>
- { "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a>",
- TMPDEST_DIR1 + "p1/C1.html" },
-
- // Top navbar <a name>
- { "<a name=\"skip.navbar.top\">\n" +
- "<!-- -->\n" +
- "</a>",
- TMPDEST_DIR1 + "p1/C1.html" },
-
- // Bottom navbar <a href>
- { "<a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a>",
- TMPDEST_DIR1 + "p1/C1.html" },
-
- // Bottom navbar <a name>
- { "<a name=\"skip.navbar.bottom\">\n" +
- "<!-- -->\n" +
- "</a>",
- TMPDEST_DIR1 + "p1/C1.html" }
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
+ // Testing only for the presence of the <a href> and <a name>
+ checkOutput("p1/C1.html", true,
+ // Top navbar <a href>
+ "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a>",
+ // Top navbar <a name>
+ "<a name=\"skip.navbar.top\">\n"
+ + "<!-- -->\n"
+ + "</a>",
+ // Bottom navbar <a href>
+ "<a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a>",
+ // Bottom navbar <a name>
+ "<a name=\"skip.navbar.bottom\">\n"
+ + "<!-- -->\n"
+ + "</a>");
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.replace(NL, "\n").indexOf(stringToFind);
}
}
--- a/langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java Fri May 16 14:35:37 2014 -0700
@@ -26,45 +26,35 @@
* @bug 4637604 4775148
* @summary Test the tables for summary attribute
* @author dkramer
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build AccessSummary
* @run main AccessSummary
*/
public class AccessSummary extends JavadocTester {
-
- /**
- * Assign value for [ fileToSearch, stringToFind ]
- */
- private static final String[][] TESTARRAY1 = {
-
- // Test that the summary attribute appears
- { "overview-summary.html",
- "summary=\"Packages table, listing packages, and an explanation\"" },
-
- // Test that the summary attribute appears
- { "p1/C1.html",
- "summary=\"Constructor Summary table, listing constructors, and an explanation\"" },
-
- // Test that the summary attribute appears
- { "constant-values.html",
- "summary=\"Constant Field Values table, listing constant fields, and values\"" }
- };
-
- // First test with -header only
- private static final String[] JAVADOC_ARGS = new String[] {
- "-d", OUTPUT_DIR,
- "-sourcepath", SRC_DIR,
- "p1", "p2"};
-
/**
* The entry point of the test.
* @param args the array of command line arguments.
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
- JavadocTester tester = new AccessSummary();
- tester.run(JAVADOC_ARGS, TESTARRAY1, new String[][] {});
- tester.printSummary(); // Necessary for string search
+ public static void main(String... args) throws Exception {
+ AccessSummary tester = new AccessSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void testAccessSummary() {
+ javadoc("-d", "out", "-sourcepath", testSrc, "p1", "p2");
+ checkExit(Exit.OK);
+ checkOutput("overview-summary.html", true,
+ "summary=\"Packages table, listing packages, and an explanation\"");
+
+ // Test that the summary attribute appears
+ checkOutput("p1/C1.html", true,
+ "summary=\"Constructor Summary table, listing constructors, and an explanation\"");
+
+ // Test that the summary attribute appears
+ checkOutput("constant-values.html", true,
+ "summary=\"Constant Field Values table, listing constant fields, and values\"");
}
}
--- a/langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java Fri May 16 14:35:37 2014 -0700
@@ -26,143 +26,37 @@
* @bug 4651598 8026567
* @summary Javadoc wrongly inserts </DD> tags when using multiple @author tags
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main AuthorDD
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
/**
* Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
*/
-public class AuthorDD
-{
-
- protected static final String NL = System.getProperty("line.separator");
-
- private static final String BUGID = "4651598";
- private static final String BUGNAME = "AuthorDD";
-
- // Subtest number. Needed because runResultsOnHTML is run twice, and subtestNum
- // should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
+public class AuthorDD extends JavadocTester {
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", BUGID,
- "-author",
- "-version",
- "-sourcepath", srcdir,
- "p1"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(AuthorDD.class.getClassLoader(),
- javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ AuthorDD tester = new AuthorDD();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Test single @since tag:
-
- { "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>JDK 1.0</dd>",
- BUGID + "/p1/C1.html" },
-
- // Test multiple @author tags:
-
- { "<dt><span class=\"simpleTagLabel\">Author:</span></dt>\n" +
- "<dd>Doug Kramer, Jamie, Neal</dd>",
- BUGID + "/p1/C1.html" },
-
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
+ @Test
+ void test() {
+ // Test for all cases except the split index page
+ javadoc("-d", "out",
+ "-author",
+ "-version",
+ "-sourcepath", testSrc,
+ "p1");
+ checkExit(Exit.OK);
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.replace(NL, "\n").indexOf(stringToFind);
+ checkOutput("p1/C1.html", true,
+ // Test single @since tag:
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>JDK 1.0</dd>",
+ // Test multiple @author tags:
+ "<dt><span class=\"simpleTagLabel\">Author:</span></dt>\n"
+ + "<dd>Doug Kramer, Jamie, Neal</dd>");
}
}
--- a/langtools/test/com/sun/javadoc/DocRootSlash/DocRootSlash.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/DocRootSlash/DocRootSlash.java Fri May 16 14:35:37 2014 -0700
@@ -26,13 +26,11 @@
* @bug 4524350 4662945 4633447
* @summary stddoclet: {@docRoot} inserts an extra trailing "/"
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main DocRootSlash
*/
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-import java.nio.*;
import java.util.regex.*;
/**
@@ -40,149 +38,55 @@
* It reads each file, complete with newlines, into a string to easily
* find strings that contain newlines.
*/
-public class DocRootSlash
-{
- private static final String BUGID = "4524350, 4662945, or 4633447";
- private static final String BUGNAME = "DocRootSlash";
- private static final String TMPDIR_STRING1 = "./docs1/";
+public class DocRootSlash extends JavadocTester {
- // Test number. Needed because runResultsOnHTMLFile is run twice, and subtestNum
- // should increment across test runs.
- public static int subtestNum = 0;
- public static int numOfSubtestsPassed = 0;
+ public static void main(String... args) throws Exception {
+ DocRootSlash tester = new DocRootSlash();
+ tester.runTests();
+ }
- // Entry point
- public static void main(String[] args) {
-
+ @Test
+ void test() {
// Directory that contains source files that javadoc runs on
String srcdir = System.getProperty("test.src", ".");
- runJavadoc(new String[] {"-d", TMPDIR_STRING1,
- "-Xdoclint:none",
- "-overview", (srcdir + "/overview.html"),
- "-header", "<A HREF=\"{@docroot}/package-list\">{@docroot}</A> <A HREF=\"{@docRoot}/help-doc\">{@docRoot}</A>",
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTMLFiles(filenameArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
- }
+ javadoc("-d", "out",
+ "-Xdoclint:none",
+ "-overview", (srcdir + "/overview.html"),
+ "-header", "<A HREF=\"{@docroot}/package-list\">{@docroot}</A> <A HREF=\"{@docRoot}/help-doc\">{@docRoot}</A>",
+ "-sourcepath", srcdir,
+ "p1", "p2");
- /** The array of filenames to test */
- private static final String[] filenameArray = {
- TMPDIR_STRING1 + "p1/C1.html" ,
- TMPDIR_STRING1 + "p1/package-summary.html",
- TMPDIR_STRING1 + "overview-summary.html"
- };
-
- public static void runTestsOnHTMLFiles(String[] filenameArray) {
- String fileString;
-
- // Bugs 4524350 4662945
- for (int i = 0; i < filenameArray.length; i++ ) {
-
- // Read contents of file (whose filename is in filenames) into a string
- fileString = readFileToString(filenameArray[i]);
-
- System.out.println("\nSub-tests for file: " + filenameArray[i]
- + " --------------");
-
- // Loop over all tests in a single file
- for ( int j = 0; j < 11; j++ ) {
- subtestNum += 1;
-
- // Compare actual to expected string for a single subtest
- compareActualToExpected(fileString);
- }
- }
+ checkFiles(
+ "p1/C1.html" ,
+ "p1/package-summary.html",
+ "overview-summary.html");
// Bug 4633447: Special test for overview-frame.html
// Find two strings in file "overview-frame.html"
- String filename = TMPDIR_STRING1 + "overview-frame.html";
- fileString = readFileToString(filename);
-
- // Find first string <A HREF="./package-list"> in overview-frame.html
- subtestNum += 1;
- String stringToFind = "<A HREF=\"./package-list\">";
- String result;
- if ( fileString.indexOf(stringToFind) == -1 ) {
- result = "FAILED";
- } else {
- result = "succeeded";
- numOfSubtestsPassed += 1;
- }
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
- + "when searching for:\n"
- + stringToFind + "\n"
- + "in file " + filename);
-
- // Find second string <A HREF="./help-doc"> in overview-frame.html
- subtestNum += 1;
- stringToFind = "<A HREF=\"./help-doc\">";
- if ( fileString.indexOf(stringToFind) == -1 ) {
- result = "FAILED";
- } else {
- result = "succeeded";
- numOfSubtestsPassed += 1;
- }
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
- + "when searching for:\n"
- + stringToFind + "\n"
- + "in file " + filename);
+ checkOutput("overview-frame.html", true,
+ "<A HREF=\"./package-list\">",
+ "<A HREF=\"./help-doc\">");
}
- public static void printSummary() {
- System.out.println("");
- if ( numOfSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numOfSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numOfSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the contents of the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
+ void checkFiles(String... filenameArray) {
+ int count = 0;
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
+ for (String f : filenameArray) {
+ // Read contents of file into a string
+ String fileString = readFile(f);
+ System.out.println("\nSub-tests for file: " + f + " --------------");
+ // Loop over all tests in a single file
+ for ( int j = 0; j < 11; j++ ) {
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
+ // Compare actual to expected string for a single subtest
+ compareActualToExpected(++count, fileString);
+ }
}
}
/**
- * Regular expression pattern matching code adapted from Eric's
- * /java/pubs/dev/linkfix/src/LinkFix.java
+ * Regular expression pattern matching code
*
* Prefix Pattern:
* flag (?i) (case insensitive, so "a href" == "A HREF" and all combinations)
@@ -197,34 +101,33 @@
* group4 (.*?) (label - zero or more characters)
* group5 (</a>) (end tag)
*/
- static String prefix = "(?i)(<a\\s+href="; // <a href= (start group1)
- static String ref1 = "\")([^\"]*)(\".*?>)"; // doublequotes (end group1, group2, group3)
- static String ref2 = ")(\\S+?)([^<>]*>)"; // no quotes (end group1, group2, group3)
- static String label = "(.*?)"; // text label (group4)
- static String end = "(</a>)"; // </a> (group5)
+ private static final String prefix = "(?i)(<a\\s+href="; // <a href= (start group1)
+ private static final String ref1 = "\")([^\"]*)(\".*?>)"; // doublequotes (end group1, group2, group3)
+ private static final String ref2 = ")(\\S+?)([^<>]*>)"; // no quotes (end group1, group2, group3)
+ private static final String label = "(.*?)"; // text label (group4)
+ private static final String end = "(</a>)"; // </a> (group5)
/**
* Compares the actual string to the expected string in the specified string
- * str String to search through
+ * @param str String to search through
*/
- static void compareActualToExpected(String str) {
- // Pattern must be compiled each run because subtestNum is incremented
+ void compareActualToExpected(int count, String str) {
+ checking("comparison for " + str);
+
+ // Pattern must be compiled each run because numTestsRun is incremented
Pattern actualLinkPattern1 =
- Pattern.compile("Sub-test " + subtestNum + " Actual: " + prefix + ref1, Pattern.DOTALL);
+ Pattern.compile("Sub-test " + count + " Actual: " + prefix + ref1, Pattern.DOTALL);
Pattern expectLinkPattern1 =
- Pattern.compile("Sub-test " + subtestNum + " Expect: " + prefix + ref1, Pattern.DOTALL);
+ Pattern.compile("Sub-test " + count + " Expect: " + prefix + ref1, Pattern.DOTALL);
// Pattern linkPattern2 = Pattern.compile(prefix + ref2 + label + end, Pattern.DOTALL);
- CharBuffer charBuffer = CharBuffer.wrap(str);
- Matcher actualLinkMatcher1 = actualLinkPattern1.matcher(charBuffer);
- Matcher expectLinkMatcher1 = expectLinkPattern1.matcher(charBuffer);
- String result;
- if ( expectLinkMatcher1.find() && actualLinkMatcher1.find() ) {
+ Matcher actualLinkMatcher1 = actualLinkPattern1.matcher(str);
+ Matcher expectLinkMatcher1 = expectLinkPattern1.matcher(str);
+ if (expectLinkMatcher1.find() && actualLinkMatcher1.find()) {
String expectRef = expectLinkMatcher1.group(2);
String actualRef = actualLinkMatcher1.group(2);
- if ( actualRef.equals(expectRef) ) {
- result = "succeeded";
- numOfSubtestsPassed += 1;
+ if (actualRef.equals(expectRef)) {
+ passed(expectRef);
// System.out.println("pattern: " + actualLinkPattern1.pattern());
// System.out.println("actualRef: " + actualRef);
// System.out.println("group0: " + actualLinkMatcher1.group());
@@ -233,15 +136,13 @@
// System.out.println("group3: " + actualLinkMatcher1.group(3));
// System.exit(0);
} else {
- result = "FAILED";
+ failed("\n"
+ + "Actual: \"" + actualRef + "\"\n"
+ + "Expect: \"" + expectRef + "\"");
}
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") " + result + "\n"
- + "Actual: \"" + actualRef + "\"" + "\n"
- + "Expect: \"" + expectRef + "\"");
} else {
- System.out.println("Didn't find <A HREF> that fits the pattern: "
- + expectLinkPattern1.pattern() );
+ failed("Didn't find <A HREF> that fits the pattern: "
+ + expectLinkPattern1.pattern());
}
}
}
--- a/langtools/test/com/sun/javadoc/InheritDocForUserTags/DocTest.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/InheritDocForUserTags/DocTest.java Fri May 16 14:35:37 2014 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, 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,11 +26,11 @@
* @bug 8008768
* @summary Using {@inheritDoc} in simple tag defined via -tag fails
* @author Mike Duigou
+ * @library ../lib
+ * @build JavadocTester
* @run main DocTest
*/
-import java.io.*;
-
/**
* DocTest documentation.
*
@@ -38,41 +38,27 @@
* @implSpec DocTest implementation spec.
* @implNote DocTest implementation note.
*/
-public class DocTest {
+public class DocTest extends JavadocTester {
public static void main(String... args) throws Exception {
- String[] javadoc_args = {
- "-verbose",
- "-d", "DocTest",
- "-tag", "apiNote:optcm:<em>API Note</em>",
- "-tag", "implSpec:optcm:<em>Implementation Requirements</em>:",
- "-tag", "implNote:optcm:<em>Implementation Note</em>:",
- "-package",
- new File(System.getProperty("test.src"), "DocTest.java").getPath()
- };
+ DocTest tester = new DocTest();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-verbose",
+ "-d", "DocTest",
+ "-tag", "apiNote:optcm:<em>API Note</em>",
+ "-tag", "implSpec:optcm:<em>Implementation Requirements</em>:",
+ "-tag", "implNote:optcm:<em>Implementation Note</em>:",
+ "-package",
+ testSrc("DocTest.java")
+ );
+ checkExit(Exit.OK);
// javadoc does not report an exit code for an internal exception (!)
// so monitor stderr for stack dumps.
- PrintStream prevErr = System.err;
- ByteArrayOutputStream err_baos = new ByteArrayOutputStream();
- PrintStream err_ps = new PrintStream(err_baos);
- System.setErr(err_ps);
-
- int rc;
- try {
- rc = com.sun.tools.javadoc.Main.execute(javadoc_args);
- } finally {
- err_ps.close();
- System.setErr(prevErr);
- }
-
- String err = err_baos.toString();
- System.err.println(err);
-
- if (rc != 0)
- throw new Exception("javadoc exited with rc=" + rc);
-
- if (err.contains("at com.sun."))
- throw new Exception("javadoc output contains stack trace");
+ checkOutput(Output.STDERR, false, "at com.sun");
}
/**
--- a/langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java Fri May 16 14:35:37 2014 -0700
@@ -27,172 +27,49 @@
* @summary Javascript IE load error when linked by -linkoffline
* Window title shouldn't change when loading left frames (javascript)
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main JavascriptWinTitle
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class JavascriptWinTitle {
-
- protected static final String NL = System.getProperty("line.separator");
-
- private static final String BUGID = "4645058";
- private static final String BUGNAME = "JavascriptWinTitle";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
-
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
+public class JavascriptWinTitle extends JavadocTester {
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "-doctitle", "Document Title",
- "-windowtitle", "Window Title",
- "-overview", (srcdir + "/overview.html"),
- "-linkoffline",
- "http://java.sun.com/j2se/1.4/docs/api", srcdir,
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ JavascriptWinTitle tester = new JavascriptWinTitle();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Test the javascript "type" attribute is present:
- { "<script type=\"text/javascript\">",
- TMPDEST_DIR1 + "overview-summary.html" },
-
- // Test onload is absent:
- { "<body>",
- TMPDEST_DIR1 + "overview-summary.html" },
-
- // Test onload is present:
- { "<body>",
- TMPDEST_DIR1 + "/p1/package-summary.html" },
-
- // Test that "onload" is not present in BODY tag:
- { "<body>",
- TMPDEST_DIR1 + "overview-frame.html" },
-
- // Test that "onload" is not present in BODY tag:
- { "<body>",
- TMPDEST_DIR1 + "allclasses-frame.html" },
-
- // Test that "onload" is not present in BODY tag:
- { "<body>",
- TMPDEST_DIR1 + "/p1/package-frame.html" },
-
- // Test that win title javascript is followed by NOSCRIPT code.
- {"<script type=\"text/javascript\"><!--\n" +
- " try {\n" +
- " if (location.href.indexOf('is-external=true') == -1) {\n" +
- " parent.document.title=\"C (Window Title)\";\n" +
- " }\n" +
- " }\n" +
- " catch(err) {\n" +
- " }\n" +
- "//-->\n" +
- "</script>",
- TMPDEST_DIR1 + "/p1/C.html"
- }
-
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-doctitle", "Document Title",
+ "-windowtitle", "Window Title",
+ "-overview", testSrc("overview.html"),
+ "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api", testSrc,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+ checkOutput("overview-summary.html", true,
+ "<script type=\"text/javascript\">",
+ "<body>");
- // Get string to find
- String stringToFind = testArray[i][0];
-
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
+ // Test that "onload" is not present in BODY tag:
+ checkOutput("p1/package-summary.html", true, "<body>");
+ checkOutput("overview-frame.html", true, "<body>");
+ checkOutput("allclasses-frame.html", true, "<body>");
+ checkOutput("p1/package-frame.html", true, "<body>");
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.replace(NL, "\n").indexOf(stringToFind);
+ // Test that win title javascript is followed by NOSCRIPT code.
+ checkOutput("p1/C.html", true,
+ "<script type=\"text/javascript\"><!--\n"
+ + " try {\n"
+ + " if (location.href.indexOf('is-external=true') == -1) {\n"
+ + " parent.document.title=\"C (Window Title)\";\n"
+ + " }\n"
+ + " }\n"
+ + " catch(err) {\n"
+ + " }\n"
+ + "//-->\n"
+ + "</script>");
}
}
--- a/langtools/test/com/sun/javadoc/MetaTag/MetaTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/MetaTag/MetaTag.java Fri May 16 14:35:37 2014 -0700
@@ -21,114 +21,94 @@
* questions.
*/
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
/*
* @test
* @bug 4034096 4764726 6235799
* @summary Add support for HTML keywords via META tag for
* class and member names to improve API search
* @author dkramer
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build MetaTag
* @run main MetaTag
*/
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
public class MetaTag extends JavadocTester {
- //Test information.
- private static final SimpleDateFormat m_dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR,
- "-sourcepath", SRC_DIR,
- "-keywords",
- "-doctitle", "Sample Packages",
- "p1", "p2"
- };
-
- private static final String[] ARGS_NO_TIMESTAMP_NO_KEYWORDS = new String[] {
- "-d", OUTPUT_DIR + "-2",
- "-sourcepath", SRC_DIR,
- "-notimestamp",
- "-doctitle", "Sample Packages",
- "p1", "p2"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
-
- { "p1/C1.html",
- "<meta name=\"keywords\" content=\"p1.C1 class\">" },
-
- { "p1/C1.html",
- "<meta name=\"keywords\" content=\"field1\">" },
-
- { "p1/C1.html",
- "<meta name=\"keywords\" content=\"field2\">" },
-
- { "p1/C1.html",
- "<meta name=\"keywords\" content=\"method1()\">" },
-
- { "p1/C1.html",
- "<meta name=\"keywords\" content=\"method2()\">" },
-
- { "p1/package-summary.html",
- "<meta name=\"keywords\" content=\"p1 package\">" },
-
- { "overview-summary.html",
- "<meta name=\"keywords\" content=\"Overview, Sample Packages\">" },
-
- //NOTE: Hopefully, this regression test is not run at midnight. If the output
- //was generated yesterday and this test is run today, the test will fail.
- { "overview-summary.html",
- "<meta name=\"date\" "
- + "content=\"" + m_dateFormat.format(new Date()) + "\">"},
- };
-
- private static final String[][] NEGATED_TEST2 = {
- //No keywords when -keywords is not used.
- { "p1/C1.html",
- "<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">" },
-
- { "p1/C1.html",
- "<META NAME=\"keywords\" CONTENT=\"field1\">" },
-
- { "p1/C1.html",
- "<META NAME=\"keywords\" CONTENT=\"field2\">" },
-
- { "p1/C1.html",
- "<META NAME=\"keywords\" CONTENT=\"method1()\">" },
-
- { "p1/C1.html",
- "<META NAME=\"keywords\" CONTENT=\"method2()\">" },
-
- { "p1/package-summary.html",
- "<META NAME=\"keywords\" CONTENT=\"p1 package\">" },
-
- { "overview-summary.html",
- "<META NAME=\"keywords\" CONTENT=\"Overview Summary, Sample Packages\">" },
-
- //The date metatag should not show up when -notimestamp is used.
-
- //NOTE: Hopefully, this regression test is not run at midnight. If the output
- //was generated yesterday and this test is run today, the test will fail.
- { "overview-summary.html",
- "<META NAME=\"date\" "
- + "CONTENT=\"" + m_dateFormat.format(new Date()) + "\">"},
- };
-
/**
* The entry point of the test.
- * @param args the array of command line arguments.
+ * @param args the array of command line arguments
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
MetaTag tester = new MetaTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.run(ARGS_NO_TIMESTAMP_NO_KEYWORDS, NO_TEST, NEGATED_TEST2);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void testStandard() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "-keywords",
+ "-doctitle", "Sample Packages",
+ "p1", "p2");
+
+ checkExit(Exit.OK);
+
+ checkOutput("p1/C1.html", true,
+ "<meta name=\"keywords\" content=\"p1.C1 class\">",
+ "<meta name=\"keywords\" content=\"field1\">",
+ "<meta name=\"keywords\" content=\"field2\">",
+ "<meta name=\"keywords\" content=\"method1()\">",
+ "<meta name=\"keywords\" content=\"method2()\">");
+
+ checkOutput("p1/package-summary.html", true,
+ "<meta name=\"keywords\" content=\"p1 package\">");
+
+ checkOutput("overview-summary.html", true,
+ "<meta name=\"keywords\" content=\"Overview, Sample Packages\">");
+
+ // NOTE: Hopefully, this regression test is not run at midnight. If the output
+ // was generated yesterday and this test is run today, the test will fail.
+ checkOutput("overview-summary.html", true,
+ "<meta name=\"date\" content=\"" + date() + "\">");
+ }
+
+ @Test
+ void testNoTimestamp() {
+ javadoc("-d", "out-2",
+ "-sourcepath", testSrc,
+ "-notimestamp",
+ "-doctitle", "Sample Packages",
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ // No keywords when -keywords is not used.
+ checkOutput("p1/C1.html", false,
+ "<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">",
+ "<META NAME=\"keywords\" CONTENT=\"field1\">",
+ "<META NAME=\"keywords\" CONTENT=\"field2\">",
+ "<META NAME=\"keywords\" CONTENT=\"method1()\">",
+ "<META NAME=\"keywords\" CONTENT=\"method2()\">");
+
+ checkOutput("p1/package-summary.html", false,
+ "<META NAME=\"keywords\" CONTENT=\"p1 package\">");
+
+ checkOutput("overview-summary.html", false,
+ "<META NAME=\"keywords\" CONTENT=\"Overview Summary, Sample Packages\">");
+
+ // The date metatag should not show up when -notimestamp is used.
+ // NOTE: Hopefully, this regression test is not run at midnight. If the output
+ // was generated yesterday and this test is run today, the test will fail.
+ checkOutput("overview-summary.html", false,
+ "<META NAME=\"date\" CONTENT=\"" + date() + "\">");
+ }
+
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+ String date() {
+ return dateFormat.format(new Date());
}
}
--- a/langtools/test/com/sun/javadoc/PackagesHeader/PackagesHeader.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/PackagesHeader/PackagesHeader.java Fri May 16 14:35:37 2014 -0700
@@ -28,83 +28,62 @@
* is present for three sets of options: (1) -header,
* (2) -packagesheader, and (3) -header -packagesheader
* @author dkramer
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build PackagesHeader
* @run main PackagesHeader
*/
public class PackagesHeader extends JavadocTester {
- //Test information.
- private static final String OUTPUT_DIR1 = OUTPUT_DIR + "-1/";
- private static final String OUTPUT_DIR2 = OUTPUT_DIR + "-2/";
- private static final String OUTPUT_DIR3 = OUTPUT_DIR + "-3/";
+ public static void main(String... args) throws Exception {
+ JavadocTester tester = new PackagesHeader();
+ tester.runTests();
+ }
- /**
- * Assign value for [ fileToSearch, stringToFind ]
- */
- private static final String[][] TESTARRAY1 = {
+ @Test
+ void testHeader() {
+ // First test with -header only
+ javadoc("-d", "out-header",
+ "-header", "Main Frame Header",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
// Test that the -header shows up in the packages frame
- { "overview-frame.html",
- "Main Frame Header" }
- };
+ checkOutput("overview-frame.html", true,
+ "Main Frame Header");
+ }
- private static final String[][] TESTARRAY2 = {
+ @Test
+ void testPackagesHeader() {
+ // Second test with -packagesheader only
+ javadoc("-d", "out-packages-header",
+ "-packagesheader", "Packages Frame Header",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
// Test that the -packagesheader string shows
// up in the packages frame
+ checkOutput("overview-frame.html", true,
+ "Packages Frame Header");
+ }
- { "overview-frame.html",
- "Packages Frame Header" }
- };
-
- private static final String[][] TESTARRAY3 = {
+ @Test
+ void testBothHeaders() {
+ // Third test with both -packagesheader and -header
+ javadoc("-d", "out-both",
+ "-packagesheader", "Packages Frame Header",
+ "-header", "Main Frame Header",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
// Test that the both headers show up and are different
-
- { "overview-frame.html",
- "Packages Frame Header" },
-
- { "overview-summary.html",
- "Main Frame Header" }
- };
-
- // First test with -header only
- private static final String[] JAVADOC_ARGS1 = new String[] {
- "-d", OUTPUT_DIR1,
- "-header", "Main Frame Header",
- "-sourcepath", SRC_DIR,
- "p1", "p2"};
-
- // Second test with -packagesheader only
- private static final String[] JAVADOC_ARGS2 = new String[] {
- "-d", OUTPUT_DIR2,
- "-packagesheader", "Packages Frame Header",
- "-sourcepath", SRC_DIR,
- "p1", "p2"};
+ checkOutput("overview-frame.html", true,
+ "Packages Frame Header");
- // Third test with both -packagesheader and -header
- private static final String[] JAVADOC_ARGS3 = new String[] {
- "-d", OUTPUT_DIR3,
- "-packagesheader", "Packages Frame Header",
- "-header", "Main Frame Header",
- "-sourcepath", SRC_DIR,
- "p1", "p2"};
-
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- JavadocTester tester = new PackagesHeader();
-
- tester.run(JAVADOC_ARGS1, TESTARRAY1, NO_TEST);
- tester.run(JAVADOC_ARGS2, TESTARRAY2, NO_TEST);
- tester.run(JAVADOC_ARGS3, TESTARRAY3, NO_TEST);
-
- tester.printSummary();
+ checkOutput("overview-summary.html", true,
+ "Main Frame Header");
}
}
--- a/langtools/test/com/sun/javadoc/T6735320/T6735320.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/T6735320/T6735320.java Fri May 16 14:35:37 2014 -0700
@@ -25,24 +25,24 @@
* @test
* @bug 6735320
* @summary javadoc throws exception if serialField value is missing
- * @library ../lib/
- * @build JavadocTester T6735320
+ * @library ../lib
+ * @build JavadocTester
* @run main T6735320
*/
+
public class T6735320 extends JavadocTester {
- private static final String[] ARGS = new String[]{
- "-d", OUTPUT_DIR + ".out",
- SRC_DIR + "/SerialFieldTest.java"
- };
-
- public static void main(String... args) {
+ public static void main(String... args) throws Exception {
T6735320 tester = new T6735320();
- if (tester.runJavadoc(ARGS) == 0) {
- throw new AssertionError("zero return code from javadoc");
- }
- if (tester.getErrorOutput().contains("StringIndexOutOfBoundsException")) {
- throw new AssertionError("javadoc threw StringIndexOutOfBoundsException");
- }
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ testSrc("SerialFieldTest.java"));
+ checkExit(Exit.FAILED);
+ checkOutput(Output.STDERR, false,
+ "StringIndexOutOfBoundsException");
}
}
--- a/langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java Fri May 16 14:35:37 2014 -0700
@@ -30,174 +30,52 @@
* <NOFRAMES> not allowed outside <FRAMESET> element
* HTML table tags inserted in wrong place in pakcage use page
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main ValidHtml
*/
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-/**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
- */
-public class ValidHtml {
-
- protected static final String NL = System.getProperty("line.separator");
+public class ValidHtml extends JavadocTester {
- private static final String BUGID = "4275630";
- private static final String BUGNAME = "ValidHtml";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
+ public static void main(String... args) throws Exception {
+ ValidHtml tester = new ValidHtml();
+ tester.runTests();
+ }
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
+ @Test
+ void test() {
// Test for all cases except the split index page
- runJavadoc(new String[]{"-d", TMPDEST_DIR1,
+ javadoc("-d", "out",
"-doctitle", "Document Title",
"-windowtitle", "Window Title",
"-use",
- "-overview", (srcdir + "/overview.html"),
- "-sourcepath", srcdir,
- "p1", "p2"
- });
- runTestsOnHTML(testArray);
+ "-overview", testSrc("overview.html"),
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
- printSummary();
- }
+ // Test the proper DOCTYPE element are present:
+ checkOutput("index.html", true, FRAMESET);
+ checkOutput("overview-summary.html", true, LOOSE);
+ checkOutput("p1/package-summary.html", true, LOOSE);
+ checkOutput("p1/C.html", true, LOOSE);
+ checkOutput("overview-frame.html", true, LOOSE);
+ checkOutput("allclasses-frame.html", true, LOOSE);
+ checkOutput("p1/package-frame.html", true, LOOSE);
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ // Test that <NOFRAMES> is inside <FRAMESET> element:
+ checkOutput("index.html", true,
+ "</noframes>\n"
+ + "</frameset>");
+
+ // Test the table elements are in the correct order:
+ checkOutput("p1/package-use.html", true,
+ "</td>\n"
+ + "</tr>");
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
- TMPDEST_DIR1 + "index.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "overview-summary.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "p1/package-summary.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "p1/C.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "overview-frame.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "allclasses-frame.html"
- },
- // Test the proper DOCTYPE element is present:
- {
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
- TMPDEST_DIR1 + "p1/package-frame.html"
- },
- // Test that <NOFRAMES> is inside <FRAMESET> element:
- {
- "</noframes>\n" +
- "</frameset>",
- TMPDEST_DIR1 + "index.html"
- },
- // Test the table elements are in the correct order:
- {
- "</td>\n" +
- "</tr>",
- TMPDEST_DIR1 + "/p1/package-use.html"
- }
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
-
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum) + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n" + "when searching for:\n" + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
- }
-
- public static void printSummary() {
- if (numSubtestsPassed == subtestNum) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum) + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if (!file.exists()) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int) file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int) file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.replace(NL, "\n").indexOf(stringToFind);
- }
+ private static final String FRAMESET =
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">";
+ private static final String LOOSE =
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
}
--- a/langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java Fri May 16 14:35:37 2014 -0700
@@ -26,131 +26,31 @@
* @bug 4720849
* @summary com.sun.tools.doclets.standard.Standard contains hard-coded version number
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main VersionNumber
*/
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-
/**
* Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
*/
-public class VersionNumber {
-
- private static final String BUGID = "4720849";
- private static final String BUGNAME = "VersionNumber";
- private static final String TMPDEST_DIR1 = "./docs1/";
- private static final String TMPDEST_DIR2 = "./docs2/";
-
- // Subtest number. Needed because runResultsOnHTML is run twice,
- // and subtestNum should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
+public class VersionNumber extends JavadocTester {
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
- "p1"});
- runTestsOnHTML(testArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ VersionNumber tester = new VersionNumber();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
-
- // Test the proper DOCTYPE element is present:
- {
- "<!-- Generated by javadoc (",
- TMPDEST_DIR1 + "p1/C.html" },
-
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "p1");
+ checkExit(Exit.OK);
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
-
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
+ // Test the proper DOCTYPE element is present:
+ checkOutput("p1/C.html", true,
+ "<!-- Generated by javadoc (");
}
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
- }
-
- public static int findString(String fileString, String stringToFind) {
- return fileString.indexOf(stringToFind);
- }
}
--- a/langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java Fri May 16 14:35:37 2014 -0700
@@ -26,193 +26,62 @@
* @bug 4530730
* @summary stddoclet: With frames off, window titles have "()" appended
* @author dkramer
+ * @library ../lib
+ * @build JavadocTester
* @run main WindowTitles
*/
-
-import com.sun.javadoc.*;
-import java.util.*;
-import java.io.*;
-
-// If needing regular expression pattern matching,
-// see /java/pubs/dev/linkfix/src/LinkFix.java
-
/**
* Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
- * find strings that contain newlines.
*/
-public class WindowTitles
-{
- private static final String BUGID = "4530730";
- private static final String BUGNAME = "WindowTitles";
- private static final String TMPDIR_STRING1 = "./docs1/";
- private static final String TMPDIR_STRING2 = "./docs2/";
-
- // Subtest number. Needed because runResultsOnHTML is run twice, and subtestNum
- // should increment across subtest runs.
- public static int subtestNum = 0;
- public static int numSubtestsPassed = 0;
-
- // Entry point
- public static void main(String[] args) {
-
- // Directory that contains source files that javadoc runs on
- String srcdir = System.getProperty("test.src", ".");
+public class WindowTitles extends JavadocTester {
- // Test for all cases except the split index page
- runJavadoc(new String[] {"-d", TMPDIR_STRING1,
- "-use",
- "-sourcepath", srcdir,
- "p1", "p2"});
- runTestsOnHTML(testArray);
-
- // Test only for the split-index case (and run on only one package)
- System.out.println(""); // blank line
- runJavadoc(new String[] {"-d", TMPDIR_STRING2,
- "-splitindex",
- "-sourcepath", System.getProperty("test.src", "."),
- "p1"});
- runTestsOnHTML(testSplitIndexArray);
-
- printSummary();
- }
-
- /** Run javadoc */
- public static void runJavadoc(String[] javadocArgs) {
- if (com.sun.tools.javadoc.Main.execute(javadocArgs) != 0) {
- throw new Error("Javadoc failed to execute");
- }
+ public static void main(String... args) throws Exception {
+ WindowTitles tester = new WindowTitles();
+ tester.runTests();
}
- /**
- * Assign value for [ stringToFind, filename ]
- * NOTE: The standard doclet uses platform-specific line separators ("\n")
- */
- private static final String[][] testArray = {
-
- { "<title>Overview</title>",
- TMPDIR_STRING1 + "overview-summary.html" },
-
- { "<title>Class Hierarchy</title>",
- TMPDIR_STRING1 + "overview-tree.html" },
-
- { "<title>Overview List</title>",
- TMPDIR_STRING1 + "overview-frame.html" },
-
- { "<title>p1</title>",
- TMPDIR_STRING1 + "p1/package-summary.html" },
-
- { "<title>p1</title>",
- TMPDIR_STRING1 + "p1/package-frame.html" },
-
- { "<title>p1 Class Hierarchy</title>",
- TMPDIR_STRING1 + "p1/package-tree.html" },
-
- { "<title>Uses of Package p1</title>",
- TMPDIR_STRING1 + "p1/package-use.html" },
-
- { "<title>C1</title>",
- TMPDIR_STRING1 + "p1/C1.html" },
-
- { "<title>All Classes</title>",
- TMPDIR_STRING1 + "allclasses-frame.html" },
-
- { "<title>All Classes</title>",
- TMPDIR_STRING1 + "allclasses-noframe.html" },
-
- { "<title>Constant Field Values</title>",
- TMPDIR_STRING1 + "constant-values.html" },
-
- { "<title>Deprecated List</title>",
- TMPDIR_STRING1 + "deprecated-list.html" },
+ @Test
+ void test() {
+ // Test for all cases except the split index page
+ javadoc("-d", "out-1",
+ "-use",
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
- { "<title>Serialized Form</title>",
- TMPDIR_STRING1 + "serialized-form.html" },
-
- { "<title>API Help</title>",
- TMPDIR_STRING1 + "help-doc.html" },
-
- { "<title>Index</title>",
- TMPDIR_STRING1 + "index-all.html" },
-
- { "<title>Uses of Class p1.C1</title>",
- TMPDIR_STRING1 + "p1/class-use/C1.html" },
- };
-
- /**
- * Assign value for [ stringToFind, filename ] for split index page
- */
- private static final String[][] testSplitIndexArray = {
- { "<title>C-Index</title>",
- TMPDIR_STRING2 + "index-files/index-1.html" },
- };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
- for (int i = 0; i < testArray.length; i++) {
-
- subtestNum += 1;
-
- // Read contents of file into a string
- String fileString = readFileToString(testArray[i][1]);
-
- // Get string to find
- String stringToFind = testArray[i][0];
-
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
- System.out.println("\nSub-test " + (subtestNum)
- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
- + "when searching for:\n"
- + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
- }
- }
+ checkTitle("overview-summary.html", "Overview");
+ checkTitle("overview-tree.html", "Class Hierarchy");
+ checkTitle("overview-frame.html", "Overview List");
+ checkTitle("p1/package-summary.html", "p1");
+ checkTitle("p1/package-frame.html", "p1");
+ checkTitle("p1/package-tree.html", "p1 Class Hierarchy");
+ checkTitle("p1/package-use.html", "Uses of Package p1");
+ checkTitle("p1/C1.html", "C1");
+ checkTitle("allclasses-frame.html", "All Classes");
+ checkTitle("allclasses-noframe.html", "All Classes");
+ checkTitle("constant-values.html", "Constant Field Values");
+ checkTitle("deprecated-list.html", "Deprecated List");
+ checkTitle("serialized-form.html", "Serialized Form");
+ checkTitle("help-doc.html", "API Help");
+ checkTitle("index-all.html", "Index");
+ checkTitle("p1/class-use/C1.html", "Uses of Class p1.C1");
}
- public static void printSummary() {
- if ( numSubtestsPassed == subtestNum ) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
+ @Test
+ void test2() {
+ // Test only for the split-index case (and run on only one package)
+ javadoc("-d", "out-2",
+ "-splitindex",
+ "-sourcepath", testSrc,
+ "p1");
+ checkExit(Exit.OK);
+
+ checkTitle("index-files/index-1.html", "C-Index");
}
- // Read the file into a String
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
- char[] allChars = new char[(int)file.length()];
-
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- in.close();
-
- // Convert to a string
- String allCharsString = new String(allChars);
-
- return allCharsString;
-
- } catch (FileNotFoundException e) {
- System.err.println(e);
- return "";
- } catch (IOException e) {
- System.err.println(e);
- return "";
- }
+ void checkTitle(String file, String title) {
+ checkOutput(file, true, "<title>" + title + "</title>");
}
- public static int findString(String fileString, String stringToFind) {
- return fileString.indexOf(stringToFind);
- }
}
--- a/langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java Fri May 16 14:35:37 2014 -0700
@@ -26,42 +26,30 @@
* @bug 4504730 4526070 5077317
* @summary Test the generation of constant-values.html.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestConstantValuesDriver
* @run main TestConstantValuesDriver
*/
public class TestConstantValuesDriver extends JavadocTester {
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, SRC_DIR + "/TestConstantValues.java",
- SRC_DIR + "/TestConstantValues2.java",
- SRC_DIR + "/A.java"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- String[][] tests = new String[5][2];
- for (int i = 0; i < tests.length-1; i++) {
- tests[i][0] = "constant-values.html";
- tests[i][1] = "TEST"+(i+1)+"PASSES";
- }
- tests[tests.length-1][0] = "constant-values.html";
- tests[tests.length-1][1] = "<code>\"<Hello World>\"</code>";
+ public static void main(String... args) throws Exception {
TestConstantValuesDriver tester = new TestConstantValuesDriver();
- tester.run(ARGS, tests, NO_TEST);
- tester.printSummary();
+ tester.runTests();
}
- /**
- * @throws java.io.IOException Test 1 passes
- * @throws java.io.IOException Test 2 passes
- * @throws java.lang.NullPointerException comment three
- * @throws java.io.IOException Test 3 passes
- */
- public void method(){}
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ testSrc("TestConstantValues.java"),
+ testSrc("TestConstantValues2.java"),
+ testSrc("A.java"));
+ checkExit(Exit.OK);
+ checkOutput("constant-values.html", true,
+ "TEST1PASSES",
+ "TEST2PASSES",
+ "TEST3PASSES",
+ "TEST4PASSES",
+ "<code>\"<Hello World>\"</code>");
+ }
}
--- a/langtools/test/com/sun/javadoc/dupThrowsTags/TestDupThrowsTags.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/dupThrowsTags/TestDupThrowsTags.java Fri May 16 14:35:37 2014 -0700
@@ -26,30 +26,28 @@
* @bug 4525364
* @summary Determine if duplicate throws tags can be used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDupThrowsTags
* @run main TestDupThrowsTags
*/
public class TestDupThrowsTags extends JavadocTester {
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, SRC_DIR + "/TestDupThrowsTags.java"
- };
+ public static void main(String... args) throws Exception {
+ TestDupThrowsTags tester = new TestDupThrowsTags();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- String[][] tests = new String[4][2];
- for (int i = 0; i < tests.length; i++) {
- tests[i][0] = "TestDupThrowsTags.html";
- tests[i][1] = "Test "+(i+1)+" passes";
- }
- TestDupThrowsTags tester = new TestDupThrowsTags();
- tester.run(ARGS, tests, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ testSrc("TestDupThrowsTags.java"));
+ checkExit(Exit.FAILED);
+
+ checkOutput("TestDupThrowsTags.html", true,
+ "Test 1 passes",
+ "Test 2 passes",
+ "Test 3 passes",
+ "Test 4 passes");
}
/**
@@ -58,6 +56,6 @@
* @throws java.lang.NullPointerException Test 3 passes
* @throws java.io.IOException Test 4 passes
*/
- public void method(){}
+ public void method() {}
}
--- a/langtools/test/com/sun/javadoc/lib/JavadocTester.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/lib/JavadocTester.java Fri May 16 14:35:37 2014 -0700
@@ -21,102 +21,163 @@
* questions.
*/
-import java.io.*;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.SoftReference;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
- * Runs javadoc and then runs regression tests on the resulting output.
- * This class currently contains three tests:
- * <ul>
- * <li> String search: Reads each file, complete with newlines,
- * into a string. Lets you search for strings that contain
- * newlines. String matching is case-sensitive.
- * You can run javadoc multiple times with different arguments,
- * generating output into different destination directories, and
- * then perform a different array of tests on each one.
- * To do this, the run method accepts a test array for testing
- * that a string is found, and a negated test array for testing
- * that a string is not found.
- * <li> Run diffs: Iterate through the list of given file pairs
- * and diff the pairs.
- * <li> Check exit code: Check the exit code of Javadoc and
- * record whether the test passed or failed.
- * </ul>
+ * Test framework for running javadoc and performing tests on the resulting output.
+ *
+ * <p>
+ * Tests are typically written as subtypes of JavadocTester, with a main
+ * method that creates an instance of the test class and calls the runTests()
+ * method. The runTests() methods calls all the test methods declared in the class,
+ * and then calls a method to print a summary, and throw an exception if
+ * any of the test methods reported a failure.
+ *
+ * <p>
+ * Test methods are identified with a @Test annotation. They have no parameters.
+ * The name of the method is not important, but if you have more than one, it is
+ * recommended that the names be meaningful and suggestive of the test case
+ * contained therein.
+ *
+ * <p>
+ * Typically, a test method will invoke javadoc, and then perform various
+ * checks on the results. The standard checks are:
+ *
+ * <dl>
+ * <dt>checkExitCode
+ * <dd>Check the exit code returned from javadoc.
+ * <dt>checkOutput
+ * <dd>Perform a series of checks on the contents on a file or output stream
+ * generated by javadoc.
+ * The checks can be either that a series of strings are found or are not found.
+ * <dt>checkFiles
+ * <dd>Perform a series of checks on the files generated by javadoc.
+ * The checks can be that a series of files are found or are not found.
+ * </dl>
+ *
+ * <pre><code>
+ * public class MyTester extends JavadocTester {
+ * public static void main(String... args) throws Exception {
+ * MyTester tester = new MyTester();
+ * tester.runTests();
+ * }
+ *
+ * // test methods...
+ * @Test
+ * void test() {
+ * javadoc(<i>args</i>);
+ * checkExit(Exit.OK);
+ * checkOutput(<i>file</i>, true,
+ * <i>strings-to-find</i>);
+ * checkOutput(<i>file</i>, false,
+ * <i>strings-to-not-find</i>);
+ * }
+ * }
+ * </code></pre>
+ *
+ * <p>
+ * If javadoc is run more than once in a test method, you can compare the
+ * results that are generated with the diff method. Since files written by
+ * javadoc typically contain a timestamp, you may want to use the -notimestamp
+ * option if you are going to compare the results from two runs of javadoc.
+ *
+ * <p>
+ * If you have many calls of checkOutput that are very similar, you can write
+ * your own check... method to reduce the amount of duplication. For example,
+ * if you want to check that many files contain the same string, you could
+ * write a method that takes a varargs list of files and calls checkOutput
+ * on each file in turn with the string to be checked.
+ *
+ * <p>
+ * You can also write you own custom check methods, which can use
+ * readFile to get the contents of a file generated by javadoc,
+ * and then use pass(...) or fail(...) to report whether the check
+ * succeeded or not.
+ *
+ * <p>
+ * You can have many separate test methods, each identified with a @Test
+ * annotation. However, you should <b>not</b> assume they will be called
+ * in the order declared in your source file. If the order of a series
+ * of javadoc invocations is important, do that within a single method.
+ * If the invocations are independent, for better clarity, use separate
+ * test methods, each with their own set of checks on the results.
*
* @author Doug Kramer
* @author Jamie Ho
- * @since 1.4.2
+ * @author Jonathan Gibbons (rewrite)
*/
public abstract class JavadocTester {
- protected static final String NL = System.getProperty("line.separator");
- protected static final String FS = System.getProperty("file.separator");
+ public static final String FS = System.getProperty("file.separator");
+ public static final String PS = System.getProperty("path.separator");
+ public static final String NL = System.getProperty("line.separator");
- protected static final String SRC_DIR = System.getProperty("test.src", ".");
- protected static final String JAVA_VERSION = System.getProperty("java.version");
- protected static final String OUTPUT_DIR = "out";
- protected static final String[][] NO_TEST = new String[][] {};
- protected static final String[] NO_FILE_TEST = new String[] {};
+ public enum Output {
+ /** The name for error output from javadoc. */
+ ERROR,
+ /** The name for the notice output from javadoc. */
+ NOTICE,
+ /** The name for the warning output from javadoc. */
+ WARNING,
+ /** The name for any output written to System.out. */
+ STDOUT,
+ /** The name for any output written to System.err. */
+ STDERR
+ }
- /**
- * Use this as the file name in the test array when you want to search
- * for a string in the error output.
- */
- public static final String ERROR_OUTPUT = "ERROR_OUTPUT";
+ /** The output directory used in the most recent call of javadoc. */
+ protected File outputDir;
+
+ /** The exit code of the most recent call of javadoc. */
+ private int exitCode;
+
+ /** The output generated by javadoc to the various writers and streams. */
+ private final Map<Output, String> outputMap = new EnumMap<>(Output.class);
- /**
- * Use this as the file name in the test array when you want to search
- * for a string in the notice output.
- */
- public static final String NOTICE_OUTPUT = "NOTICE_OUTPUT";
+ /** A cache of file content, to avoid reading files unnecessarily. */
+ private final Map<File,SoftReference<String>> fileContentCache = new HashMap<>();
- /**
- * Use this as the file name in the test array when you want to search
- * for a string in the warning output.
- */
- public static final String WARNING_OUTPUT = "WARNING_OUTPUT";
+ /** Stream used for logging messages. */
+ private final PrintStream out = System.out;
+
+ /** The directory containing the source code for the test. */
+ public static final String testSrc = System.getProperty("test.src");
/**
- * Use this as the file name in the test array when you want to search
- * for a string in standard output.
- */
- public static final String STANDARD_OUTPUT = "STANDARD_OUTPUT";
-
- /**
- * The default doclet.
- */
- public static final String DEFAULT_DOCLET_CLASS = "com.sun.tools.doclets.formats.html.HtmlDoclet";
- public static final String DEFAULT_DOCLET_CLASS_OLD = "com.sun.tools.doclets.standard.Standard";
-
- /**
- * The writer to write error messages.
+ * Get the path for a source file in the test source directory.
+ * @param path the path of a file or directory in the source directory
+ * @return the full path of the specified file
*/
- public StringWriter errors;
-
- /**
- * The writer to write notices.
- */
- public StringWriter notices;
-
- /**
- * The writer to write warnings.
- */
- public StringWriter warnings;
-
- /**
- * The buffer of warning output.
- */
- public StringBuffer standardOut;
-
- /**
- * The output directory.
- */
- private File outputDir;
+ public static String testSrc(String path) {
+ return new File(testSrc, path).getPath();
+ }
/**
* Alternatives for checking the contents of a directory.
*/
- enum DirectoryCheck {
+ public enum DirectoryCheck {
/**
* Check that the directory is empty.
*/
@@ -153,91 +214,75 @@
private DirectoryCheck outputDirectoryCheck = DirectoryCheck.EMPTY;
- /**
- * The current subtest number.
- */
- private static int numTestsRun = 0;
+ /** The current subtest number. Incremented when checking(...) is called. */
+ private int numTestsRun = 0;
+
+ /** The number of subtests passed. Incremented when passed(...) is called. */
+ private int numTestsPassed = 0;
+
+ /** The current run of javadoc. Incremented when javadoc is called. */
+ private int javadocRunNum = 0;
- /**
- * The number of subtests passed.
- */
- private static int numTestsPassed = 0;
+ /** The name of the standard doclet. */
+ // This ought not to be necessary; there ought to be a javadoc entry point
+ // that does not require this to be know externally.
+ private static final String standardDocletClassName =
+ "com.sun.tools.doclets.standard.Standard";
- /**
- * The current run of javadoc
- */
- private static int javadocRunNum = 0;
+ /** Marker annotation for test methods to be invoked by runTests. */
+ @Retention(RetentionPolicy.RUNTIME)
+ @interface Test { }
/**
- * Construct a JavadocTester.
+ * Run all methods annotated with @Test, followed by printSummary.
+ * Typically called on a tester object in main()
+ * @throws Exception if any errors occurred
*/
- public JavadocTester() {
- }
-
- /**
- * Execute the tests.
- *
- * @param args the arguments to pass to Javadoc
- * @param testArray the array of tests
- * @param negatedTestArray the array of negated tests
- * @return the return code for the execution of Javadoc
- */
- public int run(String[] args,
- String[][] testArray, String[][] negatedTestArray) {
- int returnCode = runJavadoc(args);
- runTestsOnHTML(testArray, negatedTestArray);
- return returnCode;
+ public void runTests() throws Exception {
+ for (Method m: getClass().getDeclaredMethods()) {
+ Annotation a = m.getAnnotation(Test.class);
+ if (a != null) {
+ try {
+ out.println("Running test " + m.getName());
+ m.invoke(this, new Object[] { });
+ } catch (InvocationTargetException e) {
+ Throwable cause = e.getCause();
+ throw (cause instanceof Exception) ? ((Exception) cause) : e;
+ }
+ out.println();
+ }
+ }
+ printSummary();
}
/**
- * Execute the tests.
+ * Run javadoc.
+ * The output directory used by this call and the final exit code
+ * will be saved for later use.
+ * To aid the reader, it is recommended that calls to this method
+ * put each option and the arguments it takes on a separate line.
*
- * @param args the arguments to pass to Javadoc
- * @param testArray the array of tests
- * @param negatedTestArray the array of negated tests
- * @param fileTestArray the array of file tests
- * @param negatedFileTestArray the array of negated file tests
- * @return the return code for the execution of Javadoc
+ * Example:
+ * <pre><code>
+ * javadoc("-d", "out",
+ * "-sourcepath", testSrc,
+ * "-notimestamp",
+ * "pkg1", "pkg2", "pkg3/C.java");
+ * </code></pre>
+ *
+ * @param args the arguments to pass to javadoc
*/
- public int run(String[] args,
- String[][] testArray, String[][] negatedTestArray,
- String[] fileTestArray, String[] negatedFileTestArray) {
- int returnCode = runJavadoc(args);
- runTestsOnHTML(testArray, negatedTestArray);
- runTestsOnFile(fileTestArray, negatedFileTestArray);
- return returnCode;
- }
+ public void javadoc(String... args) {
+ outputMap.clear();
+ fileContentCache.clear();
- /**
- * Execute Javadoc using the default doclet.
- *
- * @param args the arguments to pass to Javadoc
- * @return the return code from the execution of Javadoc
- */
- public int runJavadoc(String[] args) {
- float javaVersion = Float.parseFloat(JAVA_VERSION.substring(0,3));
- String docletClass = javaVersion < 1.5 ?
- DEFAULT_DOCLET_CLASS_OLD : DEFAULT_DOCLET_CLASS;
- return runJavadoc(docletClass, args);
- }
-
-
- /**
- * Execute Javadoc.
- *
- * @param docletClass the doclet being tested.
- * @param args the arguments to pass to Javadoc
- * @return the return code from the execution of Javadoc
- */
- public int runJavadoc(String docletClass, String[] args) {
javadocRunNum++;
if (javadocRunNum == 1) {
- System.out.println("\n" + "Running javadoc...");
+ out.println("Running javadoc...");
} else {
- System.out.println("\n" + "Running javadoc (run "
+ out.println("Running javadoc (run "
+ javadocRunNum + ")...");
}
- initOutputBuffers();
outputDir = new File(".");
for (int i = 0; i < args.length - 2; i++) {
if (args[i].equals("-d")) {
@@ -245,363 +290,199 @@
break;
}
}
+// log.setOutDir(outputDir);
outputDirectoryCheck.check(outputDir);
- ByteArrayOutputStream stdout = new ByteArrayOutputStream();
- PrintStream prevOut = System.out;
- System.setOut(new PrintStream(stdout));
-
- ByteArrayOutputStream stderr = new ByteArrayOutputStream();
- PrintStream prevErr = System.err;
- System.setErr(new PrintStream(stderr));
-
- int returnCode = com.sun.tools.javadoc.Main.execute(
- "javadoc",
- new PrintWriter(errors, true),
- new PrintWriter(warnings, true),
- new PrintWriter(notices, true),
- docletClass,
- getClass().getClassLoader(),
- args);
- System.setOut(prevOut);
- standardOut = new StringBuffer(stdout.toString());
- System.setErr(prevErr);
- errors.write(NL + stderr.toString());
+ // These are the primary streams used by javadoc
+ WriterOutput errOut = new WriterOutput();
+ WriterOutput warnOut = new WriterOutput();
+ WriterOutput noticeOut = new WriterOutput();
+ // These are to catch output to System.out and System.err,
+ // in case these are used instead of the primary streams
+ StreamOutput sysOut = new StreamOutput(System.out, System::setOut);
+ StreamOutput sysErr = new StreamOutput(System.err, System::setErr);
- printJavadocOutput();
- return returnCode;
- }
+ try {
+ exitCode = com.sun.tools.javadoc.Main.execute(
+ "javadoc",
+ errOut.pw, warnOut.pw, noticeOut.pw,
+ standardDocletClassName,
+ args);
+ } finally {
+ outputMap.put(Output.STDOUT, sysOut.close());
+ outputMap.put(Output.STDERR, sysErr.close());
+ outputMap.put(Output.ERROR, errOut.close());
+ outputMap.put(Output.WARNING, warnOut.close());
+ outputMap.put(Output.NOTICE, noticeOut.close());
+ }
- /**
- * Set a filter to check the initial contents of the output directory
- * before javadoc is run.
- * The filter should return true for files that should <b>not</b> appear.
- */
- public void setCheckOutputDirectoryCheck(DirectoryCheck c) {
- outputDirectoryCheck = c;
- }
-
- /**
- * Create new string writer buffers
- */
- private void initOutputBuffers() {
- errors = new StringWriter();
- notices = new StringWriter();
- warnings = new StringWriter();
+ outputMap.forEach((name, text) -> {
+ if (!text.isEmpty()) {
+ out.println("javadoc " + name + ":");
+ out.println(text);
+ }
+ });
}
/**
- * Run array of tests on the resulting HTML.
- * This method accepts a testArray for testing that a string is found
- * and a negatedTestArray for testing that a string is not found.
- *
- * @param testArray the array of tests
- * @param negatedTestArray the array of negated tests
+ * Set the kind of check for the initial contents of the output directory
+ * before javadoc is run.
+ * The filter should return true for files that should <b>not</b> appear.
+ * @param c the kind of check to perform
*/
- public void runTestsOnHTML(String[][] testArray, String[][] negatedTestArray) {
- runTestsOnHTML(testArray, false);
- runTestsOnHTML(negatedTestArray, true);
+ public void setOutputDirectoryCheck(DirectoryCheck c) {
+ outputDirectoryCheck = c;
}
- /**
- * Run array of tests on the generated files.
- * This method accepts a fileTestArray for testing if a file is generated
- * and a negatedFileTestArray for testing if a file is not found.
- * The files are relative to the most recent output directory specified
- * with -d.
- *
- * @param fileTestArray the array of file tests
- * @param negatedFileTestArray the array of negated file tests
- */
- public void runTestsOnFile(String[] fileTestArray, String[] negatedFileTestArray) {
- runTestsOnFile(outputDir, fileTestArray, false);
- runTestsOnFile(outputDir, negatedFileTestArray, true);
+ public enum Exit {
+ OK(0),
+ FAILED(1);
+
+ Exit(int code) {
+ this.code = code;
+ }
+
+ final int code;
}
/**
- * Run the array of tests on the resulting HTML.
- * The files are relative to the most recent output directory specified
- * with -d.
+ * Check the exit code of the most recent call of javadoc.
*
- * @param testArray the array of tests
- * @param isNegated true if test is negated; false otherwise
+ * @param expected the exit code that is required for the test
+ * to pass.
*/
- private void runTestsOnHTML(String[][] testArray , boolean isNegated) {
- for (String[] test : testArray) {
- numTestsRun++;
- System.out.print("Running subtest #" + numTestsRun + "... ");
- // Get string to find
- String stringToFind = test[1];
- // Read contents of file into a string
- String fileString;
- try {
- fileString = readFileToString(outputDir, test[0]);
- } catch (Error e) {
- if (isNegated) {
- System.out.println( "FAILED, due to " + e + "\n");
- continue;
- }
- throw e;
- }
- // Find string in file's contents
- boolean isFound = findString(fileString, stringToFind);
- if ((isNegated && !isFound) || (!isNegated && isFound)) {
- numTestsPassed += 1;
- System.out.println("Passed" + "\n"
- + (isNegated ? "not found:" : "found:") + "\n"
- + stringToFind + " in " + test[0] + "\n");
- } else {
- System.out.println("FAILED, when searching for:" + "\n"
- + stringToFind
- + " in " + test[0] + "\n");
- }
+ public void checkExit(Exit expected) {
+ checking("check exit code");
+ if (exitCode == expected.code) {
+ passed("return code " + exitCode);
+ } else {
+ failed("return code " + exitCode +"; expected " + expected.code + " (" + expected + ")");
}
}
/**
- * Run the array of file tests on the generated files.
- *
- * @param testArray the array of file tests
- * @param isNegated true if test is negated; false otherwise
+ * Check for content in (or not in) the generated output.
+ * Within the search strings, the newline character \n
+ * will be translated to the platform newline character sequence.
+ * @param path a path within the most recent output directory
+ * or the name of one of the output buffers, identifying
+ * where to look for the search strings.
+ * @param expectedFound true if all of the search strings are expected
+ * to be found, or false if all of the strings are expected to be
+ * not found
+ * @param strings the strings to be searched for
*/
- private void runTestsOnFile(File baseDir, String[] testArray, boolean isNegated) {
- for (String fileName : testArray) {
- numTestsRun++;
- String failedString = "FAILED: file (" + fileName + ") found" + "\n";
- String passedString = "Passed" + "\n" +
- "file (" + fileName + ") not found" + "\n";
- System.out.print("Running subtest #" + numTestsRun + "... ");
- try {
- File file = new File(baseDir, fileName);
- if ((file.exists() && !isNegated) || (!file.exists() && isNegated)) {
- numTestsPassed += 1;
- System.out.println(passedString);
- } else {
- System.out.println(failedString);
- }
- } catch (Error e) {
- System.err.println(e);
+ public void checkOutput(String path, boolean expectedFound, String... strings) {
+ // Read contents of file
+ String fileString;
+ try {
+ fileString = readFile(outputDir, path);
+ } catch (Error e) {
+ if (!expectedFound) {
+ failed("Error reading file: " + e);
+ return;
+ }
+ throw e;
+ }
+ checkOutput(path, fileString, expectedFound, strings);
+ }
+
+ /**
+ * Check for content in (or not in) the one of the output streams written by
+ * javadoc. Within the search strings, the newline character \n
+ * will be translated to the platform newline character sequence.
+ * @param output the output stream to check
+ * @param expectedFound true if all of the search strings are expected
+ * to be found, or false if all of the strings are expected to be
+ * not found
+ * @param strings the strings to be searched for
+ */
+ public void checkOutput(Output output, boolean expectedFound, String... strings) {
+ checkOutput(output.toString(), outputMap.get(output), expectedFound, strings);
+ }
+
+ private void checkOutput(String path, String fileString, boolean expectedFound, String... strings) {
+ for (String stringToFind : strings) {
+// log.logCheckOutput(path, expectedFound, stringToFind);
+ checking("checkOutput");
+ // Find string in file's contents
+ boolean isFound = findString(fileString, stringToFind);
+ if (isFound == expectedFound) {
+ passed(path + ": " + (isFound ? "found:" : "not found:") + "\n"
+ + stringToFind + "\n");
+ } else {
+ failed(path + ": " + (isFound ? "found:" : "not found:") + "\n"
+ + stringToFind + "\n");
}
}
}
/**
- * Iterate through the list of given file pairs and diff each file.
- *
- * @param baseDir1 the directory containing the first set of files
- * @param baseDir2 the directory containing the second set of files
- * @param files the set of files to be compared
- * @throws Error if any differences are found between
- * file pairs.
- */
- public void runDiffs(String baseDir1, String baseDir2, String[] files) throws Error {
- runDiffs(baseDir1, baseDir2, files, true);
- }
-
- /**
- * Iterate through the list of given file pairs and diff each file.
- *
- * @param baseDir1 the directory containing the first set of files
- * @param baseDir2 the directory containing the second set of files
- * @param files the set of files to be compared
- * @param throwErrorIfNoMatch flag to indicate whether or not to throw
- * an error if the files do not match.
- *
- * @throws Error if any differences are found between
- * file pairs and throwErrorIfNoMatch is true.
- */
- public void runDiffs(String baseDir1, String baseDir2, String[] files, boolean throwErrorIfNoMatch) throws Error {
- File bd1 = new File(baseDir1);
- File bd2 = new File(baseDir2);
- for (String file : files) {
- diff(bd1, bd2, file, throwErrorIfNoMatch);
- }
- }
-
- /**
- * Check the exit code of Javadoc and record whether the test passed
- * or failed.
- *
- * @param expectedExitCode The exit code that is required for the test
- * to pass.
- * @param actualExitCode The actual exit code from the previous run of
- * Javadoc.
- */
- public void checkExitCode(int expectedExitCode, int actualExitCode) {
- numTestsRun++;
- if (expectedExitCode == actualExitCode) {
- System.out.println( "Passed" + "\n" + " got return code " +
- actualExitCode);
- numTestsPassed++;
- } else {
- System.out.println( "FAILED: expected return code " +
- expectedExitCode + " but got " + actualExitCode);
- }
- }
-
- /**
- * Print a summary of the test results.
- */
- protected void printSummary() {
- if ( numTestsRun != 0 && numTestsPassed == numTestsRun ) {
- // Test passed
- System.out.println("\n" + "All " + numTestsPassed
- + " subtests passed");
- } else {
- // Test failed
- throw new Error("\n" + (numTestsRun - numTestsPassed)
- + " of " + (numTestsRun)
- + " subtests failed\n");
+ * Check for files in (or not in) the generated output.
+ * @param expectedFound true if all of the files are expected
+ * to be found, or false if all of the files are expected to be
+ * not found
+ * @param paths the files to check, within the most recent output directory.
+ * */
+ public void checkFiles(boolean expectedFound, String... paths) {
+ for (String path: paths) {
+// log.logCheckFile(path, expectedFound);
+ checking("checkFile");
+ File file = new File(outputDir, path);
+ boolean isFound = file.exists();
+ if (isFound == expectedFound) {
+ passed(path + ": " + (isFound ? "found:" : "not found:") + "\n");
+ } else {
+ failed(path + ": " + (isFound ? "found:" : "not found:") + "\n");
+ }
}
}
/**
- * Print the output stored in the buffers.
- */
- protected void printJavadocOutput() {
- System.out.println(STANDARD_OUTPUT + " : \n" + getStandardOutput());
- System.err.println(ERROR_OUTPUT + " : \n" + getErrorOutput());
- System.err.println(WARNING_OUTPUT + " : \n" + getWarningOutput());
- System.out.println(NOTICE_OUTPUT + " : \n" + getNoticeOutput());
- }
-
- /**
- * Read the file and return it as a string.
- *
- * @param fileName the name of the file to read
- * @return the file in string format
- */
- public String readFileToString(String fileName) throws Error {
- return readFileToString(outputDir, fileName);
- }
-
- /**
- * Read the file and return it as a string.
- *
- * @param baseDir the directory in which to locate the file
- * @param fileName the name of the file to read
- * @return the file in string format
+ * Check that a series of strings are found in order in a file in
+ * the generated output.
+ * @param path the file to check
+ * @param strings the strings whose order to check
*/
- private String readFileToString(File baseDir, String fileName) throws Error {
- switch (fileName) {
- case ERROR_OUTPUT:
- return getErrorOutput();
- case NOTICE_OUTPUT:
- return getNoticeOutput();
- case WARNING_OUTPUT:
- return getWarningOutput();
- case STANDARD_OUTPUT:
- return getStandardOutput();
- }
- try {
- File file = new File(baseDir, fileName);
- if ( !file.exists() ) {
- System.out.println("\n" + "FILE DOES NOT EXIST: " + fileName);
+ public void checkOrder(String path, String... strings) {
+ String fileString = readOutputFile(path);
+ int prevIndex = -1;
+ for (String s : strings) {
+ int currentIndex = fileString.indexOf(s);
+ checking(s + " at index " + currentIndex);
+ if (currentIndex >= prevIndex) {
+ passed(s + "is in the correct order");
+ } else {
+ failed(s + " is in the wrong order.");
}
- char[] allChars;
- try (BufferedReader in = new BufferedReader(new FileReader(file))) {
- // Create an array of characters the size of the file
- allChars = new char[(int)file.length()];
- // Read the characters into the allChars array
- in.read(allChars, 0, (int)file.length());
- }
-
- // Convert to a string
- String allCharsString = new String(allChars);
- return allCharsString;
- } catch (FileNotFoundException e) {
- System.err.println(e);
- throw new Error("File not found: " + fileName);
- } catch (IOException e) {
- System.err.println(e);
- throw new Error("Error reading file: " + fileName);
+ prevIndex = currentIndex;
}
}
/**
- * Compare the two given files.
+ * Compare a set of files in each of two directories.
*
- * @param baseDir1 the directory in which to locate the first file
- * @param baseDir2 the directory in which to locate the second file
- * @param file the file to compare in the two base directories
- * @param throwErrorIFNoMatch flag to indicate whether or not to throw
- * an error if the files do not match.
- * @return true if the files are the same and false otherwise.
+ * @param baseDir1 the directory containing the first set of files
+ * @param baseDir2 the directory containing the second set of files
+ * @param files the set of files to be compared
*/
- private boolean diff(File baseDir1, File baseDir2, String file,
- boolean throwErrorIFNoMatch) throws Error {
- String file1Contents = readFileToString(baseDir1, file);
- String file2Contents = readFileToString(baseDir2, file);
- numTestsRun++;
- if (file1Contents.trim().compareTo(file2Contents.trim()) == 0) {
- System.out.println("Diff successful: " + new File(baseDir1, file) + ", " + new File(baseDir2, file));
- numTestsPassed++;
- return true;
- } else if (throwErrorIFNoMatch) {
- throw new Error("Diff failed: " + new File(baseDir1, file) + ", " + new File(baseDir2, file));
- } else {
- return false;
+ public void diff(String baseDir1, String baseDir2, String... files) {
+ File bd1 = new File(baseDir1);
+ File bd2 = new File(baseDir2);
+ for (String file : files) {
+ diff(bd1, bd2, file);
}
}
/**
- * Search for the string in the given file and return true
- * if the string was found.
- *
- * @param fileString the contents of the file to search through
- * @param stringToFind the string to search for
- * @return true if the string was found
- */
- private boolean findString(String fileString, String stringToFind) {
- return fileString.contains(stringToFind.replace("\n", NL));
- }
-
-
- /**
- * Return the standard output.
- * @return the standard output
- */
- public String getStandardOutput() {
- return standardOut.toString();
- }
-
- /**
- * Return the error output.
- * @return the error output
- */
- public String getErrorOutput() {
- return errors.getBuffer().toString();
- }
-
- /**
- * Return the notice output.
- * @return the notice output
- */
- public String getNoticeOutput() {
- return notices.getBuffer().toString();
- }
-
- /**
- * Return the warning output.
- * @return the warning output
- */
- public String getWarningOutput() {
- return warnings.getBuffer().toString();
- }
-
- /**
* A utility to copy a directory from one place to another.
- * We may possibly want to move this to our doclet toolkit in
- * the near future and maintain it from there.
*
* @param targetDir the directory to copy.
* @param destDir the destination to copy the directory to.
*/
- public static void copyDir(String targetDir, String destDir) {
- if (targetDir.endsWith("SCCS")) {
- return;
- }
+ // TODO: convert to using java.nio.Files.walkFileTree
+ public void copyDir(String targetDir, String destDir) {
try {
File targetDirObj = new File(targetDir);
File destDirParentObj = new File(destDir);
@@ -617,7 +498,7 @@
File srcFile = new File(targetDirObj, file);
File destFile = new File(destDirObj, file);
if (srcFile.isFile()) {
- System.out.println("Copying " + srcFile + " to " + destFile);
+ out.println("Copying " + srcFile + " to " + destFile);
copyFile(destFile, srcFile);
} else if(srcFile.isDirectory()) {
copyDir(srcFile.getAbsolutePath(), destDirObj.getAbsolutePath());
@@ -633,25 +514,235 @@
*
* @param destfile the destination file
* @param srcfile the source file
- * @throws SecurityException
* @throws IOException
*/
- public static void copyFile(File destfile, File srcfile)
- throws IOException {
- byte[] bytearr = new byte[512];
- int len;
- FileInputStream input = new FileInputStream(srcfile);
- File destDir = destfile.getParentFile();
- destDir.mkdirs();
- FileOutputStream output = new FileOutputStream(destfile);
+ public void copyFile(File destfile, File srcfile) throws IOException {
+ Files.copy(srcfile.toPath(), destfile.toPath());
+ }
+
+ /**
+ * Read a file from the output directory.
+ *
+ * @param fileName the name of the file to read
+ * @return the file in string format
+ */
+ public String readOutputFile(String fileName) throws Error {
+ return readFile(outputDir, fileName);
+ }
+
+ protected String readFile(String fileName) throws Error {
+ return readFile(outputDir, fileName);
+ }
+
+ protected String readFile(String baseDir, String fileName) throws Error {
+ return readFile(new File(baseDir), fileName);
+ }
+
+ /**
+ * Read the file and return it as a string.
+ *
+ * @param baseDir the directory in which to locate the file
+ * @param fileName the name of the file to read
+ * @return the file in string format
+ */
+ private String readFile(File baseDir, String fileName) throws Error {
try {
- while ((len = input.read(bytearr)) != -1) {
- output.write(bytearr, 0, len);
+ File file = new File(baseDir, fileName);
+ SoftReference<String> ref = fileContentCache.get(file);
+ String content = (ref == null) ? null : ref.get();
+ if (content != null)
+ return content;
+
+ content = new String(Files.readAllBytes(file.toPath()));
+ fileContentCache.put(file, new SoftReference(content));
+ return content;
+ } catch (FileNotFoundException e) {
+ System.err.println(e);
+ throw new Error("File not found: " + fileName);
+ } catch (IOException e) {
+ System.err.println(e);
+ throw new Error("Error reading file: " + fileName);
+ }
+ }
+
+ protected void checking(String message) {
+ numTestsRun++;
+ print("Starting subtest " + numTestsRun, message);
+ }
+
+ protected void passed(String message) {
+ numTestsPassed++;
+ print("Passed", message);
+ }
+
+ protected void failed(String message) {
+ print("FAILED", message);
+ }
+
+ private void print(String prefix, String message) {
+ if (message.isEmpty())
+ out.println(prefix);
+ else {
+ out.print(prefix);
+ out.print(": ");
+ out.println(message.replace("\n", NL));
+ }
+ }
+
+ /**
+ * Print a summary of the test results.
+ */
+ protected void printSummary() {
+// log.write();
+ if (numTestsRun != 0 && numTestsPassed == numTestsRun) {
+ // Test passed
+ out.println();
+ out.println("All " + numTestsPassed + " subtests passed");
+ } else {
+ // Test failed
+ throw new Error((numTestsRun - numTestsPassed)
+ + " of " + (numTestsRun)
+ + " subtests failed");
+ }
+ }
+
+ /**
+ * Search for the string in the given file and return true
+ * if the string was found.
+ *
+ * @param fileString the contents of the file to search through
+ * @param stringToFind the string to search for
+ * @return true if the string was found
+ */
+ private boolean findString(String fileString, String stringToFind) {
+ // javadoc (should) always use the platform newline sequence,
+ // but in the strings to find it is more convenient to use the Java
+ // newline character. So we translate \n to NL before we search.
+ stringToFind = stringToFind.replace("\n", NL);
+ return fileString.contains(stringToFind);
+ }
+
+ /**
+ * Compare the two given files.
+ *
+ * @param baseDir1 the directory in which to locate the first file
+ * @param baseDir2 the directory in which to locate the second file
+ * @param file the file to compare in the two base directories
+ * @param throwErrorIFNoMatch flag to indicate whether or not to throw
+ * an error if the files do not match.
+ * @return true if the files are the same and false otherwise.
+ */
+ private void diff(File baseDir1, File baseDir2, String file) {
+ String file1Contents = readFile(baseDir1, file);
+ String file2Contents = readFile(baseDir2, file);
+ checking("diff " + new File(baseDir1, file) + ", " + new File(baseDir2, file));
+ if (file1Contents.trim().compareTo(file2Contents.trim()) == 0) {
+ passed("files are equal");
+ } else {
+ failed("files differ");
+ }
+ }
+
+ /**
+ * Utility class to simplify the handling of temporarily setting a
+ * new stream for System.out or System.err.
+ */
+ private static class StreamOutput {
+ // functional interface to set a stream.
+ private interface Initializer {
+ void set(PrintStream s);
+ }
+
+ private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ private final PrintStream ps = new PrintStream(baos);
+ private final PrintStream prev;
+ private final Initializer init;
+
+ StreamOutput(PrintStream s, Initializer init) {
+ prev = s;
+ init.set(ps);
+ this.init = init;
+ }
+
+ String close() {
+ init.set(prev);
+ ps.close();
+ return baos.toString();
+ }
+ }
+
+ /**
+ * Utility class to simplify the handling of creating an in-memory PrintWriter.
+ */
+ private static class WriterOutput {
+ private final StringWriter sw = new StringWriter();
+ final PrintWriter pw = new PrintWriter(sw);
+ String close() {
+ pw.close();
+ return sw.toString();
+ }
+ }
+
+
+// private final Logger log = new Logger();
+
+ //--------- Logging --------------------------------------------------------
+ //
+ // This class writes out the details of calls to checkOutput and checkFile
+ // in a canonical way, so that the resulting file can be checked against
+ // similar files from other versions of JavadocTester using the same logging
+ // facilities.
+
+ static class Logger {
+ private static final int PREFIX = 40;
+ private static final int SUFFIX = 20;
+ private static final int MAX = PREFIX + SUFFIX;
+ List<String> tests = new ArrayList<>();
+ String outDir;
+ String rootDir = rootDir();
+
+ static String rootDir() {
+ File f = new File(".").getAbsoluteFile();
+ while (!new File(f, ".hg").exists())
+ f = f.getParentFile();
+ return f.getPath();
+ }
+
+ void setOutDir(File outDir) {
+ this.outDir = outDir.getPath();
+ }
+
+ void logCheckFile(String file, boolean positive) {
+ // Strip the outdir because that will typically not be the same
+ if (file.startsWith(outDir + "/"))
+ file = file.substring(outDir.length() + 1);
+ tests.add(file + " " + positive);
+ }
+
+ void logCheckOutput(String file, boolean positive, String text) {
+ // Compress the string to be displayed in the log file
+ String simpleText = text.replaceAll("\\s+", " ").replace(rootDir, "[ROOT]");
+ if (simpleText.length() > MAX)
+ simpleText = simpleText.substring(0, PREFIX)
+ + "..." + simpleText.substring(simpleText.length() - SUFFIX);
+ // Strip the outdir because that will typically not be the same
+ if (file.startsWith(outDir + "/"))
+ file = file.substring(outDir.length() + 1);
+ // The use of text.hashCode ensure that all of "text" is taken into account
+ tests.add(file + " " + positive + " " + text.hashCode() + " " + simpleText);
+ }
+
+ void write() {
+ // sort the log entries because the subtests may not be executed in the same order
+ tests.sort((a, b) -> a.compareTo(b));
+ try (BufferedWriter bw = new BufferedWriter(new FileWriter("tester.log"))) {
+ for (String t: tests) {
+ bw.write(t);
+ bw.newLine();
+ }
+ } catch (IOException e) {
+ throw new Error("problem writing log: " + e);
}
- } catch (FileNotFoundException | SecurityException exc) {
- } finally {
- input.close();
- output.close();
}
}
}
--- a/langtools/test/com/sun/javadoc/testAbsLinkPath/TestAbsLinkPath.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAbsLinkPath/TestAbsLinkPath.java Fri May 16 14:35:37 2014 -0700
@@ -26,33 +26,31 @@
* @bug 4640745
* @summary This test verifys that the -link option handles absolute paths.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestAbsLinkPath
* @run main TestAbsLinkPath
*/
public class TestAbsLinkPath extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg1/C1.html", "C2.html"}};
+ public static void main(String... args) throws Exception {
+ TestAbsLinkPath tester = new TestAbsLinkPath();
+ tester.runTests();
+ }
- private static final String[] ARGS1 =
- new String[] {
- "-d", "tmp2", "-sourcepath", SRC_DIR, "pkg2"};
- private static final String[] ARGS2 =
- new String[] {
- "-d", "tmp", "-sourcepath", SRC_DIR,
- "-link", "../tmp2", "pkg1"};
+ @Test
+ void test1() {
+ String out1 = "out1";
+ javadoc("-d", out1, "-sourcepath", testSrc, "pkg2");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestAbsLinkPath tester = new TestAbsLinkPath();
- tester.run(ARGS1, NO_TEST, NO_TEST);
- tester.run(ARGS2, TEST, NO_TEST);
- tester.printSummary();
+ javadoc("-d", "out2",
+ "-sourcepath", testSrc,
+ "-link", "../" + out1,
+ "pkg1");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/C1.html", true,
+ "C2.html");
}
}
--- a/langtools/test/com/sun/javadoc/testAbstractMethod/TestAbstractMethod.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAbstractMethod/TestAbstractMethod.java Fri May 16 14:35:37 2014 -0700
@@ -27,80 +27,72 @@
* @summary Make sure that the abstract method is identified correctly
* if the abstract modifier is present explicitly or implicitly.
* @author bpatel
- * @library ../lib/
- * @build JavadocTester TestAbstractMethod
+ * @library ../lib
+ * @build JavadocTester
* @run main TestAbstractMethod
*/
public class TestAbstractMethod extends JavadocTester {
- //Test information.
+ public static void main(String... args) throws Exception {
+ TestAbstractMethod tester = new TestAbstractMethod();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ checkOutput("pkg/A.html", true,
+ "<td class=\"colFirst\"><code>default void</code></td>",
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
+ + "All Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
+ + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
+ + "Abstract Methods</a></span><span class=\"tabEnd\"> </span>"
+ + "</span><span id=\"t5\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span></caption>");
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/A.html",
- "<td class=\"colFirst\"><code>default void</code></td>"},
- { "pkg/A.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
- "All Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span><span id=\"t3\" " +
- "class=\"tableTab\"><span><a href=\"javascript:show(4);\">" +
- "Abstract Methods</a></span><span class=\"tabEnd\"> </span>" +
- "</span><span id=\"t5\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span></caption>"},
- { "pkg/B.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
- "All Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span><span id=\"t3\" " +
- "class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract " +
- "Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t4\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(8);\">Concrete Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span></caption>"},
- { "pkg/B.html",
- "<td class=\"colFirst\"><code>abstract void</code></td>"},
- { "pkg/C.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
- "All Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t5\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span></caption>"},
- { "pkg/C.html",
- "<td class=\"colFirst\"><code>default void</code></td>"}
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/A.html",
- "<td class=\"colFirst\"><code>abstract void</code></td>"},
- { "pkg/B.html",
- "<span><a href=\"javascript:show(16);\">Default Methods</a></span>" +
- "<span class=\"tabEnd\"> </span>"},
- { "pkg/B.html",
- "<td class=\"colFirst\"><code>default void</code></td>"},
- { "pkg/C.html",
- "<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>" +
- "<span class=\"tabEnd\"> </span>"}
- };
+ checkOutput("pkg/B.html", true,
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
+ + "All Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
+ + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract "
+ + "Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t4\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(8);\">Concrete Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span></caption>",
+ "<td class=\"colFirst\"><code>abstract void</code></td>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestAbstractMethod tester = new TestAbstractMethod();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/C.html", true,
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
+ + "All Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t5\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span></caption>",
+ "<td class=\"colFirst\"><code>default void</code></td>");
+
+ checkOutput("pkg/A.html", false,
+ "<td class=\"colFirst\"><code>abstract void</code></td>");
+
+ checkOutput("pkg/B.html", false,
+ "<span><a href=\"javascript:show(16);\">Default Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span>",
+ "<td class=\"colFirst\"><code>default void</code></td>");
+
+ checkOutput("pkg/C.html", false,
+ "<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span>");
}
}
--- a/langtools/test/com/sun/javadoc/testAnchorNames/TestAnchorNames.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnchorNames/TestAnchorNames.java Fri May 16 14:35:37 2014 -0700
@@ -26,250 +26,136 @@
* @bug 8025633 8025524
* @summary Test for valid name attribute in HTML anchors.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestAnchorNames
+ * @library ../lib
+ * @build JavadocTester
* @run main TestAnchorNames
*/
public class TestAnchorNames extends JavadocTester {
-
- //Input for string search tests.
- private static final String[][] TEST = {
-
- //Test some section markers and links to these markers
-
- { "pkg1/RegClass.html",
- "<a name=\"skip.navbar.top\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"nested.class.summary\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"#nested.class.summary\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"method.summary\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"#method.summary\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"field.detail\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"#field.detail\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"constructor.detail\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"#constructor.detail\">"
- },
-
- //Test some members and link to these members
+ private static final String[] ARGS = new String[] {
- //The marker for this appears in the serialized-form.html which we will
- //test below
- { "pkg1/RegClass.html",
- "<a href=\"../serialized-form.html#pkg1.RegClass\">"
- },
- //Test some fields
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z_\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z_\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z_:D\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z_:D\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z:D_\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z:D_\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z:Dfield\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"fieldInCla:D:D\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"S_:D:D:D:D:DINT\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"method:D:D\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#method:D:D\">"
- },
- { "pkg1/DeprMemClass.html",
- "<a name=\"Z:Z_field_In_Class\">"
- },
- { "pkg1/DeprMemClass.html",
- "<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
- },
- //Test constructor
- { "pkg1/RegClass.html",
- "<a name=\"RegClass-java.lang.String-int-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">"
- },
- //Test some methods
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z_methodInClass-java.lang.String-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"method--\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#method--\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"foo-java.util.Map-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"methodInCla:Ds-java.lang.String:A-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"methodD-pkg1.RegClass.:DA-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">"
- },
- { "pkg1/RegClass.html",
- "<a name=\"methodD-pkg1.RegClass.D:A-\">"
- },
- { "pkg1/RegClass.html",
- "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">"
- },
- { "pkg1/DeprMemClass.html",
- "<a name=\"Z:Z:Dmethod_In_Class--\">"
- },
- { "pkg1/DeprMemClass.html",
- "<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
- },
-
- //Test enum
-
- { "pkg1/RegClass.Te$t_Enum.html",
- "<a name=\"Z:Z:DFLD2\">"
- },
- { "pkg1/RegClass.Te$t_Enum.html",
- "<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">"
- },
-
- //Test nested class
-
- { "pkg1/RegClass._NestedClas$.html",
- "<a name=\"Z:Z_NestedClas:D--\">"
- },
- { "pkg1/RegClass._NestedClas$.html",
- "<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">"
- },
-
- //Test class use page
-
- { "pkg1/class-use/DeprMemClass.html",
- "<a href=\"../../pkg1/RegClass.html#d____mc\">"
- },
-
- //Test deprecated list page
-
- { "deprecated-list.html",
- "<a href=\"pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
- },
- { "deprecated-list.html",
- "<a href=\"pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
- },
-
- //Test constant values page
-
- { "constant-values.html",
- "<a href=\"pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
- },
-
- //Test serialized form page
-
- //This is the marker for the link that appears in the pkg1.RegClass.html page
- { "serialized-form.html",
- "<a name=\"pkg1.RegClass\">"
- },
-
- //Test member name index page
-
- { "index-all.html",
- "<a name=\"I:Z:Z:D\">"
- },
- { "index-all.html",
- "<a href=\"#I:Z:Z:D\">$"
- },
- { "index-all.html",
- "<a href=\"#I:Z:Z_\">_"
- }
};
- private static final String[][] NEGATED_TEST = {
- //The marker name conversion should only affect HTML anchors. It should not
- //affect the lables.
- { "pkg1/RegClass.html",
- " Z:Z_"
- },
- { "pkg1/RegClass.html",
- " Z:Z:Dfield"
- },
- { "pkg1/RegClass.html",
- " Z:Z_field_In_Class"
- },
- { "pkg1/RegClass.html",
- " S_:D:D:D:D:DINT"
- },
- };
-
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
public static void main(String[] args) throws Exception {
TestAnchorNames tester = new TestAnchorNames();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1");
+ checkExit(Exit.OK);
+
+ // Test some section markers and links to these markers
+ checkOutput("pkg1/RegClass.html", true,
+ "<a name=\"skip.navbar.top\">",
+ "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">",
+ "<a name=\"nested.class.summary\">",
+ "<a href=\"#nested.class.summary\">",
+ "<a name=\"method.summary\">",
+ "<a href=\"#method.summary\">",
+ "<a name=\"field.detail\">",
+ "<a href=\"#field.detail\">",
+ "<a name=\"constructor.detail\">",
+ "<a href=\"#constructor.detail\">");
+
+ // Test some members and link to these members
+ checkOutput("pkg1/RegClass.html", true,
+ //The marker for this appears in the serialized-form.html which we will
+ //test below
+ "<a href=\"../serialized-form.html#pkg1.RegClass\">");
+
+ // Test some fields
+ checkOutput("pkg1/RegClass.html", true,
+ "<a name=\"Z:Z_\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z_\">",
+ "<a name=\"Z:Z_:D\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z_:D\">",
+ "<a name=\"Z:Z:D_\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z:D_\">",
+ "<a name=\"Z:Z:Dfield\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">",
+ "<a name=\"fieldInCla:D:D\">",
+ "<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">",
+ "<a name=\"S_:D:D:D:D:DINT\">",
+ "<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">",
+ "<a name=\"method:D:D\">",
+ "<a href=\"../pkg1/RegClass.html#method:D:D\">");
+
+ checkOutput("pkg1/DeprMemClass.html", true,
+ "<a name=\"Z:Z_field_In_Class\">",
+ "<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">");
+
+ // Test constructor
+ checkOutput("pkg1/RegClass.html", true,
+ "<a name=\"RegClass-java.lang.String-int-\">",
+ "<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">");
+
+ // Test some methods
+ checkOutput("pkg1/RegClass.html", true,
+ "<a name=\"Z:Z_methodInClass-java.lang.String-\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">",
+ "<a name=\"method--\">",
+ "<a href=\"../pkg1/RegClass.html#method--\">",
+ "<a name=\"foo-java.util.Map-\">",
+ "<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">",
+ "<a name=\"methodInCla:Ds-java.lang.String:A-\">",
+ "<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">",
+ "<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">",
+ "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">",
+ "<a name=\"methodD-pkg1.RegClass.:DA-\">",
+ "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">",
+ "<a name=\"methodD-pkg1.RegClass.D:A-\">",
+ "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">");
+
+ checkOutput("pkg1/DeprMemClass.html", true,
+ "<a name=\"Z:Z:Dmethod_In_Class--\">",
+ "<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">");
+
+ // Test enum
+ checkOutput("pkg1/RegClass.Te$t_Enum.html", true,
+ "<a name=\"Z:Z:DFLD2\">",
+ "<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">");
+
+ // Test nested class
+ checkOutput("pkg1/RegClass._NestedClas$.html", true,
+ "<a name=\"Z:Z_NestedClas:D--\">",
+ "<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">");
+
+ // Test class use page
+ checkOutput("pkg1/class-use/DeprMemClass.html", true,
+ "<a href=\"../../pkg1/RegClass.html#d____mc\">");
+
+ // Test deprecated list page
+ checkOutput("deprecated-list.html", true,
+ "<a href=\"pkg1/DeprMemClass.html#Z:Z_field_In_Class\">",
+ "<a href=\"pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">");
+
+ // Test constant values page
+ checkOutput("constant-values.html", true,
+ "<a href=\"pkg1/RegClass.html#S_:D:D:D:D:DINT\">");
+
+ // Test serialized form page
+ checkOutput("serialized-form.html", true,
+ //This is the marker for the link that appears in the pkg1.RegClass.html page
+ "<a name=\"pkg1.RegClass\">");
+
+ // Test member name index page
+ checkOutput("index-all.html", true,
+ "<a name=\"I:Z:Z:D\">",
+ "<a href=\"#I:Z:Z:D\">$",
+ "<a href=\"#I:Z:Z_\">_");
+
+ // The marker name conversion should only affect HTML anchors. It should not
+ // affect the lables.
+ checkOutput("pkg1/RegClass.html", false,
+ " Z:Z_",
+ " Z:Z:Dfield",
+ " Z:Z_field_In_Class",
+ " S_:D:D:D:D:DINT");
}
}
--- a/langtools/test/com/sun/javadoc/testAnnotationOptional/TestAnnotationOptional.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnnotationOptional/TestAnnotationOptional.java Fri May 16 14:35:37 2014 -0700
@@ -27,32 +27,26 @@
* @summary Make sure that annotations types with optional elements have
* element headers
* @author Mahmood Ali
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestAnnotationOptional
* @run main TestAnnotationOptional
*/
public class TestAnnotationOptional extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestAnnotationOptional tester = new TestAnnotationOptional();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/AnnotationOptional.html",
- "<a name=\"annotation.type.element.detail\">"
- }
- };
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestAnnotationOptional tester = new TestAnnotationOptional();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/AnnotationOptional.html", true,
+ "<a name=\"annotation.type.element.detail\">");
}
}
--- a/langtools/test/com/sun/javadoc/testAnnotationTypes/TestAnnotationTypes.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnnotationTypes/TestAnnotationTypes.java Fri May 16 14:35:37 2014 -0700
@@ -27,64 +27,52 @@
* @summary Make sure that annotation types with 0 members does not have
* extra HR tags.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestAnnotationTypes
+ * @library ../lib
+ * @build JavadocTester
* @run main TestAnnotationTypes
*/
public class TestAnnotationTypes extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestAnnotationTypes tester = new TestAnnotationTypes();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/AnnotationTypeField.html",
- "<li>Summary: </li>\n" +
- "<li><a href=\"#annotation.type." +
- "field.summary\">Field</a> | </li>"},
- { "pkg/AnnotationTypeField.html",
- "<li>Detail: </li>\n" +
- "<li><a href=\"#annotation.type." +
- "field.detail\">Field</a> | </li>"},
- { "pkg/AnnotationTypeField.html",
- "<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->"},
- { "pkg/AnnotationTypeField.html",
- "<h3>Field Summary</h3>"},
- { "pkg/AnnotationTypeField.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../" +
- "pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>" +
- "</code> </td>"},
- { "pkg/AnnotationTypeField.html",
- "<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->"},
- { "pkg/AnnotationTypeField.html",
- "<h4>DEFAULT_NAME</h4>\n" +
- "<pre>public static final java." +
- "lang.String DEFAULT_NAME</pre>"},
- { "pkg/AnnotationType.html",
- "<li>Summary: </li>\n" +
- "<li>Field | </li>"},
- { "pkg/AnnotationType.html",
- "<li>Detail: </li>\n" +
- "<li>Field | </li>"},
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/AnnotationType.html",
- "<HR>\n\n" +
- "<P>\n\n" +
- "<P>" +
- "<!-- ========= END OF CLASS DATA ========= -->" + "<HR>"}
- };
+ checkOutput("pkg/AnnotationTypeField.html", true,
+ "<li>Summary: </li>\n"
+ + "<li><a href=\"#annotation.type."
+ + "field.summary\">Field</a> | </li>",
+ "<li>Detail: </li>\n"
+ + "<li><a href=\"#annotation.type."
+ + "field.detail\">Field</a> | </li>",
+ "<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->",
+ "<h3>Field Summary</h3>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../"
+ + "pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>"
+ + "</code> </td>",
+ "<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->",
+ "<h4>DEFAULT_NAME</h4>\n"
+ + "<pre>public static final java."
+ + "lang.String DEFAULT_NAME</pre>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestAnnotationTypes tester = new TestAnnotationTypes();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/AnnotationType.html", true,
+ "<li>Summary: </li>\n"
+ + "<li>Field | </li>",
+ "<li>Detail: </li>\n"
+ + "<li>Field | </li>");
+
+ checkOutput("pkg/AnnotationType.html", false,
+ "<HR>\n\n"
+ + "<P>\n\n"
+ + "<P>"
+ + "<!-- ========= END OF CLASS DATA ========= -->" + "<HR>");
}
}
--- a/langtools/test/com/sun/javadoc/testBackSlashInLink/TestBackSlashInLink.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBackSlashInLink/TestBackSlashInLink.java Fri May 16 14:35:37 2014 -0700
@@ -27,28 +27,27 @@
* @summary Test to make sure that the link to source documentation
* has a forward slash. It would be wrong to use a back slash.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestBackSlashInLink
* @run main TestBackSlashInLink
*/
public class TestBackSlashInLink extends JavadocTester {
- private static final String[][] TEST = {
- { "C.html", "src-html/C.html#line.7"}};
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linksource", SRC_DIR + "/C.java"};
+ public static void main(String... args) throws Exception {
+ TestBackSlashInLink tester = new TestBackSlashInLink();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestBackSlashInLink tester = new TestBackSlashInLink();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-linksource",
+ testSrc("C.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("C.html", true,
+ "src-html/C.html#line.7");
}
}
--- a/langtools/test/com/sun/javadoc/testBadPackageFileInJar/TestBadPackageFileInJar.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBadPackageFileInJar/TestBadPackageFileInJar.java Fri May 16 14:35:37 2014 -0700
@@ -27,33 +27,27 @@
* @summary Test to make sure that Javadoc emits a useful warning
* when a bad package.html file is in the JAR.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestBadPackageFileInJar
* @run main TestBadPackageFileInJar
*/
public class TestBadPackageFileInJar extends JavadocTester {
- private static final String[][] TEST =
- new String[][] {
- {ERROR_OUTPUT,
- "badPackageFileInJar.jar" + FS + "pkg/package.html: error - Body tag missing from HTML"}
- };
+ public static void main(String... args) throws Exception {
+ TestBadPackageFileInJar tester = new TestBadPackageFileInJar();
+ tester.runTests();
+ }
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-classpath",
- SRC_DIR + "/badPackageFileInJar.jar", "pkg"};
-
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-classpath", testSrc("badPackageFileInJar.jar"),
+ "pkg");
+ checkExit(Exit.FAILED);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestBadPackageFileInJar tester = new TestBadPackageFileInJar();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput(Output.ERROR, true,
+ "badPackageFileInJar.jar" + FS + "pkg/package.html: error - Body tag missing from HTML");
}
}
--- a/langtools/test/com/sun/javadoc/testBadSourceFile/TestBadSourceFile.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBadSourceFile/TestBadSourceFile.java Fri May 16 14:35:37 2014 -0700
@@ -27,27 +27,28 @@
* @summary Make sure exception is not thrown if there is a bad source
* file in the same directory as the file being documented.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestBadSourceFile
* @run main TestBadSourceFile
*/
public class TestBadSourceFile extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/C2.java"
- };
-
/**
* The entry point of the test.
- * @param args the array of command line arguments.
+ * @param args the array of command line arguments
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestBadSourceFile tester = new TestBadSourceFile();
- int exitCode = tester.run(ARGS, NO_TEST, NO_TEST);
- tester.checkExitCode(0, exitCode);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ testSrc("C2.java"));
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/testBaseClass/TestBaseClass.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBaseClass/TestBaseClass.java Fri May 16 14:35:37 2014 -0700
@@ -26,29 +26,25 @@
* @bug 4197513
* @summary Javadoc does not process base class.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build BaseClass
* @build JavadocTester
- * @build TestBaseClass
* @run main TestBaseClass
*/
public class TestBaseClass extends JavadocTester {
- private static final String[] ARGS =
- new String[] {
- "-sourcepath", SRC_DIR,
- "-docletpath", SRC_DIR, "-doclet", "BaseClass",
- SRC_DIR + "/Bar.java", "baz"};
+ public static void main(String... args) throws Exception {
+ TestBaseClass tester = new TestBaseClass();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestBaseClass tester = new TestBaseClass();
- if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
- throw new Error("Javadoc failed to execute.");
- }
+ @Test
+ void test() {
+ javadoc("-sourcepath", testSrc,
+ "-docletpath", testSrc,
+ "-doclet", "BaseClass",
+ testSrc("Bar.java"), "baz");
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/testBreakIterator/TestBreakIterator.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBreakIterator/TestBreakIterator.java Fri May 16 14:35:37 2014 -0700
@@ -29,29 +29,27 @@
* Correct Answer: "The class is empty (i.e. it has no members)."
* Wrong Answer: "The class is empty (i.e."
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestBreakIterator
* @run main TestBreakIterator
*/
public class TestBreakIterator extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg/BreakIteratorTest.html",
- "The class is empty (i.e. it has no members)."}};
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-breakiterator", "pkg"};
+ public static void main(String... args) throws Exception {
+ TestBreakIterator tester = new TestBreakIterator();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestBreakIterator tester = new TestBreakIterator();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-breakiterator",
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/BreakIteratorTest.html", true,
+ "The class is empty (i.e. it has no members).");
}
}
--- a/langtools/test/com/sun/javadoc/testCRLineSeparator/TestCRLineSeparator.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCRLineSeparator/TestCRLineSeparator.java Fri May 16 14:35:37 2014 -0700
@@ -26,9 +26,8 @@
* @bug 4979486
* @summary Make sure tool parses CR line separators properly.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestCRLineSeparator
* @run main TestCRLineSeparator
*/
@@ -37,32 +36,27 @@
public class TestCRLineSeparator extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", ".", "pkg"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/MyClass.html", "Line 1\n" +
- " Line 2"}
- };
+ public static void main(String... args) throws Exception {
+ TestCRLineSeparator tester = new TestCRLineSeparator();
+ tester.runTests();
+ }
+ @Test
+ void test() throws IOException {
+ initFiles(new File(testSrc), new File("src"), "pkg");
+ javadoc("-d", "out",
+ "-sourcepath", "src",
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws Exception {
- initFiles(new File(SRC_DIR), new File("."), "pkg");
- TestCRLineSeparator tester = new TestCRLineSeparator();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/MyClass.html", true,
+ "Line 1\n"
+ + " Line 2");
}
// recursively copy files from fromDir to toDir, replacing newlines
// with \r
- static void initFiles(File fromDir, File toDir, String f) throws IOException {
+ void initFiles(File fromDir, File toDir, String f) throws IOException {
File from_f = new File(fromDir, f);
File to_f = new File(toDir, f);
if (from_f.isDirectory()) {
@@ -71,23 +65,17 @@
initFiles(from_f, to_f, child);
}
} else {
- List<String> lines = new ArrayList<String>();
- BufferedReader in = new BufferedReader(new FileReader(from_f));
- try {
+ List<String> lines = new ArrayList<>();
+ try (BufferedReader in = new BufferedReader(new FileReader(from_f))) {
String line;
while ((line = in.readLine()) != null)
lines.add(line);
- } finally {
- in.close();
}
- BufferedWriter out = new BufferedWriter(new FileWriter(to_f));
- try {
+ try (BufferedWriter out = new BufferedWriter(new FileWriter(to_f))) {
for (String line: lines) {
out.write(line);
out.write("\r");
}
- } finally {
- out.close();
}
}
}
--- a/langtools/test/com/sun/javadoc/testCharset/TestCharset.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCharset/TestCharset.java Fri May 16 14:35:37 2014 -0700
@@ -27,39 +27,34 @@
* @summary Run a test on -charset to make sure the charset gets generated as a
* part of the meta tag.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestCharset
+ * @library ../lib
+ * @build JavadocTester
* @run main TestCharset
*/
public class TestCharset extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
- };
-
- private static final String[][] TEST = {
- { "index.html",
- "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"},
- { "pkg/Foo.html",
- "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"}
- };
+ public static void main(String... args) throws Exception {
+ TestCharset tester = new TestCharset();
+ tester.runTests();
+ }
- private static final String[][] NEGATED_TEST = {
- { "index.html",
- "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"},
- { "pkg/Foo.html",
- "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-charset", "UTF-8",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestCharset tester = new TestCharset();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("index.html", true,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
+ checkOutput("pkg/Foo.html", true,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
+
+ checkOutput("index.html", false,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">");
+ checkOutput("pkg/Foo.html", false,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">");
}
}
--- a/langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
* @bug 4652655 4857717 8025633 8026567
* @summary This test verifies that class cross references work properly.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @build TestClassCrossReferences
* @run main TestClassCrossReferences
@@ -34,37 +34,34 @@
public class TestClassCrossReferences extends JavadocTester {
- private static final String[][] TEST = {
- { "C.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><code>Link to math package</code></a>"},
- { "C.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
- "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>"},
- { "C.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
- "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>"},
- { "C.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" " +
- "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>"},
- { "C.html",
- "<dl>\n" +
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code>toString</code> in class <code>java.lang.Object</code></dd>\n" +
- "</dl>"}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/",
- SRC_DIR, SRC_DIR + "/C.java"};
+ public static void main(String... args) throws Exception {
+ TestClassCrossReferences tester = new TestClassCrossReferences();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ final String uri = "http://java.sun.com/j2se/1.4/docs/api/";
+
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", uri, testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestClassCrossReferences tester = new TestClassCrossReferences();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("C.html", true,
+ "<a href=\"" + uri + "java/math/package-summary.html?is-external=true\">"
+ + "<code>Link to math package</code></a>",
+ "<a href=\"" + uri + "javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" "
+ + "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>",
+ "<a href=\"" + uri + "java/math/BigDecimal.html?is-external=true\" "
+ + "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>",
+ "<a href=\"" + uri + "java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" "
+ + "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>",
+ "<dl>\n"
+ + "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code>toString</code> in class <code>java.lang.Object</code></dd>\n"
+ + "</dl>");
}
+
}
--- a/langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java Fri May 16 14:35:37 2014 -0700
@@ -29,64 +29,52 @@
* Make sure class tree includes heirarchy for enums and annotation
* types.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestClassTree
* @run main TestClassTree
*/
public class TestClassTree extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestClassTree tester = new TestClassTree();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/package-tree.html",
- "<ul>\n" +
- "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" " +
- "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>"},
-
- { "pkg/package-tree.html",
- "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n" +
- "<ul>\n" +
- "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" " +
- "title=\"annotation in pkg\"><span class=\"typeNameLink\">AnnotationType</span></a> " +
- "(implements java.lang.annotation.Annotation)</li>\n" +
- "</ul>"},
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- { "pkg/package-tree.html",
- "<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n" +
- "<ul>\n" +
- "<li type=\"circle\">java.lang.Object\n" +
- "<ul>\n" +
- "<li type=\"circle\">java.lang.Enum<E> (implements java.lang." +
- "Comparable<T>, java.io.Serializable)\n" +
- "<ul>\n" +
- "<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" " +
- "title=\"enum in pkg\"><span class=\"typeNameLink\">Coin</span></a></li>\n" +
- "</ul>\n" +
- "</li>\n" +
- "</ul>\n" +
- "</li>\n" +
- "</ul>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/package-tree.html",
- "<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" " +
- "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>"}
- };
+ checkOutput("pkg/package-tree.html", true,
+ "<ul>\n"
+ + "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" "
+ + "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>",
+ "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n"
+ + "<ul>\n"
+ + "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" "
+ + "title=\"annotation in pkg\"><span class=\"typeNameLink\">AnnotationType</span></a> "
+ + "(implements java.lang.annotation.Annotation)</li>\n"
+ + "</ul>",
+ "<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n"
+ + "<ul>\n"
+ + "<li type=\"circle\">java.lang.Object\n"
+ + "<ul>\n"
+ + "<li type=\"circle\">java.lang.Enum<E> (implements java.lang."
+ + "Comparable<T>, java.io.Serializable)\n"
+ + "<ul>\n"
+ + "<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" "
+ + "title=\"enum in pkg\"><span class=\"typeNameLink\">Coin</span></a></li>\n"
+ + "</ul>\n"
+ + "</li>\n"
+ + "</ul>\n"
+ + "</li>\n"
+ + "</ul>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestClassTree tester = new TestClassTree();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/package-tree.html", false,
+ "<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" "
+ + "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>");
}
}
--- a/langtools/test/com/sun/javadoc/testCmndLineClass/TestCmndLineClass.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCmndLineClass/TestCmndLineClass.java Fri May 16 14:35:37 2014 -0700
@@ -28,47 +28,44 @@
* when specifying packages on the command line and specifying individual
* classes.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestCmndLineClass
* @run main TestCmndLineClass
*/
public class TestCmndLineClass extends JavadocTester {
- private static final String OUTPUT_DIR1 = "4506980-tmp1";
- private static final String OUTPUT_DIR2 = "4506980-tmp2";
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR1, "-sourcepath", SRC_DIR,
- "-notimestamp", SRC_DIR + "/C5.java", "pkg1", "pkg2"
- };
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR2, "-sourcepath", SRC_DIR,
- "-notimestamp", SRC_DIR + "/C5.java",
- SRC_DIR + "/pkg1/C1.java",
- SRC_DIR + "/pkg1/C2.java",
- SRC_DIR + "/pkg2/C3.java",
- SRC_DIR + "/pkg2/C4.java"
- };
- private static final String[] FILES_TO_DIFF = {
- "C5.html",
- "pkg1/C1.html",
- "pkg1/C2.html",
- "pkg2/C3.html",
- "pkg2/C4.html"
- };
+ public static void main(String... args) throws Exception {
+ TestCmndLineClass tester = new TestCmndLineClass();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ String outdir1 = "out-1";
+ String outdir2 = "out-2";
+
+ javadoc("-d", outdir1,
+ "-sourcepath", testSrc,
+ "-notimestamp",
+ testSrc("C5.java"), "pkg1", "pkg2");
+ checkExit(Exit.OK);
+ javadoc("-d", outdir2,
+ "-sourcepath", testSrc,
+ "-notimestamp",
+ testSrc("C5.java"),
+ testSrc("pkg1/C1.java"),
+ testSrc("pkg1/C2.java"),
+ testSrc("pkg2/C3.java"),
+ testSrc("pkg2/C4.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestCmndLineClass tester = new TestCmndLineClass();
- tester.run(ARGS1, NO_TEST, NO_TEST);
- tester.run(ARGS2, NO_TEST, NO_TEST);
- tester.runDiffs(OUTPUT_DIR1, OUTPUT_DIR2, FILES_TO_DIFF);
+ diff(outdir1, outdir2,
+ "C5.html",
+ "pkg1/C1.html",
+ "pkg1/C2.html",
+ "pkg2/C3.html",
+ "pkg2/C4.html");
}
}
--- a/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java Fri May 16 14:35:37 2014 -0700
@@ -26,32 +26,28 @@
* @bug 8027977
* @summary Test to verify javadoc executes without CompletionFailure exception.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestCompletionFailure
+ * @library ../lib
+ * @build JavadocTester
* @run main TestCompletionFailure
*/
public class TestCompletionFailure extends JavadocTester {
- //Input for string search tests.
- private static final String[][] NEGATED_TEST = {
- {ERROR_OUTPUT, "TestCompletionFailure: error - " +
- "com.sun.tools.javac.code.Symbol$CompletionFailure: class file for " +
- "sun.util.locale.provider.LocaleProviderAdapter not found"
- }
- };
+ public static void main(String... args) throws Exception {
+ TestCompletionFailure tester = new TestCompletionFailure();
+ tester.runTests();
+ }
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws Exception {
- TestCompletionFailure tester = new TestCompletionFailure();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput(Output.STDERR, false,
+ "TestCompletionFailure: error - "
+ + "com.sun.tools.javac.code.Symbol$CompletionFailure: class file for "
+ + "sun.util.locale.provider.LocaleProviderAdapter not found");
}
}
--- a/langtools/test/com/sun/javadoc/testConstantValuesPage/TestConstantValuesPage.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstantValuesPage/TestConstantValuesPage.java Fri May 16 14:35:37 2014 -0700
@@ -27,28 +27,26 @@
* @summary Test to make sure that constant values page does not get
* generated when doclet has nothing to document.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestConstantValuesPage
* @run main TestConstantValuesPage
*/
public class TestConstantValuesPage extends JavadocTester {
- private static final String[][] NEGATED_TEST = {
- {NOTICE_OUTPUT, "constant-values.html..."}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "foo"};
+ public static void main(String... args) throws Exception {
+ TestConstantValuesPage tester = new TestConstantValuesPage();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestConstantValuesPage tester = new TestConstantValuesPage();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "foo");
+ checkExit(Exit.FAILED);
+
+ checkOutput(Output.NOTICE, false,
+ "constant-values.html...");
}
}
--- a/langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java Fri May 16 14:35:37 2014 -0700
@@ -27,37 +27,31 @@
* @summary The constructor comments should be surrounded by
* <dl></dl>. Check for this in the output.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestConstructorIndent
* @run main TestConstructorIndent
*/
public class TestConstructorIndent extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestConstructorIndent tester = new TestConstructorIndent();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "C.html", "<div class=\"block\">" +
- "This is just a simple constructor.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
- "<dd><code>i</code> - a param.</dd>\n" +
- "</dl>"
- }
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestConstructorIndent tester = new TestConstructorIndent();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("C.html", true,
+ "<div class=\"block\">"
+ + "This is just a simple constructor.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
+ + "<dd><code>i</code> - a param.</dd>\n"
+ + "</dl>");
}
}
--- a/langtools/test/com/sun/javadoc/testConstructors/TestConstructors.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstructors/TestConstructors.java Fri May 16 14:35:37 2014 -0700
@@ -26,106 +26,66 @@
* @bug 8025524 8031625
* @summary Test for constructor name which should be a non-qualified name.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestConstructors
+ * @library ../lib
+ * @build JavadocTester
* @run main TestConstructors
*/
public class TestConstructors extends JavadocTester {
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg1/Outer.html",
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n" +
- "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n" +
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n" +
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n" +
- "<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n" +
- "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>"
- },
- { "pkg1/Outer.html",
- "Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, " +
- "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, " +
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>" +
- "NestedInner(int)</code></a>"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()"
- },
- { "pkg1/Outer.html",
- "<a name=\"Outer--\">"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>(int i)"
- },
- { "pkg1/Outer.html",
- "<a name=\"Outer-int-\">"
- },
- { "pkg1/Outer.Inner.html",
- "<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()"
- },
- { "pkg1/Outer.Inner.html",
- "<a name=\"Inner--\">"
- },
- { "pkg1/Outer.Inner.html",
- "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>(int i)"
- },
- { "pkg1/Outer.Inner.html",
- "<a name=\"Inner-int-\">"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "<a name=\"NestedInner--\">"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>(int i)"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "<a name=\"NestedInner-int-\">"
- }
- };
+ public static void main(String... args) throws Exception {
+ TestConstructors tester = new TestConstructors();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
- private static final String[][] NEGATED_TEST = {
- { "pkg1/Outer.Inner.html",
- "Outer.Inner--"
- },
- { "pkg1/Outer.Inner.html",
- "Outer.Inner-int-"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "Outer.Inner.NestedInner--"
- },
- { "pkg1/Outer.Inner.NestedInner.html",
- "Outer.Inner.NestedInner-int-"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>"
- },
- { "pkg1/Outer.html",
- "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>"
- }
- };
+ checkOutput("pkg1/Outer.html", true,
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n"
+ + "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n"
+ + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\"><code>NestedInner()</code></a>, \n"
+ + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>NestedInner(int)</code></a>, \n"
+ + "<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n"
+ + "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>",
+ "Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, "
+ + "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, "
+ + "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>"
+ + "NestedInner(int)</code></a>",
+ "<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()",
+ "<a name=\"Outer--\">",
+ "<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>(int i)",
+ "<a name=\"Outer-int-\">");
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
- };
+ checkOutput("pkg1/Outer.Inner.html", true,
+ "<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()",
+ "<a name=\"Inner--\">",
+ "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>(int i)",
+ "<a name=\"Inner-int-\">");
+
+ checkOutput("pkg1/Outer.Inner.NestedInner.html", true,
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()",
+ "<a name=\"NestedInner--\">",
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>(int i)",
+ "<a name=\"NestedInner-int-\">");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws Exception {
- TestConstructors tester = new TestConstructors();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg1/Outer.Inner.html", false,
+ "Outer.Inner--",
+ "Outer.Inner-int-");
+
+ checkOutput("pkg1/Outer.Inner.NestedInner.html", false,
+ "Outer.Inner.NestedInner--",
+ "Outer.Inner.NestedInner-int-");
+
+ checkOutput("pkg1/Outer.html", false,
+ "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>",
+ "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>",
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>",
+ "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>");
}
}
--- a/langtools/test/com/sun/javadoc/testCustomTag/TestCustomTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCustomTag/TestCustomTag.java Fri May 16 14:35:37 2014 -0700
@@ -26,69 +26,67 @@
* @bug 8006248
* @summary Test custom tag. Verify that an unknown tag generates appropriate warnings.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester taglets.CustomTag TestCustomTag
+ * @library ../lib
+ * @build JavadocTester taglets.CustomTag
* @run main TestCustomTag
*/
public class TestCustomTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, "-tagletpath", SRC_DIR,
- "-taglet", "taglets.CustomTag", "-sourcepath",
- SRC_DIR, SRC_DIR + "/TagTestClass.java"
- };
+ public static void main(String... args) throws Exception {
+ TestCustomTag tester = new TestCustomTag();
+ tester.runTests();
+ }
- private static final String[] ARGS1 = new String[] {
- "-d", OUTPUT_DIR + "-1", "-tagletpath",
- SRC_DIR, "-taglet", "taglets.CustomTag",
- "-sourcepath", SRC_DIR, SRC_DIR + "/TagTestClass.java"
- };
- private static final String[] ARGS2 = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-sourcepath",
- SRC_DIR, SRC_DIR + "/TagTestClass.java"
- };
+ @Test
+ void test1() {
+ javadoc("-Xdoclint:none",
+ "-d", "out-1",
+ "-tagletpath", testSrc, // TODO: probably useless
+ "-taglet", "taglets.CustomTag",
+ "-sourcepath", testSrc,
+ testSrc("TagTestClass.java"));
+ checkExit(Exit.OK);
- private static final String[] ARGS3 = new String[] {
- "-d", OUTPUT_DIR + "-3", "-sourcepath",
- SRC_DIR, SRC_DIR + "/TagTestClass.java"
- };
+ checkOutput(Output.WARNING, true,
+ "warning - @unknownTag is an unknown tag.");
+ }
- //Input for string search tests.
- private static final String[][] TEST = new String[][] {
- {WARNING_OUTPUT, "warning - @unknownTag is an unknown tag."
- }
- };
+ @Test
+ void test2() {
+ javadoc("-d", "out-2",
+ "-tagletpath", testSrc, // TODO: probably useless
+ "-taglet", "taglets.CustomTag",
+ "-sourcepath", testSrc,
+ testSrc("TagTestClass.java"));
+ checkExit(Exit.FAILED);
- private static final String[][] TEST1 = new String[][] {
- {ERROR_OUTPUT, "error: unknown tag: unknownTag"
- }
- };
- private static final String[][] TEST2 = new String[][] {
- {WARNING_OUTPUT, "warning - @customTag is an unknown tag."
- },
- {WARNING_OUTPUT, "warning - @unknownTag is an unknown tag."
- }
- };
+ checkOutput(Output.ERROR, true,
+ "error: unknown tag: unknownTag");
+ }
+
+ @Test
+ void test3() {
+ javadoc("-Xdoclint:none",
+ "-d", "out-3",
+ "-sourcepath", testSrc,
+ testSrc("TagTestClass.java"));
+ checkExit(Exit.OK);
- private static final String[][] TEST3 = new String[][] {
- {ERROR_OUTPUT, "error: unknown tag: customTag"
- },
- {ERROR_OUTPUT, "error: unknown tag: unknownTag"
- }
- };
+ checkOutput(Output.WARNING, true,
+ "warning - @customTag is an unknown tag.",
+ "warning - @unknownTag is an unknown tag.");
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestCustomTag tester = new TestCustomTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.run(ARGS1, TEST1, NO_TEST);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.run(ARGS3, TEST3, NO_TEST);
- tester.printSummary();
+ @Test
+ void test4() {
+ javadoc("-d", "out-4",
+ "-sourcepath", testSrc,
+ testSrc("TagTestClass.java"));
+ checkExit(Exit.FAILED);
+
+ checkOutput(Output.ERROR, true,
+ "error: unknown tag: customTag",
+ "error: unknown tag: unknownTag");
}
}
--- a/langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java Fri May 16 14:35:37 2014 -0700
@@ -26,76 +26,65 @@
* @bug 4927552 8026567
* @summary <DESC>
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestDeprecatedDocs
+ * @library ../lib
+ * @build JavadocTester
* @run main TestDeprecatedDocs
*/
public class TestDeprecatedDocs extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestDeprecatedDocs tester = new TestDeprecatedDocs();
+ tester.runTests();
+ }
- private static final String TARGET_FILE =
- "deprecated-list.html";
-
- private static final String TARGET_FILE2 =
- "pkg/DeprecatedClassByAnnotation.html";
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- {TARGET_FILE, "annotation_test1 passes"},
- {TARGET_FILE, "annotation_test2 passes"},
- {TARGET_FILE, "annotation_test3 passes"},
- {TARGET_FILE, "class_test1 passes"},
- {TARGET_FILE, "class_test2 passes"},
- {TARGET_FILE, "class_test3 passes"},
- {TARGET_FILE, "class_test4 passes"},
- {TARGET_FILE, "enum_test1 passes"},
- {TARGET_FILE, "enum_test2 passes"},
- {TARGET_FILE, "error_test1 passes"},
- {TARGET_FILE, "error_test2 passes"},
- {TARGET_FILE, "error_test3 passes"},
- {TARGET_FILE, "error_test4 passes"},
- {TARGET_FILE, "exception_test1 passes"},
- {TARGET_FILE, "exception_test2 passes"},
- {TARGET_FILE, "exception_test3 passes"},
- {TARGET_FILE, "exception_test4 passes"},
- {TARGET_FILE, "interface_test1 passes"},
- {TARGET_FILE, "interface_test2 passes"},
- {TARGET_FILE, "interface_test3 passes"},
- {TARGET_FILE, "interface_test4 passes"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation()"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.method()"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.field"},
+ checkOutput("deprecated-list.html", true,
+ "annotation_test1 passes",
+ "annotation_test2 passes",
+ "annotation_test3 passes",
+ "class_test1 passes",
+ "class_test2 passes",
+ "class_test3 passes",
+ "class_test4 passes",
+ "enum_test1 passes",
+ "enum_test2 passes",
+ "error_test1 passes",
+ "error_test2 passes",
+ "error_test3 passes",
+ "error_test4 passes",
+ "exception_test1 passes",
+ "exception_test2 passes",
+ "exception_test3 passes",
+ "exception_test4 passes",
+ "interface_test1 passes",
+ "interface_test2 passes",
+ "interface_test3 passes",
+ "interface_test4 passes",
+ "pkg.DeprecatedClassByAnnotation",
+ "pkg.DeprecatedClassByAnnotation()",
+ "pkg.DeprecatedClassByAnnotation.method()",
+ "pkg.DeprecatedClassByAnnotation.field"
+ );
- {TARGET_FILE2, "<pre>@Deprecated\n" +
- "public class <span class=\"typeNameLabel\">DeprecatedClassByAnnotation</span>\n" +
- "extends java.lang.Object</pre>"},
-
- {TARGET_FILE2, "<pre>@Deprecated\n" +
- "public int field</pre>\n" +
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
-
- {TARGET_FILE2, "<pre>@Deprecated\n" +
- "public DeprecatedClassByAnnotation()</pre>\n" +
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
-
- {TARGET_FILE2, "<pre>@Deprecated\n" +
- "public void method()</pre>\n" +
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDeprecatedDocs tester = new TestDeprecatedDocs();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/DeprecatedClassByAnnotation.html", true,
+ "<pre>@Deprecated\n"
+ + "public class <span class=\"typeNameLabel\">DeprecatedClassByAnnotation</span>\n"
+ + "extends java.lang.Object</pre>",
+ "<pre>@Deprecated\n"
+ + "public int field</pre>\n"
+ + "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>",
+ "<pre>@Deprecated\n"
+ + "public DeprecatedClassByAnnotation()</pre>\n"
+ + "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>",
+ "<pre>@Deprecated\n"
+ + "public void method()</pre>\n"
+ + "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>");
}
}
--- a/langtools/test/com/sun/javadoc/testDocEncoding/TestDocEncoding.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocEncoding/TestDocEncoding.java Fri May 16 14:35:37 2014 -0700
@@ -31,36 +31,30 @@
* @summary Run tests on -docencoding to see if the value is
used for stylesheet as well.
* @author jayashree viswanathan
- * @library ../lib/
- * @build JavadocTester TestDocEncoding
+ * @library ../lib
+ * @build JavadocTester
* @run main TestDocEncoding
*/
public class TestDocEncoding extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR,
- "-docencoding", "Cp930",
- "-sourcepath", SRC_DIR,
- "-notimestamp",
- "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestDocEncoding tester = new TestDocEncoding();
+ tester.runTests();
+ }
- private static final String[][] NEGATED_TEST = {
- { "stylesheet.css",
- "body {\n" +
- " background-color:#ffffff;"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-docencoding", "Cp930",
+ "-sourcepath", testSrc,
+ "-notimestamp",
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDocEncoding tester = new TestDocEncoding();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("stylesheet.css", false,
+ "body {\n"
+ + " background-color:#ffffff;");
}
}
--- a/langtools/test/com/sun/javadoc/testDocErrorReporter/TestDocErrorReporter.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocErrorReporter/TestDocErrorReporter.java Fri May 16 14:35:37 2014 -0700
@@ -27,31 +27,30 @@
* @summary Make sure that option validation errors and sent to the
* DocErrorReporter.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDocErrorReporter
* @run main TestDocErrorReporter
*/
public class TestDocErrorReporter extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-encoding", "xyz",
- SRC_DIR + "/TestDocErrorReporter.java"
- };
-
- //Input for Javadoc return code test.
- private static final int EXPECTED_EXIT_CODE = 1;
-
/**
* The entry point of the test.
- * @param args the array of command line arguments.
+ * @param args the array of command line arguments
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestDocErrorReporter tester = new TestDocErrorReporter();
- int actualExitCode = tester.run(ARGS, NO_TEST, NO_TEST);
- tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-encoding", "xyz",
+ testSrc("TestDocErrorReporter.java"));
+
+ checkExit(Exit.FAILED);
}
}
--- a/langtools/test/com/sun/javadoc/testDocFileDir/TestDocFileDir.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocFileDir/TestDocFileDir.java Fri May 16 14:35:37 2014 -0700
@@ -21,8 +21,6 @@
* questions.
*/
-import java.io.File;
-
/*
* @test
* @bug 4258405 4973606 8024096
@@ -31,68 +29,59 @@
* directory.
* Also test that -docfilessubdirs and -excludedocfilessubdir both work.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDocFileDir
* @run main TestDocFileDir
*/
public class TestDocFileDir extends JavadocTester {
- private static final String[][] TEST1 = {
- { "pkg/doc-files/testfile.txt",
- "This doc file did not get trashed."}
- };
+ public static void main(String... args) throws Exception {
+ TestDocFileDir tester = new TestDocFileDir();
+ tester.runTests();
+ }
- private static final String[] FILE_TEST2 = {
- "pkg/doc-files/subdir-used1/testfile.txt",
- "pkg/doc-files/subdir-used2/testfile.txt"
- };
- private static final String[] FILE_NEGATED_TEST2 = {
- "pkg/doc-files/subdir-excluded1/testfile.txt",
- "pkg/doc-files/subdir-excluded2/testfile.txt"
- };
-
- private static final String[][] TEST0 = {
- {"pkg/doc-files/testfile.txt",
- "This doc file did not get trashed."}
- };
-
- //Output dir = Input Dir
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR + "-1",
- "-sourcepath",
- "blah" + File.pathSeparator + OUTPUT_DIR + "-1" +
- File.pathSeparator + "blah", "pkg"};
+ // Output dir = "", Input dir = ""
+ @Test
+ void test1() {
+ copyDir(testSrc("pkg"), ".");
+ setOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
+ javadoc("pkg/C.java");
+ checkExit(Exit.OK);
+ checkOutput("pkg/doc-files/testfile.txt", true,
+ "This doc file did not get trashed.");
+ }
- //Exercising -docfilessubdirs and -excludedocfilessubdir
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR + "-2",
- "-sourcepath", SRC_DIR,
- "-docfilessubdirs",
- "-excludedocfilessubdir", "subdir-excluded1:subdir-excluded2",
- "pkg"};
-
- //Output dir = "", Input dir = ""
- private static final String[] ARGS0 =
- new String[] {"pkg/C.java"};
-
+ // Output dir = Input Dir
+ @Test
+ void test2() {
+ String outdir = "out2";
+ copyDir(testSrc("pkg"), outdir);
+ setOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
+ javadoc("-d", outdir,
+ "-sourcepath", "blah" + PS + outdir + PS + "blah",
+ "pkg");
+ checkExit(Exit.OK);
+ checkOutput("pkg/doc-files/testfile.txt", true,
+ "This doc file did not get trashed.");
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDocFileDir tester = new TestDocFileDir();
- tester.setCheckOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
- copyDir(SRC_DIR + "/pkg", ".");
- tester.run(ARGS0, TEST0, NO_TEST);
- copyDir(SRC_DIR + "/pkg", OUTPUT_DIR + "-1");
- tester.run(ARGS1, TEST1, NO_TEST);
- tester.setCheckOutputDirectoryCheck(DirectoryCheck.NONE);
- tester.run(ARGS2, NO_TEST, NO_TEST, FILE_TEST2, FILE_NEGATED_TEST2);
- tester.printSummary();
+ // Exercising -docfilessubdirs and -excludedocfilessubdir
+ @Test
+ void test3() {
+ String outdir = "out3";
+ setOutputDirectoryCheck(DirectoryCheck.NONE);
+ javadoc("-d", outdir,
+ "-sourcepath", testSrc,
+ "-docfilessubdirs",
+ "-excludedocfilessubdir", "subdir-excluded1:subdir-excluded2",
+ "pkg");
+ checkExit(Exit.OK);
+ checkFiles(true,
+ "pkg/doc-files/subdir-used1/testfile.txt",
+ "pkg/doc-files/subdir-used2/testfile.txt");
+ checkFiles(false,
+ "pkg/doc-files/subdir-excluded1/testfile.txt",
+ "pkg/doc-files/subdir-excluded2/testfile.txt");
}
}
--- a/langtools/test/com/sun/javadoc/testDocFiles/TestDocFiles.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocFiles/TestDocFiles.java Fri May 16 14:35:37 2014 -0700
@@ -25,28 +25,26 @@
* @test
* @bug 8008949
* @summary verify that doc-files get copied
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDocFiles
* @run main TestDocFiles
*/
public class TestDocFiles extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg/doc-files/test.txt", "test file"}};
-
- private static final String[] ARGS =
- new String[] {
- "-d", "tmp", "-sourcepath", SRC_DIR, "pkg"};
+ public static void main(String... args) throws Exception {
+ TestDocFiles tester = new TestDocFiles();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDocFiles tester = new TestDocFiles();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/doc-files/test.txt", true,
+ "test file");
}
}
--- a/langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java Fri May 16 14:35:37 2014 -0700
@@ -28,42 +28,38 @@
* If docRoot performs as documented, the test passes.
* Make sure that the docRoot tag works with the -bottom option.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDocRootInlineTag
* @run main TestDocRootInlineTag
*/
public class TestDocRootInlineTag extends JavadocTester {
- private static final String[][] TEST = {
- { "TestDocRootTag.html",
- "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
- "title=\"class or interface in java.io\"><code>File</code></a>"},
- { "TestDocRootTag.html",
- "<a href=\"./glossary.html\">glossary</a>"},
- { "TestDocRootTag.html",
- "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
- "title=\"class or interface in java.io\"><code>Second File Link</code></a>"},
- { "TestDocRootTag.html", "The value of @docRoot is \"./\""},
- { "index-all.html", "My package page is " +
- "<a href=\"./pkg/package-summary.html\">here</a>"}
- };
- private static final String[] ARGS =
- new String[] {
- "-bottom", "The value of @docRoot is \"{@docRoot}\"",
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api",
- SRC_DIR, SRC_DIR + "/TestDocRootTag.java", "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestDocRootInlineTag tester = new TestDocRootInlineTag();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ String uri = "http://www.java.sun.com/j2se/1.4/docs/api";
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDocRootInlineTag tester = new TestDocRootInlineTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ javadoc("-bottom", "The value of @docRoot is \"{@docRoot}\"",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", uri, testSrc,
+ testSrc("TestDocRootTag.java"), "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("TestDocRootTag.html", true,
+ "<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
+ + "title=\"class or interface in java.io\"><code>File</code></a>",
+ "<a href=\"./glossary.html\">glossary</a>",
+ "<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
+ + "title=\"class or interface in java.io\"><code>Second File Link</code></a>",
+ "The value of @docRoot is \"./\"");
+
+ checkOutput("index-all.html", true,
+ "My package page is <a href=\"./pkg/package-summary.html\">here</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java Fri May 16 14:35:37 2014 -0700
@@ -26,109 +26,78 @@
* @bug 6553182 8025416 8029504
* @summary This test verifies the -Xdocrootparent option.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestDocRootLink
+ * @library ../lib
+ * @build JavadocTester
* @run main TestDocRootLink
*/
public class TestDocRootLink extends JavadocTester {
- private static final String[][] TEST1 = {
- { "pkg1/C1.html",
- "Refer <a href=\"../../technotes/guides/index.html\">Here</a>"
- },
- { "pkg1/C1.html",
+ public static void main(String... args) throws Exception {
+ TestDocRootLink tester = new TestDocRootLink();
+ tester.runTests();
+ }
+
+ @Test
+ void test1() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/C1.html", true,
+ "Refer <a href=\"../../technotes/guides/index.html\">Here</a>",
"This <a href=\"../pkg2/C2.html\">Here</a> should not be replaced\n" +
- " with an absolute link."
- },
- { "pkg1/C1.html",
- "Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
- " <a href=\"../pkg2/C2.html\">Link 2</a>."
- },
- { "pkg1/package-summary.html",
- "<a href=\"../../technotes/guides/index.html\">\n" +
- " Test document 1</a>"
- },
- { "pkg1/package-summary.html",
- "<a href=\"../pkg2/C2.html\">\n" +
- " Another Test document 1</a>"
- },
- { "pkg1/package-summary.html",
- "<a href=\"../technotes/guides/index.html\">\n" +
- " Another Test document 2.</a>"
- }
- };
- private static final String[][] NEGATED_TEST1 = {
- { "pkg1/C1.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
- },
- { "pkg1/C1.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
- },
- { "pkg1/package-summary.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
- },
- { "pkg1/package-summary.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
- }
- };
- private static final String[][] TEST2 = {
- { "pkg2/C2.html",
- "Refer <a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">Here</a>"
- },
- { "pkg2/C2.html",
- "This <a href=\"../pkg1/C1.html\">Here</a> should not be replaced\n" +
- " with an absolute link."
- },
- { "pkg2/C2.html",
+ " with an absolute link.",
"Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
- " <a href=\"../pkg1/C1.html\">Link 2</a>."
- },
- { "pkg2/package-summary.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">\n" +
- " Test document 1</a>"
- },
- { "pkg2/package-summary.html",
- "<a href=\"../pkg1/C1.html\">\n" +
- " Another Test document 1</a>"
- },
- { "pkg2/package-summary.html",
+ " <a href=\"../pkg2/C2.html\">Link 2</a>.");
+
+ checkOutput("pkg1/package-summary.html", true,
+ "<a href=\"../../technotes/guides/index.html\">\n" +
+ " Test document 1</a>",
+ "<a href=\"../pkg2/C2.html\">\n" +
+ " Another Test document 1</a>",
"<a href=\"../technotes/guides/index.html\">\n" +
- " Another Test document 2.</a>"
- }
- };
- private static final String[][] NEGATED_TEST2 = {
- { "pkg2/C2.html",
- "<a href=\"../../technotes/guides/index.html\">"
- },
- { "pkg2/C2.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
- },
- { "pkg2/package-summary.html",
- "<a href=\"../../technotes/guides/index.html\">"
- },
- { "pkg2/package-summary.html",
- "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
- }
- };
- private static final String[] ARGS1 =
- new String[]{
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
- };
- private static final String[] ARGS2 =
- new String[]{
- "-d", OUTPUT_DIR + "-1", "-Xdocrootparent",
- "http://download.oracle.com/javase/7/docs", "-sourcepath",
- SRC_DIR, "pkg1", "pkg2"
- };
+ " Another Test document 2.</a>");
+
+ // TODO: should this check *any* reference to http://download.oracle.com/
+ checkOutput("pkg1/C1.html", false,
+ "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">",
+ "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">");
+
+ checkOutput("pkg1/package-summary.html", false,
+ "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">",
+ "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">");
+ }
+
+ @Test
+ void test2() {
+ javadoc("-d", "out-2",
+ "-Xdocrootparent", "http://download.oracle.com/javase/7/docs",
+ "-sourcepath", testSrc,
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestDocRootLink tester = new TestDocRootLink();
- tester.run(ARGS1, TEST1, NEGATED_TEST1);
- tester.run(ARGS2, TEST2, NEGATED_TEST2);
- tester.printSummary();
+ checkOutput("pkg2/C2.html", true,
+ "Refer <a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">Here</a>",
+ "This <a href=\"../pkg1/C1.html\">Here</a> should not be replaced\n" +
+ " with an absolute link.",
+ "Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
+ " <a href=\"../pkg1/C1.html\">Link 2</a>.");
+
+ checkOutput("pkg2/package-summary.html", true,
+ "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">\n" +
+ " Test document 1</a>",
+ "<a href=\"../pkg1/C1.html\">\n" +
+ " Another Test document 1</a>",
+ "<a href=\"../technotes/guides/index.html\">\n" +
+ " Another Test document 2.</a>");
+
+ checkOutput("pkg2/C2.html", false,
+ "<a href=\"../../technotes/guides/index.html\">",
+ "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">");
+
+ checkOutput("pkg2/package-summary.html", false,
+ "<a href=\"../../technotes/guides/index.html\">",
+ "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">");
}
}
--- a/langtools/test/com/sun/javadoc/testDupParamWarn/TestDupParamWarn.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDupParamWarn/TestDupParamWarn.java Fri May 16 14:35:37 2014 -0700
@@ -27,28 +27,26 @@
* @summary Test to ensure that the doclet does not print out bad
* warning messages about duplicate param tags.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestDupParamWarn
* @run main TestDupParamWarn
*/
public class TestDupParamWarn extends JavadocTester {
- private static final String[] ARGS =
- new String[] {"-d", OUTPUT_DIR, "-sourcepath",
- SRC_DIR + "/", "pkg"};
- private static final String[][] NEGATED_TEST =
- new String[][] {{WARNING_OUTPUT,
- "Parameter \"a\" is documented more than once."}};
+ public static void main(String... args) throws Exception {
+ JavadocTester tester = new TestDupParamWarn();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- JavadocTester tester = new TestDupParamWarn();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput(Output.WARNING, false,
+ "Parameter \"a\" is documented more than once.");
}
}
--- a/langtools/test/com/sun/javadoc/testEmptyClass/TestEmptyClass.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEmptyClass/TestEmptyClass.java Fri May 16 14:35:37 2014 -0700
@@ -27,39 +27,32 @@
* @summary Test to make sure that Javadoc behaves properly when
* run on a completely empty class (no comments or members).
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestEmptyClass
* @run main TestEmptyClass
*/
public class TestEmptyClass extends JavadocTester {
- private static final String[][] NEGATED_TEST = {
+ public static void main(String... args) throws Exception {
+ TestEmptyClass tester = new TestEmptyClass();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-classpath", testSrc("src"),
+ "-d", "out",
+ "-sourcepath", testSrc("src"),
+ testSrc("src/Empty.java"));
+ checkExit(Exit.OK);
//The overview tree should not link to classes that were not documented
- { "overview-tree.html", "<A HREF=\"TestEmptyClass.html\">"},
+ checkOutput("overview-tree.html", false,
+ "<A HREF=\"TestEmptyClass.html\">");
//The index page should not link to classes that were not documented
- { "index-all.html", "<A HREF=\"TestEmptyClass.html\">"},
- };
- private static final String[] ARGS =
- new String[] {
- "-classpath", SRC_DIR + "/src",
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR + "/src",
- SRC_DIR + "/src/Empty.java"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestEmptyClass tester = new TestEmptyClass();
- int exitCode = tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
- if (exitCode != 0) {
- throw new Error("Error found while executing Javadoc");
- }
+ checkOutput("index-all.html", false,
+ "<A HREF=\"TestEmptyClass.html\">");
}
}
--- a/langtools/test/com/sun/javadoc/testEnclosingClass/TestEnclosingClass.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEnclosingClass/TestEnclosingClass.java Fri May 16 14:35:37 2014 -0700
@@ -26,31 +26,26 @@
* @bug 5008230
* @summary Check the outer class when documenting enclosing class/interface.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestEnclosingClass
* @run main TestEnclosingClass
*/
public class TestEnclosingClass extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestEnclosingClass tester = new TestEnclosingClass();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/MyClass.MyInterface.html", "Enclosing class:"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestEnclosingClass tester = new TestEnclosingClass();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/MyClass.MyInterface.html", true,
+ "Enclosing class:");
}
}
--- a/langtools/test/com/sun/javadoc/testEncoding/TestEncoding.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEncoding/TestEncoding.java Fri May 16 14:35:37 2014 -0700
@@ -27,32 +27,28 @@
* @summary This test determines if the value of the -encoding option is
* properly passed from Javadoc to the source file parser.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestEncoding
* @run main TestEncoding
*/
public class TestEncoding extends JavadocTester {
+ public static void main(String... args) throws Exception {
+ TestEncoding tester = new TestEncoding();
+ tester.runTests();
+ }
- //If ??? is found in the output, the source file was not read with the correct encoding setting.
- private static final String[][] NEGATED_TEST = {
- { "EncodeTest.html", "??"}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-encoding", "iso-8859-1", SRC_DIR + "/EncodeTest.java"
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-encoding", "iso-8859-1",
+ testSrc("EncodeTest.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestEncoding tester = new TestEncoding();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ // If ??? is found in the output, the source file was not read with the correct encoding setting.
+ checkOutput("EncodeTest.html", false,
+ "??");
}
}
--- a/langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java Fri May 16 14:35:37 2014 -0700
@@ -28,41 +28,38 @@
* are documented properly. The method should still include "implements" or
* "overrides" documentation even though the method is external.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester TestExternalOverridenMethod
* @run main TestExternalOverridenMethod
*/
public class TestExternalOverridenMethod extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg/XReader.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read--\" " +
- "title=\"class or interface in java.io\">read</a></code> in class <code>" +
- "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\" " +
- "title=\"class or interface in java.io\">FilterReader</a></code></dd>"},
- { "pkg/XReader.html",
- "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
- "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt--\" " +
- "title=\"class or interface in java.io\">readInt</a></code> in interface <code>" +
- "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\" " +
- "title=\"class or interface in java.io\">DataInput</a></code></dd>"}};
+ public static void main(String... args) throws Exception {
+ TestExternalOverridenMethod tester = new TestExternalOverridenMethod();
+ tester.runTests();
+ }
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linkoffline", "http://java.sun.com/j2se/1.4.1/docs/api", SRC_DIR,
- "pkg"
- };
+ @Test
+ void test() {
+ String uri = "http://java.sun.com/j2se/1.4.1/docs/api";
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", uri, testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestExternalOverridenMethod tester = new TestExternalOverridenMethod();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/XReader.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"" + uri + "/java/io/FilterReader.html?is-external=true#read--\" "
+ + "title=\"class or interface in java.io\">read</a></code> in class <code>"
+ + "<a href=\"" + uri + "/java/io/FilterReader.html?is-external=true\" "
+ + "title=\"class or interface in java.io\">FilterReader</a></code></dd>",
+ "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
+ + "<dd><code><a href=\"" + uri + "/java/io/DataInput.html?is-external=true#readInt--\" "
+ + "title=\"class or interface in java.io\">readInt</a></code> in interface <code>"
+ + "<a href=\"" + uri + "/java/io/DataInput.html?is-external=true\" "
+ + "title=\"class or interface in java.io\">DataInput</a></code></dd>"
+ );
}
}
--- a/langtools/test/com/sun/javadoc/testGeneratedBy/TestGeneratedBy.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testGeneratedBy/TestGeneratedBy.java Fri May 16 14:35:37 2014 -0700
@@ -25,14 +25,41 @@
* @test
* @bug 8000418 8024288
* @summary Verify that files use a common Generated By string
- * @library ../lib/
- * @build JavadocTester TestGeneratedBy
+ * @library ../lib
+ * @build JavadocTester
* @run main TestGeneratedBy
*/
public class TestGeneratedBy extends JavadocTester {
- private static final String[] FILES = {
+ public static void main(String... args) throws Exception {
+ TestGeneratedBy tester = new TestGeneratedBy();
+ tester.runTests();
+ }
+
+ @Test
+ void testTimestamp() {
+ javadoc("-d", "out-timestamp",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkTimestamps(true);
+ }
+
+ @Test
+ void testNoTimestamp() {
+ javadoc("-d", "out-notimestamp",
+ "-notimestamp",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkTimestamps(false);
+ }
+
+ void checkTimestamps(boolean timestamp) {
+ checkTimestamps(timestamp,
"pkg/MyClass.html",
"pkg/package-summary.html",
"pkg/package-frame.html",
@@ -45,63 +72,25 @@
"serialized-form.html",
"help-doc.html",
"index-all.html",
- "index.html"
- };
-
- private static final String[] STD_ARGS =
- new String[] {
- "-d", OUTPUT_DIR,
- "-sourcepath", SRC_DIR,
- "pkg"
- };
+ "index.html");
- private static final String[] NO_TIMESTAMP_ARGS =
- new String[] {
- "-notimestamp",
- "-d", OUTPUT_DIR + "-1",
- "-sourcepath", SRC_DIR,
- "pkg"
- };
-
-
- private static String[][] getTests(boolean timestamp) {
- String version = System.getProperty("java.version");
- String[][] tests = new String[FILES.length][];
- for (int i = 0; i < FILES.length; i++) {
- String genBy = "Generated by javadoc";
- if (timestamp) genBy += " (" + version + ") on ";
- tests[i] = new String[] {
- FILES[i], genBy
- };
- }
- return tests;
}
- private static String[][] getNegatedTests(boolean timestamp) {
- String[][] tests = new String[FILES.length][];
- for (int i = 0; i < FILES.length; i++) {
- tests[i] = new String[] {
- FILES[i],
+ void checkTimestamps(boolean timestamp, String... files) {
+ String version = System.getProperty("java.version");
+ String genBy = "Generated by javadoc";
+ if (timestamp) genBy += " (" + version + ") on ";
+
+ for (String file: files) {
+ // genBy is the current standard "Generated by" text
+ checkOutput(file, true, genBy);
+
+ // These are older versions of the "Generated by" text
+ checkOutput(file, false,
(timestamp
? "Generated by javadoc (version"
: "Generated by javadoc ("),
- "Generated by javadoc on"
- };
- }
- return tests;
- }
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestGeneratedBy tester = new TestGeneratedBy();
- int ec1 = tester.run(STD_ARGS, getTests(true), getNegatedTests(true));
- int ec2 = tester.run(NO_TIMESTAMP_ARGS, getTests(false), getNegatedTests(false));
- tester.printSummary();
- if (ec1 != 0 || ec2 != 0) {
- throw new Error("Error found while executing Javadoc");
+ "Generated by javadoc on");
}
}
}
--- a/langtools/test/com/sun/javadoc/testGroupOption/TestGroupOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testGroupOption/TestGroupOption.java Fri May 16 14:35:37 2014 -0700
@@ -27,49 +27,46 @@
* @summary Test to make sure the -group option does not cause a bad warning
* to be printed.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestGroupOption
* @run main TestGroupOption
*/
public class TestGroupOption extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-group", "Package One", "pkg1",
- "-group", "Package Two", "pkg2",
- "-group", "Package Three", "pkg3",
- "pkg1", "pkg2", "pkg3"
- };
+ public static void main(String... args) throws Exception {
+ TestGroupOption tester = new TestGroupOption();
+ tester.runTests();
+ }
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
- "-group", "Package One", "pkg1",
- "-group", "Package One", "pkg2",
- "-group", "Package One", "pkg3",
- "pkg1", "pkg2", "pkg3"
- };
+ @Test
+ void test1() {
+ //Make sure the warning is not printed when -group is used correctly.
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "-group", "Package One", "pkg1",
+ "-group", "Package Two", "pkg2",
+ "-group", "Package Three", "pkg3",
+ "pkg1", "pkg2", "pkg3");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] NEGATED_TEST1 = {{WARNING_OUTPUT, "-group"}};
-
- private static final String[][] TEST2 = {{WARNING_OUTPUT, "-group"}};
+ checkOutput(Output.WARNING, false,
+ "-group");
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- //Make sure the warning is not printed when -group is used correctly.
- TestGroupOption tester = new TestGroupOption();
- tester.run(ARGS1, NO_TEST, NEGATED_TEST1);
- tester.printSummary();
+ @Test
+ void test2() {
+ //Make sure the warning is printed when -group is not used correctly.
+ javadoc("-d", "out-2",
+ "-sourcepath", testSrc,
+ "-group", "Package One", "pkg1",
+ "-group", "Package One", "pkg2",
+ "-group", "Package One", "pkg3",
+ "pkg1", "pkg2", "pkg3");
+ checkExit(Exit.OK);
- //Make sure the warning is printed when -group is not used correctly.
- tester = new TestGroupOption();
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.printSummary();
+ checkOutput(Output.WARNING, true,
+ "-group");
+
}
}
--- a/langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
* @bug 4905786 6259611
* @summary Make sure that headings use the TH tag instead of the TD tag.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @build TestHeadings
* @run main TestHeadings
@@ -34,87 +34,82 @@
public class TestHeadings extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "-header", "Test Files",
- "pkg1", "pkg2"
- };
-
- //Input for string search tests.
private static final String[][] TEST = {
- //Package summary
- { "pkg1/package-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Class</th>\n" +
- "<th class=\"colLast\" scope=\"col\"" +
- ">Description</th>"
- },
- // Class documentation
- { "pkg1/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- { "pkg1/C1.html",
- "<h3>Methods inherited from class java.lang.Object</h3>"
+ {
},
-
- // Class use documentation
- { "pkg1/class-use/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Description</th>"
+ { "serialized-form.html"
},
- { "pkg1/class-use/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ { "serialized-form.html"
},
- // Deprecated
- { "deprecated-list.html",
- "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
- },
-
- // Constant values
- { "constant-values.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Modifier and Type</th>\n" +
- "<th scope=\"col\">Constant Field</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Value</th>"
- },
-
- // Serialized Form
- { "serialized-form.html",
- "<h2 title=\"Package\">Package pkg1</h2>"
+ {
},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
- "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>"
- },
- { "serialized-form.html",
- "<h3>Serialized Fields</h3>"
+ { "overview-frame.html"
},
-
- // Overview Frame
- { "overview-frame.html",
- "<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>"
- },
- { "overview-frame.html",
- "<title>Overview List</title>"
- },
-
- // Overview Summary
- { "overview-summary.html",
- "<title>Overview</title>"
+ {
}
};
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestHeadings tester = new TestHeadings();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ "-header", "Test Files",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ //Package summary
+ checkOutput("pkg1/package-summary.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Class</th>\n"
+ + "<th class=\"colLast\" scope=\"col\""
+ + ">Description</th>");
+
+ // Class documentation
+ checkOutput("pkg1/C1.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
+ "<h3>Methods inherited from class java.lang.Object</h3>");
+
+ // Class use documentation
+ checkOutput("pkg1/class-use/C1.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Field and Description</th>");
+
+ // Deprecated
+ checkOutput("deprecated-list.html", true,
+ "<th class=\"colOne\" scope=\"col\">Method and Description</th>");
+
+ // Constant values
+ checkOutput("constant-values.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Modifier and Type</th>\n"
+ + "<th scope=\"col\">Constant Field</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Value</th>");
+
+ // Serialized Form
+ checkOutput("serialized-form.html", true,
+ "<h2 title=\"Package\">Package pkg1</h2>",
+ "<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">"
+ + "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>",
+ "<h3>Serialized Fields</h3>");
+
+ // Overview Frame
+ checkOutput("overview-frame.html", true,
+ "<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>",
+ "<title>Overview List</title>");
+
+ // Overview Summary
+ checkOutput("overview-summary.html", true,
+ "<title>Overview</title>");
}
}
--- a/langtools/test/com/sun/javadoc/testHelpFile/TestHelpFile.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHelpFile/TestHelpFile.java Fri May 16 14:35:37 2014 -0700
@@ -26,32 +26,26 @@
* @bug 7132631
* @summary Make sure that the help file is generated correctly.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestHelpFile
+ * @library ../lib
+ * @build JavadocTester
* @run main TestHelpFile
*/
public class TestHelpFile extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/TestHelpFile.java"
- };
+ public static void main(String... args) throws Exception {
+ TestHelpFile tester = new TestHelpFile();
+ tester.runTests();
+ }
- private static final String[][] TEST = {
- { "help-doc.html",
- "<a href=\"constant-values.html\">Constant Field Values</a>"
- },
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("TestHelpFile.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHelpFile tester = new TestHelpFile();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("help-doc.html", true,
+ "<a href=\"constant-values.html\">Constant Field Values</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java Fri May 16 14:35:37 2014 -0700
@@ -27,81 +27,79 @@
* @summary Make sure that the -help option works properly. Make sure
* the help link appears in the documentation.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester TestHelpOption
* @run main TestHelpOption
*/
public class TestHelpOption extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-help",
- SRC_DIR + "/TestHelpOption.java"
- };
+ public static void main(String... args) throws Exception {
+ TestHelpOption tester = new TestHelpOption();
+ tester.runTests();
+ }
+
+ @Test
+ void testWithOption() {
+ javadoc("-d", "out1",
+ "-sourcepath", testSrc,
+ "-help",
+ testSrc("TestHelpOption.java"));
+ checkExit(Exit.OK);
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/TestHelpOption.java"
- };
+ checkOutput(true);
+ }
+
+ @Test
+ void testWithoutOption() {
+ javadoc("-d", "out2",
+ "-sourcepath", testSrc,
+ testSrc("TestHelpOption.java"));
+ checkExit(Exit.OK);
+
+ checkOutput(false);
+ }
- private static final String[][] TEST = {
- {STANDARD_OUTPUT, "-d "},
- {STANDARD_OUTPUT, "-use "},
- {STANDARD_OUTPUT, "-version "},
- {STANDARD_OUTPUT, "-author "},
- {STANDARD_OUTPUT, "-docfilessubdirs "},
- {STANDARD_OUTPUT, "-splitindex "},
- {STANDARD_OUTPUT, "-windowtitle "},
- {STANDARD_OUTPUT, "-doctitle "},
- {STANDARD_OUTPUT, "-header "},
- {STANDARD_OUTPUT, "-footer "},
- {STANDARD_OUTPUT, "-bottom "},
- {STANDARD_OUTPUT, "-link "},
- {STANDARD_OUTPUT, "-linkoffline "},
- {STANDARD_OUTPUT, "-excludedocfilessubdir "},
- {STANDARD_OUTPUT, "-group "},
- {STANDARD_OUTPUT, "-nocomment "},
- {STANDARD_OUTPUT, "-nodeprecated "},
- {STANDARD_OUTPUT, "-noqualifier "},
- {STANDARD_OUTPUT, "-nosince "},
- {STANDARD_OUTPUT, "-notimestamp "},
- {STANDARD_OUTPUT, "-nodeprecatedlist "},
- {STANDARD_OUTPUT, "-notree "},
- {STANDARD_OUTPUT, "-noindex "},
- {STANDARD_OUTPUT, "-nohelp "},
- {STANDARD_OUTPUT, "-nonavbar "},
- {STANDARD_OUTPUT, "-serialwarn "},
- {STANDARD_OUTPUT, "-tag "},
- {STANDARD_OUTPUT, "-taglet "},
- {STANDARD_OUTPUT, "-tagletpath "},
- {STANDARD_OUTPUT, "-charset "},
- {STANDARD_OUTPUT, "-helpfile "},
- {STANDARD_OUTPUT, "-linksource "},
- {STANDARD_OUTPUT, "-sourcetab "},
- {STANDARD_OUTPUT, "-keywords "},
- {STANDARD_OUTPUT, "-stylesheetfile "},
- {STANDARD_OUTPUT, "-docencoding "},
- };
+ private void checkOutput(boolean withOption) {
+ checkOutput(Output.STDOUT, withOption,
+ "-d ",
+ "-use ",
+ "-version ",
+ "-author ",
+ "-docfilessubdirs ",
+ "-splitindex ",
+ "-windowtitle ",
+ "-doctitle ",
+ "-header ",
+ "-footer ",
+ "-bottom ",
+ "-link ",
+ "-linkoffline ",
+ "-excludedocfilessubdir ",
+ "-group ",
+ "-nocomment ",
+ "-nodeprecated ",
+ "-noqualifier ",
+ "-nosince ",
+ "-notimestamp ",
+ "-nodeprecatedlist ",
+ "-notree ",
+ "-noindex ",
+ "-nohelp ",
+ "-nonavbar ",
+ "-serialwarn ",
+ "-tag ",
+ "-taglet ",
+ "-tagletpath ",
+ "-charset ",
+ "-helpfile ",
+ "-linksource ",
+ "-sourcetab ",
+ "-keywords ",
+ "-stylesheetfile ",
+ "-docencoding ");
- private static final String[][] TEST2 = {
- { "TestHelpOption.html",
- "<li><a href=\"help-doc.html\">Help</a></li>"
- },
- };
-
- //The help option should not crash the doclet.
- private static final int EXPECTED_EXIT_CODE = 0;
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHelpOption tester = new TestHelpOption();
- int actualExitCode = tester.run(ARGS, TEST, NO_TEST);
- tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.printSummary();
+ checkOutput("TestHelpOption.html", !withOption,
+ "<li><a href=\"help-doc.html\">Help</a></li>");
}
}
--- a/langtools/test/com/sun/javadoc/testHiddenMembers/TestHiddenMembers.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHiddenMembers/TestHiddenMembers.java Fri May 16 14:35:37 2014 -0700
@@ -27,34 +27,37 @@
* @summary Test to make sure that hidden overriden members are not
* documented as inherited.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHiddenMembers
* @run main TestHiddenMembers
*/
public class TestHiddenMembers extends JavadocTester {
-
- //We should not inherit any members from BaseClass because they are all overriden and hidden
- //(declared as private).
private static final String[][] NEGATED_TEST = {
- { "pkg/SubClass.html",
- "inherited from class pkg.<A HREF=\"../pkg/BaseClass.html\">BaseClass</A>"}
+ { }
};
private static final String[] ARGS =
new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "pkg"
+
};
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestHiddenMembers tester = new TestHiddenMembers();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ // We should not inherit any members from BaseClass because they are all overriden and hidden
+ // (declared as private).
+ // TODO: check normal case of generated tags: upper case of lower case
+ checkOutput("pkg/SubClass.html", false,
+ "inherited from class pkg.<A HREF=\"../pkg/BaseClass.html\">BaseClass</A>");
}
}
--- a/langtools/test/com/sun/javadoc/testHref/TestHref.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHref/TestHref.java Fri May 16 14:35:37 2014 -0700
@@ -26,73 +26,57 @@
* @bug 4663254 8016328 8025633 8026567
* @summary Verify that spaces do not appear in hrefs and anchors.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestHref
+ * @library ../lib
+ * @build JavadocTester
* @run main TestHref
*/
public class TestHref extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-linkoffline",
- "http://java.sun.com/j2se/1.4/docs/api/", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestHref tester = new TestHref();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- //External link.
- { "pkg/C1.html",
- "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\""
- },
- //Member summary table link.
- { "pkg/C1.html",
- "href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\""
- },
- //Anchor test.
- { "pkg/C1.html",
- "<a name=\"method-int-int-java.util.ArrayList-\">\n" +
- "<!-- -->\n" +
- "</a>"
- },
- //Backward compatibility anchor test.
- { "pkg/C1.html",
- "<a name=\"method-int-int-java.util.ArrayList-\">\n" +
- "<!-- -->\n" +
- "</a>"
- },
- //{@link} test.
- { "pkg/C2.html",
- "Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
- },
- //@see test.
- { "pkg/C2.html",
- "See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
- },
+ checkOutput("pkg/C1.html", true,
+ //External link.
+ "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\"",
+ //Member summary table link.
+ "href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\"",
+ //Anchor test.
+ "<a name=\"method-int-int-java.util.ArrayList-\">\n"
+ + "<!-- -->\n"
+ + "</a>",
+ //Backward compatibility anchor test."pkg/C1.html",
+ "<a name=\"method-int-int-java.util.ArrayList-\">\n"
+ + "<!-- -->\n"
+ + "</a>");
- //Header does not link to the page itself.
- { "pkg/C4.html",
- "Class C4<E extends C4<E>></h2>"
- },
+ checkOutput("pkg/C2.html", true,
+ //{@link} test.
+ "Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">",
+ //@see test.
+ "See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
+ );
- //Signature does not link to the page itself.
- { "pkg/C4.html",
- "public abstract class <span class=\"typeNameLabel\">C4<E extends C4<E>></span>"
- },
- };
- private static final String[][] NEGATED_TEST =
- {
- {WARNING_OUTPUT, "<a> tag is malformed"}
- };
+ checkOutput("pkg/C4.html", true,
+ //Header does not link to the page itself.
+ "Class C4<E extends C4<E>></h2>",
+ //Signature does not link to the page itself.
+ "public abstract class <span class=\"typeNameLabel\">C4<E extends C4<E>></span>"
+ );
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHref tester = new TestHref();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput(Output.WARNING, false,
+ "<a> tag is malformed");
}
}
--- a/langtools/test/com/sun/javadoc/testHrefInDocComment/TestHrefInDocComment.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHrefInDocComment/TestHrefInDocComment.java Fri May 16 14:35:37 2014 -0700
@@ -27,26 +27,22 @@
* @summary Determine if Hrefs are processed properly when they
* appear in doc comments.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHrefInDocComment
* @run main TestHrefInDocComment
*/
public class TestHrefInDocComment extends JavadocTester {
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
+ public static void main(String... args) throws Exception {
+ TestHrefInDocComment tester = new TestHrefInDocComment();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHrefInDocComment tester = new TestHrefInDocComment();
- if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
- throw new Error("Javadoc failed to execute properly with given source.");
- }
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc, "pkg");
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlComments/TestHtmlComments.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlComments/TestHtmlComments.java Fri May 16 14:35:37 2014 -0700
@@ -27,32 +27,26 @@
* @summary The field detail comment should not show up in the output if there
* are no fields to document.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHtmlComments
* @run main TestHtmlComments
*/
public class TestHtmlComments extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestHtmlComments tester = new TestHtmlComments();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] NEGATED_TEST = {
- { "C.html",
- "<!-- ============ FIELD DETAIL =========== -->"}
- };
+ @Test
+ void run() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHtmlComments tester = new TestHtmlComments();
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("C.html", false,
+ "<!-- ============ FIELD DETAIL =========== -->");
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java Fri May 16 14:35:37 2014 -0700
@@ -28,159 +28,250 @@
* @bug 6786690 6820360 8025633 8026567
* @summary This test verifies the nesting of definition list tags.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestHtmlDefinitionListTag
+ * @library ../lib
+ * @build JavadocTester
* @run main TestHtmlDefinitionListTag
*/
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
public class TestHtmlDefinitionListTag extends JavadocTester {
- // Test common to all runs of javadoc. The class signature should print
- // properly enclosed definition list tags and the Annotation Type
- // Optional Element should print properly nested definition list tags
- // for default value.
- private static final String[][] TEST_ALL = {
- { "pkg1/C1.html",
+ public static void main(String... args) throws Exception {
+ TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
+ tester.runTests();
+ }
+
+ @Test
+ void test_Comment_Deprecated() {
+// tester.run(ARGS1, TEST_ALL, NEGATED_TEST_NO_C5);
+// tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
+// tester.runTestsOnHTML(TEST_CMNT_DEPR, NO_TEST);
+ javadoc("-Xdoclint:none",
+ "-d", "out-1",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+ checkCommon(true);
+ checkCommentDeprecated(true);
+ }
+
+ @Test
+ void test_NoComment_Deprecated() {
+// tester.run(ARGS2, TEST_ALL, NEGATED_TEST_NO_C5);
+// tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
+// tester.runTestsOnHTML(NO_TEST, TEST_CMNT_DEPR);
+ javadoc("-Xdoclint:none",
+ "-d", "out-2",
+ "-nocomment",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+ checkCommon(true);
+ checkCommentDeprecated(false); // ??
+ }
+
+ @Test
+ void test_Comment_NoDeprecated() {
+// tester.run(ARGS3, TEST_ALL, NEGATED_TEST_NO_C5);
+// tester.runTestsOnHTML(TEST_NODEPR, TEST_NOCMNT_NODEPR);
+ javadoc("-Xdoclint:none",
+ "-d", "out-3",
+ "-nodeprecated",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+ checkCommon(false);
+ checkNoDeprecated();
+ checkNoCommentNoDeprecated(false);
+ }
+
+ @Test
+ void testNoCommentNoDeprecated() {
+// tester.run(ARGS4, TEST_ALL, NEGATED_TEST_NO_C5);
+// tester.runTestsOnHTML(TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
+ javadoc("-Xdoclint:none",
+ "-d", "out-4",
+ "-nocomment",
+ "-nodeprecated",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+ checkCommon(false);
+ checkNoCommentNoDeprecated(true);
+ checkCommentDeprecated(false);
+ }
+
+ void checkCommon(boolean checkC5) {
+ // Test common to all runs of javadoc. The class signature should print
+ // properly enclosed definition list tags and the Annotation Type
+ // Optional Element should print properly nested definition list tags
+ // for default value.
+ checkOutput("pkg1/C1.html", true,
"<pre>public class <span class=\"typeNameLabel\">C1</span>\n" +
"extends java.lang.Object\n" +
- "implements java.io.Serializable</pre>"},
- { "pkg1/C4.html",
+ "implements java.io.Serializable</pre>");
+ checkOutput("pkg1/C4.html", true,
"<dl>\n" +
"<dt>Default:</dt>\n" +
"<dd>true</dd>\n" +
- "</dl>"}};
+ "</dl>");
+
+ // Test for valid HTML generation which should not comprise of empty
+ // definition list tags.
+ List<String> files= new ArrayList<>(Arrays.asList(
+ "pkg1/package-summary.html",
+ "pkg1/C1.html",
+ "pkg1/C1.ModalExclusionType.html",
+ "pkg1/C2.html",
+ "pkg1/C2.ModalType.html",
+ "pkg1/C3.html",
+ "pkg1/C4.html",
+ "overview-tree.html",
+ "serialized-form.html"
+ ));
- // Test for normal run of javadoc in which various ClassDocs and
- // serialized form should have properly nested definition list tags
- // enclosing comments, tags and deprecated information.
- private static final String[][] TEST_CMNT_DEPR = {
- { "pkg1/package-summary.html",
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>JDK1.0</dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
+ if (checkC5)
+ files.add("pkg1/C5.html");
+
+ for (String f: files) {
+ checkOutput(f, false,
+ "<dl></dl>",
+ "<dl>\n</dl>");
+ }
+ }
+
+ void checkCommentDeprecated(boolean expectFound) {
+ // Test for normal run of javadoc in which various ClassDocs and
+ // serialized form should have properly nested definition list tags
+ // enclosing comments, tags and deprecated information.
+ checkOutput("pkg1/package-summary.html", expectFound,
"<dl>\n" +
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
"<dd>JDK1.0</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>" +
- "C2</code></a>, \n" +
- "<a href=\"../serialized-form.html#pkg1.C1\">" +
- "Serialized Form</a></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
- "<dd><code>title</code> - the title</dd>\n" +
- "<dd><code>test</code> - boolean value" +
- "</dd>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
- "<dd><code>java.lang.IllegalArgumentException</code> - if the " +
- "<code>owner</code>'s\n" +
- " <code>GraphicsConfiguration</code> is not from a screen " +
- "device</dd>\n" +
- "<dd><code>HeadlessException</code></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
- "<dd><code>undecorated" +
- "</code> - <code>true</code> if no decorations are\n" +
- " to be enabled;\n" +
- " <code>false</code> " +
- "if decorations are to be enabled.</dd>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:" +
- "</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd>" +
- "<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()" +
- "</code></a></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
- "<dd><code>java.io.IOException</code></dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:" +
- "</span></dt>\n" +
- "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "pkg1/C2.html",
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:" +
- "</span></dt>\n" +
- "<dd><code>set</code> - boolean</dd>\n" +
- "<dt><span class=\"simpleTagLabel\">" +
- "Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span>" +
- "</dt>\n" +
- "<dd><code>" +
- "java.io.IOException</code></dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">This field indicates whether the C1 is " +
- "undecorated.</div>\n" +
- " \n" +
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">Reads the object stream.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:" +
- "</span></dt>\n" +
- "<dd><code><code>" +
- "IOException</code></code></dd>\n" +
- "<dd><code>java.io.IOException</code></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " </div>\n" +
- "<div class=\"block\">The name for this class.</div>"}};
+ "</dl>");
+
+ checkOutput("pkg1/C1.html", expectFound,
+ "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>JDK1.0</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>"
+ + "C2</code></a>, \n"
+ + "<a href=\"../serialized-form.html#pkg1.C1\">"
+ + "Serialized Form</a></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
+ + "<dd><code>title</code> - the title</dd>\n"
+ + "<dd><code>test</code> - boolean value"
+ + "</dd>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
+ + "<dd><code>java.lang.IllegalArgumentException</code> - if the "
+ + "<code>owner</code>'s\n"
+ + " <code>GraphicsConfiguration</code> is not from a screen "
+ + "device</dd>\n"
+ + "<dd><code>HeadlessException</code></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n"
+ + "<dd><code>undecorated"
+ + "</code> - <code>true</code> if no decorations are\n"
+ + " to be enabled;\n"
+ + " <code>false</code> "
+ + "if decorations are to be enabled.</dd>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:"
+ + "</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd>"
+ + "<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()"
+ + "</code></a></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
+ + "<dd><code>java.io.IOException</code></dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:"
+ + "</span></dt>\n"
+ + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>");
- // Test with -nodeprecated option. The ClassDocs should have properly nested
- // definition list tags enclosing comments and tags. The ClassDocs should not
- // display definition list for deprecated information. The serialized form
- // should display properly nested definition list tags for comments, tags
- // and deprecated information.
- private static final String[][] TEST_NODEPR = {
- { "pkg1/package-summary.html",
+ checkOutput("pkg1/C2.html", expectFound,
+ "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:"
+ + "</span></dt>\n"
+ + "<dd><code>set</code> - boolean</dd>\n"
+ + "<dt><span class=\"simpleTagLabel\">"
+ + "Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "</dl>");
+
+ checkOutput("serialized-form.html", expectFound,
+ "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span>"
+ + "</dt>\n"
+ + "<dd><code>"
+ + "java.io.IOException</code></dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">This field indicates whether the C1 is "
+ + "undecorated.</div>\n"
+ + " \n"
+ + "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">Reads the object stream.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:"
+ + "</span></dt>\n"
+ + "<dd><code><code>"
+ + "IOException</code></code></dd>\n"
+ + "<dd><code>java.io.IOException</code></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " </div>\n"
+ + "<div class=\"block\">The name for this class.</div>");
+ }
+
+ void checkNoDeprecated() {
+ // Test with -nodeprecated option. The ClassDocs should have properly nested
+ // definition list tags enclosing comments and tags. The ClassDocs should not
+ // display definition list for deprecated information. The serialized form
+ // should display properly nested definition list tags for comments, tags
+ // and deprecated information.
+ checkOutput("pkg1/package-summary.html", true,
"<dl>\n" +
"<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
"<dd>JDK1.0</dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
+ "</dl>");
+
+ checkOutput("pkg1/C1.html", true,
"<dl>\n" +
"<dt><span class=\"simpleTagLabel\">Since:</span>" +
"</dt>\n" +
@@ -191,216 +282,124 @@
"<code>C2</code></a>, \n" +
"<a href=\"../serialized-form.html#pkg1.C1\">" +
"Serialized Form</a></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:" +
- "</span></dt>\n" +
- "<dd><code>title</code> - the title</dd>\n" +
- "<dd><code>" +
- "test</code> - boolean value</dd>\n" +
- "<dt><span class=\"throwsLabel\">Throws:" +
- "</span></dt>\n" +
- "<dd><code>java.lang.IllegalArgumentException" +
- "</code> - if the <code>owner</code>'s\n" +
- " <code>GraphicsConfiguration" +
- "</code> is not from a screen device</dd>\n" +
- "<dd><code>" +
- "HeadlessException</code></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"paramLabel\">Parameters:" +
- "</span></dt>\n" +
- "<dd><code>undecorated</code> - <code>true</code>" +
- " if no decorations are\n" +
- " to be enabled;\n" +
- " <code>false</code> if decorations are to be enabled." +
- "</dd>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg1/C1.html#readObject--\">" +
- "<code>readObject()</code></a></dd>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span>" +
- "</dt>\n" +
- "<dd><code>java.io.IOException</code></dd>\n" +
- "<dt>" +
- "<span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span>" +
- "</dt>\n" +
- "<dd><code>" +
- "java.io.IOException</code></dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">This field indicates whether the C1 is " +
- "undecorated.</div>\n" +
- " \n" +
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">Reads the object stream.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:" +
- "</span></dt>\n" +
- "<dd><code><code>" +
- "IOException</code></code></dd>\n" +
- "<dd><code>java.io.IOException</code></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " </div>\n" +
- "<div class=\"block\">" +
- "The name for this class.</div>"}};
+ "</dl>");
+
+ checkOutput("pkg1/C1.html", true,
+ "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:"
+ + "</span></dt>\n"
+ + "<dd><code>title</code> - the title</dd>\n"
+ + "<dd><code>"
+ + "test</code> - boolean value</dd>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:"
+ + "</span></dt>\n"
+ + "<dd><code>java.lang.IllegalArgumentException"
+ + "</code> - if the <code>owner</code>'s\n"
+ + " <code>GraphicsConfiguration"
+ + "</code> is not from a screen device</dd>\n"
+ + "<dd><code>"
+ + "HeadlessException</code></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"paramLabel\">Parameters:"
+ + "</span></dt>\n"
+ + "<dd><code>undecorated</code> - <code>true</code>"
+ + " if no decorations are\n"
+ + " to be enabled;\n"
+ + " <code>false</code> if decorations are to be enabled."
+ + "</dd>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg1/C1.html#readObject--\">"
+ + "<code>readObject()</code></a></dd>\n"
+ + "</dl>",
+ "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span>"
+ + "</dt>\n"
+ + "<dd><code>java.io.IOException</code></dd>\n"
+ + "<dt>"
+ + "<span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>");
- // Test with -nocomment and -nodeprecated options. The ClassDocs whould
- // not display definition lists for any member details.
- private static final String[][] TEST_NOCMNT_NODEPR = {
- { "pkg1/C1.html",
+ checkOutput("serialized-form.html", true,
+ "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span>"
+ + "</dt>\n"
+ + "<dd><code>"
+ + "java.io.IOException</code></dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">This field indicates whether the C1 is "
+ + "undecorated.</div>\n"
+ + " \n"
+ + "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">Reads the object stream.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:"
+ + "</span></dt>\n"
+ + "<dd><code><code>"
+ + "IOException</code></code></dd>\n"
+ + "<dd><code>java.io.IOException</code></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " </div>\n"
+ + "<div class=\"block\">"
+ + "The name for this class.</div>");
+ }
+
+ void checkNoCommentNoDeprecated(boolean expectFound) {
+ // Test with -nocomment and -nodeprecated options. The ClassDocs whould
+ // not display definition lists for any member details.
+ checkOutput("pkg1/C1.html", expectFound,
"<pre>public void readObject()\n" +
" throws java.io.IOException</pre>\n" +
- "</li>"},
- { "pkg1/C2.html", "<pre>public C2()</pre>\n" +
- "</li>"},
- { "pkg1/C1.ModalExclusionType.html", "<pre>public " +
+ "</li>");
+
+ checkOutput("pkg1/C2.html", expectFound,
+ "<pre>public C2()</pre>\n" +
+ "</li>");
+
+ checkOutput("pkg1/C1.ModalExclusionType.html", expectFound,
+ "<pre>public " +
"static final <a href=\"../pkg1/C1.ModalExclusionType.html\" " +
"title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
"APPLICATION_EXCLUDE</pre>\n" +
- "</li>"},
- { "serialized-form.html", "<pre>boolean " +
+ "</li>");
+
+ checkOutput("serialized-form.html", expectFound,
+ "<pre>boolean " +
"undecorated</pre>\n" +
"<div class=\"block\"><span class=\"deprecatedLabel\">" +
"Deprecated.</span> <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>" +
"setUndecorated(boolean)</code></a>.</span></div>\n" +
- "</li>"},
- { "serialized-form.html", "<span class=\"deprecatedLabel\">" +
+ "</li>",
+ "<span class=\"deprecatedLabel\">" +
"Deprecated.</span> <span class=\"deprecationComment\">As of JDK version" +
" 1.5, replaced by\n" +
" <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
"<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "</li>"}};
-
- // Test for valid HTML generation which should not comprise of empty
- // definition list tags.
- private static final String[][] NEGATED_TEST_NO_C5 = {
- { "pkg1/package-summary.html",
- "<dl></dl>"},
- { "pkg1/package-summary.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C1.html",
- "<dl></dl>"},
- { "pkg1/C1.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C1.ModalExclusionType.html",
- "<dl></dl>"},
- { "pkg1/C1.ModalExclusionType.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C2.html",
- "<dl></dl>"},
- { "pkg1/C2.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C2.ModalType.html",
- "<dl></dl>"},
- { "pkg1/C2.ModalType.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C3.html",
- "<dl></dl>"},
- { "pkg1/C3.html",
- "<dl>\n" +
- "</dl>"},
- { "pkg1/C4.html",
- "<dl></dl>"},
- { "pkg1/C4.html",
- "<dl>\n" +
- "</dl>"},
- { "overview-tree.html",
- "<dl></dl>"},
- { "overview-tree.html",
- "<dl>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<dl></dl>"},
- { "serialized-form.html",
- "<dl>\n" +
- "</dl>"}};
- private static final String[][] NEGATED_TEST_C5 = {
- { "pkg1/C5.html",
- "<dl></dl>"},
- { "pkg1/C5.html",
- "<dl>\n" +
- "</dl>"}};
-
- private static final String[] ARGS1 =
- new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
-
- private static final String[] ARGS2 =
- new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-nocomment", "-sourcepath",
- SRC_DIR, "pkg1"};
-
- private static final String[] ARGS3 =
- new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-3", "-nodeprecated", "-sourcepath",
- SRC_DIR, "pkg1"};
-
- private static final String[] ARGS4 =
- new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-4", "-nocomment", "-nodeprecated",
- "-sourcepath", SRC_DIR, "pkg1"};
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
- tester.run(ARGS1, TEST_ALL, NEGATED_TEST_NO_C5);
- tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
- tester.runTestsOnHTML(TEST_CMNT_DEPR, NO_TEST);
-
- tester.run(ARGS2, TEST_ALL, NEGATED_TEST_NO_C5);
- tester.runTestsOnHTML(NO_TEST, NEGATED_TEST_C5);
- tester.runTestsOnHTML(NO_TEST, TEST_CMNT_DEPR);
-
- tester.run(ARGS3, TEST_ALL, NEGATED_TEST_NO_C5);
- tester.runTestsOnHTML(TEST_NODEPR, TEST_NOCMNT_NODEPR);
-
- tester.run(ARGS4, TEST_ALL, NEGATED_TEST_NO_C5);
- tester.runTestsOnHTML(TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
-
- tester.printSummary();
+ "</li>");
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java Fri May 16 14:35:37 2014 -0700
@@ -27,33 +27,38 @@
* @test
* @bug 6851834
* @summary This test verifies the HTML document generation for javadoc output.
+ * @library ../lib
+ * @build JavadocTester
* @author Bhavesh Patel
- * @build TestHtmlDocument
* @run main TestHtmlDocument
*/
-import java.io.*;
import com.sun.tools.doclets.formats.html.markup.*;
/**
* The class reads each file, complete with newlines, into a string to easily
* compare the existing markup with the generated markup.
*/
-public class TestHtmlDocument {
-
- protected static final String NL = System.getProperty("line.separator");
-
- private static final String BUGID = "6851834";
- private static final String BUGNAME = "TestHtmlDocument";
- private static String srcdir = System.getProperty("test.src", ".");
+public class TestHtmlDocument extends JavadocTester {
// Entry point
- public static void main(String[] args) throws IOException {
+ public static void main(String... args) throws Exception {
+ TestHtmlDocument tester = new TestHtmlDocument();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ checking("markup");
// Check whether the generated markup is same as the existing markup.
- if (generateHtmlTree().equals(readFileToString(srcdir + "/testMarkup.html"))) {
- System.out.println("\nTest passed for bug " + BUGID + " (" + BUGNAME + ")\n");
+ String expected = readFile(testSrc, "testMarkup.html").replace("\n", NL);
+ String actual = generateHtmlTree();
+ if (actual.equals(expected)) {
+ passed("");
} else {
- throw new Error("\nTest failed for bug " + BUGID + " (" + BUGNAME + ")\n");
+ failed("expected content in " + testSrc("testMarkup.html") + "\n"
+ + "Actual output:\n"
+ + actual);
}
}
@@ -136,25 +141,4 @@
HtmlDocument htmlDoc = new HtmlDocument(htmlDocType, html);
return htmlDoc.toString();
}
-
- // Read the file into a String
- public static String readFileToString(String filename) throws IOException {
- File file = new File(filename);
- if ( !file.exists() ) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
- StringBuilder fileString = new StringBuilder();
- // Create an array of characters the size of the file
- try {
- String line;
- while ((line = in.readLine()) != null) {
- fileString.append(line);
- fileString.append(NL);
- }
- } finally {
- in.close();
- }
- return fileString.toString();
- }
}
--- a/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java Fri May 16 14:35:37 2014 -0700
@@ -26,44 +26,49 @@
/*
* @test
* @bug 6786028 8026567
- * @summary This test verifys the use of <strong> HTML tag instead of <B> by Javadoc std doclet.
+ * @summary This test verifies the use of <strong> HTML tag instead of <B> by Javadoc std doclet.
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHtmlStrongTag
* @run main TestHtmlStrongTag
*/
public class TestHtmlStrongTag extends JavadocTester {
- private static final String[][] TEST1 = {
- { "pkg1/C1.html",
- "<span class=\"seeLabel\">See Also:</span>"}};
- private static final String[][] NEGATED_TEST1 = {
- { "pkg1/C1.html", "<STRONG>Method Summary</STRONG>"},
- { "pkg1/C1.html", "<B>"},
- { "pkg1/package-summary.html",
- "<STRONG>Class Summary</STRONG>"}};
- private static final String[][] TEST2 = {
- { "pkg2/C2.html", "<B>Comments:</B>"}};
- private static final String[][] NEGATED_TEST2 = {
- { "pkg2/C2.html", "<STRONG>Method Summary</STRONG>"}};
+ public static void main(String... args) throws Exception {
+ TestHtmlStrongTag tester = new TestHtmlStrongTag();
+ tester.runTests();
+ }
+
+ @Test
+ void test1() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/C1.html", true,
+ "<span class=\"seeLabel\">See Also:</span>");
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "pkg2"};
+ checkOutput("pkg1/C1.html", false,
+ "<STRONG>Method Summary</STRONG>",
+ "<B>");
+
+ checkOutput("pkg1/package-summary.html", false,
+ "<STRONG>Class Summary</STRONG>");
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHtmlStrongTag tester = new TestHtmlStrongTag();
- tester.run(ARGS1, TEST1, NEGATED_TEST1);
- tester.run(ARGS2, TEST2, NEGATED_TEST2);
- tester.printSummary();
+ @Test
+ void test2() {
+ javadoc("-d", "out-2",
+ "-sourcepath", testSrc,
+ "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg2/C2.html", true,
+ "<B>Comments:</B>");
+
+ checkOutput("pkg2/C2.html", false,
+ "<STRONG>Method Summary</STRONG>");
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlTableStyles/TestHtmlTableStyles.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTableStyles/TestHtmlTableStyles.java Fri May 16 14:35:37 2014 -0700
@@ -26,69 +26,59 @@
* @bug 8008164
* @summary Test styles on HTML tables generated by javadoc.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestHtmlTableStyles
+ * @library ../lib
+ * @build JavadocTester
* @run main TestHtmlTableStyles
*/
public class TestHtmlTableStyles extends JavadocTester {
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg1/TestTable.html",
- "<table border cellpadding=3 cellspacing=1>"
- },
- { "pkg1/TestTable.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
- "and an explanation\">"
- },
- { "pkg1/TestTable.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
- "constructors, and an explanation\">"
- },
- { "pkg1/TestTable.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
- "and an explanation\">"
- },
- { "pkg1/package-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Class Summary table, listing classes, " +
- "and an explanation\">"
- },
- { "pkg1/class-use/TestTable.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Use table, listing fields, and an explanation\">"
- },
- { "overview-summary.html",
- "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">"
- },
- { "deprecated-list.html",
+ public static void main(String... args) throws Exception {
+ TestHtmlTableStyles tester = new TestHtmlTableStyles();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/TestTable.html", true,
+ "<table border cellpadding=3 cellspacing=1>",
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Field Summary table, listing fields, "
+ + "and an explanation\">",
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Constructor Summary table, listing "
+ + "constructors, and an explanation\">",
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Method Summary table, listing methods, "
+ + "and an explanation\">");
+
+ checkOutput("pkg1/package-summary.html", true,
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Class Summary table, listing classes, "
+ + "and an explanation\">");
+
+ checkOutput("pkg1/class-use/TestTable.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Use table, listing fields, and an explanation\">");
+
+ checkOutput("overview-summary.html", true,
+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">");
+
+ checkOutput("deprecated-list.html", true,
"<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" " +
"cellspacing=\"0\" summary=\"Deprecated Methods table, listing " +
- "deprecated methods, and an explanation\">"
- },
- { "constant-values.html",
+ "deprecated methods, and an explanation\">");
+
+ checkOutput("constant-values.html", true,
"<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" " +
"cellspacing=\"0\" summary=\"Constant Field Values table, listing " +
- "constant fields, and values\">"
- },
- };
-
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws Exception {
- TestHtmlTableStyles tester = new TestHtmlTableStyles();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ "constant fields, and values\">");
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java Fri May 16 14:35:37 2014 -0700
@@ -26,9 +26,8 @@
* @bug 6786688 8008164
* @summary HTML tables should have table summary, caption and table headers.
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHtmlTableTags
* @run main TestHtmlTableTags
*/
@@ -36,400 +35,350 @@
//Javadoc arguments.
private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+
};
- //Input for string tests for HTML table tags.
- private static final String[][] TABLE_TAGS_TEST = {
- /*
- * Test for validating summary for HTML tables
- */
+
+ public static void main(String... args) throws Exception {
+ TestHtmlTableTags tester = new TestHtmlTableTags();
+ tester.runTests();
+ }
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ checkHtmlTableSummaries();
+ checkHtmlTableCaptions();
+ checkHtmlTableHeaders();
+ }
+
+ /*
+ * Tests for validating summary for HTML tables
+ */
+ void checkHtmlTableSummaries() {
//Package summary
- { "pkg1/package-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
- " cellspacing=\"0\" summary=\"Class Summary table, " +
- "listing classes, and an explanation\">"
- },
- { "pkg1/package-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
- " cellspacing=\"0\" summary=\"Interface Summary table, " +
- "listing interfaces, and an explanation\">"
- },
- { "pkg2/package-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
- " cellspacing=\"0\" summary=\"Enum Summary table, " +
- "listing enums, and an explanation\">"
- },
- { "pkg2/package-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
- " cellspacing=\"0\" summary=\"Annotation Types Summary table, " +
- "listing annotation types, and an explanation\">"
- },
+ checkOutput("pkg1/package-summary.html", true,
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
+ + " cellspacing=\"0\" summary=\"Class Summary table, "
+ + "listing classes, and an explanation\">",
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
+ + " cellspacing=\"0\" summary=\"Interface Summary table, "
+ + "listing interfaces, and an explanation\">");
+
+ checkOutput("pkg2/package-summary.html", true,
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
+ + " cellspacing=\"0\" summary=\"Enum Summary table, "
+ + "listing enums, and an explanation\">",
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\""
+ + " cellspacing=\"0\" summary=\"Annotation Types Summary table, "
+ + "listing annotation types, and an explanation\">");
+
// Class documentation
- { "pkg1/C1.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
- "and an explanation\">"
- },
- { "pkg1/C1.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
- "and an explanation\">"
- },
- { "pkg2/C2.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Nested Class Summary table, listing " +
- "nested classes, and an explanation\">"
- },
- { "pkg2/C2.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
- "constructors, and an explanation\">"
- },
- { "pkg2/C2.ModalExclusionType.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing " +
- "enum constants, and an explanation\">"
- },
- { "pkg2/C3.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Required Element Summary table, " +
- "listing required elements, and an explanation\">"
- },
- { "pkg2/C4.html",
- "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Optional Element Summary table, " +
- "listing optional elements, and an explanation\">"
- },
- // Class use documentation
- { "pkg1/class-use/I1.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing packages, and an explanation\">"
- },
- { "pkg1/class-use/C1.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing fields, and an explanation\">"
- },
- { "pkg1/class-use/C1.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing methods, and an explanation\">"
- },
- { "pkg2/class-use/C2.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing fields, and an explanation\">"
- },
- { "pkg2/class-use/C2.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing methods, and an explanation\">"
- },
- { "pkg2/class-use/C2.ModalExclusionType.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing packages, and an explanation\">"
- },
- { "pkg2/class-use/C2.ModalExclusionType.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing methods, and an explanation\">"
- },
- // Package use documentation
- { "pkg1/package-use.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing packages, and an explanation\">"
- },
- { "pkg1/package-use.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing classes, and an explanation\">"
- },
- { "pkg2/package-use.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing packages, and an explanation\">"
- },
- { "pkg2/package-use.html",
- "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
- "table, listing classes, and an explanation\">"
- },
- // Deprecated
- { "deprecated-list.html",
- "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
- "summary=\"Deprecated Fields table, listing deprecated fields, " +
- "and an explanation\">"
- },
- { "deprecated-list.html",
- "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
- "summary=\"Deprecated Methods table, listing deprecated methods, " +
- "and an explanation\">"
- },
- // Constant values
- { "constant-values.html",
- "<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
- "summary=\"Constant Field Values table, listing " +
- "constant fields, and values\">"
- },
- // Overview Summary
- { "overview-summary.html",
- "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
- "cellspacing=\"0\" summary=\"Packages table, " +
- "listing packages, and an explanation\">"
- },
+ checkOutput("pkg1/C1.html", true,
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Field Summary table, listing fields, "
+ + "and an explanation\">",
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Method Summary table, listing methods, "
+ + "and an explanation\">");
+
+ checkOutput("pkg2/C2.html", true,
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Nested Class Summary table, listing "
+ + "nested classes, and an explanation\">",
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Constructor Summary table, listing "
+ + "constructors, and an explanation\">");
- /*
- * Test for validating caption for HTML tables
- */
+ checkOutput("pkg2/C2.ModalExclusionType.html", true,
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing "
+ + "enum constants, and an explanation\">");
- //Package summary
- { "pkg1/package-summary.html",
- "<caption><span>Class Summary</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg1/package-summary.html",
- "<caption><span>Interface Summary</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/package-summary.html",
- "<caption><span>Enum Summary</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/package-summary.html",
- "<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- // Class documentation
- { "pkg1/C1.html",
- "<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg1/C1.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
- "Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
- "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">" +
- "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">" +
- "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "</caption>"
- },
- { "pkg2/C2.html",
- "<caption><span>Nested Classes</span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/C2.html",
- "<caption><span>Constructors</span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/C2.ModalExclusionType.html",
- "<caption><span>Enum Constants</span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/C3.html",
- "<caption><span>Required Elements</span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg2/C4.html",
- "<caption><span>Optional Elements</span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
+ checkOutput("pkg2/C3.html", true,
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Required Element Summary table, "
+ + "listing required elements, and an explanation\">");
+
+ checkOutput("pkg2/C4.html", true,
+ "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Optional Element Summary table, "
+ + "listing optional elements, and an explanation\">");
+
// Class use documentation
- { "pkg1/class-use/I1.html",
- "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" " +
- "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg1/class-use/C1.html",
- "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">" +
- "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" " +
- "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg1/class-use/C1.html",
- "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
- "pkg2</a> that return <a href=\"../../pkg1/C1.html\" " +
- "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/C2.html",
- "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">" +
- "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" " +
- "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/C2.html",
- "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">" +
- "pkg1</a> that return <a href=\"../../pkg2/C2.html\" " +
- "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/C2.ModalExclusionType.html",
- "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
- "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" " +
- "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>" +
- "<span class=\"tabEnd\"> </span></caption>"
- },
+ checkOutput("pkg1/class-use/I1.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing packages, and an explanation\">");
+
+ checkOutput("pkg1/class-use/C1.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing fields, and an explanation\">",
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing methods, and an explanation\">");
+
+ checkOutput("pkg2/class-use/C2.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing fields, and an explanation\">",
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing methods, and an explanation\">");
+
+ checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing packages, and an explanation\">");
+
+ checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing methods, and an explanation\">");
+
// Package use documentation
- { "pkg1/package-use.html",
- "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">" +
- "pkg1</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg1/package-use.html",
- "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">" +
- "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
- "</span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/package-use.html",
- "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">" +
- "pkg2</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/package-use.html",
- "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">" +
- "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
- "</span><span class=\"tabEnd\"> </span></caption>"
- },
+ checkOutput("pkg1/package-use.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing packages, and an explanation\">",
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing classes, and an explanation\">");
+
+ checkOutput("pkg2/package-use.html", true,
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing packages, and an explanation\">",
+ "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use "
+ + "table, listing classes, and an explanation\">");
+
// Deprecated
- { "deprecated-list.html",
- "<caption><span>Deprecated Fields</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "deprecated-list.html",
- "<caption><span>Deprecated Methods</span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
+ checkOutput("deprecated-list.html", true,
+ "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
+ + "summary=\"Deprecated Fields table, listing deprecated fields, "
+ + "and an explanation\">",
+ "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
+ + "summary=\"Deprecated Methods table, listing deprecated methods, "
+ + "and an explanation\">");
+
// Constant values
- { "constant-values.html",
- "<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
- "C1</a></span><span class=\"tabEnd\"> </span></caption>"
- },
+ checkOutput("constant-values.html", true,
+ "<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
+ + "summary=\"Constant Field Values table, listing "
+ + "constant fields, and values\">");
+
// Overview Summary
- { "overview-summary.html",
- "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>"
- },
+ checkOutput("overview-summary.html", true,
+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Packages table, "
+ + "listing packages, and an explanation\">");
+ }
- /*
- * Test for validating headers for HTML tables
- */
-
+ /*
+ * Tests for validating caption for HTML tables
+ */
+ void checkHtmlTableCaptions() {
//Package summary
- { "pkg1/package-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Class</th>\n" +
- "<th class=\"colLast\" scope=\"col\"" +
- ">Description</th>"
- },
- { "pkg1/package-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Interface</th>\n" +
- "<th class=\"colLast\" scope=\"col\"" +
- ">Description</th>"
- },
- { "pkg2/package-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Enum</th>\n" +
- "<th class=\"colLast\" scope=\"col\"" +
- ">Description</th>"
- },
- { "pkg2/package-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Annotation Type</th>\n" +
- "<th class=\"colLast\"" +
- " scope=\"col\">Description</th>"
- },
+ checkOutput("pkg1/package-summary.html", true,
+ "<caption><span>Class Summary</span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Interface Summary</span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
+ checkOutput("pkg2/package-summary.html", true,
+ "<caption><span>Enum Summary</span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
// Class documentation
- { "pkg1/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- { "pkg1/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- { "pkg2/C2.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Class and Description</th>"
- },
- { "pkg2/C2.html",
- "<th class=\"colOne\" scope=\"col\">Constructor and Description</th>"
- },
- { "pkg2/C2.ModalExclusionType.html",
- "<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>"
- },
- { "pkg2/C3.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>"
- },
- { "pkg2/C4.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>"
- },
+ checkOutput("pkg1/C1.html", true,
+ "<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>",
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
+ + "Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
+ + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
+ + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
+ + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "</caption>");
+
+ checkOutput("pkg2/C2.html", true,
+ "<caption><span>Nested Classes</span><span class=\"tabEnd\"> </span></caption>",
+ "<caption><span>Constructors</span><span class=\"tabEnd\"> </span></caption>");
+
+ checkOutput("pkg2/C2.ModalExclusionType.html", true,
+ "<caption><span>Enum Constants</span><span class=\"tabEnd\"> </span></caption>");
+
+ checkOutput("pkg2/C3.html", true,
+ "<caption><span>Required Elements</span><span class=\"tabEnd\"> "
+ + "</span></caption>");
+
+ checkOutput("pkg2/C4.html", true,
+ "<caption><span>Optional Elements</span><span class=\"tabEnd\"> "
+ + "</span></caption>");
+
// Class use documentation
- { "pkg1/class-use/I1.html",
- "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- { "pkg1/class-use/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- { "pkg1/class-use/C1.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- { "pkg2/class-use/C2.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- { "pkg2/class-use/C2.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- { "pkg2/class-use/C2.ModalExclusionType.html",
- "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- { "pkg2/class-use/C2.ModalExclusionType.html",
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
+ checkOutput("pkg1/class-use/I1.html", true,
+ "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" "
+ + "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
+ checkOutput("pkg1/class-use/C1.html", true,
+ "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">"
+ + "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" "
+ + "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
+ + "pkg2</a> that return <a href=\"../../pkg1/C1.html\" "
+ + "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
+ checkOutput("pkg2/class-use/C2.html", true,
+ "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">"
+ + "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" "
+ + "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">"
+ + "pkg1</a> that return <a href=\"../../pkg2/C2.html\" "
+ + "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
+ checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
+ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">"
+ + "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" "
+ + "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>"
+ + "<span class=\"tabEnd\"> </span></caption>");
+
// Package use documentation
- { "pkg1/package-use.html",
- "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- { "pkg1/package-use.html",
- "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
- },
- { "pkg2/package-use.html",
- "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- { "pkg2/package-use.html",
- "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
- },
+ checkOutput("pkg1/package-use.html", true,
+ "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">"
+ + "pkg1</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">"
+ + "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
+ + "</span><span class=\"tabEnd\"> </span></caption>");
+
+ checkOutput("pkg2/package-use.html", true,
+ "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">"
+ + "pkg2</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">"
+ + "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>"
+ + "</span><span class=\"tabEnd\"> </span></caption>");
+
// Deprecated
- { "deprecated-list.html",
- "<th class=\"colOne\" scope=\"col\">Field and Description</th>"
- },
- { "deprecated-list.html",
- "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
- },
+ checkOutput("deprecated-list.html", true,
+ "<caption><span>Deprecated Fields</span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Deprecated Methods</span><span class=\"tabEnd\">"
+ + " </span></caption>");
+
// Constant values
- { "constant-values.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Modifier and Type</th>\n" +
- "<th" +
- " scope=\"col\">Constant Field</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Value</th>"
- },
+ checkOutput("constant-values.html", true,
+ "<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">"
+ + "C1</a></span><span class=\"tabEnd\"> </span></caption>");
+
// Overview Summary
- { "overview-summary.html",
- "<th class=\"colFirst\" scope=\"col\">" +
- "Package</th>\n" +
- "<th class=\"colLast\" scope=\"col\"" +
- ">Description</th>"
- }
- };
+ checkOutput("overview-summary.html", true,
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
+ }
+
+ /*
+ * Test for validating headers for HTML tables
+ */
+ void checkHtmlTableHeaders() {
+ //Package summary
+ checkOutput("pkg1/package-summary.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Class</th>\n"
+ + "<th class=\"colLast\" scope=\"col\""
+ + ">Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Interface</th>\n"
+ + "<th class=\"colLast\" scope=\"col\""
+ + ">Description</th>");
+
+ checkOutput("pkg2/package-summary.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Enum</th>\n"
+ + "<th class=\"colLast\" scope=\"col\""
+ + ">Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Annotation Type</th>\n"
+ + "<th class=\"colLast\""
+ + " scope=\"col\">Description</th>");
+
+ // Class documentation
+ checkOutput("pkg1/C1.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
+
+ checkOutput("pkg2/C2.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Class and Description</th>",
+ "<th class=\"colOne\" scope=\"col\">Constructor and Description</th>");
+
+ checkOutput("pkg2/C2.ModalExclusionType.html", true,
+ "<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>");
+
+ checkOutput("pkg2/C3.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>");
+
+ checkOutput("pkg2/C4.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHtmlTableTags tester = new TestHtmlTableTags();
- tester.run(ARGS, TABLE_TAGS_TEST, NO_TEST);
- tester.printSummary();
+ // Class use documentation
+ checkOutput("pkg1/class-use/I1.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>");
+
+ checkOutput("pkg1/class-use/C1.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
+
+ checkOutput("pkg2/class-use/C2.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Field and Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
+
+ checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>",
+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Method and Description</th>");
+
+ // Package use documentation
+ checkOutput("pkg1/package-use.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>",
+ "<th class=\"colOne\" scope=\"col\">Class and Description</th>");
+
+ checkOutput("pkg2/package-use.html", true,
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>",
+ "<th class=\"colOne\" scope=\"col\">Class and Description</th>");
+
+ // Deprecated
+ checkOutput("deprecated-list.html", true,
+ "<th class=\"colOne\" scope=\"col\">Field and Description</th>",
+ "<th class=\"colOne\" scope=\"col\">Method and Description</th>");
+
+ // Constant values
+ checkOutput("constant-values.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Modifier and Type</th>\n"
+ + "<th"
+ + " scope=\"col\">Constant Field</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Value</th>");
+
+ // Overview Summary
+ checkOutput("overview-summary.html", true,
+ "<th class=\"colFirst\" scope=\"col\">"
+ + "Package</th>\n"
+ + "<th class=\"colLast\" scope=\"col\""
+ + ">Description</th>");
}
}
--- a/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java Fri May 16 14:35:37 2014 -0700
@@ -28,9 +28,8 @@
* @bug 6786682
* @summary This test verifies the use of lang attribute by <HTML>.
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestHtmlTag
* @run main TestHtmlTag
*/
@@ -38,43 +37,65 @@
public class TestHtmlTag extends JavadocTester {
- private static final String[][] TEST1 = {
- { "pkg1/C1.html",
- "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"},
- { "pkg1/package-summary.html",
- "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
- private static final String[][] NEGATED_TEST1 = {
- { "pkg1/C1.html", "<html>"}};
- private static final String[][] TEST2 = {
- { "pkg2/C2.html", "<html lang=\"ja\">"},
- { "pkg2/package-summary.html", "<html lang=\"ja\">"}};
- private static final String[][] NEGATED_TEST2 = {
- { "pkg2/C2.html", "<html>"}};
- private static final String[][] TEST3 = {
- { "pkg1/C1.html", "<html lang=\"en\">"},
- { "pkg1/package-summary.html", "<html lang=\"en\">"}};
- private static final String[][] NEGATED_TEST3 = {
- { "pkg1/C1.html", "<html>"}};
+ public static void main(String... args) throws Exception {
+ TestHtmlTag tester = new TestHtmlTag();
+ tester.runTests();
+ }
+
+ @Test
+ void test_default() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+
+ String defaultLanguage = Locale.getDefault().getLanguage();
+
+ checkOutput("pkg1/C1.html", true,
+ "<html lang=\"" + defaultLanguage + "\">");
+
+ checkOutput("pkg1/package-summary.html", true,
+ "<html lang=\"" + defaultLanguage + "\">");
+
+ checkOutput("pkg1/C1.html", false,
+ "<html>");
+ }
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
- private static final String[] ARGS2 =
- new String[] {
- "-locale", "ja", "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "pkg2"};
- private static final String[] ARGS3 =
- new String[] {
- "-locale", "en_US", "-d", OUTPUT_DIR + "-3", "-sourcepath", SRC_DIR, "pkg1"};
+ @Test
+ void test_ja() {
+ // TODO: why does this test need/use pkg2; why can't it use pkg1
+ // like the other two tests, so that we can share the check methods?
+ javadoc("-locale", "ja",
+ "-d", "out-ja",
+ "-sourcepath", testSrc,
+ "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg2/C2.html", true,
+ "<html lang=\"ja\">");
+
+ checkOutput("pkg2/package-summary.html", true,
+ "<html lang=\"ja\">");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestHtmlTag tester = new TestHtmlTag();
- tester.run(ARGS1, TEST1, NEGATED_TEST1);
- tester.run(ARGS2, TEST2, NEGATED_TEST2);
- tester.run(ARGS3, TEST3, NEGATED_TEST3);
- tester.printSummary();
+ checkOutput("pkg2/C2.html", false,
+ "<html>");
+ }
+
+ @Test
+ void test_en_US() {
+ javadoc("-locale", "en_US",
+ "-d", "out-en_US",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/C1.html", true,
+ "<html lang=\"en\">");
+
+ checkOutput("pkg1/package-summary.html", true,
+ "<html lang=\"en\">");
+
+ checkOutput("pkg1/C1.html", false,
+ "<html>");
}
}
--- a/langtools/test/com/sun/javadoc/testIndentation/TestIndentation.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testIndentation/TestIndentation.java Fri May 16 14:35:37 2014 -0700
@@ -25,37 +25,30 @@
* @test
* @bug 8011288
* @summary Erratic/inconsistent indentation of signatures
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @run main TestIndentation
*/
public class TestIndentation extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "p"
- };
+ public static void main(String... args) throws Exception {
+ TestIndentation tester = new TestIndentation();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "p/Indent.html",
- "<pre>public <T> void m(T t1," },
- { "p/Indent.html",
- "\n" +
- " T t2)" },
- { "p/Indent.html",
- "\n" +
- " throws java.lang.Exception" }
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "p");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestIndentation tester = new TestIndentation();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("p/Indent.html", true,
+ "<pre>public <T> void m(T t1,",
+ "\n"
+ + " T t2)",
+ "\n"
+ + " throws java.lang.Exception");
}
}
--- a/langtools/test/com/sun/javadoc/testIndex/TestIndex.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testIndex/TestIndex.java Fri May 16 14:35:37 2014 -0700
@@ -28,64 +28,53 @@
* Also test that index-all.html has the appropriate output.
* Test for unnamed package in index.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestIndex
* @run main TestIndex
*/
public class TestIndex extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR + "/NoPackage.java"
- };
+ public static void main(String... args) throws Exception {
+ TestIndex tester = new TestIndex();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", testSrc("NoPackage.java"));
+ checkExit(Exit.OK);
+
//Make sure the horizontal scroll bar does not appear in class frame.
- { "index.html",
- "<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"" +
- "Package, class and interface descriptions\" scrolling=\"yes\">"},
+ checkOutput("index.html", true,
+ "<frame src=\"overview-summary.html\" name=\"classFrame\" title=\""
+ + "Package, class and interface descriptions\" scrolling=\"yes\">");
//Test index-all.html
- { "index-all.html",
- "<a href=\"pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">C</span></a>" +
- " - Class in <a href=\"pkg/package-summary.html\">pkg</a>"},
- { "index-all.html",
- "<a href=\"pkg/Interface.html\" title=\"interface in pkg\">" +
- "<span class=\"typeNameLink\">Interface</span></a> - Interface in " +
- "<a href=\"pkg/package-summary.html\">pkg</a>"},
- { "index-all.html",
- "<a href=\"pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
- "<span class=\"typeNameLink\">AnnotationType</span></a> - Annotation Type in " +
- "<a href=\"pkg/package-summary.html\">pkg</a>"},
- { "index-all.html",
- "<a href=\"pkg/Coin.html\" title=\"enum in pkg\">" +
- "<span class=\"typeNameLink\">Coin</span></a> - Enum in " +
- "<a href=\"pkg/package-summary.html\">pkg</a>"},
- { "index-all.html",
- "Class in <a href=\"package-summary.html\"><Unnamed></a>"},
- { "index-all.html",
- "<dl>\n" +
- "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#Java\">" +
- "Java</a></span> - Static variable in class pkg.<a href=\"pkg/C.html\" " +
- "title=\"class in pkg\">C</a></dt>\n" +
- "<dd> </dd>\n" +
- "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#JDK\">JDK</a></span> " +
- "- Static variable in class pkg.<a href=\"pkg/C.html\" title=\"class in pkg\">" +
- "C</a></dt>\n" +
- "<dd> </dd>\n" +
- "</dl>"},
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestIndex tester = new TestIndex();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("index-all.html", true,
+ "<a href=\"pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">C</span></a>"
+ + " - Class in <a href=\"pkg/package-summary.html\">pkg</a>",
+ "<a href=\"pkg/Interface.html\" title=\"interface in pkg\">"
+ + "<span class=\"typeNameLink\">Interface</span></a> - Interface in "
+ + "<a href=\"pkg/package-summary.html\">pkg</a>",
+ "<a href=\"pkg/AnnotationType.html\" title=\"annotation in pkg\">"
+ + "<span class=\"typeNameLink\">AnnotationType</span></a> - Annotation Type in "
+ + "<a href=\"pkg/package-summary.html\">pkg</a>",
+ "<a href=\"pkg/Coin.html\" title=\"enum in pkg\">"
+ + "<span class=\"typeNameLink\">Coin</span></a> - Enum in "
+ + "<a href=\"pkg/package-summary.html\">pkg</a>",
+ "Class in <a href=\"package-summary.html\"><Unnamed></a>",
+ "<dl>\n"
+ + "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#Java\">"
+ + "Java</a></span> - Static variable in class pkg.<a href=\"pkg/C.html\" "
+ + "title=\"class in pkg\">C</a></dt>\n"
+ + "<dd> </dd>\n"
+ + "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#JDK\">JDK</a></span> "
+ + "- Static variable in class pkg.<a href=\"pkg/C.html\" title=\"class in pkg\">"
+ + "C</a></dt>\n"
+ + "<dd> </dd>\n"
+ + "</dl>");
}
}
--- a/langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java Fri May 16 14:35:37 2014 -0700
@@ -26,34 +26,29 @@
* @bug 4524136
* @summary Test to make sure label is used for inline links.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestInlineLinkLabel
* @run main TestInlineLinkLabel
*/
public class TestInlineLinkLabel extends JavadocTester {
- private static final String[][] TEST = {
- //Search for the label to the package link.
- { "pkg/C1.html" ,
- "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>"},
+ public static void main(String... args) throws Exception {
+ TestInlineLinkLabel tester = new TestInlineLinkLabel();
+ tester.runTests();
+ }
- //Search for the label to the class link
- { "pkg/C1.html" ,
- "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>"}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestInlineLinkLabel tester = new TestInlineLinkLabel();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/C1.html", true,
+ //Search for the label to the package link.
+ "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>",
+ //Search for the label to the class link
+ "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>");
}
}
--- a/langtools/test/com/sun/javadoc/testInterface/TestInterface.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testInterface/TestInterface.java Fri May 16 14:35:37 2014 -0700
@@ -29,101 +29,82 @@
* If A implements I and B extends A, B should be in the list of
* implementing classes in the documentation for I.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestInterface
* @run main TestInterface
*/
public class TestInterface extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestInterface tester = new TestInterface();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/Interface.html",
- "<pre>int method()</pre>"},
- { "pkg/Interface.html",
- "<pre>static final int field</pre>"},
-
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- // Make sure known implementing class list is correct and omits type parameters.
- { "pkg/Interface.html",
- "<dl>\n" +
- "<dt>All Known Implementing Classes:</dt>\n" +
- "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
- "</a>, <a href=\"../pkg/Parent.html\" title=\"class in pkg\">Parent" +
- "</a></dd>\n" +
- "</dl>"},
+ checkOutput("pkg/Interface.html", true,
+ "<pre>int method()</pre>",
+ "<pre>static final int field</pre>",
+ // Make sure known implementing class list is correct and omits type parameters.
+ "<dl>\n"
+ + "<dt>All Known Implementing Classes:</dt>\n"
+ + "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child"
+ + "</a>, <a href=\"../pkg/Parent.html\" title=\"class in pkg\">Parent"
+ + "</a></dd>\n"
+ + "</dl>");
- // Make sure "All Implemented Interfaces": has substituted type parameters
- { "pkg/Child.html",
- "<dl>\n" +
- "<dt>All Implemented Interfaces:</dt>\n" +
- "<dd><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
- "Interface</a><T></dd>\n" +
- "</dl>"
- },
- //Make sure Class Tree has substituted type parameters.
- { "pkg/Child.html",
- "<ul class=\"inheritance\">\n" +
- "<li>java.lang.Object</li>\n" +
- "<li>\n" +
- "<ul class=\"inheritance\">\n" +
- "<li><a href=\"../pkg/Parent.html\" title=\"class in pkg\">" +
- "pkg.Parent</a><T></li>\n" +
- "<li>\n" +
- "<ul class=\"inheritance\">\n" +
- "<li>pkg.Child<T></li>\n" +
- "</ul>\n" +
- "</li>\n" +
- "</ul>\n" +
- "</li>\n" +
- "</ul>"
- },
- //Make sure "Direct Know Subclasses" omits type parameters
- { "pkg/Parent.html",
- "<dl>\n" +
- "<dt>Direct Known Subclasses:</dt>\n" +
- "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
- "</a></dd>\n" +
- "</dl>"
- },
- //Make sure "Specified By" has substituted type parameters.
- { "pkg/Child.html",
- "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
- "<dd><code><a href=\"../pkg/Interface.html#method--\">method</a>" +
- "</code> in interface <code>" +
- "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
- "Interface</a><<a href=\"../pkg/Child.html\" title=\"type parameter in Child\">" +
- "T</a>></code></dd>"
- },
- //Make sure "Overrides" has substituted type parameters.
- { "pkg/Child.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg/Parent.html#method--\">method</a>" +
- "</code> in class <code><a href=\"../pkg/Parent.html\" " +
- "title=\"class in pkg\">Parent</a><<a href=\"../pkg/Child.html\" " +
- "title=\"type parameter in Child\">T</a>></code></dd>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/Interface.html",
- "public int method()"},
- { "pkg/Interface.html",
- "public static final int field"},
- };
+ checkOutput("pkg/Child.html", true,
+ // Make sure "All Implemented Interfaces": has substituted type parameters
+ "<dl>\n"
+ + "<dt>All Implemented Interfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"
+ + "Interface</a><T></dd>\n"
+ + "</dl>",
+ //Make sure Class Tree has substituted type parameters.
+ "<ul class=\"inheritance\">\n"
+ + "<li>java.lang.Object</li>\n"
+ + "<li>\n"
+ + "<ul class=\"inheritance\">\n"
+ + "<li><a href=\"../pkg/Parent.html\" title=\"class in pkg\">"
+ + "pkg.Parent</a><T></li>\n"
+ + "<li>\n"
+ + "<ul class=\"inheritance\">\n"
+ + "<li>pkg.Child<T></li>\n"
+ + "</ul>\n"
+ + "</li>\n"
+ + "</ul>\n"
+ + "</li>\n"
+ + "</ul>",
+ //Make sure "Specified By" has substituted type parameters.
+ "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg/Interface.html#method--\">method</a>"
+ + "</code> in interface <code>"
+ + "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"
+ + "Interface</a><<a href=\"../pkg/Child.html\" title=\"type parameter in Child\">"
+ + "T</a>></code></dd>",
+ //Make sure "Overrides" has substituted type parameters.
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg/Parent.html#method--\">method</a>"
+ + "</code> in class <code><a href=\"../pkg/Parent.html\" "
+ + "title=\"class in pkg\">Parent</a><<a href=\"../pkg/Child.html\" "
+ + "title=\"type parameter in Child\">T</a>></code></dd>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestInterface tester = new TestInterface();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/Parent.html", true,
+ //Make sure "Direct Know Subclasses" omits type parameters
+ "<dl>\n"
+ + "<dt>Direct Known Subclasses:</dt>\n"
+ + "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child"
+ + "</a></dd>\n"
+ + "</dl>");
+
+ checkOutput("pkg/Interface.html", false,
+ "public int method()",
+ "public static final int field");
}
}
--- a/langtools/test/com/sun/javadoc/testJavaFX/TestJavaFX.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testJavaFX/TestJavaFX.java Fri May 16 14:35:37 2014 -0700
@@ -26,73 +26,57 @@
* @bug 7112427 8012295 8025633 8026567
* @summary Test of the JavaFX doclet features.
* @author jvalenta
- * @library ../lib/
- * @build JavadocTester TestJavaFX
+ * @library ../lib
+ * @build JavadocTester
* @run main TestJavaFX
*/
public class TestJavaFX extends JavadocTester {
- private static final String[][] TEST =
- new String[][] {
- { "C.html",
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd><a href=\"C.html#getRate--\"><code>getRate()</code></a>, \n" +
- "<a href=\"C.html#setRate-double-\"><code>setRate(double)</code></a></dd>"},
- { "C.html",
- "<pre>public final void setRate(double value)</pre>\n" +
- "<div class=\"block\">Sets the value of the property rate.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>" },
- { "C.html",
- "<pre>public final double getRate()</pre>\n" +
- "<div class=\"block\">Gets the value of the property rate.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>" },
- { "C.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#rateProperty\">rate</a></span></code>\n" +
- "<div class=\"block\">Defines the direction/speed at which the <code>Timeline</code> is expected to"},
+ public static void main(String... args) throws Exception {
+ TestJavaFX tester = new TestJavaFX();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-javafx",
+ testSrc("C.java"), testSrc("D.java"));
+ checkExit(Exit.FAILED); // should be EXIT_OK -- need to fix C.java
- { "C.html",
- "<span class=\"simpleTagLabel\">Default value:</span>"},
- { "C.html",
- "<span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>JavaFX 8.0</dd>" },
- { "C.html",
- "<p>Sets the value of the property <code>Property</code>"},
- { "C.html",
- "<p>Gets the value of the property <code>Property</code>"},
- { "C.html",
- "<span class=\"simpleTagLabel\">Property description:</span>"},
- { "C.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#setTestMethodProperty--\">setTestMethodProperty</a></span>()</code> </td>" },
- { "C.html",
- "<h4>isPaused</h4>\n" +
- "<pre>public final double isPaused()</pre>\n" +
- "<div class=\"block\">Gets the value of the property paused.</div>" },
- { "D.html",
- "<h3>Properties inherited from class <a href=\"C.html\" title=\"class in <Unnamed>\">C</a></h3>\n" +
- "<code><a href=\"C.html#pausedProperty\">paused</a>, <a href=\"C.html#rateProperty\">rate</a></code></li>" },
- };
- private static final String[][] NO_TEST =
- new String[][] {
- { "C.html",
- "A()"},
- };
+ checkOutput("C.html", true,
+ "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd><a href=\"C.html#getRate--\"><code>getRate()</code></a>, \n"
+ + "<a href=\"C.html#setRate-double-\"><code>setRate(double)</code></a></dd>",
+ "<pre>public final void setRate(double value)</pre>\n"
+ + "<div class=\"block\">Sets the value of the property rate.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>",
+ "<pre>public final double getRate()</pre>\n"
+ + "<div class=\"block\">Gets the value of the property rate.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#rateProperty\">rate</a></span></code>\n"
+ + "<div class=\"block\">Defines the direction/speed at which the <code>Timeline</code> is expected to",
+ "<span class=\"simpleTagLabel\">Default value:</span>",
+ "<span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>JavaFX 8.0</dd>",
+ "<p>Sets the value of the property <code>Property</code>",
+ "<p>Gets the value of the property <code>Property</code>",
+ "<span class=\"simpleTagLabel\">Property description:</span>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#setTestMethodProperty--\">setTestMethodProperty</a></span>()</code> </td>",
+ "<h4>isPaused</h4>\n"
+ + "<pre>public final double isPaused()</pre>\n"
+ + "<div class=\"block\">Gets the value of the property paused.</div>");
-
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-javafx",
- SRC_DIR + "/C.java", SRC_DIR + "/D.java"
- };
+ checkOutput("C.html", false,
+ "A()");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestJavaFX tester = new TestJavaFX();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("D.html", true,
+ "<h3>Properties inherited from class <a href=\"C.html\" title=\"class in <Unnamed>\">C</a></h3>\n"
+ + "<code><a href=\"C.html#pausedProperty\">paused</a>, <a href=\"C.html#rateProperty\">rate</a></code></li>");
}
+
}
--- a/langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java Fri May 16 14:35:37 2014 -0700
@@ -26,98 +26,93 @@
* @bug 4665566 4855876 7025314 8012375 8015997 8016328 8024756
* @summary Verify that the output has the right javascript.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestJavascript
* @run main TestJavascript
*/
public class TestJavascript extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
- "/TestJavascript.java"
- };
+ public static void main(String... args) throws Exception {
+ TestJavascript tester = new TestJavascript();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", testSrc("TestJavascript.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/C.html", true,
+ "<a href=\"../index.html?pkg/C.html\" target=\"_top\">Frames</a>");
+
+ checkOutput("TestJavascript.html", true,
+ "<a href=\"index.html?TestJavascript.html\" target=\"_top\">Frames</a>");
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/C.html",
- "<a href=\"../index.html?pkg/C.html\" target=\"_top\">Frames</a>"},
- { "TestJavascript.html",
- "<a href=\"index.html?TestJavascript.html\" target=\"_top\">Frames</a>"},
- { "index.html",
- "<script type=\"text/javascript\">\n" +
- " targetPage = \"\" + window.location.search;\n" +
- " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
- " targetPage = targetPage.substring(1);\n" +
- " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))\n" +
- " targetPage = \"undefined\";\n" +
- " function validURL(url) {\n" +
- " try {\n" +
- " url = decodeURIComponent(url);\n" +
- " }\n" +
- " catch (error) {\n" +
- " return false;\n" +
- " }\n" +
- " var pos = url.indexOf(\".html\");\n" +
- " if (pos == -1 || pos != url.length - 5)\n" +
- " return false;\n" +
- " var allowNumber = false;\n" +
- " var allowSep = false;\n" +
- " var seenDot = false;\n" +
- " for (var i = 0; i < url.length - 5; i++) {\n" +
- " var ch = url.charAt(i);\n" +
- " if ('a' <= ch && ch <= 'z' ||\n" +
- " 'A' <= ch && ch <= 'Z' ||\n" +
- " ch == '$' ||\n" +
- " ch == '_' ||\n" +
- " ch.charCodeAt(0) > 127) {\n" +
- " allowNumber = true;\n" +
- " allowSep = true;\n" +
- " } else if ('0' <= ch && ch <= '9'\n" +
- " || ch == '-') {\n" +
- " if (!allowNumber)\n" +
- " return false;\n" +
- " } else if (ch == '/' || ch == '.') {\n" +
- " if (!allowSep)\n" +
- " return false;\n" +
- " allowNumber = false;\n" +
- " allowSep = false;\n" +
- " if (ch == '.')\n" +
- " seenDot = true;\n" +
- " if (ch == '/' && seenDot)\n" +
- " return false;\n" +
- " } else {\n" +
- " return false;\n" +
- " }\n" +
- " }\n" +
- " return true;\n" +
- " }\n" +
- " function loadFrames() {\n" +
- " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
- " top.classFrame.location = top.targetPage;\n" +
- " }\n" +
- "</script>"},
+ checkOutput("index.html", true,
+ "<script type=\"text/javascript\">\n"
+ + " targetPage = \"\" + window.location.search;\n"
+ + " if (targetPage != \"\" && targetPage != \"undefined\")\n"
+ + " targetPage = targetPage.substring(1);\n"
+ + " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))\n"
+ + " targetPage = \"undefined\";\n"
+ + " function validURL(url) {\n"
+ + " try {\n"
+ + " url = decodeURIComponent(url);\n"
+ + " }\n"
+ + " catch (error) {\n"
+ + " return false;\n"
+ + " }\n"
+ + " var pos = url.indexOf(\".html\");\n"
+ + " if (pos == -1 || pos != url.length - 5)\n"
+ + " return false;\n"
+ + " var allowNumber = false;\n"
+ + " var allowSep = false;\n"
+ + " var seenDot = false;\n"
+ + " for (var i = 0; i < url.length - 5; i++) {\n"
+ + " var ch = url.charAt(i);\n"
+ + " if ('a' <= ch && ch <= 'z' ||\n"
+ + " 'A' <= ch && ch <= 'Z' ||\n"
+ + " ch == '$' ||\n"
+ + " ch == '_' ||\n"
+ + " ch.charCodeAt(0) > 127) {\n"
+ + " allowNumber = true;\n"
+ + " allowSep = true;\n"
+ + " } else if ('0' <= ch && ch <= '9'\n"
+ + " || ch == '-') {\n"
+ + " if (!allowNumber)\n"
+ + " return false;\n"
+ + " } else if (ch == '/' || ch == '.') {\n"
+ + " if (!allowSep)\n"
+ + " return false;\n"
+ + " allowNumber = false;\n"
+ + " allowSep = false;\n"
+ + " if (ch == '.')\n"
+ + " seenDot = true;\n"
+ + " if (ch == '/' && seenDot)\n"
+ + " return false;\n"
+ + " } else {\n"
+ + " return false;\n"
+ + " }\n"
+ + " }\n"
+ + " return true;\n"
+ + " }\n"
+ + " function loadFrames() {\n"
+ + " if (targetPage != \"\" && targetPage != \"undefined\")\n"
+ + " top.classFrame.location = top.targetPage;\n"
+ + " }\n"
+ + "</script>");
//Make sure title javascript only runs if is-external is not true
- { "pkg/C.html",
- " try {\n" +
- " if (location.href.indexOf('is-external=true') == -1) {\n" +
- " parent.document.title=\"C\";\n" +
- " }\n" +
- " }\n" +
- " catch(err) {\n" +
- " }"},
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestJavascript tester = new TestJavascript();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/C.html", true,
+ " try {\n"
+ + " if (location.href.indexOf('is-external=true') == -1) {\n"
+ + " parent.document.title=\"C\";\n"
+ + " }\n"
+ + " }\n"
+ + " catch(err) {\n"
+ + " }");
}
}
--- a/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java Fri May 16 14:35:37 2014 -0700
@@ -40,79 +40,74 @@
public class TestLambdaFeature extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "pkg1"
- };
+ public static void main(String... args) throws Exception {
+ TestLambdaFeature tester = new TestLambdaFeature();
+ tester.runTests();
+ }
+
+ @Test
+ void testDefault() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ "pkg", "pkg1");
+ checkExit(Exit.OK);
- private static final String[] ARGS_1 = new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-source", "1.7", "pkg1"
- };
+ checkOutput("pkg/A.html", true,
+ "<td class=\"colFirst\"><code>default void</code></td>",
+ "<pre>default void defaultMethod()</pre>",
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
+ + "All Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
+ + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
+ + "Abstract Methods</a></span><span class=\"tabEnd\"> </span>"
+ + "</span><span id=\"t5\" class=\"tableTab\"><span>"
+ + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
+ + "<span class=\"tabEnd\"> </span></span></caption>",
+ "<dl>\n"
+ + "<dt>Functional Interface:</dt>\n"
+ + "<dd>This is a functional interface and can therefore be used as "
+ + "the assignment target for a lambda expression or method "
+ + "reference.</dd>\n"
+ + "</dl>");
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/A.html",
- "<td class=\"colFirst\"><code>default void</code></td>"},
- { "pkg/A.html",
- "<pre>default void defaultMethod()</pre>"},
- { "pkg/A.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
- "All Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(2);\">Instance Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span><span id=\"t3\" " +
- "class=\"tableTab\"><span><a href=\"javascript:show(4);\">" +
- "Abstract Methods</a></span><span class=\"tabEnd\"> </span>" +
- "</span><span id=\"t5\" class=\"tableTab\"><span>" +
- "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
- "<span class=\"tabEnd\"> </span></span></caption>"},
- { "pkg/A.html",
- "<dl>\n" +
- "<dt>Functional Interface:</dt>\n" +
- "<dd>This is a functional interface and can therefore be used as " +
- "the assignment target for a lambda expression or method " +
- "reference.</dd>\n" +
- "</dl>"},
- { "pkg1/FuncInf.html",
- "<dl>\n" +
- "<dt>Functional Interface:</dt>\n" +
- "<dd>This is a functional interface and can therefore be used as " +
- "the assignment target for a lambda expression or method " +
- "reference.</dd>\n" +
- "</dl>"}
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/A.html",
- "<td class=\"colFirst\"><code>default default void</code></td>"},
- { "pkg/A.html",
- "<pre>default default void defaultMethod()</pre>"},
- { "pkg/B.html",
- "<td class=\"colFirst\"><code>default void</code></td>"},
- { "pkg1/NotAFuncInf.html",
- "<dl>\n" +
- "<dt>Functional Interface:</dt>\n" +
- "<dd>This is a functional interface and can therefore be used as " +
- "the assignment target for a lambda expression or method " +
- "reference.</dd>\n" +
- "</dl>"},
- { "pkg/B.html",
- "<dl>\n" +
- "<dt>Functional Interface:</dt>"}
- };
- private static final String[][] NEGATED_TEST_1 = {
- { "pkg1/FuncInf.html",
- "<dl>\n" +
- "<dt>Functional Interface:</dt>"}
- };
+ checkOutput("pkg1/FuncInf.html", true,
+ "<dl>\n"
+ + "<dt>Functional Interface:</dt>\n"
+ + "<dd>This is a functional interface and can therefore be used as "
+ + "the assignment target for a lambda expression or method "
+ + "reference.</dd>\n"
+ + "</dl>");
+
+ checkOutput("pkg/A.html", false,
+ "<td class=\"colFirst\"><code>default default void</code></td>",
+ "<pre>default default void defaultMethod()</pre>");
+
+ checkOutput("pkg/B.html", false,
+ "<td class=\"colFirst\"><code>default void</code></td>",
+ "<dl>\n"
+ + "<dt>Functional Interface:</dt>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLambdaFeature tester = new TestLambdaFeature();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.run(ARGS_1, NO_TEST, NEGATED_TEST_1);
- tester.printSummary();
+ checkOutput("pkg1/NotAFuncInf.html", false,
+ "<dl>\n"
+ + "<dt>Functional Interface:</dt>\n"
+ + "<dd>This is a functional interface and can therefore be used as "
+ + "the assignment target for a lambda expression or method "
+ + "reference.</dd>\n"
+ + "</dl>");
+ }
+
+ @Test
+ void testSource7() {
+ javadoc("-d", "out-7",
+ "-sourcepath", testSrc,
+ "-source", "1.7",
+ "pkg1");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/FuncInf.html", false,
+ "<dl>\n"
+ + "<dt>Functional Interface:</dt>");
}
}
--- a/langtools/test/com/sun/javadoc/testLeadingSpaces/LeadingSpaces.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLeadingSpaces/LeadingSpaces.java Fri May 16 14:35:37 2014 -0700
@@ -29,37 +29,35 @@
* begin their comment without a leading star without leading
* spaces stripped
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build LeadingSpaces
* @run main LeadingSpaces
*/
public class LeadingSpaces extends JavadocTester {
-
- private static final String[][] TEST = {
- { "LeadingSpaces.html",
-" 1\n" +
-" 2\n" +
-" 3\n" +
-" 4\n" +
-" 5\n" +
-" 6\n" +
-" 7"}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/LeadingSpaces.java"};
-
/**
* The entry point of the test.
* @param args the array of command line arguments.
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
LeadingSpaces tester = new LeadingSpaces();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void testLeadingSpaces() {
+ javadoc("-d", "out", "-sourcepath", testSrc,
+ testSrc("LeadingSpaces.java"));
+ checkExit(Exit.OK);
+ checkOutput("LeadingSpaces.html", true,
+ " 1\n"
+ + " 2\n"
+ + " 3\n"
+ + " 4\n"
+ + " 5\n"
+ + " 6\n"
+ + " 7");
}
/**
--- a/langtools/test/com/sun/javadoc/testLegacyTaglet/TestLegacyTaglet.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLegacyTaglet/TestLegacyTaglet.java Fri May 16 14:35:37 2014 -0700
@@ -27,38 +27,35 @@
* @summary Test to ensure that the refactored version of the standard
* doclet still works with Taglets that implement the 1.4.0 interface.
* @author jamieh
- * @library ../lib/
- * @compile ../lib/JavadocTester.java TestLegacyTaglet.java ToDoTaglet.java UnderlineTaglet.java Check.java
+ * @library ../lib
+ * @build JavadocTester ToDoTaglet UnderlineTaglet Check
* @run main TestLegacyTaglet
*/
public class TestLegacyTaglet extends JavadocTester {
- private static final String[] ARGS =
- new String[] {"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-tagletpath", SRC_DIR, "-taglet", "ToDoTaglet", "-taglet", "Check",
- "-taglet", "UnderlineTaglet", SRC_DIR + "/C.java"};
+ public static void main(String... args) throws Exception {
+ TestLegacyTaglet tester = new TestLegacyTaglet();
+ tester.runTests();
+ }
- private static final String[][] TEST = new String[][] {
- { "C.html", "This is an <u>underline</u>"},
- { "C.html",
- "<DT><B>To Do:</B><DD><table cellpadding=2 cellspacing=0><tr>" +
- "<td bgcolor=\"yellow\">Finish this class.</td></tr></table></DD>"},
- { "C.html",
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-tagletpath", testSrc,
+ "-taglet", "ToDoTaglet",
+ "-taglet", "Check",
+ "-taglet", "UnderlineTaglet",
+ testSrc("C.java"));
+ checkExit(Exit.OK);
+ checkOutput("C.html", true,
+ "This is an <u>underline</u>",
"<DT><B>To Do:</B><DD><table cellpadding=2 cellspacing=0><tr>" +
- "<td bgcolor=\"yellow\">Tag in Method.</td></tr></table></DD>"}
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLegacyTaglet tester = new TestLegacyTaglet();
- tester.run(ARGS, TEST, NO_TEST);
- if (tester.getErrorOutput().contains("NullPointerException")) {
- throw new AssertionError("javadoc threw NullPointerException");
- }
- tester.printSummary();
+ "<td bgcolor=\"yellow\">Finish this class.</td></tr></table></DD>",
+ "<DT><B>To Do:</B><DD><table cellpadding=2 cellspacing=0><tr>" +
+ "<td bgcolor=\"yellow\">Tag in Method.</td></tr></table></DD>");
+ checkOutput(Output.STDERR, false,
+ "NullPointerException");
}
}
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestBadLinkOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestBadLinkOption.java Fri May 16 14:35:37 2014 -0700
@@ -26,34 +26,32 @@
* @bug 4625883
* @summary Make sure that bad -link arguments trigger warnings.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestBadLinkOption
* @run main TestBadLinkOption
*/
public class TestBadLinkOption extends JavadocTester {
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-link", OUTPUT_DIR, "pkg"
- };
-
- private static final String[][] TEST = {
- {WARNING_OUTPUT, "Error reading file:"}
- };
+ public static void main(String... args) throws Exception {
+ TestBadLinkOption tester = new TestBadLinkOption();
+ tester.runTests();
+ }
- private static final String[][] NEG_TEST = {
- {ERROR_OUTPUT, "Error reading file:"}
- };
+ @Test
+ void test() {
+ String out = "out";
+ javadoc("-d", out,
+ "-sourcepath", testSrc,
+ "-link", out,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestBadLinkOption tester = new TestBadLinkOption();
- tester.run(ARGS, TEST, NEG_TEST);
- tester.printSummary();
+ // TODO: the file it is trying to read, out/out/package-list, warrants investigation
+ checkOutput(Output.WARNING, true,
+ "Error reading file:");
+
+ checkOutput(Output.ERROR, false,
+ "Error reading file:");
}
}
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java Fri May 16 14:35:37 2014 -0700
@@ -27,105 +27,111 @@
* @summary Test to make sure that -link and -linkoffline link to
* right files, and URLs with and without trailing slash are accepted.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestLinkOption
+ * @library ../lib
+ * @build JavadocTester
* @run main TestLinkOption
*/
import java.io.File;
public class TestLinkOption extends JavadocTester {
+ /**
+ * The entry point of the test.
+ * @param args the array of command line arguments.
+ */
+ public static void main(String... args) throws Exception {
+ TestLinkOption tester = new TestLinkOption();
+ tester.runTests();
+ }
- //Generate the documentation using -linkoffline and a URL as the first parameter.
- private static final String[] ARGS1 = new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
- "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/",
- SRC_DIR, "-package", "pkg", "java.lang"
- };
+ // The following test runs javadoc multiple times; it is important that the
+ // first one is run first, since the subsequent runs refer to the output
+ // it generates. Therefore we run everything serially in a single @Test
+ // method and not in independent @Test methods.
+ @Test
+ void test() {
+ // Generate the documentation using -linkoffline and a URL as the first parameter.
+ String out1 = "out1";
+ String url = "http://java.sun.com/j2se/1.4/docs/api/";
+ javadoc("-d", out1,
+ "-sourcepath", testSrc,
+ "-linkoffline", url, testSrc,
+ "-package",
+ "pkg", "java.lang");
+ checkExit(Exit.OK);
- private static final String[][] TEST1 = {
- { "pkg/C.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
- "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>"
- },
- //Make sure the parameters are indented properly when the -link option is used.
- { "pkg/C.html",
- "(int p1,\n" +
- " int p2,\n" +
- " int p3)"
- },
- { "pkg/C.html",
- "(int p1,\n" +
- " int p2,\n" +
- " <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">" +
- "Object</a> p3)"
- },
- { "java/lang/StringBuilderChild.html",
- "<pre>public abstract class <span class=\"typeNameLabel\">StringBuilderChild</span>\n" +
- "extends <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
- "title=\"class or interface in java.lang\">Object</a></pre>"
- },
+ checkOutput("pkg/C.html", true,
+ "<a href=\"" + url + "java/lang/String.html?is-external=true\" "
+ + "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>",
+ //Make sure the parameters are indented properly when the -link option is used.
+ "(int p1,\n"
+ + " int p2,\n"
+ + " int p3)",
+ "(int p1,\n"
+ + " int p2,\n"
+ + " <a href=\"" + url + "java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">"
+ + "Object</a> p3)");
+
+ checkOutput("java/lang/StringBuilderChild.html", true,
+ "<pre>public abstract class <span class=\"typeNameLabel\">StringBuilderChild</span>\n"
+ + "extends <a href=\"" + url + "java/lang/Object.html?is-external=true\" "
+ + "title=\"class or interface in java.lang\">Object</a></pre>"
+ );
- };
- private static final String[][] NEGATED_TEST1 = NO_TEST;
+ // Generate the documentation using -linkoffline and a relative path as the first parameter.
+ // We will try linking to the docs generated in test 1 with a relative path.
+ String out2 = "out2";
+ javadoc("-d", out2,
+ "-sourcepath", testSrc,
+ "-linkoffline", "../" + out1, out1,
+ "-package",
+ "pkg2");
+ checkExit(Exit.OK);
+ checkOutput("pkg2/C2.html", true,
+ "This is a link to <a href=\"../../" + out1 + "/pkg/C.html?is-external=true\" " +
+ "title=\"class or interface in pkg\"><code>Class C</code></a>."
+ );
- //Generate the documentation using -linkoffline and a relative path as the first parameter.
- //We will try linking to the docs generated in test 1 with a relative path.
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR,
- "-linkoffline", "../" + OUTPUT_DIR + "-1",
- OUTPUT_DIR + "-1", "-package", "pkg2"
- };
+ String out3 = "out3";
+ javadoc(createArguments(out3, out1, true)); // with trailing slash
+ checkExit(Exit.OK);
- private static final String[][] TEST2 = {
- { "pkg2/C2.html",
- "This is a link to <a href=\"../../" +
- OUTPUT_DIR + "-1/pkg/C.html?is-external=true\" " +
- "title=\"class or interface in pkg\"><code>Class C</code></a>."
- }
- };
+ String out4 = "out4";
+ javadoc(createArguments(out4, out1, false)); // without trailing slash
+ checkExit(Exit.OK);
+ // Note: the following test is very weak, and will fail if ever the test
+ // of the message is changed. We should have a separate test to verify
+ // this is the text that is given when there is a problem with a URL
+ checkOutput(Output.WARNING, false,
+ "warning - Error fetching URL");
+ }
+
/*
* Create the documentation using the -link option, vary the behavior with
* both trailing and no trailing slash. We are only interested in ensuring
* that the command executes with no errors or related warnings.
*/
- static String[] createArguments(boolean withTrailingSlash) {
- String packagePath = new File(OUTPUT_DIR + "-1").getAbsolutePath();
- String outputDirName = OUTPUT_DIR;
+ static String[] createArguments(String outDir, String packageDir, boolean withTrailingSlash) {
+ String packagePath = new File(packageDir).getAbsolutePath();
if (withTrailingSlash) {
// add the trailing slash, if it is not present!
if (!packagePath.endsWith(FS)) {
packagePath = packagePath + FS;
}
- outputDirName = outputDirName + "-3";
} else {
// remove the trailing slash, if it is present!
if (packagePath.endsWith(FS)) {
packagePath = packagePath.substring(0, packagePath.length() - 1);
}
- outputDirName = outputDirName + "-4";
}
String args[] = {
- "-d", outputDirName, "-sourcepath", SRC_DIR,
- "-link", "file:///" + packagePath, "-package", "pkg2"
+ "-d", outDir,
+ "-sourcepath", testSrc,
+ "-link", "file:///" + packagePath,
+ "-package",
+ "pkg2"
};
System.out.println("packagePath: " + packagePath);
return args;
}
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLinkOption tester = new TestLinkOption();
- tester.run(ARGS1, TEST1, NEGATED_TEST1);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.runJavadoc(createArguments(true)); // with trailing slash
- tester.runJavadoc(createArguments(false)); // without trailing slash
- tester.printSummary();
- if (tester.getWarningOutput().contains("warning - Error fetching URL")) {
- throw new Error("URL rejected ?");
- }
- tester.printSummary();
- }
}
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestNewLineInLink.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestNewLineInLink.java Fri May 16 14:35:37 2014 -0700
@@ -27,32 +27,27 @@
* @summary Make sure that a new line may act as a separator between
* link and label.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestNewLineInLink
* @run main TestNewLineInLink
*/
public class TestNewLineInLink extends JavadocTester {
- private static final String[][] NEGATED_TEST =
- new String[][] {
- {ERROR_OUTPUT,
- "illegal character"}
- };
+ public static void main(String... args) throws Exception {
+ TestNewLineInLink tester = new TestNewLineInLink();
+ tester.runTests();
+ }
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api",
- SRC_DIR, "testNewLineInLink"};
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api", testSrc,
+ "testNewLineInLink");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNewLineInLink tester = new TestNewLineInLink();
- tester.run(ARGS, new String[][] {}, NEGATED_TEST);
- tester.printSummary();
+ checkOutput(Output.ERROR, false,
+ "illegal character");
}
}
--- a/langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java Fri May 16 14:35:37 2014 -0700
@@ -27,53 +27,46 @@
* @summary Make sure that you can link from one member to another using
* non-qualified name, furthermore, ensure the right one is linked.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestLinkTaglet
* @run main TestLinkTaglet
*/
public class TestLinkTaglet extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
- "/checkPkg/B.java"
- };
+ public static void main(String... args) throws Exception {
+ TestLinkTaglet tester = new TestLinkTaglet();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", testSrc("checkPkg/B.java"));
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/C.html",
- "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
- " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
- " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
- " Qualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n" +
- " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
- " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
- },
- { "pkg/C.InnerC.html",
- "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n" +
- " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n" +
- " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>"
- },
- { "pkg/C.InnerC2.html",
- "<dl>\n" +
- "<dt>Enclosing class:</dt>\n" +
- "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>\n" +
- "</dl>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- {WARNING_OUTPUT, "Tag @see: reference not found: A"},
- };
+ checkOutput("pkg/C.html", true,
+ "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+ + " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+ + " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n"
+ + " Qualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n"
+ + " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n"
+ + " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(InnerC, InnerC2)</code></a>.<br/>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLinkTaglet tester = new TestLinkTaglet();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/C.InnerC.html", true,
+ "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n"
+ + " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n"
+ + " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>");
+
+ checkOutput("pkg/C.InnerC2.html", true,
+ "<dl>\n"
+ + "<dt>Enclosing class:</dt>\n"
+ + "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>\n"
+ + "</dl>");
+
+ checkOutput(Output.WARNING, false,
+ "Tag @see: reference not found: A");
}
}
--- a/langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java Fri May 16 14:35:37 2014 -0700
@@ -27,29 +27,28 @@
* @summary Test to make sure that there is a link with a proper anchor
* from a serializable class to serialized-form.html.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestLinkToSerialForm
* @run main TestLinkToSerialForm
*/
public class TestLinkToSerialForm extends JavadocTester {
- private static final String[][] TEST = {
- { "serialized-form.html", "<a name=\"pkg.C\">"},
- { "pkg/C.html", "<a href=\"../serialized-form.html#pkg.C\">"}
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
+ public static void main(String... args) throws Exception {
+ TestLinkToSerialForm tester = new TestLinkToSerialForm();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLinkToSerialForm tester = new TestLinkToSerialForm();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("serialized-form.html", true,
+ "<a name=\"pkg.C\">");
+ checkOutput("pkg/C.html", true,
+ "<a href=\"../serialized-form.html#pkg.C\">");
}
}
--- a/langtools/test/com/sun/javadoc/testLiteralCodeInPre/TestLiteralCodeInPre.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLiteralCodeInPre/TestLiteralCodeInPre.java Fri May 16 14:35:37 2014 -0700
@@ -25,73 +25,61 @@
* @test
* @bug 8002387 8014636
* @summary Improve rendered HTML formatting for {@code}
- * @library ../lib/
- * @build JavadocTester TestLiteralCodeInPre
+ * @library ../lib
+ * @build JavadocTester
* @run main TestLiteralCodeInPre
*/
public class TestLiteralCodeInPre extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-Xdoclint:none", "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestLiteralCodeInPre tester = new TestLiteralCodeInPre();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-Xdoclint:none",
+ "pkg");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/Test.html",
- "no_pre()</pre>\n" +
- "<div class=\"block\">abc<code>def</code>ghi</div>" },
- { "pkg/Test.html",
- "no_pre_extra_whitespace()</pre>\n" +
- "<div class=\"block\">abc<code>def </code>ghi</div>" },
- { "pkg/Test.html",
- "in_pre()</pre>\n" +
- "<div class=\"block\"><pre> abc<code> def </code>ghi</pre></div>" },
- { "pkg/Test.html",
- "pre_after_text()</pre>\n" +
- "<div class=\"block\">xyz <pre> abc<code> def </code>ghi</pre></div>" },
- { "pkg/Test.html",
- "after_pre()</pre>\n" +
- "<div class=\"block\">xyz <pre> pqr </pre> abc<code>def </code>ghi</div>" },
- { "pkg/Test.html",
- "back_in_pre()</pre>\n" +
- "<div class=\"block\">xyz <pre> pqr </pre> mno <pre> abc<code> def </code>ghi</pre></div>" },
- { "pkg/Test.html",
- "typical_usage_code()</pre>\n" +
- "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
- " Example: <pre><code>\n" +
- " line 1 <T> void m(T t) {\n" +
- " line 2 // do something with T\n" +
- " line 3 }\n" +
- " </code></pre>\n" +
- " and so it goes.</div>" },
- { "pkg/Test.html",
- "typical_usage_literal()</pre>\n" +
- "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
- " Example: <pre>\n" +
- " line 1 <T> void m(T t) {\n" +
- " line 2 // do something with T\n" +
- " line 3 }\n" +
- " </pre>\n" +
- " and so it goes.</div>" },
- { "pkg/Test.html",
- "recommended_usage_literal()</pre>\n" +
- "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
- " Example: <pre>\n" +
- " line 1 <T> void m(T t) {\n" +
- " line 2 // do something with T\n" +
- " line 3 } </pre>\n" +
- " and so it goes.</div>" }
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestLiteralCodeInPre tester = new TestLiteralCodeInPre();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/Test.html", true,
+ "no_pre()</pre>\n"
+ + "<div class=\"block\">abc<code>def</code>ghi</div>",
+ "no_pre_extra_whitespace()</pre>\n"
+ + "<div class=\"block\">abc<code>def </code>ghi</div>",
+ "in_pre()</pre>\n"
+ + "<div class=\"block\"><pre> abc<code> def </code>ghi</pre></div>",
+ "pre_after_text()</pre>\n"
+ + "<div class=\"block\">xyz <pre> abc<code> def </code>ghi</pre></div>",
+ "after_pre()</pre>\n"
+ + "<div class=\"block\">xyz <pre> pqr </pre> abc<code>def </code>ghi</div>",
+ "back_in_pre()</pre>\n"
+ + "<div class=\"block\">xyz <pre> pqr </pre> mno <pre> abc<code> def </code>ghi</pre></div>",
+ "typical_usage_code()</pre>\n"
+ + "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
+ + " Example: <pre><code>\n"
+ + " line 1 <T> void m(T t) {\n"
+ + " line 2 // do something with T\n"
+ + " line 3 }\n"
+ + " </code></pre>\n"
+ + " and so it goes.</div>",
+ "typical_usage_literal()</pre>\n"
+ + "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
+ + " Example: <pre>\n"
+ + " line 1 <T> void m(T t) {\n"
+ + " line 2 // do something with T\n"
+ + " line 3 }\n"
+ + " </pre>\n"
+ + " and so it goes.</div>",
+ "recommended_usage_literal()</pre>\n"
+ + "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
+ + " Example: <pre>\n"
+ + " line 1 <T> void m(T t) {\n"
+ + " line 2 // do something with T\n"
+ + " line 3 } </pre>\n"
+ + " and so it goes.</div>");
}
}
--- a/langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java Fri May 16 14:35:37 2014 -0700
@@ -27,83 +27,63 @@
* @summary Test to make sure that members are inherited properly in the Javadoc.
* Verify that inheritence labels are correct.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestMemberInheritence
* @run main TestMemberInheritence
*/
public class TestMemberInheritence extends JavadocTester {
- private static final String[][] TEST = {
- //Public field should be inherited
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.html#pubField\">"},
-
- //Public method should be inherited
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.html#pubMethod--\">"},
-
- //Public inner class should be inherited.
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
+ public static void main(String... args) throws Exception {
+ TestMemberInheritence tester = new TestMemberInheritence();
+ tester.runTests();
+ }
- //Protected field should be inherited
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.html#proField\">"},
-
- //Protected method should be inherited
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.html#proMethod--\">"},
-
- //Protected inner class should be inherited.
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
-
- // New labels as of 1.5.0
- { "pkg/SubClass.html",
- "Nested classes/interfaces inherited from class pkg." +
- "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>"},
- { "pkg/SubClass.html",
- "Nested classes/interfaces inherited from interface pkg." +
- "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>"},
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", "diamond", "inheritDist");
+ checkExit(Exit.OK);
- // Test overriding/implementing methods with generic parameters.
- { "pkg/BaseClass.html",
- "<dl>\n" +
- "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
- "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation-java.lang.Class-\">" +
- "getAnnotation</a></code> in interface <code>" +
- "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
- "BaseInterface</a></code></dd>\n" +
- "</dl>"},
-
- // Test diamond inheritence member summary (6256068)
- { "diamond/Z.html",
- "<code><a href=\"../diamond/A.html#aMethod--\">aMethod</a></code>"},
-
- // Test that doc is inherited from closed parent (6270645)
- { "inheritDist/C.html",
- "<div class=\"block\">m1-B</div>"},
+ checkOutput("pkg/SubClass.html", true,
+ // Public field should be inherited
+ "<a href=\"../pkg/BaseClass.html#pubField\">",
+ // Public method should be inherited
+ "<a href=\"../pkg/BaseClass.html#pubMethod--\">",
+ // Public inner class should be inherited.
+ "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">",
+ // Protected field should be inherited
+ "<a href=\"../pkg/BaseClass.html#proField\">",
+ // Protected method should be inherited
+ "<a href=\"../pkg/BaseClass.html#proMethod--\">",
+ // Protected inner class should be inherited.
+ "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">",
+ // New labels as of 1.5.0
+ "Nested classes/interfaces inherited from class pkg."
+ + "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>",
+ "Nested classes/interfaces inherited from interface pkg."
+ + "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>");
- };
+ checkOutput("pkg/BaseClass.html", true,
+ // Test overriding/implementing methods with generic parameters.
+ "<dl>\n"
+ + "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation-java.lang.Class-\">"
+ + "getAnnotation</a></code> in interface <code>"
+ + "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">"
+ + "BaseInterface</a></code></dd>\n"
+ + "</dl>");
- private static final String[][] NEGATED_TEST = {
- { "pkg/SubClass.html",
- "<a href=\"../pkg/BaseClass.html#staticMethod--\">staticMethod</a></code>"},
- };
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "diamond",
- "inheritDist"};
+ checkOutput("diamond/Z.html", true,
+ // Test diamond inheritence member summary (6256068)
+ "<code><a href=\"../diamond/A.html#aMethod--\">aMethod</a></code>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestMemberInheritence tester = new TestMemberInheritence();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("inheritDist/C.html", true,
+ // Test that doc is inherited from closed parent (6270645)
+ "<div class=\"block\">m1-B</div>");
+
+ checkOutput("pkg/SubClass.html", false,
+ "<a href=\"../pkg/BaseClass.html#staticMethod--\">staticMethod</a></code>");
}
}
--- a/langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java Fri May 16 14:35:37 2014 -0700
@@ -28,50 +28,40 @@
* type than the method in the child class. Make sure the
* documentation is inherited but the return type isn't.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestMemberSummary
* @run main TestMemberSummary
*/
public class TestMemberSummary extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg","pkg2"
- };
+ public static void main(String... args) throws Exception {
+ TestMemberSummary tester = new TestMemberSummary();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- // Check return type in member summary.
- { "pkg/PublicChild.html",
- "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>\n" +
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../pkg/PublicChild.html#returnTypeTest--\">" +
- "returnTypeTest</a></span>()</code>"
- },
- // Check return type in member detail.
- { "pkg/PublicChild.html",
- "<pre>public <a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
- "PublicChild</a> returnTypeTest()</pre>"
- },
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg","pkg2");
+ checkExit(Exit.OK);
- // Legacy anchor dimensions (6290760)
- { "pkg2/A.html",
- "<a name=\"f-java.lang.Object:A-\">\n" +
- "<!-- -->\n" +
- "</a><a name=\"f-T:A-\">\n" +
- "<!-- -->\n" +
- "</a>"
- },
- };
+ checkOutput("pkg/PublicChild.html", true,
+ // Check return type in member summary.
+ "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>\n"
+ + "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../pkg/PublicChild.html#returnTypeTest--\">"
+ + "returnTypeTest</a></span>()</code>",
+ // Check return type in member detail.
+ "<pre>public <a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">"
+ + "PublicChild</a> returnTypeTest()</pre>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestMemberSummary tester = new TestMemberSummary();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ // Legacy anchor dimensions (6290760)
+ checkOutput("pkg2/A.html", true,
+ "<a name=\"f-java.lang.Object:A-\">\n"
+ + "<!-- -->\n"
+ + "</a><a name=\"f-T:A-\">\n"
+ + "<!-- -->\n"
+ + "</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testMethodTypes/TestMethodTypes.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMethodTypes/TestMethodTypes.java Fri May 16 14:35:37 2014 -0700
@@ -26,97 +26,74 @@
* @bug 8002304 8024096
* @summary Test for various method types in the method summary table
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestMethodTypes
+ * @library ../lib
+ * @build JavadocTester
* @run main TestMethodTypes
*/
public class TestMethodTypes extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
- };
+ public static void main(String... args) throws Exception {
+ TestMethodTypes tester = new TestMethodTypes();
+ tester.runTests();
+ }
- private static final String[][] TEST = {
- { "pkg1/A.html",
- "var methods = {"
- },
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
- { "pkg1/A.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
- "Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">" +
- "Static Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
- "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">" +
- "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">" +
- "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "</caption>"
- },
-
- { "pkg1/A.html",
- "<tr id=\"i0\" class=\"altColor\">"
- },
-
- { "pkg1/B.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
- "Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
- "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">" +
- "Abstract Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "</caption>"
- },
-
- { "pkg1/D.html",
- "var methods = {"
- },
+ checkOutput("pkg1/A.html", true,
+ "var methods = {",
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
+ + "Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
+ + "Static Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
+ + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
+ + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
+ + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "</caption>",
+ "<tr id=\"i0\" class=\"altColor\">");
- { "pkg1/D.html",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
- "Methods</span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
- "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">" +
- "Abstract Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">" +
- "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">" +
- "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>" +
- "</caption>"
- },
+ checkOutput("pkg1/B.html", true,
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
+ + "Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
+ + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
+ + "Abstract Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "</caption>");
- { "pkg1/D.html",
- "<tr id=\"i0\" class=\"altColor\">"
- },
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg1/A.html",
- "<caption><span>Methods</span><span class=\"tabEnd\"> </span>" +
- "</caption>"
- },
-
- { "pkg1/B.html",
- "<caption><span>Methods</span><span class=\"tabEnd\"> </span>" +
- "</caption>"
- },
+ checkOutput("pkg1/D.html", true,
+ "var methods = {",
+ "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
+ + "Methods</span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
+ + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
+ + "Abstract Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
+ + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
+ + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
+ + "</caption>",
+ "<tr id=\"i0\" class=\"altColor\">");
- { "pkg1/D.html",
- "<caption><span>Methods</span><span class=\"tabEnd\"> </span>" +
- "</caption>"
- },
- };
+ checkOutput("pkg1/A.html", false,
+ "<caption><span>Methods</span><span class=\"tabEnd\"> </span>"
+ + "</caption>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestMethodTypes tester = new TestMethodTypes();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg1/B.html", false,
+ "<caption><span>Methods</span><span class=\"tabEnd\"> </span>"
+ + "</caption>");
+
+ checkOutput("pkg1/D.html", false,
+ "<caption><span>Methods</span><span class=\"tabEnd\"> </span>"
+ + "</caption>");
}
}
--- a/langtools/test/com/sun/javadoc/testModifier/TestModifier.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testModifier/TestModifier.java Fri May 16 14:35:37 2014 -0700
@@ -26,29 +26,25 @@
* @bug 4210388
* @summary Javadoc declares interfaces to be "abstract".
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build ModifierAbstract
* @build JavadocTester
- * @build TestModifier
* @run main TestModifier
*/
public class TestModifier extends JavadocTester {
- private static final String[] ARGS =
- new String[] {
- "-sourcepath", SRC_DIR,
- "-docletpath", SRC_DIR, "-doclet", "ModifierAbstract",
- SRC_DIR + "/Interface.java", SRC_DIR + "/Test.java"};
+ public static void main(String... args) throws Exception {
+ TestModifier tester = new TestModifier();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestModifier tester = new TestModifier();
- if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
- throw new Error("Javadoc error occured during execution.");
- }
+ @Test
+ void test() {
+ javadoc("-sourcepath", testSrc,
+ "-docletpath", testSrc,
+ "-doclet", "ModifierAbstract",
+ testSrc("Interface.java"), testSrc("Test.java"));
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/testNavigation/TestNavigation.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNavigation/TestNavigation.java Fri May 16 14:35:37 2014 -0700
@@ -27,49 +27,44 @@
* @summary Make sure the Next/Prev Class links iterate through all types.
* Make sure the navagation is 2 columns, not 3.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestNavigation
+ * @library ../lib
+ * @build JavadocTester
* @run main TestNavigation
*/
public class TestNavigation extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestNavigation tester = new TestNavigation();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/A.html", true,
+ "<li>Prev Class</li>",
+ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Next Class</span></a>");
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/A.html", "<li>Prev Class</li>"},
- { "pkg/A.html",
- "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Next Class</span></a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Next Class</span></a>"},
- { "pkg/E.html",
- "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>"},
- { "pkg/E.html",
- "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"typeNameLink\">Next Class</span></a>"},
- { "pkg/I.html",
- "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>"},
- { "pkg/I.html", "<li>Next Class</li>"},
- // Test for 4664607
- { "pkg/I.html",
- "<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n" +
- "<a name=\"navbar.top.firstrow\">\n" +
- "<!-- -->\n" +
- "</a>"}
- };
+ checkOutput("pkg/C.html", true,
+ "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>",
+ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Next Class</span></a>");
+
+ checkOutput("pkg/E.html", true,
+ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>",
+ "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"typeNameLink\">Next Class</span></a>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNavigation tester = new TestNavigation();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/I.html", true,
+ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Prev Class</span></a>",
+ "<li>Next Class</li>",
+ // Test for 4664607
+ "<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n"
+ + "<a name=\"navbar.top.firstrow\">\n"
+ + "<!-- -->\n"
+ + "</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java Fri May 16 14:35:37 2014 -0700
@@ -26,35 +26,28 @@
* @bug 6758050 8025633
* @summary Test HTML output for nested generic types.
* @author bpatel
- * @library ../lib/
- * @build JavadocTester TestNestedGenerics
+ * @library ../lib
+ * @build JavadocTester
* @run main TestNestedGenerics
*/
public class TestNestedGenerics extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[]{
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestNestedGenerics tester = new TestNestedGenerics();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/NestedGenerics.html",
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/NestedGenerics.html", true,
"<div class=\"block\">Contains <a " +
"href=\"../pkg/NestedGenerics.html#foo-java.util.Map-\"><code>foo" +
- "(java.util.Map<A, java.util.Map<A, A>>)</code></a></div>"
- }
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNestedGenerics tester = new TestNestedGenerics();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ "(java.util.Map<A, java.util.Map<A, A>>)</code></a></div>");
}
}
--- a/langtools/test/com/sun/javadoc/testNestedInlineTag/TestNestedInlineTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNestedInlineTag/TestNestedInlineTag.java Fri May 16 14:35:37 2014 -0700
@@ -25,12 +25,11 @@
* @test
* @summary Test for nested inline tags. *
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @build testtaglets.UnderlineTaglet
* @build testtaglets.BoldTaglet
* @build testtaglets.GreenTaglet
- * @build TestNestedInlineTag
* @run main TestNestedInlineTag
*/
@@ -38,7 +37,6 @@
* This should be green, underlined and bold (Class): {@underline {@bold {@green My test}}} .
*/
public class TestNestedInlineTag extends JavadocTester {
-
/**
* This should be green, underlined and bold (Field): {@underline {@bold {@green My test}}} .
*/
@@ -54,44 +52,35 @@
*/
public void method(){}
- private static final String[][] TEST = {
- //Test nested inline tag in class description.
- { "TestNestedInlineTag.html",
- "This should be green, underlined and bold (Class): <u><b><font color=\"green\">My test</font></b></u>"
- },
-
- //Test nested inline tag in field description.
- { "TestNestedInlineTag.html",
- "This should be green, underlined and bold (Field): <u><b><font color=\"green\">My test</font></b></u>"
- },
-
- //Test nested inline tag in constructor description.
- { "TestNestedInlineTag.html",
- "This should be green, underlined and bold (Constructor): <u><b><font color=\"green\">My test</font></b></u>"
- },
-
- //Test nested inline tag in method description.
- { "TestNestedInlineTag.html",
- "This should be green, underlined and bold (Method): <u><b><font color=\"green\">My test</font></b></u>"
- }
- };
-
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-taglet", "testtaglets.UnderlineTaglet",
- "-taglet", "testtaglets.BoldTaglet",
- "-taglet", "testtaglets.GreenTaglet",
- SRC_DIR + "/TestNestedInlineTag.java"
- };
-
/**
* The entry point of the test.
* @param args the array of command line arguments.
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestNestedInlineTag tester = new TestNestedInlineTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-taglet", "testtaglets.UnderlineTaglet",
+ "-taglet", "testtaglets.BoldTaglet",
+ "-taglet", "testtaglets.GreenTaglet",
+ testSrc("TestNestedInlineTag.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("TestNestedInlineTag.html", true,
+ //Test nested inline tag in class description.
+ "This should be green, underlined and bold (Class): <u><b><font color=\"green\">My test</font></b></u>",
+ //Test nested inline tag in field description.
+ "This should be green, underlined and bold (Field): <u><b><font color=\"green\">My test</font></b></u>",
+ //Test nested inline tag in constructor description.
+ "This should be green, underlined and bold (Constructor): <u><b><font color=\"green\">My test</font></b></u>",
+ //Test nested inline tag in method description.
+ "This should be green, underlined and bold (Method): <u><b><font color=\"green\">My test</font></b></u>"
+ );
}
}
--- a/langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java Fri May 16 14:35:37 2014 -0700
@@ -28,738 +28,612 @@
* language features. Check the output to ensure that the new
* language features are properly documented.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestNewLanguageFeatures
+ * @library ../lib
+ * @build JavadocTester
* @run main TestNewLanguageFeatures
*/
public class TestNewLanguageFeatures extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR,
- "pkg", "pkg1", "pkg2"
- };
+ public static void main(String... args) throws Exception {
+ TestNewLanguageFeatures tester = new TestNewLanguageFeatures();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ "-use", "-sourcepath",
+ testSrc,
+ "pkg", "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ checkEnums();
+ checkTypeParameters();
+ checkVarArgs();
+ checkAnnotationTypeUsage();
+ }
- //Input for string search tests.
- private static final String[][] TEST =
- {
- //=================================
- // ENUM TESTING
- //=================================
- //Make sure enum header is correct.
- { "pkg/Coin.html", "Enum Coin</h2>"},
- //Make sure enum signature is correct.
- { "pkg/Coin.html", "<pre>public enum " +
- "<span class=\"typeNameLabel\">Coin</span>\n" +
- "extends java.lang.Enum<<a href=\"../pkg/Coin.html\" " +
- "title=\"enum in pkg\">Coin</a>></pre>"
- },
- //Check for enum constant section
- { "pkg/Coin.html", "<caption><span>Enum Constants" +
- "</span><span class=\"tabEnd\"> </span></caption>"},
- //Detail for enum constant
- { "pkg/Coin.html",
- "<span class=\"memberNameLink\"><a href=\"../pkg/Coin.html#Dime\">Dime</a></span>"},
- //Automatically insert documentation for values() and valueOf().
- { "pkg/Coin.html",
- "Returns an array containing the constants of this enum type,"},
- { "pkg/Coin.html",
- "Returns the enum constant of this type with the specified name"},
- { "pkg/Coin.html", "for (Coin c : Coin.values())"},
- { "pkg/Coin.html",
- "Overloaded valueOf() method has correct documentation."},
- { "pkg/Coin.html",
- "Overloaded values method has correct documentation."},
+ //=================================
+ // ENUM TESTING
+ //=================================
+ void checkEnums() {
+ checkOutput("pkg/Coin.html", true,
+ // Make sure enum header is correct.
+ "Enum Coin</h2>",
+ // Make sure enum signature is correct.
+ "<pre>public enum "
+ + "<span class=\"typeNameLabel\">Coin</span>\n"
+ + "extends java.lang.Enum<<a href=\"../pkg/Coin.html\" "
+ + "title=\"enum in pkg\">Coin</a>></pre>",
+ // Check for enum constant section
+ "<caption><span>Enum Constants"
+ + "</span><span class=\"tabEnd\"> </span></caption>",
+ // Detail for enum constant
+ "<span class=\"memberNameLink\"><a href=\"../pkg/Coin.html#Dime\">Dime</a></span>",
+ // Automatically insert documentation for values() and valueOf().
+ "Returns an array containing the constants of this enum type,",
+ "Returns the enum constant of this type with the specified name",
+ "for (Coin c : Coin.values())",
+ "Overloaded valueOf() method has correct documentation.",
+ "Overloaded values method has correct documentation.");
+
+ // NO constructor section
+ checkOutput("pkg/Coin.html", false,
+ "<h3>Constructor Summary</h3>");
+ }
+
+ //=================================
+ // TYPE PARAMETER TESTING
+ //=================================
- //=================================
- // TYPE PARAMETER TESTING
- //=================================
- //Make sure the header is correct.
- { "pkg/TypeParameters.html",
- "Class TypeParameters<E></h2>"},
- //Check class type parameters section.
- { "pkg/TypeParameters.html",
- "<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n" +
- "<dd><code>E</code> - " +
- "the type parameter for this class."},
- //Type parameters in @see/@link
- { "pkg/TypeParameters.html",
- "<dl>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
- "<dd>" +
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "<code>TypeParameters</code></a></dd>\n" +
- "</dl>"},
- //Method that uses class type parameter.
- { "pkg/TypeParameters.html",
- "(<a href=\"../pkg/TypeParameters.html\" title=\"type " +
- "parameter in TypeParameters\">E</a> param)"},
- //Method type parameter section.
- { "pkg/TypeParameters.html",
- "<span class=\"paramLabel\">Type Parameters:</span></dt>\n" +
- "<dd><code>T</code> - This is the first " +
- "type parameter.</dd>\n" +
- "<dd><code>V</code> - This is the second type " +
- "parameter."},
- //Signature of method with type parameters
- { "pkg/TypeParameters.html",
- "public <T extends java.util.List,V> " +
- "java.lang.String[] methodThatHasTypeParameters"},
- //Wildcard testing.
- { "pkg/Wildcards.html",
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "TypeParameters</a><? super java.lang.String> a"},
- { "pkg/Wildcards.html",
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "TypeParameters</a><? extends java.lang.StringBuffer> b"},
- { "pkg/Wildcards.html",
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "TypeParameters</a> c"},
- //Bad type parameter warnings.
- {WARNING_OUTPUT, "warning - @param argument " +
- "\"<BadClassTypeParam>\" is not a type parameter name."},
- {WARNING_OUTPUT, "warning - @param argument " +
- "\"<BadMethodTypeParam>\" is not a type parameter name."},
-
- //Signature of subclass that has type parameters.
- { "pkg/TypeParameterSubClass.html",
- "<pre>public class <span class=\"typeNameLabel\">TypeParameterSubClass<T extends " +
- "java.lang.String></span>\n" +
- "extends " +
- "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">" +
- "TypeParameterSuperClass</a><T></pre>"},
+ void checkTypeParameters() {
+ checkOutput("pkg/TypeParameters.html", true,
+ // Make sure the header is correct.
+ "Class TypeParameters<E></h2>",
+ // Check class type parameters section.
+ "<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n"
+ + "<dd><code>E</code> - "
+ + "the type parameter for this class.",
+ // Type parameters in @see/@link
+ "<dl>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span></dt>\n"
+ + "<dd>"
+ + "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "<code>TypeParameters</code></a></dd>\n"
+ + "</dl>",
+ // Method that uses class type parameter.
+ "(<a href=\"../pkg/TypeParameters.html\" title=\"type "
+ + "parameter in TypeParameters\">E</a> param)",
+ // Method type parameter section.
+ "<span class=\"paramLabel\">Type Parameters:</span></dt>\n"
+ + "<dd><code>T</code> - This is the first "
+ + "type parameter.</dd>\n"
+ + "<dd><code>V</code> - This is the second type "
+ + "parameter.",
+ // Signature of method with type parameters
+ "public <T extends java.util.List,V> "
+ + "java.lang.String[] methodThatHasTypeParameters");
- //Interface generic parameter substitution
- //Signature of subclass that has type parameters.
- { "pkg/TypeParameters.html",
- "<dl>\n" +
- "<dt>All Implemented Interfaces:</dt>\n" +
- "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
- "SubInterface</a><E>, <a href=\"../pkg/SuperInterface.html\" " +
- "title=\"interface in pkg\">SuperInterface</a><E></dd>\n" +
- "</dl>"},
- { "pkg/SuperInterface.html",
- "<dl>\n" +
- "<dt>All Known Subinterfaces:</dt>\n" +
- "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
- "SubInterface</a><V></dd>\n" +
- "</dl>"},
- { "pkg/SubInterface.html",
- "<dl>\n" +
- "<dt>All Superinterfaces:</dt>\n" +
- "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">" +
- "SuperInterface</a><V></dd>\n" +
- "</dl>"},
+ checkOutput("pkg/Wildcards.html", true,
+ // Wildcard testing.
+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "TypeParameters</a><? super java.lang.String> a",
+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "TypeParameters</a><? extends java.lang.StringBuffer> b",
+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "TypeParameters</a> c");
- //=================================
- // VAR ARG TESTING
- //=================================
- { "pkg/VarArgs.html", "(int... i)"},
- { "pkg/VarArgs.html", "(int[][]... i)"},
- { "pkg/VarArgs.html", "-int:A...-"},
- { "pkg/VarArgs.html",
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "TypeParameters</a>... t"},
+ checkOutput(Output.WARNING, true,
+ // Bad type parameter warnings.
+ "warning - @param argument "
+ + "\"<BadClassTypeParam>\" is not a type parameter name.",
+ "warning - @param argument "
+ + "\"<BadMethodTypeParam>\" is not a type parameter name.");
- //=================================
- // ANNOTATION TYPE TESTING
- //=================================
- //Make sure the summary links are correct.
- { "pkg/AnnotationType.html",
- "<li>Summary: </li>\n" +
- "<li>Field | </li>\n" +
- "<li><a href=\"#annotation.type.required.element.summary\">" +
- "Required</a> | </li>\n" +
- "<li>" +
- "<a href=\"#annotation.type.optional.element.summary\">Optional</a></li>"},
- //Make sure the detail links are correct.
- { "pkg/AnnotationType.html",
- "<li>Detail: </li>\n" +
- "<li>Field | </li>\n" +
- "<li><a href=\"#annotation.type.element.detail\">Element</a></li>"},
- //Make sure the heading is correct.
- { "pkg/AnnotationType.html",
- "Annotation Type AnnotationType</h2>"},
- //Make sure the signature is correct.
- { "pkg/AnnotationType.html",
- "public @interface <span class=\"memberNameLabel\">AnnotationType</span>"},
- //Make sure member summary headings are correct.
- { "pkg/AnnotationType.html",
- "<h3>Required Element Summary</h3>"},
- { "pkg/AnnotationType.html",
- "<h3>Optional Element Summary</h3>"},
- //Make sure element detail heading is correct
- { "pkg/AnnotationType.html",
- "Element Detail"},
- //Make sure default annotation type value is printed when necessary.
- { "pkg/AnnotationType.html",
- "<dl>\n" +
- "<dt>Default:</dt>\n" +
- "<dd>\"unknown\"</dd>\n" +
- "</dl>"},
+ // Signature of subclass that has type parameters.
+ checkOutput("pkg/TypeParameterSubClass.html", true,
+ "<pre>public class <span class=\"typeNameLabel\">TypeParameterSubClass<T extends "
+ + "java.lang.String></span>\n"
+ + "extends "
+ + "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">"
+ + "TypeParameterSuperClass</a><T></pre>");
- //=================================
- // ANNOTATION TYPE USAGE TESTING
- //=================================
+ // Interface generic parameter substitution
+ // Signature of subclass that has type parameters.
+ checkOutput("pkg/TypeParameters.html", true,
+ "<dl>\n"
+ + "<dt>All Implemented Interfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">"
+ + "SubInterface</a><E>, <a href=\"../pkg/SuperInterface.html\" "
+ + "title=\"interface in pkg\">SuperInterface</a><E></dd>\n"
+ + "</dl>");
- //PACKAGE
- { "pkg/package-summary.html",
- "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"Package Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)"},
-
- //CLASS
- { "pkg/AnnotationTypeUsage.html",
- "<pre><a href=\"../pkg/AnnotationType.html\" " +
- "title=\"annotation in pkg\">@AnnotationType</a>(" +
- "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
- "=\"Class Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required--\">" +
- "required</a>=1994)\n" +
- "public class <span class=\"typeNameLabel\">" +
- "AnnotationTypeUsage</span>\n" +
- "extends java.lang.Object</pre>"},
+ checkOutput("pkg/SuperInterface.html", true,
+ "<dl>\n"
+ + "<dt>All Known Subinterfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">"
+ + "SubInterface</a><V></dd>\n"
+ + "</dl>");
+ checkOutput("pkg/SubInterface.html", true,
+ "<dl>\n"
+ + "<dt>All Superinterfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">"
+ + "SuperInterface</a><V></dd>\n"
+ + "</dl>");
- //FIELD
- { "pkg/AnnotationTypeUsage.html",
- "<pre><a href=\"../pkg/AnnotationType.html\" " +
- "title=\"annotation in pkg\">@AnnotationType</a>(" +
- "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
- "=\"Field Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required--\">" +
- "required</a>=1994)\n" +
- "public int field</pre>"},
-
- //CONSTRUCTOR
- { "pkg/AnnotationTypeUsage.html",
- "<pre><a href=\"../pkg/AnnotationType.html\" " +
- "title=\"annotation in pkg\">@AnnotationType</a>(" +
- "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
- "=\"Constructor Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required--\">" +
- "required</a>=1994)\n" +
- "public AnnotationTypeUsage()</pre>"},
+ //==============================================================
+ // Handle multiple bounds.
+ //==============================================================
+ checkOutput("pkg/MultiTypeParameters.html", true,
+ "public <T extends java.lang.Number & java.lang.Runnable> T foo(T t)");
- //METHOD
- { "pkg/AnnotationTypeUsage.html",
- "<pre><a href=\"../pkg/AnnotationType.html\" " +
- "title=\"annotation in pkg\">@AnnotationType</a>(" +
- "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
- "=\"Method Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required--\">" +
- "required</a>=1994)\n" +
- "public void method()</pre>"},
-
- //METHOD PARAMS
- { "pkg/AnnotationTypeUsage.html",
- "<pre>public void methodWithParams(" +
- "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
- "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">" +
- "optional</a>=\"Parameter Annotation\",<a " +
- "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n" +
- " int documented,\n" +
- " int undocmented)</pre>"},
+ //==============================================================
+ // Test Class-Use Documentation for Type Parameters.
+ //==============================================================
+ // ClassUseTest1: <T extends Foo & Foo2>
+ checkOutput("pkg2/class-use/Foo.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+ + "Foo</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" "
+ + "title=\"class in pkg2\">ClassUseTest1</a><T extends "
+ + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo"
+ + "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">"
+ + "Foo2</a>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo.html\" title=\"class in "
+ + "pkg2\">Foo</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest1."
+ + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+ + "ClassUseTest1.html#method-T-\">method</a></span>"
+ + "(T t)</code> </td>",
+ "<caption><span>Fields in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+ + "Foo</a></span><span class=\"tabEnd\"> </span></caption>",
+ "td class=\"colFirst\"><code><a href=\"../../pkg2/"
+ + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
+ + "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\""
+ + ">Foo</a>></code></td>"
+ );
- //CONSTRUCTOR PARAMS
- { "pkg/AnnotationTypeUsage.html",
- "<pre>public AnnotationTypeUsage(<a " +
- "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
- "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">" +
- "optional</a>=\"Constructor Param Annotation\",<a " +
- "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n" +
- " int documented,\n" +
- " int undocmented)</pre>"},
-
- //=================================
- // ANNOTATION TYPE USAGE TESTING (All Different Types).
- //=================================
-
- //Integer
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,"},
-
- //Double
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,"},
-
- //Boolean
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#b--\">b</a>=true,"},
+ checkOutput("pkg2/class-use/ParamTest.html", true,
+ "<caption><span>Fields in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> declared as <a href=\"../"
+ + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
+ + "</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colFirst\"><code><a href=\"../../pkg2/"
+ + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a><<a "
+ + "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a"
+ + ">></code></td>"
+ );
- //String
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#s--\">s</a>=\"sigh\","},
-
- //Class
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#c--\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,"},
-
- //Bounded Class
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#w--\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,"},
-
- //Enum
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#e--\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,"},
-
- //Annotation Type
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#a--\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994),"},
-
- //String Array
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#sa--\">sa</a>={\"up\",\"down\"},"},
-
- //Primitive
- { "pkg1/B.html",
- "<a href=\"../pkg1/A.html#primitiveClassTest--\">primitiveClassTest</a>=boolean.class,"},
-
- //XXX: Add array test case after this if fixed:
- //5020899: Incorrect internal representation of class-valued annotation elements
-
- //Make sure that annotations are surrounded by <pre> and </pre>
- { "pkg1/B.html",
- "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>"},
- { "pkg1/B.html",
- "public interface <span class=\"typeNameLabel\">B</span></pre>"},
-
+ checkOutput("pkg2/class-use/Foo2.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo2.html\" title=\"interface "
+ + "in pkg2\">Foo2</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" "
+ + "title=\"class in pkg2\">ClassUseTest1</a><T extends "
+ + "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo"
+ + "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">"
+ + "Foo2</a>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo2.html\" title=\"interface "
+ + "in pkg2\">Foo2</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">"
+ + "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../../"
+ + "pkg2/ClassUseTest1.html#method-T-\">method</a></span>"
+ + "(T t)</code> </td>"
+ );
- //==============================================================
- // Handle multiple bounds.
- //==============================================================
- { "pkg/MultiTypeParameters.html",
- "public <T extends java.lang.Number & java.lang.Runnable> T foo(T t)"},
-
- //==============================================================
- // Test Class-Use Documenation for Type Parameters.
- //==============================================================
-
- //ClassUseTest1: <T extends Foo & Foo2>
- { "pkg2/class-use/Foo.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
- "Foo</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " +
- "title=\"class in pkg2\">ClassUseTest1</a><T extends " +
- "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" +
- "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" +
- "Foo2</a>></span></code> </td>"
- },
- { "pkg2/class-use/Foo.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo.html\" title=\"class in " +
- "pkg2\">Foo</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest1." +
- "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
- "ClassUseTest1.html#method-T-\">method</a></span>" +
- "(T t)</code> </td>"
- },
- { "pkg2/class-use/Foo.html",
- "<caption><span>Fields in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
- "Foo</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo.html",
- "td class=\"colFirst\"><code><a href=\"../../pkg2/" +
- "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
- "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\"" +
- ">Foo</a>></code></td>"
- },
+ // ClassUseTest2: <T extends ParamTest<Foo3>>
+ checkOutput("pkg2/class-use/ParamTest.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+ + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" "
+ + "title=\"class in pkg2\">ClassUseTest2</a><T extends "
+ + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">"
+ + "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+ + "Foo3</a>>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+ + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2."
+ + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+ + "ClassUseTest2.html#method-T-\">method</a></span>"
+ + "(T t)</code> </td>",
+ "<caption><span>Fields in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> declared as <a href=\"../"
+ + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
+ + "</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colFirst\"><code><a href=\"../../pkg2/"
+ + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
+ + "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">"
+ + "Foo</a>></code></td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/ParamTest.html\" title=\"class "
+ + "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colFirst\"><code><T extends <a href=\"../"
+ + "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest"
+ + "</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in "
+ + "pkg2\">Foo3</a>>><br><a href=\"../../pkg2/"
+ + "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>"
+ + "<<a href=\"../../pkg2/Foo3.html\" title=\"class in "
+ + "pkg2\">Foo3</a>></code></td>"
+ );
- { "pkg2/class-use/ParamTest.html",
- "<caption><span>Fields in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> declared as <a href=\"../" +
- "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
- "</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
- "ParamTest.html\" title=\"class in pkg2\">ParamTest</a><<a " +
- "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a" +
- ">></code></td>"
- },
+ checkOutput("pkg2/class-use/Foo3.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+ + "Foo3</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" "
+ + "title=\"class in pkg2\">ClassUseTest2</a><T extends "
+ + "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">"
+ + "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">"
+ + "Foo3</a>>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo3.html\" title=\"class in "
+ + "pkg2\">Foo3</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2."
+ + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/"
+ + "ClassUseTest2.html#method-T-\">method</a></span>"
+ + "(T t)</code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> that return types with "
+ + "arguments of type <a href=\"../../pkg2/Foo3.html\" title"
+ + "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colFirst\"><code><T extends <a href=\"../../"
+ + "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a><"
+ + "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3"
+ + "</a>>><br><a href=\"../../pkg2/ParamTest.html\" "
+ + "title=\"class in pkg2\">ParamTest</a><<a href=\"../../pkg2/"
+ + "Foo3.html\" title=\"class in pkg2\">Foo3</a>></code></td>"
+ );
- { "pkg2/class-use/Foo2.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
- "in pkg2\">Foo2</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg2/class-use/Foo2.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " +
- "title=\"class in pkg2\">ClassUseTest1</a><T extends " +
- "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" +
- "</a> & <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" +
- "Foo2</a>></span></code> </td>"
- },
- { "pkg2/class-use/Foo2.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
- "in pkg2\">Foo2</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg2/class-use/Foo2.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">" +
- "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../../" +
- "pkg2/ClassUseTest1.html#method-T-\">method</a></span>" +
- "(T t)</code> </td>"
- },
+ // ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
+ checkOutput("pkg2/class-use/ParamTest2.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class "
+ + "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" "
+ + "title=\"class in pkg2\">ClassUseTest3</a><T extends "
+ + "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+ + "ParamTest2</a><java.util.List<? extends "
+ + "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">"
+ + "Foo4</a>>>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class "
+ + "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3"
+ + ".</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+ + "html#method-T-\">method</a></span>(T t)</code> </td>",
+ "<td class=\"colFirst\"><code><T extends <a href=\"../"
+ + "../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+ + "ParamTest2</a><java.util.List<? extends <a href=\".."
+ + "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>>"
+ + ">><br><a href=\"../../pkg2/ParamTest2.html\" "
+ + "title=\"class in pkg2\">ParamTest2</a><java.util.List"
+ + "<? extends <a href=\"../../pkg2/Foo4.html\" title=\""
+ + "class in pkg2\">Foo4</a>>></code></td>"
+ );
- //ClassUseTest2: <T extends ParamTest<Foo3>>
- { "pkg2/class-use/ParamTest.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
- "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " +
- "title=\"class in pkg2\">ClassUseTest2</a><T extends " +
- "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" +
- "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
- "Foo3</a>>></span></code> </td>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
- "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." +
- "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
- "ClassUseTest2.html#method-T-\">method</a></span>" +
- "(T t)</code> </td>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<caption><span>Fields in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> declared as <a href=\"../" +
- "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
- "</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
- "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
- "<<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
- "Foo</a>></code></td>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
- "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/ParamTest.html",
- "<td class=\"colFirst\"><code><T extends <a href=\"../" +
- "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
- "</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
- "pkg2\">Foo3</a>>><br><a href=\"../../pkg2/" +
- "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
- "<<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
- "pkg2\">Foo3</a>></code></td>"
- },
+ checkOutput("pkg2/class-use/Foo4.html", true,
+ "<caption><span>Classes in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+ + "pkg2\">Foo4</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" "
+ + "title=\"class in pkg2\">ClassUseTest3</a><T extends "
+ + "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+ + "ParamTest2</a><java.util.List<? extends "
+ + "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">"
+ + "Foo4</a>>>></span></code> </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type parameters of "
+ + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+ + "pkg2\">Foo4</a></span><span class=\"tabEnd\"> </span></caption>",
+ "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3."
+ + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+ + "html#method-T-\">method</a></span>(T t)</code>"
+ + " </td>",
+ "<caption><span>Methods in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> that return types with "
+ + "arguments of type <a href=\"../../pkg2/Foo4.html\" "
+ + "title=\"class in pkg2\">Foo4</a></span><span class=\""
+ + "tabEnd\"> </span></caption>",
+ "<td class=\"colFirst\"><code><T extends <a href=\"../"
+ + "../pkg2/ParamTest2.html\" title=\"class in pkg2\">"
+ + "ParamTest2</a><java.util.List<? extends <a href=\".."
+ + "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>>"
+ + ">><br><a href=\"../../pkg2/ParamTest2.html\" "
+ + "title=\"class in pkg2\">ParamTest2</a><java.util.List"
+ + "<? extends <a href=\"../../pkg2/Foo4.html\" title=\""
+ + "class in pkg2\">Foo4</a>>></code></td>"
+ );
- { "pkg2/class-use/Foo3.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
- "Foo3</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo3.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " +
- "title=\"class in pkg2\">ClassUseTest2</a><T extends " +
- "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" +
- "ParamTest</a><<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
- "Foo3</a>>></span></code> </td>"
- },
- { "pkg2/class-use/Foo3.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo3.html\" title=\"class in " +
- "pkg2\">Foo3</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg2/class-use/Foo3.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." +
- "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
- "ClassUseTest2.html#method-T-\">method</a></span>" +
- "(T t)</code> </td>"
- },
- { "pkg2/class-use/Foo3.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> that return types with " +
- "arguments of type <a href=\"../../pkg2/Foo3.html\" title" +
- "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/Foo3.html",
- "<td class=\"colFirst\"><code><T extends <a href=\"../../" +
- "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a><" +
- "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3" +
- "</a>>><br><a href=\"../../pkg2/ParamTest.html\" " +
- "title=\"class in pkg2\">ParamTest</a><<a href=\"../../pkg2/" +
- "Foo3.html\" title=\"class in pkg2\">Foo3</a>></code></td>"
- },
+ // Type parameters in constructor and method args
+ checkOutput("pkg2/class-use/Foo4.html", true,
+ "<caption><span>Method parameters in <a href=\"../../pkg2/"
+ + "package-summary.html\">pkg2</a> with type arguments of "
+ + "type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+ + "pkg2\">Foo4</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>\n"
+ + "<tr>\n"
+ + "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Method and Description</th>\n"
+ + "</tr>\n"
+ + "<tbody>\n"
+ + "<tr class=\"altColor\">\n"
+ + "<td class=\"colFirst\"><code>void</code></td>\n"
+ + "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3."
+ + "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3."
+ + "html#method-java.util.Set-\">method</a></span>(java."
+ + "util.Set<<a href=\"../../pkg2/Foo4.html\" title=\""
+ + "class in pkg2\">Foo4</a>> p)</code> </td>\n"
+ + "</tr>\n"
+ + "</tbody>",
+ "<caption><span>Constructor parameters in <a href=\"../../"
+ + "pkg2/package-summary.html\">pkg2</a> with type arguments "
+ + "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in "
+ + "pkg2\">Foo4</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>"
+ );
+
+ //=================================
+ // TYPE PARAMETER IN INDEX
+ //=================================
+ checkOutput("index-all.html", true,
+ "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">"
+ + "method(Vector<Object>)</a></span>"
+ );
+
+ // TODO: duplicate of previous case; left in delibarately for now to simplify comparison testing
+ //=================================
+ // TYPE PARAMETER IN INDEX
+ //=================================
+ checkOutput("index-all.html", true,
+ "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">"
+ + "method(Vector<Object>)</a></span>"
+ );
- //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
- { "pkg2/class-use/ParamTest2.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
- "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/ParamTest2.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " +
- "title=\"class in pkg2\">ClassUseTest3</a><T extends " +
- "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
- "ParamTest2</a><java.util.List<? extends " +
- "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
- "Foo4</a>>>></span></code> </td>"
- },
- { "pkg2/class-use/ParamTest2.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
- "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
- { "pkg2/class-use/ParamTest2.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3" +
- ".</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." +
- "html#method-T-\">method</a></span>(T t)</code> </td>"
- },
- { "pkg2/class-use/ParamTest2.html",
- "<td class=\"colFirst\"><code><T extends <a href=\"../" +
- "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
- "ParamTest2</a><java.util.List<? extends <a href=\".." +
- "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>>" +
- ">><br><a href=\"../../pkg2/ParamTest2.html\" " +
- "title=\"class in pkg2\">ParamTest2</a><java.util.List" +
- "<? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
- "class in pkg2\">Foo4</a>>></code></td>"
- },
+ // No type parameters in class frame.
+ checkOutput("allclasses-frame.html", false,
+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "TypeParameters</a><<a href=\"../pkg/TypeParameters.html\" "
+ + "title=\"type parameter in TypeParameters\">E</a>>"
+ );
+
+ }
+
+ //=================================
+ // VAR ARG TESTING
+ //=================================
+ void checkVarArgs() {
+ checkOutput("pkg/VarArgs.html", true,
+ "(int... i)",
+ "(int[][]... i)",
+ "-int:A...-",
+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">"
+ + "TypeParameters</a>... t");
+ }
- { "pkg2/class-use/Foo4.html",
- "<caption><span>Classes in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
- "pkg2\">Foo4</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
- { "pkg2/class-use/Foo4.html",
- "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " +
- "title=\"class in pkg2\">ClassUseTest3</a><T extends " +
- "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
- "ParamTest2</a><java.util.List<? extends " +
- "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
- "Foo4</a>>>></span></code> </td>"
- },
- { "pkg2/class-use/Foo4.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type parameters of " +
- "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
- "pkg2\">Foo4</a></span><span class=\"tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo4.html",
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3." +
- "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." +
- "html#method-T-\">method</a></span>(T t)</code>" +
- " </td>"
- },
- { "pkg2/class-use/Foo4.html",
- "<caption><span>Methods in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> that return types with " +
- "arguments of type <a href=\"../../pkg2/Foo4.html\" " +
- "title=\"class in pkg2\">Foo4</a></span><span class=\"" +
- "tabEnd\"> </span></caption>"
- },
- { "pkg2/class-use/Foo4.html",
- "<td class=\"colFirst\"><code><T extends <a href=\"../" +
- "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
- "ParamTest2</a><java.util.List<? extends <a href=\".." +
- "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>>" +
- ">><br><a href=\"../../pkg2/ParamTest2.html\" " +
- "title=\"class in pkg2\">ParamTest2</a><java.util.List" +
- "<? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
- "class in pkg2\">Foo4</a>>></code></td>"
- },
+ //=================================
+ // ANNOTATION TYPE TESTING
+ //=================================
+ void checkAnnotationTypes() {
+ checkOutput("pkg/AnnotationType.html", true,
+ // Make sure the summary links are correct.
+ "<li>Summary: </li>\n"
+ + "<li>Field | </li>\n"
+ + "<li><a href=\"#annotation.type.required.element.summary\">"
+ + "Required</a> | </li>\n"
+ + "<li>"
+ + "<a href=\"#annotation.type.optional.element.summary\">Optional</a></li>",
+ // Make sure the detail links are correct.
+ "<li>Detail: </li>\n"
+ + "<li>Field | </li>\n"
+ + "<li><a href=\"#annotation.type.element.detail\">Element</a></li>",
+ // Make sure the heading is correct.
+ "Annotation Type AnnotationType</h2>",
+ // Make sure the signature is correct.
+ "public @interface <span class=\"memberNameLabel\">AnnotationType</span>",
+ // Make sure member summary headings are correct.
+ "<h3>Required Element Summary</h3>",
+ "<h3>Optional Element Summary</h3>",
+ // Make sure element detail heading is correct
+ "Element Detail",
+ // Make sure default annotation type value is printed when necessary.
+ "<dl>\n"
+ + "<dt>Default:</dt>\n"
+ + "<dd>\"unknown\"</dd>\n"
+ + "</dl>");
+ }
+
+ //=================================
+ // ANNOTATION TYPE USAGE TESTING
+ //=================================
+ void checkAnnotationTypeUsage() {
+ checkOutput("pkg/package-summary.html", true,
+ // PACKAGE
+ "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"Package Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)");
- //Type parameters in constructor and method args
- { "pkg2/class-use/Foo4.html",
- "<caption><span>Method parameters in <a href=\"../../pkg2/" +
- "package-summary.html\">pkg2</a> with type arguments of " +
- "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
- "pkg2\">Foo4</a></span><span class=\"tabEnd\"> " +
- "</span></caption>\n" +
- "<tr>\n" +
- "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
- "<th class=\"colLast\" scope=\"col\">Method and Description</th>\n" +
- "</tr>\n" +
- "<tbody>\n" +
- "<tr class=\"altColor\">\n" +
- "<td class=\"colFirst\"><code>void</code></td>\n" +
- "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3." +
- "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." +
- "html#method-java.util.Set-\">method</a></span>(java." +
- "util.Set<<a href=\"../../pkg2/Foo4.html\" title=\"" +
- "class in pkg2\">Foo4</a>> p)</code> </td>\n" +
- "</tr>\n" +
- "</tbody>"
- },
- { "pkg2/class-use/Foo4.html",
- "<caption><span>Constructor parameters in <a href=\"../../" +
- "pkg2/package-summary.html\">pkg2</a> with type arguments " +
- "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
- "pkg2\">Foo4</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
-
- //=================================
- // Annotatation Type Usage
- //=================================
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Packages with annotations of type <a href=\"" +
- "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
- "AnnotationType</a></span><span class=\"tabEnd\"> " +
- "</span></caption>"
- },
-
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Classes in <a href=\"../../pkg/" +
- "package-summary.html\">pkg</a> with annotations of type " +
- "<a href=\"../../pkg/AnnotationType.html\" title=\"" +
- "annotation in pkg\">AnnotationType</a></span><span class" +
- "=\"tabEnd\"> </span></caption>"
- },
-
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Fields in <a href=\"../../pkg/" +
- "package-summary.html\">pkg</a> with annotations of type " +
- "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
- "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
+ checkOutput("pkg/AnnotationTypeUsage.html", true,
+ // CLASS
+ "<pre><a href=\"../pkg/AnnotationType.html\" "
+ + "title=\"annotation in pkg\">@AnnotationType</a>("
+ + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+ + "=\"Class Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required--\">"
+ + "required</a>=1994)\n"
+ + "public class <span class=\"typeNameLabel\">"
+ + "AnnotationTypeUsage</span>\n"
+ + "extends java.lang.Object</pre>",
+ // FIELD
+ "<pre><a href=\"../pkg/AnnotationType.html\" "
+ + "title=\"annotation in pkg\">@AnnotationType</a>("
+ + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+ + "=\"Field Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required--\">"
+ + "required</a>=1994)\n"
+ + "public int field</pre>",
+ // CONSTRUCTOR
+ "<pre><a href=\"../pkg/AnnotationType.html\" "
+ + "title=\"annotation in pkg\">@AnnotationType</a>("
+ + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+ + "=\"Constructor Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required--\">"
+ + "required</a>=1994)\n"
+ + "public AnnotationTypeUsage()</pre>",
+ // METHOD
+ "<pre><a href=\"../pkg/AnnotationType.html\" "
+ + "title=\"annotation in pkg\">@AnnotationType</a>("
+ + "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>"
+ + "=\"Method Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required--\">"
+ + "required</a>=1994)\n"
+ + "public void method()</pre>",
+ // METHOD PARAMS
+ "<pre>public void methodWithParams("
+ + "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
+ + "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">"
+ + "optional</a>=\"Parameter Annotation\",<a "
+ + "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n"
+ + " int documented,\n"
+ + " int undocmented)</pre>",
+ // CONSTRUCTOR PARAMS
+ "<pre>public AnnotationTypeUsage(<a "
+ + "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
+ + "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">"
+ + "optional</a>=\"Constructor Param Annotation\",<a "
+ + "href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)\n"
+ + " int documented,\n"
+ + " int undocmented)</pre>");
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Methods in <a href=\"../../pkg/" +
- "package-summary.html\">pkg</a> with annotations of type " +
- "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
- "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
-
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Method parameters in <a href=\"../../pkg/" +
- "package-summary.html\">pkg</a> with annotations of type " +
- "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
- "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
-
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Constructors in <a href=\"../../pkg/" +
- "package-summary.html\">pkg</a> with annotations of type " +
- "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
- "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
- " </span></caption>"
- },
-
- { "pkg/class-use/AnnotationType.html",
- "<caption><span>Constructor parameters in <a href=\"../../" +
- "pkg/package-summary.html\">pkg</a> with annotations of " +
- "type <a href=\"../../pkg/AnnotationType.html\" title=\"" +
- "annotation in pkg\">AnnotationType</a></span><span class=\"" +
- "tabEnd\"> </span></caption>"
- },
-
- //=================================
- // TYPE PARAMETER IN INDEX
- //=================================
- { "index-all.html",
- "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" +
- "method(Vector<Object>)</a></span>"
- },
- //=================================
- // TYPE PARAMETER IN INDEX
- //=================================
- { "index-all.html",
- "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" +
- "method(Vector<Object>)</a></span>"
- },
- };
- private static final String[][] NEGATED_TEST = {
+ //=================================
+ // Annotatation Type Usage
//=================================
- // ENUM TESTING
- //=================================
- //NO constructor section
- { "pkg/Coin.html", "<h3>Constructor Summary</h3>"},
- //=================================
- // TYPE PARAMETER TESTING
- //=================================
- //No type parameters in class frame.
- { "allclasses-frame.html",
- "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
- "TypeParameters</a><<a href=\"../pkg/TypeParameters.html\" " +
- "title=\"type parameter in TypeParameters\">E</a>>"
- },
+ checkOutput("pkg/class-use/AnnotationType.html", true,
+ "<caption><span>Packages with annotations of type <a href=\""
+ + "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">"
+ + "AnnotationType</a></span><span class=\"tabEnd\"> "
+ + "</span></caption>",
+ "<caption><span>Classes in <a href=\"../../pkg/"
+ + "package-summary.html\">pkg</a> with annotations of type "
+ + "<a href=\"../../pkg/AnnotationType.html\" title=\""
+ + "annotation in pkg\">AnnotationType</a></span><span class"
+ + "=\"tabEnd\"> </span></caption>",
+ "<caption><span>Fields in <a href=\"../../pkg/"
+ + "package-summary.html\">pkg</a> with annotations of type "
+ + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+ + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Methods in <a href=\"../../pkg/"
+ + "package-summary.html\">pkg</a> with annotations of type "
+ + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+ + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Method parameters in <a href=\"../../pkg/"
+ + "package-summary.html\">pkg</a> with annotations of type "
+ + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+ + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Constructors in <a href=\"../../pkg/"
+ + "package-summary.html\">pkg</a> with annotations of type "
+ + "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation "
+ + "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">"
+ + " </span></caption>",
+ "<caption><span>Constructor parameters in <a href=\"../../"
+ + "pkg/package-summary.html\">pkg</a> with annotations of "
+ + "type <a href=\"../../pkg/AnnotationType.html\" title=\""
+ + "annotation in pkg\">AnnotationType</a></span><span class=\""
+ + "tabEnd\"> </span></caption>"
+ );
//==============================================================
// ANNOTATION TYPE USAGE TESTING (When @Documented is omitted)
//===============================================================
-
- //CLASS
- { "pkg/AnnotationTypeUsage.html",
- "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
- "public class <span class=\"typeNameLabel\">AnnotationTypeUsage</span></dt><dt>extends java.lang.Object</dt>"},
-
- //FIELD
- { "pkg/AnnotationTypeUsage.html",
- "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
- "public int <span class=\"memberNameLabel\">field</span>"},
-
- //CONSTRUCTOR
- { "pkg/AnnotationTypeUsage.html",
- "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
- "public <span class=\"typeNameLabel\">AnnotationTypeUsage</span>()"},
-
- //METHOD
- { "pkg/AnnotationTypeUsage.html",
- "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\",\n" +
- " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
- "public void <span class=\"memberNameLabel\">method</span>()"},
+ checkOutput("pkg/AnnotationTypeUsage.html", false,
+ // CLASS
+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+ + "public class <span class=\"typeNameLabel\">AnnotationTypeUsage</span></dt><dt>extends java.lang.Object</dt>",
+ // FIELD
+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+ + "public int <span class=\"memberNameLabel\">field</span>",
+ // CONSTRUCTOR
+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+ + "public <span class=\"typeNameLabel\">AnnotationTypeUsage</span>()",
+ // METHOD
+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\",\n"
+ + " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n"
+ + "public void <span class=\"memberNameLabel\">method</span>()");
//=================================
// Make sure annotation types do not
// trigger this warning.
//=================================
- {WARNING_OUTPUT,
- "Internal error: package sets don't match: [] with: null"
- },
- };
+ checkOutput(Output.WARNING, false,
+ "Internal error: package sets don't match: [] with: null");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNewLanguageFeatures tester = new TestNewLanguageFeatures();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ //=================================
+ // ANNOTATION TYPE USAGE TESTING (All Different Types).
+ //=================================
+ checkOutput("pkg1/B.html", true,
+ // Integer
+ "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,",
+ // Double
+ "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,",
+ // Boolean
+ "<a href=\"../pkg1/A.html#b--\">b</a>=true,",
+ // String
+ "<a href=\"../pkg1/A.html#s--\">s</a>=\"sigh\",",
+ // Class
+ "<a href=\"../pkg1/A.html#c--\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,",
+ // Bounded Class
+ "<a href=\"../pkg1/A.html#w--\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,",
+ // Enum
+ "<a href=\"../pkg1/A.html#e--\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,",
+ // Annotation Type
+ "<a href=\"../pkg1/A.html#a--\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994),",
+ // String Array
+ "<a href=\"../pkg1/A.html#sa--\">sa</a>={\"up\",\"down\"},",
+ // Primitive
+ "<a href=\"../pkg1/A.html#primitiveClassTest--\">primitiveClassTest</a>=boolean.class,");
+
+ // XXX: Add array test case after this if fixed:
+ //5020899: Incorrect internal representation of class-valued annotation elements
+ // Make sure that annotations are surrounded by <pre> and </pre>
+ checkOutput("pkg1/B.html", true,
+ "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>",
+ "public interface <span class=\"typeNameLabel\">B</span></pre>");
+
}
+
}
--- a/langtools/test/com/sun/javadoc/testNoPackagesFile/TestNoPackagesFile.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNoPackagesFile/TestNoPackagesFile.java Fri May 16 14:35:37 2014 -0700
@@ -27,31 +27,26 @@
* @summary Verify that packages.html is no longer generated since it is no
* longer used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestNoPackagesFile
* @run main TestNoPackagesFile
*/
public class TestNoPackagesFile extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestNoPackagesFile tester = new TestNoPackagesFile();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNoPackagesFile tester = new TestNoPackagesFile();
- tester.run(ARGS, NO_TEST, NO_TEST);
- if ((new java.io.File(OUTPUT_DIR + "/packages.html")).exists()) {
- throw new Error("Test Fails: packages file should not be " + "generated anymore.");
- } else {
- System.out.println("Test passes: packages.html not found.");
- }
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
+
+ // packages.html file should not be generated anymore.
+ checkFiles(false, "packages.html");
}
}
--- a/langtools/test/com/sun/javadoc/testNonFrameWarning/TestNonFrameWarning.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNonFrameWarning/TestNonFrameWarning.java Fri May 16 14:35:37 2014 -0700
@@ -26,31 +26,28 @@
* @bug 7001086
* @summary Test Non-frame warning.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestNonFrameWarning
+ * @library ../lib
+ * @build JavadocTester
* @run main TestNonFrameWarning
*/
public class TestNonFrameWarning extends JavadocTester {
- private static final String[][] TEST = {
- { "index.html",
- "<p>This document is designed to be viewed using the frames feature. " +
- "If you see this message, you are using a non-frame-capable web client. " +
- "Link to <a href=\"pkg/package-summary.html\">Non-frame version</a>.</p>"
- }
- };
- private static final String[] ARGS = new String[]{
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestNonFrameWarning tester = new TestNonFrameWarning();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNonFrameWarning tester = new TestNonFrameWarning();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("index.html", true,
+ "<p>This document is designed to be viewed using the frames feature. "
+ + "If you see this message, you are using a non-frame-capable web client. "
+ + "Link to <a href=\"pkg/package-summary.html\">Non-frame version</a>.</p>");
}
}
--- a/langtools/test/com/sun/javadoc/testNotifications/TestNotifications.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNotifications/TestNotifications.java Fri May 16 14:35:37 2014 -0700
@@ -28,50 +28,43 @@
* be created.
* Make sure classname is not include in javadoc usage message.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestNotifications
* @run main TestNotifications
*/
public class TestNotifications extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
-
- private static final String[] ARGS2 = new String[] {
- "-help"
- };
+ public static void main(String... args) throws Exception {
+ TestNotifications tester = new TestNotifications();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- {NOTICE_OUTPUT, "Creating destination directory: \"" + OUTPUT_DIR}
- };
- private static final String[][] NEGATED_TEST = {
- {NOTICE_OUTPUT, "Creating destination directory: \"" + OUTPUT_DIR}
- };
+ @Test
+ void test1() {
+ String outDir = "out";
- private static final String[][] NEGATED_TEST2 = {
- {NOTICE_OUTPUT, "[classnames]"}
- };
+ // Notify that the destination directory must be created.
+ javadoc("-d", outDir, "-sourcepath", testSrc, "pkg");
+ checkExit(Exit.OK);
+ checkOutput(Output.NOTICE, true,
+ "Creating destination directory: \"" + outDir);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestNotifications tester = new TestNotifications();
- // Notify that the destination directory must be created.
- tester.run(ARGS, TEST, NO_TEST);
// No need to notify that the destination must be created because
// it already exists.
- tester.setCheckOutputDirectoryCheck(DirectoryCheck.NONE);
- tester.run(ARGS, NO_TEST, NEGATED_TEST);
- tester.setCheckOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
+ setOutputDirectoryCheck(DirectoryCheck.NONE);
+ javadoc("-d", outDir, "-sourcepath", testSrc, "pkg");
+ checkExit(Exit.OK);
+ checkOutput(Output.NOTICE, false,
+ "Creating destination directory: \"" + outDir);
+ }
+
+ @Test
+ void test() {
//Make sure classname is not include in javadoc usage message.
- tester.run(ARGS2, NO_TEST, NEGATED_TEST2);
- tester.printSummary();
+ setOutputDirectoryCheck(DirectoryCheck.NO_HTML_FILES);
+ javadoc("-help");
+ checkOutput(Output.NOTICE, false,
+ "[classnames]");
}
}
--- a/langtools/test/com/sun/javadoc/testOptions/TestOptions.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOptions/TestOptions.java Fri May 16 14:35:37 2014 -0700
@@ -26,34 +26,30 @@
* @bug 4749567
* @summary Test the output for -header and -footer options.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestOptions
+ * @library ../lib
+ * @build JavadocTester
* @run main TestOptions
*/
public class TestOptions extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-header", "Test header", "-footer", "Test footer",
- "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestOptions tester = new TestOptions();
+ tester.runTests();
+ }
- private static final String[][] TEST = {
- { "pkg/package-summary.html",
- "<div class=\"aboutLanguage\">Test header</div>"},
- { "pkg/package-summary.html",
- "<div class=\"aboutLanguage\">Test footer</div>"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-header", "Test header",
+ "-footer", "Test footer",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestOptions tester = new TestOptions();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/package-summary.html", true,
+ "<div class=\"aboutLanguage\">Test header</div>",
+ "<div class=\"aboutLanguage\">Test footer</div>");
}
}
--- a/langtools/test/com/sun/javadoc/testOrdering/TestOrdering.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOrdering/TestOrdering.java Fri May 16 14:35:37 2014 -0700
@@ -23,113 +23,115 @@
/*
* @test
- * @bug 8039410
+ * @bug 8039410 8042601
* @summary test to determine if members are ordered correctly
* @author ksrini
* @library ../lib/
* @build JavadocTester
- * @build TestOrdering
* @run main TestOrdering
*/
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+public class TestOrdering extends JavadocTester {
-public class TestOrdering extends JavadocTester {
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
public static void main(String[] args) throws Exception {
TestOrdering tester = new TestOrdering();
- // test unnamed packages
- String[] ARGS = {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use",
- SRC_DIR + "/C.java", SRC_DIR + "/UsedInC.java"
- };
- tester.runJavadoc(ARGS);
- checkExecutableMemberOrdering(tester.readFileToString("class-use/UsedInC.html"));
+ tester.runTests();
+ }
- // next test using packages
- String[] ARGS1 = {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "-use",
- "pkg1"
- };
- tester.runJavadoc(ARGS1);
- checkClassUseOrdering(tester.readFileToString("pkg1/class-use/UsedClass.html"));
- checkIndexPathOrdering(tester.readFileToString("index-all.html"));
+ @Test
+ void testUnnamedPackages() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ testSrc("C.java"), testSrc("UsedInC.java"));
+ checkExit(Exit.OK);
+ checkExecutableMemberOrdering("class-use/UsedInC.html");
+ }
+
+ @Test
+ void testNamedPackages() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1");
+ checkExit(Exit.OK);
+ checkClassUseOrdering("pkg1/class-use/UsedClass.html");
+ checkIndexPathOrdering("index-all.html");
}
- static void checkExecutableMemberOrdering(String usePage) {
+ void checkExecutableMemberOrdering(String usePage) {
+ String contents = readFile(usePage);
// check constructors
- int idx1 = usePage.indexOf("C.html#C-UsedInC");
- int idx2 = usePage.indexOf("C.html#C-UsedInC-int");
- int idx3 = usePage.indexOf("C.html#C-UsedInC-java.lang.String");
+ checking("constructors");
+ int idx1 = contents.indexOf("C.html#C-UsedInC");
+ int idx2 = contents.indexOf("C.html#C-UsedInC-int");
+ int idx3 = contents.indexOf("C.html#C-UsedInC-java.lang.String");
if (idx1 == -1 || idx2 == -1 || idx3 == -1) {
- throw new Error("ctor strings not found");
- }
- if (idx1 > idx2 || idx2 > idx3 || idx1 > idx3) {
- throw new Error("ctor strings are out of order");
- }
+ failed("ctor strings not found");
+ } else if (idx1 > idx2 || idx2 > idx3 || idx1 > idx3) {
+ failed("ctor strings are out of order");
+ } else
+ passed("ctor strings are in order");
// check methods
- idx1 = usePage.indexOf("C.html#ymethod-int");
- idx2 = usePage.indexOf("C.html#ymethod-java.lang.String");
+ checking("methods");
+ idx1 = contents.indexOf("C.html#ymethod-int");
+ idx2 = contents.indexOf("C.html#ymethod-java.lang.String");
if (idx1 == -1 || idx2 == -1) {
- throw new Error("#ymethod strings not found");
- }
- if (idx1 > idx2) {
- throw new Error("#ymethod strings are out of order");
- }
- System.out.println("Executable Member Ordering: OK");
+ failed("#ymethod strings not found");
+ } else if (idx1 > idx2) {
+ failed("#ymethod strings are out of order");
+ } else
+ passed("Executable Member Ordering: OK");
}
- static void checkClassUseOrdering(String usePage) {
+ void checkClassUseOrdering(String usePage) {
checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zfield");
checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#fieldInC#ITERATION#");
checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#zmethod-pkg1.UsedClass");
checkClassUseOrdering(usePage, "pkg1/C#ITERATION#.html#methodInC#ITERATION#");
}
- static void checkClassUseOrdering(String usePage, String searchString) {
+ void checkClassUseOrdering(String usePage, String searchString) {
+ String contents = readFile(usePage);
int lastidx = 0;
System.out.println("testing for " + searchString);
for (int i = 1; i < 5; i++) {
String s = searchString.replaceAll("#ITERATION#", Integer.toString(i));
- System.out.println(s);
- int idx = usePage.indexOf(s);
+ checking(s);
+ int idx = contents.indexOf(s);
if (idx < lastidx) {
- throw new Error(s + ", member ordering error, last:" + lastidx + ", got:" + idx);
+ failed(s + ", member ordering error, last:" + lastidx + ", got:" + idx);
+ } else {
+ passed("\tlast: " + lastidx + " got:" + idx);
}
- System.out.println("\tlast: " + lastidx + " got:" + idx);
lastidx = idx;
}
}
- static void checkIndexPathOrdering(String indexPage) {
- String[] OrderedExpectedStrings = {
- "pkg1/UsedClass.html#add-java.lang.Double",
- "pkg1/ZZTop.html#add-double",
- "pkg1/ZZTop.html#add-java.lang.Double",
- "pkg1/UsedClass.html#add-float",
- "pkg1/ZZTop.html#add-float",
- "pkg1/UsedClass.html#add-int",
- "pkg1/ZZTop.html#add-int",
- "pkg1/UsedClass.html#add-java.lang.Integer",
- "pkg1/ZZTop.html#add-java.lang.Integer",
- "pkg1/UsedClass.html#add-double-double",
- "pkg1/UsedClass.html#add-double-java.lang.Double",
- "pkg1/ZZTop.html#add-double-double",
- "pkg1/ZZTop.html#add-double-java.lang.Double"
- };
- int lastidx = 0;
- for (String x : OrderedExpectedStrings) {
- int idx = indexPage.indexOf(x);
- if (idx < lastidx) {
- throw new Error(x + ", index is out of order, last:" + lastidx + ", got:" + idx);
- }
- System.out.println(x + ": OK");
- lastidx = idx;
- }
+ void checkIndexPathOrdering(String indexPage) {
+ checkOrder(indexPage,
+ "pkg1/UsedClass.html#add--",
+ "pkg1/ZZTop.html#add--",
+ "pkg1/UsedClass.html#add-double-",
+ "pkg1/UsedClass.html#add-java.lang.Double-",
+ "pkg1/ZZTop.html#add-double-",
+ "pkg1/ZZTop.html#add-java.lang.Double-",
+ "pkg1/UsedClass.html#add-double-byte-",
+ "pkg1/ZZTop.html#add-double-byte-",
+ "pkg1/UsedClass.html#add-double-double-",
+ "pkg1/UsedClass.html#add-double-java.lang.Double-",
+ "pkg1/ZZTop.html#add-double-double-",
+ "pkg1/ZZTop.html#add-double-java.lang.Double-",
+ "pkg1/UsedClass.html#add-float-",
+ "pkg1/ZZTop.html#add-float-",
+ "pkg1/UsedClass.html#add-float-int-",
+ "pkg1/ZZTop.html#add-float-int-",
+ "pkg1/UsedClass.html#add-int-",
+ "pkg1/ZZTop.html#add-int-",
+ "pkg1/UsedClass.html#add-int-float-",
+ "pkg1/ZZTop.html#add-int-float-",
+ "pkg1/UsedClass.html#add-java.lang.Integer-",
+ "pkg1/ZZTop.html#add-java.lang.Integer-");
}
}
--- a/langtools/test/com/sun/javadoc/testOrdering/pkg1/UsedClass.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOrdering/pkg1/UsedClass.java Fri May 16 14:35:37 2014 -0700
@@ -26,18 +26,11 @@
* For index and class-use testing
*/
public class UsedClass {
- // This is the exact order we expect to see
/**
- * @param i param
+ * just an empty param method.
*/
- public void add(int i){}
-
- /**
- * @param i param
- * @return double
- */
- public int add(Integer i) {return 0;}
+ public void add(){}
/**
* @param d param
@@ -45,18 +38,30 @@
public void add(double d){}
/**
+ * @param i param
+ * @param f param
+ */
+ public void add(int i, float f){}
+
+ /**
+ * @param f param
+ * @param i param
+ */
+ public void add(float f, int i){}
+
+ /**
+ * @param d param
+ * @param b param
+ */
+ public void add(double d, byte b){}
+
+ /**
* @param d param
* @return Double
*/
public Double add(Double d) {return (double) 22/7;}
/**
- * @param f param
- * @return Float
- */
- public Float add(float f) {return (float) 22/7;}
-
- /**
* @param d1 param
* @param d2 param
* @return double
@@ -69,4 +74,21 @@
* @return double
*/
public double add(double d1, Double d2) {return d1 + d2;}
+
+ /**
+ * @param f param
+ * @return Float
+ */
+ public Float add(float f) {return (float) 22/7;}
+
+ /**
+ * @param i param
+ */
+ public void add(int i){}
+
+ /**
+ * @param i param
+ * @return double
+ */
+ public int add(Integer i) {return 0;}
}
--- a/langtools/test/com/sun/javadoc/testOrdering/pkg1/ZZTop.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOrdering/pkg1/ZZTop.java Fri May 16 14:35:37 2014 -0700
@@ -26,18 +26,11 @@
* For index testing only
*/
public class ZZTop {
- // This is the exact order we expect to see
/**
- * @param i param
+ * just an empty param method.
*/
- public void add(int i){}
-
- /**
- * @param i param
- * @return double
- */
- public int add(Integer i) {return 0;}
+ public void add(){}
/**
* @param d param
@@ -45,17 +38,30 @@
public void add(double d){}
/**
+ * @param i param
+ * @param f param
+ */
+ public void add(int i, float f){}
+
+ /**
+ * @param f param
+ * @param i param
+ */
+ public void add(float f, int i){}
+
+ /**
+ * @param d param
+ * @param b param
+ */
+ public void add(double d, byte b){}
+
+ /**
* @param d param
* @return Double
*/
public Double add(Double d) {return (double) 22/7;}
/**
- * @param f param
- * @return Float
- */
- public Float add(float f) {return (float) 22/7;}
- /**
* @param d1 param
* @param d2 param
* @return double
@@ -68,4 +74,21 @@
* @return double
*/
public double add(double d1, Double d2) {return d1 + d2;}
+
+ /**
+ * @param f param
+ * @return Float
+ */
+ public Float add(float f) {return (float) 22/7;}
+
+ /**
+ * @param i param
+ */
+ public void add(int i){}
+
+ /**
+ * @param i param
+ * @return double
+ */
+ public int add(Integer i) {return 0;}
}
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java Fri May 16 14:35:37 2014 -0700
@@ -27,59 +27,54 @@
* @summary Make sure that all inherited methods from multiple extended
* interfaces are documented
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestMultiInheritence
* @run main TestMultiInheritence
*/
+// TODO: should be TestMultiInheritance
public class TestMultiInheritence extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg3"
- };
+ public static void main(String... args) throws Exception {
+ TestMultiInheritence tester = new TestMultiInheritence();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg3");
+ checkExit(Exit.OK);
+
+ // Method foo() is inherited from BOTH I2 and I3
- //Method foo() is inherited from BOTH I2 and I3
- private static final String[][] TEST = {
- { "pkg3/I1.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
- "I2</a>"},
- { "pkg3/I1.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
- "I3</a>"},
- { "pkg3/I0.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
- "I2</a>"},
- { "pkg3/I0.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
- "I3</a>"},
- };
+ checkOutput("pkg3/I1.html", true,
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">"
+ + "I2</a>",
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">"
+ + "I3</a>");
- //Method foo() is NOT inherited from I4 because it is overriden by
- //I3.
- private static final String[][] NEGATED_TEST = {
- { "pkg3/I1.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
- "I4</a>"},
- { "pkg3/I0.html",
- "Methods inherited from interface pkg3." +
- "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
- "I4</a>"},
- };
+ checkOutput("pkg3/I0.html", true,
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">"
+ + "I2</a>",
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">"
+ + "I3</a>");
+
+ // Method foo() is NOT inherited from I4 because it is overriden by I3.
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestMultiInheritence tester = new TestMultiInheritence();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg3/I1.html", false,
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">"
+ + "I4</a>");
+
+ checkOutput("pkg3/I0.html", false,
+ "Methods inherited from interface pkg3."
+ + "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">"
+ + "I4</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java Fri May 16 14:35:37 2014 -0700
@@ -27,35 +27,32 @@
* @summary Inherited comment should link directly to member, not just
* class
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestOverridenMethodDocCopy
* @run main TestOverridenMethodDocCopy
*/
public class TestOverridenMethodDocCopy extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg1/SubClass.html",
- "<span class=\"descfrmTypeLabel\">Description copied from class: <code>" +
- "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy--\">" +
- "BaseClass</a></code></span>"
- }
- };
-
/**
* The entry point of the test.
* @param args the array of command line arguments.
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestOverridenMethodDocCopy tester = new TestOverridenMethodDocCopy();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/SubClass.html", true,
+ "<span class=\"descfrmTypeLabel\">Description copied from class: <code>"
+ + "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy--\">"
+ + "BaseClass</a></code></span>");
}
}
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java Fri May 16 14:35:37 2014 -0700
@@ -27,61 +27,50 @@
* @summary Determine if overriden methods are properly documented when
* -protected (default) visibility flag is used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestOverridenPrivateMethods
* @run main TestOverridenPrivateMethods
*/
public class TestOverridenPrivateMethods extends JavadocTester {
- private static final String[][] TEST = {
- //The public method should be overriden
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
+ public static void main(String... args) throws Exception {
+ TestOverridenPrivateMethods tester = new TestOverridenPrivateMethods();
+ tester.runTests();
+ }
- //The public method in different package should be overriden
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
- private static final String[][] NEGATED_TEST = {
-
- //The package private method should be overriden since the base and sub class are in the same
- //package. However, the link should not show up because the package private methods are not documented.
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
+ // The public method should be overridden
+ checkOutput("pkg1/SubClass.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
- //The private method in should not be overriden
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+ // The public method in different package should be overridden
+ checkOutput("pkg2/SubClass.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- { "pkg2/SubClass.html",
- "Overrides:</span></dt><dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
+ checkOutput("pkg1/SubClass.html", false,
+ //The package private method should be overridden since the base and sub class are in the same
+ //package. However, the link should not show up because the package private methods are not documented.
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod",
+ //The private method in should not be overridden
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod");
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"};
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestOverridenPrivateMethods tester = new TestOverridenPrivateMethods();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg2/SubClass.html", false,
+ //The private method in different package should not be overridden
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod",
+ //The package private method should not be overridden since the base and sub class are in
+ //different packages.
+ "Overrides:</span></dt><dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod");
}
}
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java Fri May 16 14:35:37 2014 -0700
@@ -24,71 +24,65 @@
/*
* @test
* @bug 4634891 8025633 8026567
- * @summary Determine if overriden methods are properly documented when
+ * @summary Determine if overridden methods are properly documented when
* -protected (default) visibility flag is used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestOverridenPrivateMethodsWithPackageFlag
* @run main TestOverridenPrivateMethodsWithPackageFlag
*/
public class TestOverridenPrivateMethodsWithPackageFlag extends JavadocTester {
- private static final String[][] TEST = {
- //The public method should be overriden
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">" +
- "publicMethod</a></code> in class <code>" +
- "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
+ public static void main(String... args) throws Exception {
+ TestOverridenPrivateMethodsWithPackageFlag tester = new TestOverridenPrivateMethodsWithPackageFlag();
+ tester.runTests();
+ }
- //The public method in different package should be overriden
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">" +
- "publicMethod</a></code> in class <code>" +
- "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-package",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod--\">" +
- "packagePrivateMethod</a></code> in class <code>" +
- "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"}
- };
-
- private static final String[][] NEGATED_TEST = {
+ // The public method should be overridden
+ checkOutput("pkg1/SubClass.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">"
+ + "publicMethod</a></code> in class <code>"
+ + "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
- //The private method in should not be overriden
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
+ // The public method in different package should be overridden
+ checkOutput("pkg2/SubClass.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">"
+ + "publicMethod</a></code> in class <code>"
+ + "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
- //The private method in different package should not be overriden
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
+ // The package private method should be overridden since the base and sub class are in the same
+ // package.
+ checkOutput("pkg1/SubClass.html", true,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod--\">"
+ + "packagePrivateMethod</a></code> in class <code>"
+ + "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>");
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">"},
- };
+ // The private method in should not be overridden
+ checkOutput("pkg1/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">");
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-package", "pkg1", "pkg2"};
+ // The private method in different package should not be overridden
+ checkOutput("pkg2/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestOverridenPrivateMethodsWithPackageFlag tester = new TestOverridenPrivateMethodsWithPackageFlag();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ // The package private method should not be overridden since the base and sub class are in
+ // different packages.
+ checkOutput("pkg2/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">");
}
}
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java Fri May 16 14:35:37 2014 -0700
@@ -24,67 +24,59 @@
/*
* @test
* @bug 4634891 8026567
- * @summary Determine if overriden methods are properly documented when
+ * @summary Determine if overridden methods are properly documented when
* -protected (default) visibility flag is used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestOverridenPrivateMethodsWithPrivateFlag
* @run main TestOverridenPrivateMethodsWithPrivateFlag
*/
public class TestOverridenPrivateMethodsWithPrivateFlag extends JavadocTester {
- private static final String[][] TEST = {
- //The public method should be overriden
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- { "pkg1/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
+ public static void main(String... args) throws Exception {
+ TestOverridenPrivateMethodsWithPrivateFlag tester = new TestOverridenPrivateMethodsWithPrivateFlag();
+ tester.runTests();
+ }
- //The public method in different package should be overriden
- { "pkg2/SubClass.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-private",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- { "pkg1/SubClass.html",
+ // The public method should be overridden
+ checkOutput("pkg1/SubClass.html", true,
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
- //The private method in different package should not be overriden
- { "pkg2/SubClass.html",
+ // The package private method should be overridden since the base and sub class are in the same
+ // package.
+ checkOutput("pkg1/SubClass.html", true,
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod");
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- { "pkg2/SubClass.html",
+ // The public method in different package should be overridden
+ checkOutput("pkg2/SubClass.html", true,
"<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-
+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod");
- };
-
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-private", "pkg1", "pkg2"};
+ // The private method in should not be overridden
+ checkOutput("pkg1/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestOverridenPrivateMethodsWithPrivateFlag tester = new TestOverridenPrivateMethodsWithPrivateFlag();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ // The private method in different package should not be overridden
+ checkOutput("pkg2/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod");
+
+ // The package private method should not be overridden since the base and sub class are in
+ // different packages.
+ checkOutput("pkg2/SubClass.html", false,
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod");
}
}
--- a/langtools/test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java Fri May 16 14:35:37 2014 -0700
@@ -33,53 +33,46 @@
public class TestPackageDeprecation extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[]{
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "-use", "pkg", "pkg1",
- SRC_DIR + "/C2.java", SRC_DIR + "/FooDepr.java"
- };
- private static final String[] ARGS2 = new String[]{
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-use", "-nodeprecated",
- "pkg", "pkg1", SRC_DIR + "/C2.java", SRC_DIR + "/FooDepr.java"
- };
+ public static void main(String... args) throws Exception {
+ TestPackageDeprecation tester = new TestPackageDeprecation();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST1 = {
- { "pkg1/package-summary.html",
+ @Test
+ void testDefault() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg", "pkg1", testSrc("C2.java"), testSrc("FooDepr.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("pkg1/package-summary.html", true,
"<div class=\"deprecatedContent\"><span class=\"deprecatedLabel\">Deprecated.</span>\n" +
"<div class=\"block\"><span class=\"deprecationComment\">This package is Deprecated." +
"</span></div>"
- },
- { "deprecated-list.html",
+ );
+
+ checkOutput("deprecated-list.html", true,
"<li><a href=\"#package\">Deprecated Packages</a></li>"
- }
- };
- private static final String[][] NEGATED_TEST2 = {
- { "overview-summary.html", "pkg1"},
- { "allclasses-frame.html", "FooDepr"}
- };
+ );
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestPackageDeprecation tester = new TestPackageDeprecation();
- tester.run(ARGS1, TEST1, NO_TEST);
- tester.run(ARGS2, NO_TEST, NEGATED_TEST2);
- if ((new java.io.File(OUTPUT_DIR + "-2/pkg1/" +
- "package-summary.html")).exists()) {
- throw new Error("Test Fails: packages summary should not be" +
- "generated for deprecated package.");
- } else {
- System.out.println("Test passes: package-summary.html not found.");
- }
- if ((new java.io.File(OUTPUT_DIR + "-2/FooDepr.html")).exists()) {
- throw new Error("Test Fails: FooDepr should not be" +
- "generated as it is deprecated.");
- } else {
- System.out.println("Test passes: FooDepr.html not found.");
- }
- tester.printSummary();
+ @Test
+ void testNoDeprecated() {
+ javadoc("-d", "out-nodepr",
+ "-sourcepath", testSrc,
+ "-use",
+ "-nodeprecated",
+ "pkg", "pkg1", testSrc("C2.java"), testSrc("FooDepr.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", false,
+ "pkg1");
+ checkOutput("allclasses-frame.html", false,
+ "FooDepr");
+
+ checkFiles(false,
+ "pkg1/package-summary.html",
+ "FooDepr.html");
}
}
--- a/langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java Fri May 16 14:35:37 2014 -0700
@@ -28,69 +28,58 @@
* passed to Javadoc. Also test that the proper package links are generated
* when single or multiple packages are documented.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestPackagePage
* @run main TestPackagePage
*/
public class TestPackagePage extends JavadocTester {
+ public static void main(String... args) throws Exception {
+ TestPackagePage tester = new TestPackagePage();
+ tester.runTests();
+ }
+
+ @Test
+ void testSinglePackage() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ testSrc("com/pkg/C.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("com/pkg/package-summary.html", true,
+ "This is a package page.");
+
+ // With just one package, all general pages link to the single package page.
+ checkOutput("com/pkg/C.html", true,
+ "<a href=\"../../com/pkg/package-summary.html\">Package</a>");
+ checkOutput("com/pkg/package-tree.html", true,
+ "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>");
+ checkOutput("deprecated-list.html", true,
+ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>");
+ checkOutput("index-all.html", true,
+ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>");
+ checkOutput("help-doc.html", true,
+ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>");
+ }
+
private static final String[][] TEST1 = {
- { "com/pkg/package-summary.html",
- "This is a package page."
- },
- //With just one package, all general pages link to the single package page.
- { "com/pkg/C.html",
- "<a href=\"../../com/pkg/package-summary.html\">Package</a>"
- },
- { "com/pkg/package-tree.html",
- "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>"
- },
- { "deprecated-list.html",
- "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
- },
- { "index-all.html",
- "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
- },
- { "help-doc.html",
- "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
- },
};
- private static final String[][] TEST2 = {
- //With multiple packages, there is no package link in general pages.
- { "deprecated-list.html",
- "<li>Package</li>"
- },
- { "index-all.html",
- "<li>Package</li>"
- },
- { "help-doc.html",
- "<li>Package</li>"
- },
- };
+
+ @Test
+ void testMultiplePackages() {
+ javadoc("-d", "out-2",
+ "-sourcepath", testSrc,
+ "com.pkg", "pkg2");
+ checkExit(Exit.OK);
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
- SRC_DIR + "/com/pkg/C.java"
- };
-
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR,
- "com.pkg", "pkg2"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestPackagePage tester = new TestPackagePage();
- tester.run(ARGS1, TEST1, NO_TEST);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.printSummary();
+ //With multiple packages, there is no package link in general pages.
+ checkOutput("deprecated-list.html", true,
+ "<li>Package</li>");
+ checkOutput("index-all.html", true,
+ "<li>Package</li>");
+ checkOutput("help-doc.html", true,
+ "<li>Package</li>");
}
}
--- a/langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java Fri May 16 14:35:37 2014 -0700
@@ -28,50 +28,38 @@
* match up with a real parameters.
* Make sure inheritDoc cannot be used in an invalid param tag.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestParamTaglet
* @run main TestParamTaglet
*/
public class TestParamTaglet extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestParamTaglet tester = new TestParamTaglet();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.FAILED);
- //Input for string search tests.
- private static final String[][] TEST = {
- //Regular param tags.
- { "pkg/C.html",
- "<span class=\"paramLabel\">Parameters:</span></dt>\n" +
- "<dd><code>param1</code> - testing 1 2 3.</dd>\n" +
- "<dd><code>param2</code> - testing 1 2 3."
- },
- //Param tags that don't match with any real parameters.
- { "pkg/C.html",
- "<span class=\"paramLabel\">Parameters:</span></dt>\n" +
- "<dd><code><I>p1</I></code> - testing 1 2 3.</dd>\n" +
- "<dd><code><I>p2</I></code> - testing 1 2 3."
- },
- //{@inherit} doc misuse does not cause doclet to throw exception.
- // Param is printed with nothing inherited.
- //XXX: in the future when Configuration is available during doc inheritence,
- //print a warning for this mistake.
- { "pkg/C.html",
- "<code><I>inheritBug</I></code> -"
- },
-
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestParamTaglet tester = new TestParamTaglet();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/C.html", true,
+ //Regular param tags.
+ "<span class=\"paramLabel\">Parameters:</span></dt>\n"
+ + "<dd><code>param1</code> - testing 1 2 3.</dd>\n"
+ + "<dd><code>param2</code> - testing 1 2 3.",
+ //Param tags that don't match with any real parameters.
+ "<span class=\"paramLabel\">Parameters:</span></dt>\n"
+ + "<dd><code><I>p1</I></code> - testing 1 2 3.</dd>\n"
+ + "<dd><code><I>p2</I></code> - testing 1 2 3.",
+ //{@inherit} doc misuse does not cause doclet to throw exception.
+ // Param is printed with nothing inherited.
+ //XXX: in the future when Configuration is available during doc inheritence,
+ //print a warning for this mistake.
+ "<code><I>inheritBug</I></code> -");
}
}
--- a/langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java Fri May 16 14:35:37 2014 -0700
@@ -37,237 +37,185 @@
* Make sure when no modifier appear in the class signature, the
* signature is displayed correctly without extra space at the beginning.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestPrivateClasses
+ * @library ../lib
+ * @build JavadocTester
* @run main TestPrivateClasses
*/
public class TestPrivateClasses extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg", "pkg2"
- };
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-private",
- "pkg", "pkg2"
- };
+ public static void main(String... args) throws Exception {
+ TestPrivateClasses tester = new TestPrivateClasses();
+ tester.runTests();
+ }
- // Test output when -private flag is not used.
- private static final String[][] TEST1 = {
- // Field inheritence from non-public superclass.
- { "pkg/PublicChild.html",
- "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
- "fieldInheritedFromParent</a>"
- },
-
- // Method inheritence from non-public superclass.
- { "pkg/PublicChild.html",
- "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent-int-\">" +
- "methodInheritedFromParent</a>"
- },
+ @Test
+ void testDefault() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ "pkg", "pkg2");
+ checkExit(Exit.OK);
- // Field inheritence from non-public superinterface.
- { "pkg/PublicInterface.html",
- "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
- "fieldInheritedFromInterface</a>"
- },
-
- // Method inheritence from non-public superinterface.
- { "pkg/PublicInterface.html",
- "<a href=\"../pkg/PublicInterface.html#methodInterface-int-\">" +
- "methodInterface</a>"
- },
-
- // private class does not show up in tree
- { "pkg/PublicChild.html",
- "<ul class=\"inheritance\">\n" +
- "<li>java.lang.Object</li>\n" +
- "<li>\n" +
- "<ul class=\"inheritance\">\n" +
- "<li>pkg.PublicChild</li>\n" +
- "</ul>\n" +
- "</li>\n" +
- "</ul>"
- },
-
- // Method is documented as though it is declared in the inheriting method.
- { "pkg/PublicChild.html",
- "<pre>public void methodInheritedFromParent(int p1)"
- },
+ checkOutput("pkg/PublicChild.html", true,
+ // Field inheritence from non-public superclass.
+ "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">"
+ + "fieldInheritedFromParent</a>",
+ // Method inheritance from non-public superclass.
+ "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent-int-\">"
+ + "methodInheritedFromParent</a>",
+ // private class does not show up in tree
+ "<ul class=\"inheritance\">\n"
+ + "<li>java.lang.Object</li>\n"
+ + "<li>\n"
+ + "<ul class=\"inheritance\">\n"
+ + "<li>pkg.PublicChild</li>\n"
+ + "</ul>\n"
+ + "</li>\n"
+ + "</ul>",
+ // Method is documented as though it is declared in the inheriting method.
+ "<pre>public void methodInheritedFromParent(int p1)",
+ "<dl>\n"
+ + "<dt>All Implemented Interfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">"
+ + "PublicInterface</a></dd>\n"
+ + "</dl>");
- //Make sure implemented interfaces from private superclass are inherited
- { "pkg/PublicInterface.html",
- "<dl>\n" +
- "<dt>All Known Implementing Classes:</dt>\n" +
- "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
- "PublicChild</a></dd>\n" +
- "</dl>"},
-
- { "pkg/PublicChild.html",
- "<dl>\n" +
- "<dt>All Implemented Interfaces:</dt>\n" +
- "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
- "PublicInterface</a></dd>\n" +
- "</dl>"},
+ checkOutput("pkg/PublicChild.html", false,
+ // Should not document that a method overrides method from private class.
+ "<span class=\"overrideSpecifyLabel\">Overrides:</span>",
+ // Should not document that a method specified by private interface.
+ "<span class=\"overrideSpecifyLabel\">Specified by:</span>",
+ // Should not mention that any documentation was copied.
+ "Description copied from",
+ // Don't extend private classes or interfaces
+ "PrivateParent",
+ "PrivateInterface");
- //Generic interface method test.
- { "pkg2/C.html",
- "This comment should get copied to the implementing class"},
- };
- private static final String[][] NEGATED_TEST1 = {
- // Should not document that a method overrides method from private class.
- { "pkg/PublicChild.html",
- "<span class=\"overrideSpecifyLabel\">Overrides:</span>"},
- // Should not document that a method specified by private interface.
- { "pkg/PublicChild.html",
- "<span class=\"overrideSpecifyLabel\">Specified by:</span>"},
- { "pkg/PublicInterface.html",
- "<span class=\"overrideSpecifyLabel\">Specified by:</span>"},
- // Should not mention that any documentation was copied.
- { "pkg/PublicChild.html",
- "Description copied from"},
- { "pkg/PublicInterface.html",
- "Description copied from"},
- // Don't extend private classes or interfaces
- { "pkg/PublicChild.html",
- "PrivateParent"},
- { "pkg/PublicInterface.html",
- "PrivateInterface"},
- { "pkg/PublicChild.html",
- "PrivateInterface"},
- { "pkg/PublicInterface.html",
- "All Superinterfaces"},
- // Make inherited constant are documented correctly.
- { "constant-values.html",
- "PrivateInterface"},
+ checkOutput("pkg/PublicInterface.html", true,
+ // Field inheritance from non-public superinterface.
+ "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">"
+ + "fieldInheritedFromInterface</a>",
+ // Method inheritance from non-public superinterface.
+ "<a href=\"../pkg/PublicInterface.html#methodInterface-int-\">"
+ + "methodInterface</a>",
+ //Make sure implemented interfaces from private superclass are inherited
+ "<dl>\n"
+ + "<dt>All Known Implementing Classes:</dt>\n"
+ + "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">"
+ + "PublicChild</a></dd>\n"
+ + "</dl>");
- //Do not inherit private interface method with generic parameters.
- //This method has been implemented.
- { "pkg2/C.html",
- "<span class=\"memberNameLink\"><a href=\"../pkg2/I.html#hello-T-\">hello</a></span>"},
- };
+ checkOutput("pkg/PublicInterface.html", false,
+ "<span class=\"overrideSpecifyLabel\">Specified by:</span>",
+ "Description copied from",
+ "PrivateInterface",
+ "All Superinterfaces");
+
+ checkOutput("pkg2/C.html", true,
+ //Generic interface method test.
+ "This comment should get copied to the implementing class");
+
+ checkOutput("pkg2/C.html", false,
+ //Do not inherit private interface method with generic parameters.
+ //This method has been implemented.
+ "<span class=\"memberNameLink\"><a href=\"../pkg2/I.html#hello-T-\">hello</a></span>");
+
+ checkOutput("constant-values.html", false,
+ // Make inherited constant are documented correctly.
+ "PrivateInterface");
+ }
- // Test output when -private flag is used.
- private static final String[][] TEST2 = {
- // Field inheritence from non-public superclass.
- { "pkg/PublicChild.html",
- "Fields inherited from class pkg." +
- "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</a>"
- },
- { "pkg/PublicChild.html",
- "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
- "fieldInheritedFromParent</a>"
- },
- // Field inheritence from non-public superinterface.
- { "pkg/PublicInterface.html",
- "Fields inherited from interface pkg." +
- "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
- "PrivateInterface</a>"
- },
- { "pkg/PublicInterface.html",
- "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
- "fieldInheritedFromInterface</a>"
- },
- // Method inheritence from non-public superclass.
- { "pkg/PublicChild.html",
- "Methods inherited from class pkg." +
- "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</a>"
- },
- { "pkg/PublicChild.html",
- "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent-int-\">" +
- "methodInheritedFromParent</a>"
- },
- // Should document that a method overrides method from private class.
- { "pkg/PublicChild.html",
- "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
- "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">" +
- "methodOverridenFromParent</a></code> in class <code>" +
- "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</a></code></dd>"},
- // Should document that a method is specified by private interface.
- { "pkg/PublicChild.html",
- "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
- "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" +
- "methodInterface</a></code> in interface <code>" +
- "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
- "PrivateInterface</a></code></dd>"},
- // Method inheritence from non-public superinterface.
- { "pkg/PublicInterface.html",
- "Methods inherited from interface pkg." +
- "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
- "PrivateInterface</a>"
- },
- { "pkg/PrivateInterface.html",
- "<a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" +
- "methodInterface</a>"
- },
- // Should mention that any documentation was copied.
- { "pkg/PublicChild.html",
- "Description copied from"},
- // Extend documented private classes or interfaces
- { "pkg/PublicChild.html",
- "extends"},
- { "pkg/PublicInterface.html",
- "extends"},
- { "pkg/PublicInterface.html",
- "All Superinterfaces"},
+ @Test
+ void testPrivate() {
+ javadoc("-d", "out-private",
+ "-sourcepath", testSrc,
+ "-private",
+ "pkg", "pkg2");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/PublicChild.html", true,
+ // Field inheritence from non-public superclass.
+ "Fields inherited from class pkg."
+ + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+ + "PrivateParent</a>",
+ "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">"
+ + "fieldInheritedFromParent</a>",
+ // Method inheritence from non-public superclass.
+ "Methods inherited from class pkg."
+ + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+ + "PrivateParent</a>",
+ "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent-int-\">"
+ + "methodInheritedFromParent</a>",
+ // Should document that a method overrides method from private class.
+ "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">"
+ + "methodOverridenFromParent</a></code> in class <code>"
+ + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+ + "PrivateParent</a></code></dd>",
+ // Should document that a method is specified by private interface.
+ "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">"
+ + "methodInterface</a></code> in interface <code>"
+ + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+ + "PrivateInterface</a></code></dd>",
+ // Should mention that any documentation was copied.
+ "Description copied from",
+ // Extend documented private classes or interfaces
+ "extends",
+ "<dl>\n"
+ + "<dt>All Implemented Interfaces:</dt>\n"
+ + "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+ + "PrivateInterface</a>, "
+ + "<a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">"
+ + "PublicInterface</a></dd>\n"
+ + "</dl>",
+ "<pre>public class <span class=\"typeNameLabel\">PublicChild</span>");
- //Make sure implemented interfaces from private superclass are inherited
- { "pkg/PublicInterface.html",
- "<dl>\n" +
- "<dt>All Known Implementing Classes:</dt>\n" +
- "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</a>, " +
- "<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild" +
- "</a></dd>\n" +
- "</dl>"},
-
- { "pkg/PublicChild.html",
- "<dl>\n" +
- "<dt>All Implemented Interfaces:</dt>\n" +
- "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
- "PrivateInterface</a>, " +
- "<a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
- "PublicInterface</a></dd>\n" +
- "</dl>"},
-
- //Since private flag is used, we can document that private interface method
- //with generic parameters has been implemented.
- { "pkg2/C.html",
- "<span class=\"descfrmTypeLabel\">Description copied from interface: <code>" +
- "<a href=\"../pkg2/I.html#hello-T-\">I</a></code></span>"},
+ checkOutput("pkg/PublicInterface.html", true,
+ // Field inheritence from non-public superinterface.
+ "Fields inherited from interface pkg."
+ + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+ + "PrivateInterface</a>",
+ "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">"
+ + "fieldInheritedFromInterface</a>",
+ // Method inheritance from non-public superinterface.
+ "Methods inherited from interface pkg."
+ + "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">"
+ + "PrivateInterface</a>",
+ // Extend documented private classes or interfaces
+ "extends",
+ "All Superinterfaces",
+ //Make sure implemented interfaces from private superclass are inherited
+ "<dl>\n"
+ + "<dt>All Known Implementing Classes:</dt>\n"
+ + "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">"
+ + "PrivateParent</a>, "
+ + "<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild"
+ + "</a></dd>\n"
+ + "</dl>");
- { "pkg2/C.html",
- "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
- "<dd><code><a href=\"../pkg2/I.html#hello-T-\">hello</a></code>" +
- " in interface <code>" +
- "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>" +
- "<java.lang.String></code></dd>"},
-
- //Make sure when no modifier appear in the class signature, the
- //signature is displayed correctly without extra space at the beginning.
- { "pkg/PrivateParent.html",
- "<pre>class <span class=\"typeNameLabel\">PrivateParent</span>"},
+ checkOutput("pkg/PrivateInterface.html", true,
+ "<a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">"
+ + "methodInterface</a>"
+ );
- { "pkg/PublicChild.html",
- "<pre>public class <span class=\"typeNameLabel\">PublicChild</span>"},
- };
- private static final String[][] NEGATED_TEST2 = {
- { "pkg/PrivateParent.html",
- "<pre> class <span class=\"typeNameLabel\">PrivateParent</span>"},
- };
+ checkOutput("pkg2/C.html", true,
+ //Since private flag is used, we can document that private interface method
+ //with generic parameters has been implemented.
+ "<span class=\"descfrmTypeLabel\">Description copied from interface: <code>"
+ + "<a href=\"../pkg2/I.html#hello-T-\">I</a></code></span>",
+ "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n"
+ + "<dd><code><a href=\"../pkg2/I.html#hello-T-\">hello</a></code>"
+ + " in interface <code>"
+ + "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>"
+ + "<java.lang.String></code></dd>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestPrivateClasses tester = new TestPrivateClasses();
- tester.run(ARGS1, TEST1, NEGATED_TEST1);
- tester.run(ARGS2, TEST2, NEGATED_TEST2);
- tester.printSummary();
+ checkOutput("pkg/PrivateParent.html", true,
+ //Make sure when no modifier appear in the class signature, the
+ //signature is displayed correctly without extra space at the beginning.
+ "<pre>class <span class=\"typeNameLabel\">PrivateParent</span>");
+
+ checkOutput("pkg/PrivateParent.html", false,
+ "<pre> class <span class=\"typeNameLabel\">PrivateParent</span>");
}
}
--- a/langtools/test/com/sun/javadoc/testProfiles/TestProfiles.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testProfiles/TestProfiles.java Fri May 16 14:35:37 2014 -0700
@@ -26,194 +26,174 @@
* @bug 8006124 8009684 8016921 8023700 8024096 8008164 8026567 8026770
* @summary Test javadoc support for profiles.
* @author Bhavesh Patel, Evgeniya Stepanova
- * @library ../lib/
- * @build JavadocTester TestProfiles
+ * @library ../lib
+ * @build JavadocTester
* @run main TestProfiles
*/
public class TestProfiles extends JavadocTester {
- //Test information.
- private static final String PROFILE_OUTPUT_DIR = OUTPUT_DIR + "-1";
- private static final String PACKAGE_OUTPUT_DIR = OUTPUT_DIR + "-2";
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[]{
- "-d", PROFILE_OUTPUT_DIR, "-sourcepath", SRC_DIR, "-Xprofilespath",
- SRC_DIR + "/profile-rtjar-includes.txt", "pkg1", "pkg2",
- "pkg3", "pkg4", "pkg5", "pkgDeprecated"
- };
- private static final String[] ARGS2 = new String[]{
- "-d", PACKAGE_OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2",
- "pkg3", "pkg4", "pkg5"
- };
- //Input for string tests for profiles.
- private static final String[][] PROFILES_TEST = {
+ public static void main(String... args) throws Exception {
+ TestProfiles tester = new TestProfiles();
+ tester.runTests();
+ }
+
+ @Test
+ void testProfiles() {
+ javadoc("-d", "out-profiles",
+ "-sourcepath", testSrc,
+ "-Xprofilespath", testSrc("profile-rtjar-includes.txt"),
+ "pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkgDeprecated");
+ checkExit(Exit.OK);
+
// Tests for profile-overview-frame.html listing all profiles.
- { "profile-overview-frame.html",
- "<span><a href=\"overview-frame.html\" "
- + "target=\"packageListFrame\">All Packages</a></span>"
- },
- { "profile-overview-frame.html",
- "<li><a href=\"compact1-frame.html\" target=\"packageListFrame\">"
- + "compact1</a></li>"
- },
+ checkOutput("profile-overview-frame.html", true,
+ "<span><a href=\"overview-frame.html\" "
+ + "target=\"packageListFrame\">All Packages</a></span>",
+ "<li><a href=\"compact1-frame.html\" target=\"packageListFrame\">"
+ + "compact1</a></li>");
+
// Tests for profileName-frame.html listing all packages in a profile.
- { "compact2-frame.html",
- "<span><a href=\"overview-frame.html\" target=\"packageListFrame\">"
- + "All Packages</a></span><span><a href=\"profile-overview-frame.html\" "
- + "target=\"packageListFrame\">All Profiles</a></span>"
- },
- { "compact2-frame.html",
- "<li><a href=\"pkg4/compact2-package-frame.html\" "
- + "target=\"packageFrame\">pkg4</a></li>"
- },
+ checkOutput("compact2-frame.html", true,
+ "<span><a href=\"overview-frame.html\" target=\"packageListFrame\">"
+ + "All Packages</a></span><span><a href=\"profile-overview-frame.html\" "
+ + "target=\"packageListFrame\">All Profiles</a></span>",
+ "<li><a href=\"pkg4/compact2-package-frame.html\" "
+ + "target=\"packageFrame\">pkg4</a></li>");
+
// Test for profileName-package-frame.html listing all types in a
// package of a profile.
- { "pkg2/compact2-package-frame.html",
- "<a href=\"../compact2-summary.html\" target=\"classFrame\">"
- + "compact2</a> - <a href=\"../pkg2/compact2-package-summary.html\" "
- + "target=\"classFrame\">pkg2</a>"
- },
+ checkOutput("pkg2/compact2-package-frame.html", true,
+ "<a href=\"../compact2-summary.html\" target=\"classFrame\">"
+ + "compact2</a> - <a href=\"../pkg2/compact2-package-summary.html\" "
+ + "target=\"classFrame\">pkg2</a>");
+
// Tests for profileName-summary.html listing the summary for a profile.
- { "compact2-summary.html",
- "<li><a href=\"compact1-summary.html\">Prev Profile</a></li>\n"
- + "<li><a href=\"compact3-summary.html\">Next Profile</a></li>"
- },
- { "compact2-summary.html",
- "<h1 title=\"Profile\" class=\"title\">Profile compact2</h1>"
- },
- { "compact2-summary.html",
- "<h3><a href=\"pkg2/compact2-package-summary.html\" "
- + "target=\"classFrame\">pkg2</a></h3>"
- },
- { "compact2-summary.html",
- "<ul class=\"blockList\">\n" +
- "<li class=\"blockList\">\n"
- + "<h3><a href=\"pkg2/compact2-package-summary.html\" target=\"classFrame\">"
- + "pkg2</a></h3>\n" +
- "<table class=\"typeSummary\" border=\"0\" "
- + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
- + "listing classes, and an explanation\">"
- },
- { "compact2-summary.html",
- "<ul class=\"blockList\">\n" +
- "<li class=\"blockList\">\n"
- + "<h3><a href=\"pkg4/compact2-package-summary.html\" target=\"classFrame\">"
- + "pkg4</a></h3>\n" +
- "<table class=\"typeSummary\" border=\"0\" "
- + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
- + "listing classes, and an explanation\">"
- },
+ checkOutput("compact2-summary.html", true,
+ "<li><a href=\"compact1-summary.html\">Prev Profile</a></li>\n"
+ + "<li><a href=\"compact3-summary.html\">Next Profile</a></li>",
+ "<h1 title=\"Profile\" class=\"title\">Profile compact2</h1>",
+ "<h3><a href=\"pkg2/compact2-package-summary.html\" "
+ + "target=\"classFrame\">pkg2</a></h3>",
+ "<ul class=\"blockList\">\n"
+ + "<li class=\"blockList\">\n"
+ + "<h3><a href=\"pkg2/compact2-package-summary.html\" target=\"classFrame\">"
+ + "pkg2</a></h3>\n"
+ + "<table class=\"typeSummary\" border=\"0\" "
+ + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
+ + "listing classes, and an explanation\">",
+ "<ul class=\"blockList\">\n"
+ + "<li class=\"blockList\">\n"
+ + "<h3><a href=\"pkg4/compact2-package-summary.html\" target=\"classFrame\">"
+ + "pkg4</a></h3>\n"
+ + "<table class=\"typeSummary\" border=\"0\" "
+ + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
+ + "listing classes, and an explanation\">");
+
+
// Tests for profileName-package-summary.html listing the summary for a
// package in a profile.
- { "pkg5/compact3-package-summary.html",
- "<li><a href=\"../pkg4/compact3-package-summary.html\">Prev Package"
- + "</a></li>"
- },
- { "pkg5/compact3-package-summary.html",
- "<div class=\"subTitle\">compact3</div>"
- },
- { "pkg5/compact3-package-summary.html",
- "<ul class=\"blockList\">\n" +
- "<li class=\"blockList\">\n"
- + "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
- + "cellspacing=\"0\" summary=\"Interface Summary table, listing "
- + "interfaces, and an explanation\">"
- },
- //Test for "overview-frame.html" showing the "All Profiles" link.
- { "overview-frame.html",
- "<span><a href=\"profile-overview-frame.html\" "
- + "target=\"packageListFrame\">All Profiles</a></span>"
- },
- //Test for "className.html" showing the profile information for the type.
- { "pkg2/Class1Pkg2.html",
- "<div class=\"subTitle\">compact1, compact2, compact3</div>"
- },
- { "index.html",
- "<frame src=\"overview-frame.html\" name=\"packageListFrame\" " +
- "title=\"All Packages\">"
- },
- //Test for "overview-summary.html" showing the profile list.
- { "overview-summary.html",
- "<ul>\n" +
- "<li><a href=\"compact1-summary.html\" target=\"classFrame\">" +
- "compact1</a></li>\n" +
- "<li><a href=\"compact2-summary.html\" " +
- "target=\"classFrame\">compact2</a></li>\n" +
- "<li><a href=\"" +
- "compact3-summary.html\" target=\"classFrame\">compact3</a></li>\n" +
- "</ul>"
- },
- //Test deprecated class in profiles
- { "compact1-summary.html",
- "<td class=\"colFirst\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">Class1Pkg2</a></td>\n"
- + "<td class=\"colLast\">Deprecated"
- },
- { "deprecated-list.html",
- "<td class=\"colOne\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">pkg2.Class1Pkg2</a>\n"
- +"<div class=\"block\"><span class=\"deprecationComment\">Class1Pkg2. This class is deprecated</span></div>"
- },
+ checkOutput("pkg5/compact3-package-summary.html", true,
+ "<li><a href=\"../pkg4/compact3-package-summary.html\">Prev Package"
+ + "</a></li>",
+ "<div class=\"subTitle\">compact3</div>",
+ "<ul class=\"blockList\">\n"
+ + "<li class=\"blockList\">\n"
+ + "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
+ + "cellspacing=\"0\" summary=\"Interface Summary table, listing "
+ + "interfaces, and an explanation\">");
+
+ // Test for "overview-frame.html" showing the "All Profiles" link.
+ checkOutput("overview-frame.html", true,
+ "<span><a href=\"profile-overview-frame.html\" "
+ + "target=\"packageListFrame\">All Profiles</a></span>");
+
+ // Test for "className.html" showing the profile information for the type.
+ checkOutput("pkg2/Class1Pkg2.html", true,
+ "<div class=\"subTitle\">compact1, compact2, compact3</div>");
+
+ checkOutput("index.html", true,
+ "<frame src=\"overview-frame.html\" name=\"packageListFrame\" "
+ + "title=\"All Packages\">");
+
+ // Test for "overview-summary.html" showing the profile list.
+ checkOutput("overview-summary.html", true,
+ "<ul>\n"
+ + "<li><a href=\"compact1-summary.html\" target=\"classFrame\">"
+ + "compact1</a></li>\n"
+ + "<li><a href=\"compact2-summary.html\" "
+ + "target=\"classFrame\">compact2</a></li>\n"
+ + "<li><a href=\""
+ + "compact3-summary.html\" target=\"classFrame\">compact3</a></li>\n"
+ + "</ul>");
+
+ // Test deprecated class in profiles
+ checkOutput("compact1-summary.html", true,
+ "<td class=\"colFirst\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">Class1Pkg2</a></td>\n"
+ + "<td class=\"colLast\">Deprecated");
+
+ checkOutput("deprecated-list.html", true,
+ "<td class=\"colOne\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">pkg2.Class1Pkg2</a>\n"
+ + "<div class=\"block\"><span class=\"deprecationComment\">Class1Pkg2. This class is deprecated</span></div>");
+
//Test deprecated package in profile
- { "deprecated-list.html",
- "<td class=\"colOne\"><a href=\"pkgDeprecated/package-summary.html\">pkgDeprecated</a>\n"
- +"<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
- + " Use pkg1.</span></div>"
- },
- { "pkgDeprecated/package-summary.html",
- "<div class=\"deprecatedContent\"><span class=\"deprecatedLabel\">Deprecated.</span>\n"
- + "<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
- + " Use pkg1.</span></div>"
- },
- // need to add teststring when JDK-8015496 will be fixed
- //Test exception in profiles
- { "compact1-summary.html",
- "<table class=\"typeSummary\" "
- + "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
- + "summary=\"Exception Summary table, listing exceptions, and an explanation\">\n"
- + "<caption><span>Exception Summary</span><span class=\"tabEnd\">"
- + " </span></caption>\n" +
- "<tr>\n" +
- "<th class=\"colFirst\" "
- + "scope=\"col\">Exception</th>\n" +
- "<th class=\"colLast\" scope=\"col\">"
- + "Description</th>\n" +
- "</tr>\n" +
- "<tbody>\n" +
- "<tr class=\"altColor\">\n"
- + "<td class=\"colFirst\"><a href=\"pkg2/ClassException.html\""
- + " title=\"class in pkg2\">ClassException</a></td>"
- },
+ checkOutput("deprecated-list.html", true,
+ "<td class=\"colOne\"><a href=\"pkgDeprecated/package-summary.html\">pkgDeprecated</a>\n"
+ + "<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
+ + " Use pkg1.</span></div>");
+
+ checkOutput("pkgDeprecated/package-summary.html", true,
+ "<div class=\"deprecatedContent\"><span class=\"deprecatedLabel\">Deprecated.</span>\n"
+ + "<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
+ + " Use pkg1.</span></div>");
+
+ // TODO: need to add teststring when JDK-8015496 will be fixed
+ // Test exception in profiles
+ checkOutput("compact1-summary.html", true,
+ "<table class=\"typeSummary\" "
+ + "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
+ + "summary=\"Exception Summary table, listing exceptions, and an explanation\">\n"
+ + "<caption><span>Exception Summary</span><span class=\"tabEnd\">"
+ + " </span></caption>\n"
+ + "<tr>\n"
+ + "<th class=\"colFirst\" scope=\"col\">Exception</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">"
+ + "Description</th>\n"
+ + "</tr>\n"
+ + "<tbody>\n"
+ + "<tr class=\"altColor\">\n"
+ + "<td class=\"colFirst\"><a href=\"pkg2/ClassException.html\""
+ + " title=\"class in pkg2\">ClassException</a></td>");
+
//Test errors in profiles
- { "compact1-summary.html",
- "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
- + "summary=\"Error Summary table, listing errors, and an explanation\">\n"
- + "<caption><span>Error Summary</span><span class=\"tabEnd\"> "
- + "</span></caption>\n" +
- "<tr>\n" +
- "<th class=\"colFirst\""
- + " scope=\"col\">Error</th>\n" +
- "<th class=\"colLast\" "
- + "scope=\"col\">Description</th>\n" +
- "</tr>\n" +
- "<tbody>\n"
- + "<tr class=\"altColor\">\n" +
- "<td class=\"colFirst\">"
- + "<a href=\"pkg2/ClassError.html\" title=\"class in pkg2\">ClassError</a></td>"
- }
- };
- private static final String[][] PROFILES_NEGATED_TEST = {
- { "pkg3/Class2Pkg3.html",
- "<div class=\"subTitle\">compact1"
- },
- { "pkg3/Interface1Pkg3.html",
- "<div class=\"subTitle\">compact1"
- },
- { "pkg4/compact2-package-frame.html",
+ checkOutput("compact1-summary.html", true,
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
+ + "summary=\"Error Summary table, listing errors, and an explanation\">\n"
+ + "<caption><span>Error Summary</span><span class=\"tabEnd\"> "
+ + "</span></caption>\n"
+ + "<tr>\n"
+ + "<th class=\"colFirst\" scope=\"col\">Error</th>\n"
+ + "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ + "</tr>\n"
+ + "<tbody>\n"
+ + "<tr class=\"altColor\">\n"
+ + "<td class=\"colFirst\">"
+ + "<a href=\"pkg2/ClassError.html\" title=\"class in pkg2\">ClassError</a></td>");
+
+ // negative tests
+ checkOutput("pkg3/Class2Pkg3.html", false,
+ "<div class=\"subTitle\">compact1");
+
+ checkOutput("pkg3/Interface1Pkg3.html", false,
+ "<div class=\"subTitle\">compact1");
+
+ checkOutput("pkg4/compact2-package-frame.html", false,
"<li><a href=\"Anno1Pkg4.html\" title=\"annotation in pkg4\" "
- + "target=\"classFrame\">Anno1Pkg4</a></li>"
- },
- { "compact1-summary.html","<li>Use</li>"
- },
- { "compact2-summary.html",
+ + "target=\"classFrame\">Anno1Pkg4</a></li>");
+
+ checkOutput("compact1-summary.html", false,
+ "<li>Use</li>");
+
+ checkOutput("compact2-summary.html", false,
"<ul class=\"blockList\">\n" +
"<li class=\"blockList\">\n"
+ "<h3><a href=\"pkg2/compact2-package-summary.html\" target=\"classFrame\">"
@@ -221,68 +201,59 @@
"<li class=\"blockList\">\n"
+ "<table class=\"typeSummary\" border=\"0\" "
+ "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
- + "listing classes, and an explanation\">"
- },
- { "pkg5/compact3-package-summary.html",
+ + "listing classes, and an explanation\">");
+
+ checkOutput("pkg5/compact3-package-summary.html", false,
"<ul class=\"blockList\">\n" +
"<li class=\"blockList\">\n"
+ "<li class=\"blockList\">\n"
+ "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
+ "cellspacing=\"0\" summary=\"Interface Summary table, listing "
- + "interfaces, and an explanation\">"
- }
- };
- private static final String[][] PACKAGES_TEST = {
- { "overview-frame.html",
- "<h2 title=\"Packages\">Packages</h2>"
- },
- { "pkg4/package-frame.html",
- "<h1 class=\"bar\"><a href=\"../pkg4/package-summary.html\" "
- + "target=\"classFrame\">pkg4</a></h1>"
- },
- { "pkg4/package-summary.html",
- "<div class=\"header\">\n" +
- "<h1 title=\"Package\" "
- + "class=\"title\">Package pkg4</h1>\n" +
- "</div>"
- }
- };
- private static final String[][] PACKAGES_NEGATED_TEST = {
- { "overview-frame.html",
- "<span><a href=\"profile-overview-frame.html\" "
- + "target=\"packageListFrame\">All Profiles</a></span>"
- },
- { "pkg2/Class1Pkg2.html",
- "<div class=\"subTitle\">compact1, compact2, compact3</div>"
- },
- { "overview-summary.html",
- "<ul>\n" +
- "<li><a href=\"compact1-summary.html\" target=\"classFrame\">" +
- "compact1</a></li>\n" +
- "<li><a href=\"compact2-summary.html\" " +
- "target=\"classFrame\">compact2</a></li>\n" +
- "<li><a href=\"" +
- "compact3-summary.html\" target=\"classFrame\">compact3</a></li>\n" +
- "</ul>"
- }
- };
- private static final String[] PACKAGES_NEGATED_FILE_TEST = {
- "profile-overview-frame.html",
- "compact2-frame.html",
- "pkg2/compact2-package-frame.html",
- "compact2-summary.html",
- "pkg5/compact3-package-summary.html"
- };
+ + "interfaces, and an explanation\">");
+ }
+
+ @Test
+ void testPackages() {
+ javadoc("-d", "out-packages",
+ "-sourcepath", testSrc,
+ "pkg1", "pkg2", "pkg3", "pkg4", "pkg5");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-frame.html", true,
+ "<h2 title=\"Packages\">Packages</h2>");
+
+ checkOutput("pkg4/package-frame.html", true,
+ "<h1 class=\"bar\"><a href=\"../pkg4/package-summary.html\" "
+ + "target=\"classFrame\">pkg4</a></h1>");
+
+ checkOutput("pkg4/package-summary.html", true,
+ "<div class=\"header\">\n"
+ + "<h1 title=\"Package\" "
+ + "class=\"title\">Package pkg4</h1>\n"
+ + "</div>");
- /**
- * The entry point of the test.
- *
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestProfiles tester = new TestProfiles();
- tester.run(ARGS1, PROFILES_TEST, PROFILES_NEGATED_TEST);
- tester.run(ARGS2, PACKAGES_TEST, PACKAGES_NEGATED_TEST, NO_FILE_TEST, PACKAGES_NEGATED_FILE_TEST);
- tester.printSummary();
+ checkOutput("overview-frame.html", false,
+ "<span><a href=\"profile-overview-frame.html\" "
+ + "target=\"packageListFrame\">All Profiles</a></span>");
+
+ checkOutput("pkg2/Class1Pkg2.html", false,
+ "<div class=\"subTitle\">compact1, compact2, compact3</div>");
+
+ checkOutput("overview-summary.html", false,
+ "<ul>\n"
+ + "<li><a href=\"compact1-summary.html\" target=\"classFrame\">"
+ + "compact1</a></li>\n"
+ + "<li><a href=\"compact2-summary.html\" "
+ + "target=\"classFrame\">compact2</a></li>\n"
+ + "<li><a href=\""
+ + "compact3-summary.html\" target=\"classFrame\">compact3</a></li>\n"
+ + "</ul>");
+
+ checkFiles(false,
+ "profile-overview-frame.html",
+ "compact2-frame.html",
+ "pkg2/compact2-package-frame.html",
+ "compact2-summary.html",
+ "pkg5/compact3-package-summary.html");
}
}
--- a/langtools/test/com/sun/javadoc/testProfiles/TestProfilesConfiguration.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testProfiles/TestProfilesConfiguration.java Fri May 16 14:35:37 2014 -0700
@@ -26,97 +26,98 @@
* @bug 8006124 8009684 8015663 8015496 8026567
* @summary Test javadoc options support for profiles.
* @author Evgeniya Stepanova
- * @library ../lib/
- * @build JavadocTester TestProfilesConfiguration
+ * @library ../lib
+ * @build JavadocTester
* @run main TestProfilesConfiguration
*/
public class TestProfilesConfiguration extends JavadocTester {
- //Test information.
- private static final String PROFILE_CONFIGURATION_OUTPUT_DIR = OUTPUT_DIR + "-3";
- private static final String NODEPR_NOPKGS_OUTPUT_DIR = OUTPUT_DIR + "-4";
- //Javadoc arguments.
- private static final String[] ARGS3 = new String[]{
- "-d", PROFILE_CONFIGURATION_OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-nocomment", "-keywords", "-Xprofilespath", SRC_DIR +
- "/profile-rtjar-includes.txt", "-doctitle", "Simple doctitle",
- "-use", "pkg3", "pkg1", "pkg2", "pkg4",
- "pkg5", "-packagesheader", "Simple packages header","pkgDeprecated"
- };
- private static final String[] ARGS4 = new String[]{
- "-d", NODEPR_NOPKGS_OUTPUT_DIR, "-sourcepath", SRC_DIR, "-nocomment",
- "-nodeprecated", "-keywords", "-Xprofilespath", SRC_DIR +
- "/profile-rtjar-includes-nopkgs.txt", "-doctitle", "Simple doctitle",
- "-use", "-packagesheader", "Simple packages header",
- "pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkgDeprecated"
- };
- private static final String[][] NODEPR_NOPKGS_TEST = {
- { "overview-summary.html",
- "<ul>\n" +
- "<li><a href=\"compact2-summary.html\" target=\"classFrame\">" +
- "compact2</a></li>\n" +
- "<li><a href=\"compact3-summary.html\" target=\"" +
- "classFrame\">compact3</a></li>\n" +
- "</ul>"
- },
- { "profile-overview-frame.html",
- "<ul title=\"Profiles\">\n" +
- "<li><a href=\"compact2-frame.html\" target=\"packageListFrame\">" +
- "compact2</a></li>\n" +
- "<li><a href=\"compact3-frame.html\" target=\"" +
- "packageListFrame\">compact3</a></li>\n" +
- "</ul>"
- }
- };
- private static final String[][] NODEPR_NOPKGS_NEGATED_TEST = {
- { "overview-summary.html",
- "compact1"
- }
- };
+ public static void main(String... args) throws Exception {
+ TestProfilesConfiguration tester = new TestProfilesConfiguration();
+ tester.runTests();
+// tester.run(ARGS3, PROFILES_CONFIGURATION_TEST, PROFILES_CONFIGURATION_NEGATED_TEST);
+// tester.run(ARGS4, NODEPR_NOPKGS_TEST, NODEPR_NOPKGS_NEGATED_TEST);
+// tester.printSummary();
+ }
+
+ @Test
+ void testProfiles() {
+ javadoc("-d", "out-profiles",
+ "-sourcepath", testSrc,
+ "-nocomment",
+ "-keywords",
+ "-Xprofilespath", testSrc("profile-rtjar-includes.txt"),
+ "-doctitle", "Simple doctitle",
+ "-use",
+ "-packagesheader", "Simple packages header",
+ "pkg3", "pkg1", "pkg2", "pkg4", "pkg5", "pkgDeprecated");
+ checkExit(Exit.OK);
+
+ checkOutput("compact1-summary.html", true,
+ //-use option test string fo profile view page
+ "<li>Use</li>",
+ // -keywords option test string for profiles
+ "<meta name=\"keywords\" content=\"compact1 profile\">",
+ // Deprecated information on a package
+ "<h3><a href=\"pkgDeprecated/compact1-package-summary.html\" target=\""
+ + "classFrame\">pkgDeprecated</a></h3>\n"
+ + "<div class=\"deprecatedContent\">"
+ + "<span class=\"deprecatedLabel\">Deprecated.</span></div>"
+ );
+
+ //-nocomments option test string
+ checkOutput("compact1-summary.html", false,
+ "<div class=\"block\"><i>Class1Pkg2.</i></div>"
+ );
+
+ // -doctitle option test string
+ checkOutput("overview-summary.html", true,
+ "<div class=\"header\">\n"
+ + "<h1 class=\"title\">Simple doctitle</h1>"
+ );
- private static final String[][] PROFILES_CONFIGURATION_TEST = {
- //-use option test string fo profile view page
- { "compact1-summary.html","<li>Use</li>"
- },
- //-doctitle option test string
- { "overview-summary.html",
- "<div class=\"header\">\n" +
- "<h1 class=\"title\">Simple doctitle</h1>"
- },
- //-packagesheader option test string fo profiles
- { "profile-overview-frame.html",
- "<h1 title=\"Simple packages header\" class=\"bar\">Simple packages header</h1>"
- },
- //-keywords option test string for profiles
- { "compact1-summary.html",
- "<meta name=\"keywords\" content=\"compact1 profile\">"
- },
- //Deprecated information on a package
- { "compact1-summary.html",
- "<h3><a href=\"pkgDeprecated/compact1-package-summary.html\" target=\"" +
- "classFrame\">pkgDeprecated</a></h3>\n" +
- "<div class=\"deprecatedContent\">" +
- "<span class=\"deprecatedLabel\">Deprecated.</span></div>"
- }
- };
- private static final String[][] PROFILES_CONFIGURATION_NEGATED_TEST = {
- //-nocomments option test string
- { "compact1-summary.html",
- "<div class=\"block\"><i>Class1Pkg2.</i></div>"
- }
- };
+ // -packagesheader option test string fo profiles
+ checkOutput("profile-overview-frame.html", true,
+ "<h1 title=\"Simple packages header\" class=\"bar\">Simple packages header</h1>"
+ );
+ }
+
+
+ @Test
+ void testNoDeprNoPackages() {
+ javadoc("-d", "out-noDeprNoPackages",
+ "-sourcepath", testSrc,
+ "-nocomment",
+ "-nodeprecated",
+ "-keywords",
+ "-Xprofilespath", testSrc("profile-rtjar-includes-nopkgs.txt"),
+ "-doctitle", "Simple doctitle",
+ "-use",
+ "-packagesheader", "Simple packages header",
+ "pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkgDeprecated");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- *
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestProfilesConfiguration tester = new TestProfilesConfiguration();
- tester.run(ARGS3, PROFILES_CONFIGURATION_TEST,
- PROFILES_CONFIGURATION_NEGATED_TEST);
- tester.run(ARGS4, NODEPR_NOPKGS_TEST,
- NODEPR_NOPKGS_NEGATED_TEST);
- tester.printSummary();
+ checkOutput("overview-summary.html", true,
+ "<ul>\n"
+ + "<li><a href=\"compact2-summary.html\" target=\"classFrame\">"
+ + "compact2</a></li>\n"
+ + "<li><a href=\"compact3-summary.html\" target=\""
+ + "classFrame\">compact3</a></li>\n"
+ + "</ul>"
+ );
+
+ checkOutput("profile-overview-frame.html", true,
+ "<ul title=\"Profiles\">\n"
+ + "<li><a href=\"compact2-frame.html\" target=\"packageListFrame\">"
+ + "compact2</a></li>\n"
+ + "<li><a href=\"compact3-frame.html\" target=\""
+ + "packageListFrame\">compact3</a></li>\n"
+ + "</ul>"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "compact1"
+ );
+
}
}
--- a/langtools/test/com/sun/javadoc/testRecurseSubPackages/TestRecurseSubPackages.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRecurseSubPackages/TestRecurseSubPackages.java Fri May 16 14:35:37 2014 -0700
@@ -26,35 +26,33 @@
* @bug 4074234
* @summary Make Javadoc capable of traversing/recursing all of given subpackages.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestRecurseSubPackages
* @run main TestRecurseSubPackages
*/
public class TestRecurseSubPackages extends JavadocTester {
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-subpackages", "pkg1", "-exclude", "pkg1.pkg2.packageToExclude"
- };
+ public static void main(String... args) throws Exception {
+ TestRecurseSubPackages tester = new TestRecurseSubPackages();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- String[][] tests = new String[6][2];
- for (int i = 0; i < tests.length; i++) {
- tests[i][0] = "allclasses-frame.html";
- tests[i][1] = "C" + (i+1) + ".html";
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-subpackages", "pkg1",
+ "-exclude", "pkg1.pkg2.packageToExclude");
+ checkExit(Exit.OK);
+
+ for (int i = 1; i <= 6; i++) {
+ checkOutput("allclasses-frame.html", true,
+ "C" + i + ".html");
}
- String[][] negatedTests = new String[][] {
- { "allclasses-frame.html", "DummyClass.html"}
- };
- TestRecurseSubPackages tester = new TestRecurseSubPackages();
- tester.run(ARGS, tests, negatedTests);
- tester.printSummary();
+
+ checkOutput("allclasses-frame.html", false,
+ "DummyClass.html");
}
+
}
--- a/langtools/test/com/sun/javadoc/testRelativeLinks/TestRelativeLinks.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRelativeLinks/TestRelativeLinks.java Fri May 16 14:35:37 2014 -0700
@@ -27,81 +27,64 @@
* @summary Test to make sure that relative paths are redirected in the
* output so that they are not broken.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestRelativeLinks
* @run main TestRelativeLinks
*/
public class TestRelativeLinks extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR, "pkg", "pkg2"
- };
+ public static void main(String... args) throws Exception {
+ TestRelativeLinks tester = new TestRelativeLinks();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- //These relative paths should stay relative because they appear
- //in the right places.
- { "pkg/C.html",
- "<a href=\"relative-class-link.html\">relative class link</a>"},
- { "pkg/C.html",
- "<a href=\"relative-field-link.html\">relative field link</a>"},
- { "pkg/C.html",
- "<a href=\"relative-method-link.html\">relative method link</a>"},
- { "pkg/package-summary.html",
- "<a href=\"relative-package-link.html\">relative package link</a>"},
- { "pkg/C.html",
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-use",
+ "-sourcepath", testSrc,
+ "pkg", "pkg2");
+ checkExit(Exit.OK);
+
+ // These relative paths should stay relative because they appear
+ // in the right places.
+ checkOutput("pkg/C.html", true,
+ "<a href=\"relative-class-link.html\">relative class link</a>",
+ "<a href=\"relative-field-link.html\">relative field link</a>",
+ "<a href=\"relative-method-link.html\">relative method link</a>",
" <a\n" +
- " href=\"relative-multi-line-link.html\">relative-multi-line-link</a>."},
-
- //These relative paths should be redirected because they are in different
- //places.
+ " href=\"relative-multi-line-link.html\">relative-multi-line-link</a>.");
+ checkOutput("pkg/package-summary.html", true,
+ "<a href=\"relative-package-link.html\">relative package link</a>");
- //INDEX PAGE
- { "index-all.html",
- "<a href=\"./pkg/relative-class-link.html\">relative class link</a>"},
- { "index-all.html",
- "<a href=\"./pkg/relative-field-link.html\">relative field link</a>"},
- { "index-all.html",
- "<a href=\"./pkg/relative-method-link.html\">relative method link</a>"},
- { "index-all.html",
- "<a href=\"./pkg/relative-package-link.html\">relative package link</a>"},
- { "index-all.html",
+ // These relative paths should be redirected because they are in different
+ // places.
+
+ // INDEX PAGE
+ checkOutput("index-all.html", true,
+ "<a href=\"./pkg/relative-class-link.html\">relative class link</a>",
+ "<a href=\"./pkg/relative-field-link.html\">relative field link</a>",
+ "<a href=\"./pkg/relative-method-link.html\">relative method link</a>",
+ "<a href=\"./pkg/relative-package-link.html\">relative package link</a>",
" <a\n" +
- " href=\"./pkg/relative-multi-line-link.html\">relative-multi-line-link</a>."},
-
-
- //PACKAGE USE
- { "pkg/package-use.html",
- "<a href=\"../pkg/relative-package-link.html\">relative package link</a>."},
- { "pkg/package-use.html",
- "<a href=\"../pkg/relative-class-link.html\">relative class link</a>"},
+ " href=\"./pkg/relative-multi-line-link.html\">relative-multi-line-link</a>.");
- //CLASS_USE
- { "pkg/class-use/C.html",
- "<a href=\"../../pkg/relative-field-link.html\">relative field link</a>"},
- { "pkg/class-use/C.html",
- "<a href=\"../../pkg/relative-method-link.html\">relative method link</a>"},
- { "pkg/class-use/C.html",
- "<a href=\"../../pkg/relative-package-link.html\">relative package link</a>"},
- { "pkg/class-use/C.html",
- " <a\n" +
- " href=\"../../pkg/relative-multi-line-link.html\">relative-multi-line-link</a>."},
+ // PACKAGE USE
+ checkOutput("pkg/package-use.html", true,
+ "<a href=\"../pkg/relative-package-link.html\">relative package link</a>.",
+ "<a href=\"../pkg/relative-class-link.html\">relative class link</a>");
- //PACKAGE OVERVIEW
- { "overview-summary.html",
- "<a href=\"./pkg/relative-package-link.html\">relative package link</a>"},
- };
+ // CLASS_USE
+ checkOutput("pkg/class-use/C.html", true,
+ "<a href=\"../../pkg/relative-field-link.html\">relative field link</a>",
+ "<a href=\"../../pkg/relative-method-link.html\">relative method link</a>",
+ "<a href=\"../../pkg/relative-package-link.html\">relative package link</a>",
+ " <a\n" +
+ " href=\"../../pkg/relative-multi-line-link.html\">relative-multi-line-link</a>.");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestRelativeLinks tester = new TestRelativeLinks();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ // PACKAGE OVERVIEW
+ checkOutput("overview-summary.html", true,
+ "<a href=\"./pkg/relative-package-link.html\">relative package link</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testRepeatedAnnotations/TestRepeatedAnnotations.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRepeatedAnnotations/TestRepeatedAnnotations.java Fri May 16 14:35:37 2014 -0700
@@ -26,147 +26,125 @@
* @bug 8005092
* @summary Test repeated annotations output.
* @author bpatel
- * @library ../lib/
- * @build JavadocTester TestRepeatedAnnotations
+ * @library ../lib
+ * @build JavadocTester
* @run main TestRepeatedAnnotations
*/
public class TestRepeatedAnnotations extends JavadocTester {
- //Test information.
+ public static void main(String... args) throws Exception {
+ TestRepeatedAnnotations tester = new TestRepeatedAnnotations();
+ tester.runTests();
+ }
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "pkg1"
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", "pkg1");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/C.html",
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/ContaineeRegDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeRegDoc</a> " +
- "<a href=\"../pkg/ContaineeRegDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeRegDoc</a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/RegContainerDoc.html\" " +
- "title=\"annotation in pkg\">@RegContainerDoc</a>" +
- "(<a href=\"../pkg/RegContainerDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeNotDoc</a>," +
- "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})"},
- { "pkg/C.html",
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/ContainerSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContainerSynthDoc</a>(" +
- "<a href=\"../pkg/ContainerSynthDoc.html#value--\">value</a>=" +
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a>)"},
- { "pkg/C.html",
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
- "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
+ checkOutput("pkg/C.html", true,
+ "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a> "
+ + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a>",
+ "<a href=\"../pkg/ContaineeRegDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeRegDoc</a> "
+ + "<a href=\"../pkg/ContaineeRegDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeRegDoc</a>",
+ "<a href=\"../pkg/RegContainerDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContainerDoc</a>"
+ + "(<a href=\"../pkg/RegContainerDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>,"
+ + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})",
+ "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a> "
+ + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a> "
+ + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a>",
+ "<a href=\"../pkg/ContainerSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContainerSynthDoc</a>("
+ + "<a href=\"../pkg/ContainerSynthDoc.html#value--\">value</a>="
+ + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a>)",
+ "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a> "
+ + "<a href=\"../pkg/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg\">@ContaineeSynthDoc</a>");
- { "pkg/D.html",
- "<a href=\"../pkg/RegDoc.html\" title=\"annotation in pkg\">@RegDoc</a>" +
- "(<a href=\"../pkg/RegDoc.html#x--\">x</a>=1)"},
- { "pkg/D.html",
- "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>" +
- "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>=1)"},
- { "pkg/D.html",
- "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>" +
- "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>={1,2})"},
- { "pkg/D.html",
- "<a href=\"../pkg/NonSynthDocContainer.html\" " +
- "title=\"annotation in pkg\">@NonSynthDocContainer</a>" +
- "(<a href=\"../pkg/NonSynthDocContainer.html#value--\">value</a>=" +
- "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>)"},
+ checkOutput("pkg/D.html", true,
+ "<a href=\"../pkg/RegDoc.html\" title=\"annotation in pkg\">@RegDoc</a>"
+ + "(<a href=\"../pkg/RegDoc.html#x--\">x</a>=1)",
+ "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
+ + "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>=1)",
+ "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>"
+ + "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>={1,2})",
+ "<a href=\"../pkg/NonSynthDocContainer.html\" "
+ + "title=\"annotation in pkg\">@NonSynthDocContainer</a>"
+ + "(<a href=\"../pkg/NonSynthDocContainer.html#value--\">value</a>="
+ + "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>)");
- { "pkg1/C.html",
- "<a href=\"../pkg1/RegContainerValDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContainerValDoc</a>" +
- "(<a href=\"../pkg1/RegContainerValDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg1/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>," +
- "<a href=\"../pkg1/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>}," +
- "<a href=\"../pkg1/RegContainerValDoc.html#y--\">y</a>=3)"},
- { "pkg1/C.html",
- "<a href=\"../pkg1/ContainerValDoc.html\" " +
- "title=\"annotation in pkg1\">@ContainerValDoc</a>" +
- "(<a href=\"../pkg1/ContainerValDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg1/ContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeNotDoc</a>," +
- "<a href=\"../pkg1/ContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeNotDoc</a>}," +
- "<a href=\"../pkg1/ContainerValDoc.html#x--\">x</a>=1)"}
- };
-
- private static final String[][] NEGATED_TEST = {
- { "pkg/C.html",
- "<a href=\"../pkg/RegContaineeDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeDoc</a> " +
- "<a href=\"../pkg/RegContaineeDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeDoc</a>"},
- { "pkg/C.html",
- "<a href=\"../pkg/RegContainerNotDoc.html\" " +
- "title=\"annotation in pkg\">@RegContainerNotDoc</a>" +
- "(<a href=\"../pkg/RegContainerNotDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeNotDoc</a>," +
- "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
- "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})"},
+ checkOutput("pkg1/C.html", true,
+ "<a href=\"../pkg1/RegContainerValDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContainerValDoc</a>"
+ + "(<a href=\"../pkg1/RegContainerValDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg1/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>,"
+ + "<a href=\"../pkg1/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>},"
+ + "<a href=\"../pkg1/RegContainerValDoc.html#y--\">y</a>=3)",
+ "<a href=\"../pkg1/ContainerValDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContainerValDoc</a>"
+ + "(<a href=\"../pkg1/ContainerValDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>,"
+ + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>},"
+ + "<a href=\"../pkg1/ContainerValDoc.html#x--\">x</a>=1)");
- { "pkg1/C.html",
- "<a href=\"../pkg1/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeSynthDoc</a> " +
- "<a href=\"../pkg1/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>"},
- { "pkg1/C.html",
- "<a href=\"../pkg1/RegContainerValNotDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContainerValNotDoc</a>" +
- "(<a href=\"../pkg1/RegContainerValNotDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg1/RegContaineeDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContaineeDoc</a>," +
- "<a href=\"../pkg1/RegContaineeDoc.html\" " +
- "title=\"annotation in pkg1\">@RegContaineeDoc</a>}," +
- "<a href=\"../pkg1/RegContainerValNotDoc.html#y--\">y</a>=4)"},
- { "pkg1/C.html",
- "<a href=\"../pkg1/ContainerValNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContainerValNotDoc</a>" +
- "(<a href=\"../pkg1/ContainerValNotDoc.html#value--\">value</a>={" +
- "<a href=\"../pkg1/ContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeNotDoc</a>," +
- "<a href=\"../pkg1/ContaineeNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeNotDoc</a>}," +
- "<a href=\"../pkg1/ContainerValNotDoc.html#x--\">x</a>=2)"},
- { "pkg1/C.html",
- "<a href=\"../pkg1/ContainerSynthNotDoc.html\" " +
- "title=\"annotation in pkg1\">@ContainerSynthNotDoc</a>(" +
- "<a href=\"../pkg1/ContainerSynthNotDoc.html#value--\">value</a>=" +
- "<a href=\"../pkg1/ContaineeSynthDoc.html\" " +
- "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>)"}
- };
+ checkOutput("pkg/C.html", false,
+ "<a href=\"../pkg/RegContaineeDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeDoc</a> "
+ + "<a href=\"../pkg/RegContaineeDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeDoc</a>",
+ "<a href=\"../pkg/RegContainerNotDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContainerNotDoc</a>"
+ + "(<a href=\"../pkg/RegContainerNotDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>,"
+ + "<a href=\"../pkg/RegContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestRepeatedAnnotations tester = new TestRepeatedAnnotations();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg1/C.html", false,
+ "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a> "
+ + "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>",
+ "<a href=\"../pkg1/RegContainerValNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContainerValNotDoc</a>"
+ + "(<a href=\"../pkg1/RegContainerValNotDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg1/RegContaineeDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContaineeDoc</a>,"
+ + "<a href=\"../pkg1/RegContaineeDoc.html\" "
+ + "title=\"annotation in pkg1\">@RegContaineeDoc</a>},"
+ + "<a href=\"../pkg1/RegContainerValNotDoc.html#y--\">y</a>=4)",
+ "<a href=\"../pkg1/ContainerValNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContainerValNotDoc</a>"
+ + "(<a href=\"../pkg1/ContainerValNotDoc.html#value--\">value</a>={"
+ + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>,"
+ + "<a href=\"../pkg1/ContaineeNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeNotDoc</a>},"
+ + "<a href=\"../pkg1/ContainerValNotDoc.html#x--\">x</a>=2)",
+ "<a href=\"../pkg1/ContainerSynthNotDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContainerSynthNotDoc</a>("
+ + "<a href=\"../pkg1/ContainerSynthNotDoc.html#value--\">value</a>="
+ + "<a href=\"../pkg1/ContaineeSynthDoc.html\" "
+ + "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>)");
}
}
--- a/langtools/test/com/sun/javadoc/testReturnTag/TestReturnTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testReturnTag/TestReturnTag.java Fri May 16 14:35:37 2014 -0700
@@ -26,26 +26,13 @@
* @bug 4490068
* @summary Warn when a return tag is used on a method without a return type.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestReturnTag
* @run main TestReturnTag
*/
public class TestReturnTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR +
- "/TestReturnTag.java"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
- {WARNING_OUTPUT,
- "warning - @return tag cannot be used in method with void return type."}
- };
-
/**
* Trigger warning message when return tag is used on a void method.
*
@@ -53,13 +40,20 @@
*/
public void method() {}
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestReturnTag tester = new TestReturnTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void tests() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("TestReturnTag.java"));
+ checkExit(Exit.OK);
+
+ checkOutput(Output.WARNING, true,
+ "warning - @return tag cannot be used in method with void return type.");
}
}
--- a/langtools/test/com/sun/javadoc/testSeeTag/TestSeeTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSeeTag/TestSeeTag.java Fri May 16 14:35:37 2014 -0700
@@ -26,37 +26,29 @@
* @bug 8017191
* @summary Javadoc is confused by at-link to imported classes outside of the set of generated packages
* @author jjg
- * @library ../lib/
- * @build JavadocTester TestSeeTag
+ * @library ../lib
+ * @build JavadocTester
* @run main TestSeeTag
*/
public class TestSeeTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestSeeTag tester = new TestSeeTag();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/Test.html",
- "<code>List</code>"
- }
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/Test.html",
- "<code>List</code>"
- }
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSeeTag tester = new TestSeeTag();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/Test.html", true,
+ "<code>List</code>");
+
+ checkOutput("pkg/Test.html", false,
+ "<code>List</code>");
}
}
--- a/langtools/test/com/sun/javadoc/testSerialVersionUID/TestSerialVersionUID.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerialVersionUID/TestSerialVersionUID.java Fri May 16 14:35:37 2014 -0700
@@ -27,32 +27,25 @@
* @summary Test to make sure that the serialVersionUID is properly
* documented in the serialized form.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSerialVersionUID
* @run main TestSerialVersionUID
*/
public class TestSerialVersionUID extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR,
- SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestSerialVersionUID tester = new TestSerialVersionUID();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "serialized-form.html", "-111111111111111L"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSerialVersionUID tester = new TestSerialVersionUID();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("serialized-form.html", true,
+ "-111111111111111L");
}
}
--- a/langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java Fri May 16 14:35:37 2014 -0700
@@ -38,85 +38,76 @@
* @run main TestSerializedForm
*/
-import java.lang.*;
import java.io.*;
public class TestSerializedForm extends JavadocTester implements Serializable {
+ public static void main(String... args) throws Exception {
+ TestSerializedForm tester = new TestSerializedForm();
+ tester.runTests();
+// tester.run(ARGS, TEST, NEGATED_TEST);
+// tester.run(ARGS_PRIVATE, TEST_PRIVATE, NEGATED_TEST_PRIVATE);
+// tester.printSummary();
+ }
- private static final String[][] TEST = {
- { "serialized-form.html",
- "protected java.lang.Object readResolve()"},
- { "serialized-form.html",
- "protected java.lang.Object writeReplace()"},
- { "serialized-form.html",
- "protected java.lang.Object readObjectNoData()"},
- { "serialized-form.html",
- "See Also"},
- { "serialized-form.html",
- "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass " +
- "extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class pkg1.PrivateIncludeInnerClass.PriInnerClass extends " +
- "java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends " +
- "java.lang.Object implements Serializable</h3>"}
- };
+ @Test
+ void testDefault() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ testSrc("TestSerializedForm.java"), "pkg1");
+ checkExit(Exit.OK);
- private static final String[][] TEST_PRIVATE = {
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" " +
- "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> " +
- "extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/PrivateIncludeInnerClass.PriInnerClass.html\" title=\"class in pkg1\">" +
- "pkg1.PrivateIncludeInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">" +
- "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>"}
- };
+ checkOutput("serialized-form.html", true,
+ "protected java.lang.Object readResolve()",
+ "protected java.lang.Object writeReplace()",
+ "protected java.lang.Object readObjectNoData()",
+ "See Also",
+ "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass "
+ + "extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class pkg1.PrivateIncludeInnerClass.PriInnerClass extends "
+ + "java.lang.Object implements Serializable</h3>",
+ "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends "
+ + "java.lang.Object implements Serializable</h3>");
- private static final String[][] NEGATED_TEST = {
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" " +
- "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> " +
- "extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/PrivateInnerClass.PriInnerClass.html\" title=\"class in pkg1\">" +
- "pkg1.PrivateInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">" +
- "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class pkg1.PublicExcludeInnerClass.PubInnerClass extends java.lang.Object implements " +
- "Serializable</h3>"}
- };
+ checkOutput("serialized-form.html", false,
+ "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" "
+ + "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> "
+ + "extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class <a href=\"pkg1/PrivateInnerClass.PriInnerClass.html\" title=\"class in pkg1\">"
+ + "pkg1.PrivateInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">"
+ + "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class pkg1.PublicExcludeInnerClass.PubInnerClass extends java.lang.Object implements "
+ + "Serializable</h3>");
+ }
+
+ @Test
+ void testPrivate() {
+ javadoc("-private",
+ "-d", "out-private",
+ "-sourcepath", testSrc,
+ testSrc("TestSerializedForm.java"), "pkg1");
+ checkExit(Exit.OK);
- private static final String[][] NEGATED_TEST_PRIVATE = {
- { "serialized-form.html",
- "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass " +
- "extends java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class pkg1.PrivateInnerClass.PriInnerClass extends " +
- "java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends " +
- "java.lang.Object implements Serializable</h3>"},
- { "serialized-form.html",
- "<h3>Class <a href=\"pkg1/PublicExcludeInnerClass.PubInnerClass.html\" " +
- "title=\"class in pkg1\">pkg1.PublicExcludeInnerClass.PubInnerClass</a> " +
- "extends java.lang.Object implements Serializable</h3>"}
- };
+ checkOutput("serialized-form.html", true,
+ "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" "
+ + "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> "
+ + "extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class <a href=\"pkg1/PrivateIncludeInnerClass.PriInnerClass.html\" title=\"class in pkg1\">"
+ + "pkg1.PrivateIncludeInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">"
+ + "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>");
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/TestSerializedForm.java", "pkg1"
- };
-
- private static final String[] ARGS_PRIVATE = new String[] {
- "-private", "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
- SRC_DIR + "/TestSerializedForm.java", "pkg1"
- };
+ checkOutput("serialized-form.html", false,
+ "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass "
+ + "extends java.lang.Object implements Serializable</h3>",
+ "<h3>Class pkg1.PrivateInnerClass.PriInnerClass extends "
+ + "java.lang.Object implements Serializable</h3>",
+ "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends "
+ + "java.lang.Object implements Serializable</h3>",
+ "<h3>Class <a href=\"pkg1/PublicExcludeInnerClass.PubInnerClass.html\" "
+ + "title=\"class in pkg1\">pkg1.PublicExcludeInnerClass.PubInnerClass</a> "
+ + "extends java.lang.Object implements Serializable</h3>");
+ }
/**
* @serial
@@ -128,12 +119,6 @@
* The entry point of the test.
* @param args the array of command line arguments.
*/
- public static void main(String[] args) {
- TestSerializedForm tester = new TestSerializedForm();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.run(ARGS_PRIVATE, TEST_PRIVATE, NEGATED_TEST_PRIVATE);
- tester.printSummary();
- }
/**
* @param s ObjectInputStream.
--- a/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java Fri May 16 14:35:37 2014 -0700
@@ -28,118 +28,142 @@
* @bug 6802694 8025633 8026567
* @summary This test verifies deprecation info in serialized-form.html.
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSerializedFormDeprecationInfo
* @run main TestSerializedFormDeprecationInfo
*/
public class TestSerializedFormDeprecationInfo extends JavadocTester {
+ public static void main(String... args) throws Exception {
+ TestSerializedFormDeprecationInfo tester = new TestSerializedFormDeprecationInfo();
+ tester.runTests();
+ }
+
+ @Test
+ void testDefault() {
+ javadoc("-d", "out-default",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: should be OK
+
+ checkCommentDeprecated(true);
+ checkNoComment(false);
+ }
+
+ @Test
+ void testNoComment() {
+ javadoc("-d", "out-nocmnt",
+ "-nocomment",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: should be OK
+
+ checkNoComment(true);
+ checkCommentDeprecated(false);
+ }
+
+ @Test
+ void testNoDeprecated() {
+ javadoc("-d", "out-nodepr",
+ "-nodeprecated",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: should be OK
+
+ checkNoDeprecated(true);
+ checkNoCommentNoDeprecated(false);
+ }
+
+ @Test
+ void testNoCommentNoDeprecated() {
+ javadoc("-d", "out-nocmnt-nodepr",
+ "-nocomment",
+ "-nodeprecated",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: should be OK
+ checkNoCommentNoDeprecated(true);
+ checkNoDeprecated(false);
+ }
+
// Test for normal run of javadoc. The serialized-form.html should
// display the inline comments, tags and deprecation information if any.
- private static final String[][] TEST_CMNT_DEPR = {
- { "serialized-form.html", "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
- "<dd><code>" +
- "java.io.IOException</code></dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">This field indicates whether the C1 " +
- "is undecorated.</div>\n" +
- " \n" +
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>\n" +
- "<dt><span class=\"seeLabel\">See Also:</span>" +
- "</dt>\n" +
- "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "<div class=\"block\">Reads the object stream.</div>\n" +
- "<dl>\n" +
- "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
- "<dd><code><code>" +
- "IOException</code></code></dd>\n" +
- "<dd><code>java.io.IOException</code></dd>\n" +
- "</dl>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">Deprecated.</span>" +
- " </div>\n" +
- "<div class=\"block\">" +
- "The name for this class.</div>"}};
+ void checkCommentDeprecated(boolean expectFound) {
+ checkOutput("serialized-form.html", expectFound,
+ "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
+ + "<dd><code>"
+ + "java.io.IOException</code></dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">This field indicates whether the C1 "
+ + "is undecorated.</div>\n"
+ + " \n"
+ + "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>\n"
+ + "<dt><span class=\"seeLabel\">See Also:</span>"
+ + "</dt>\n"
+ + "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>C1.setUndecorated(boolean)</code></a></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " <span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "<div class=\"block\">Reads the object stream.</div>\n"
+ + "<dl>\n"
+ + "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n"
+ + "<dd><code><code>"
+ + "IOException</code></code></dd>\n"
+ + "<dd><code>java.io.IOException</code></dd>\n"
+ + "</dl>",
+ "<span class=\"deprecatedLabel\">Deprecated.</span>"
+ + " </div>\n"
+ + "<div class=\"block\">"
+ + "The name for this class.</div>");
+ }
// Test with -nocomment option. The serialized-form.html should
// not display the inline comments and tags but should display deprecation
// information if any.
- private static final String[][] TEST_NOCMNT = {
- { "serialized-form.html",
- "<pre>boolean undecorated</pre>\n" +
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> <span class=\"deprecationComment\">" +
- "As of JDK version 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>" +
- "setUndecorated(boolean)</code></a>.</span></div>\n" +
- "</li>"},
- { "serialized-form.html",
- "<span class=\"deprecatedLabel\">" +
- "Deprecated.</span> <span class=\"deprecationComment\">As of JDK version" +
- " 1.5, replaced by\n" +
- " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
- "<code>setUndecorated(boolean)</code></a>.</span></div>\n" +
- "</li>"}};
+ void checkNoComment(boolean expectFound) {
+ checkOutput("serialized-form.html", expectFound,
+ "<pre>boolean undecorated</pre>\n"
+ + "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> <span class=\"deprecationComment\">"
+ + "As of JDK version 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>"
+ + "setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "</li>",
+ "<span class=\"deprecatedLabel\">"
+ + "Deprecated.</span> <span class=\"deprecationComment\">As of JDK version"
+ + " 1.5, replaced by\n"
+ + " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">"
+ + "<code>setUndecorated(boolean)</code></a>.</span></div>\n"
+ + "</li>");
+ }
// Test with -nodeprecated option. The serialized-form.html should
// ignore the -nodeprecated tag and display the deprecation info. This
// test is similar to the normal run of javadoc in which inline comment, tags
// and deprecation information will be displayed.
- private static final String[][] TEST_NODEPR = TEST_CMNT_DEPR;
+ void checkNoDeprecated(boolean expectFound) {
+ checkCommentDeprecated(expectFound);
+ }
// Test with -nodeprecated and -nocomment options. The serialized-form.html should
// ignore the -nodeprecated tag and display the deprecation info but should not
// display the inline comments and tags. This test is similar to the test with
// -nocomment option.
- private static final String[][] TEST_NOCMNT_NODEPR = TEST_NOCMNT;
-
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"};
-
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR + "-2", "-nocomment", "-sourcepath", SRC_DIR, "pkg1"};
-
- private static final String[] ARGS3 =
- new String[] {
- "-d", OUTPUT_DIR + "-3", "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
-
- private static final String[] ARGS4 =
- new String[] {
- "-d", OUTPUT_DIR + "-4", "-nocomment", "-nodeprecated", "-sourcepath",
- SRC_DIR, "pkg1"};
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSerializedFormDeprecationInfo tester = new TestSerializedFormDeprecationInfo();
- tester.run(ARGS1, TEST_CMNT_DEPR, TEST_NOCMNT);
- tester.run(ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
- tester.run(ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
- tester.run(ARGS4, TEST_NOCMNT_NODEPR, TEST_NODEPR);
- tester.printSummary();
+ void checkNoCommentNoDeprecated(boolean expectFound) {
+ checkNoComment(expectFound);
}
}
--- a/langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java Fri May 16 14:35:37 2014 -0700
@@ -24,47 +24,38 @@
/*
* @test
* @bug 4695326 4750173 4920381 8026567
- * @summary Test the declarartion of simple tags using -tag. Verify that
+ * @summary Test the declaration of simple tags using -tag. Verify that
* "-tag name" is a shortcut for "-tag name:a:Name:". Also verity that
* you can escape the ":" character with a back slash so that it is not
* considered a separator when parsing the simple tag argument.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSimpleTag
* @run main TestSimpleTag
*/
public class TestSimpleTag extends JavadocTester {
- private static final String[][] TEST =
- new String[][] {
- { "C.html",
- "<span class=\"simpleTagLabel\">Todo:</span>"},
- { "C.html",
- "<span class=\"simpleTagLabel\">EJB Beans:</span>"},
- { "C.html",
- "<span class=\"simpleTagLabel\">Regular Tag:</span>"},
- { "C.html",
- "<span class=\"simpleTagLabel\">Back-Slash-Tag:</span>"},
- };
+ public static void main(String... args) throws Exception {
+ TestSimpleTag tester = new TestSimpleTag();
+ tester.runTests();
+ }
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-tag", "todo",
- "-tag", "ejb\\:bean:a:EJB Beans:",
- "-tag", "regular:a:Regular Tag:",
- "-tag", "back-slash\\:tag\\\\:a:Back-Slash-Tag:",
- SRC_DIR + "/C.java"
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-tag", "todo",
+ "-tag", "ejb\\:bean:a:EJB Beans:",
+ "-tag", "regular:a:Regular Tag:",
+ "-tag", "back-slash\\:tag\\\\:a:Back-Slash-Tag:",
+ testSrc("C.java"));
+ checkExit(Exit.FAILED); // TODO: investigate why failed
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSimpleTag tester = new TestSimpleTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("C.html", true,
+ "<span class=\"simpleTagLabel\">Todo:</span>",
+ "<span class=\"simpleTagLabel\">EJB Beans:</span>",
+ "<span class=\"simpleTagLabel\">Regular Tag:</span>",
+ "<span class=\"simpleTagLabel\">Back-Slash-Tag:</span>");
}
}
--- a/langtools/test/com/sun/javadoc/testSimpleTagExclude/TestSimpleTagExclude.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTagExclude/TestSimpleTagExclude.java Fri May 16 14:35:37 2014 -0700
@@ -27,31 +27,27 @@
* @summary Test the parsing of the -tag option. The user should be able to
* exclude a simple tag by using -tag tagname:X
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSimpleTagExclude
* @run main TestSimpleTagExclude
*/
public class TestSimpleTagExclude extends JavadocTester {
- private static final String[][] NEGATED_TEST = {
- { "DummyClass.html", "todo"}
- };
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-tag", "todo:X",
- SRC_DIR + "/DummyClass.java"
- };
+ public static void main(String... args) throws Exception {
+ TestSimpleTagExclude tester = new TestSimpleTagExclude();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSimpleTagExclude tester = new TestSimpleTagExclude();
- if (tester.run(ARGS, NO_TEST, NEGATED_TEST) != 0) {
- throw new Error("Javadoc failed to execute.");
- }
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-tag", "todo:X",
+ testSrc("DummyClass.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("DummyClass.html", false,
+ "todo");
}
}
--- a/langtools/test/com/sun/javadoc/testSimpleTagInherit/TestSimpleTagInherit.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTagInherit/TestSimpleTagInherit.java Fri May 16 14:35:37 2014 -0700
@@ -25,8 +25,8 @@
* @test
* @bug 8008768 8026567
* @summary Using {@inheritDoc} in simple tag defined via -tag fails
- * @library ../lib/
- * @build JavadocTester TestSimpleTagInherit
+ * @library ../lib
+ * @build JavadocTester
* @run main TestSimpleTagInherit
*/
@@ -34,28 +34,31 @@
//Javadoc arguments.
private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-tag", "custom:optcm:<em>Custom:</em>",
- "p"
+
};
//Input for string search tests.
private static final String[][] TEST = {
- { "p/TestClass.html",
- "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n" +
- "<dd>doc for BaseClass class</dd>" },
- { "p/TestClass.html",
- "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n" +
- "<dd>doc for BaseClass method</dd>" }
+ { }
};
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestSimpleTagInherit tester = new TestSimpleTagInherit();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-tag", "custom:optcm:<em>Custom:</em>",
+ "p");
+ checkExit(Exit.OK);
+
+ checkOutput("p/TestClass.html", true,
+ "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n"
+ + "<dd>doc for BaseClass class</dd>",
+ "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n"
+ + "<dd>doc for BaseClass method</dd>");
}
}
--- a/langtools/test/com/sun/javadoc/testSinceTag/TestSinceTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSinceTag/TestSinceTag.java Fri May 16 14:35:37 2014 -0700
@@ -26,44 +26,49 @@
* @bug 7180906 8026567
* @summary Test to make sure that the since tag works correctly
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestSinceTag
+ * @library ../lib
+ * @build JavadocTester
* @run main TestSinceTag
*/
public class TestSinceTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[] {
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg1"
- };
-
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-nosince", "pkg1"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg1/C1.html",
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>JDK1.0</dd>"
- },
- { "serialized-form.html",
- "<dl>\n" +
- "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
- "<dd>1.4</dd>"
- }
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestSinceTag tester = new TestSinceTag();
- tester.run(ARGS1, TEST, NO_TEST);
- tester.run(ARGS2, NO_TEST, TEST);
+ tester.runTests();
tester.printSummary();
}
+
+ @Test
+ void testSince() {
+ javadoc("-d", "out-since",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: investigate
+
+ checkSince(true);
+ }
+
+ @Test
+ void testNoSince() {
+ javadoc("-d", "out-nosince",
+ "-sourcepath", testSrc,
+ "-nosince",
+ "pkg1");
+ checkExit(Exit.FAILED); // TODO: investigate
+
+ checkSince(false);
+ }
+
+ void checkSince(boolean on) {
+ checkOutput("pkg1/C1.html", on,
+ "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>JDK1.0</dd>");
+
+ checkOutput("serialized-form.html", on,
+ "<dl>\n"
+ + "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ + "<dd>1.4</dd>");
+ }
}
--- a/langtools/test/com/sun/javadoc/testSingleQuotedLink/TestSingleQuotedLink.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSingleQuotedLink/TestSingleQuotedLink.java Fri May 16 14:35:37 2014 -0700
@@ -26,35 +26,32 @@
* @bug 6457406
* @summary Verify that a link in single quotes copied to the class-use page as is.
* @author Yuri Nesterenko
- * @library ../lib/
- * @build JavadocTester TestSingleQuotedLink
+ * @library ../lib
+ * @build JavadocTester
* @run main TestSingleQuotedLink
*/
public class TestSingleQuotedLink extends JavadocTester {
- // We are testing the redirection algorithm with a known scenario when a writer is not forced to ignore it: "-use".
- private static final String[][] TEST = {
- { "pkg1/class-use/C1.html",
- "<a href=\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>"
- }
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg1/class-use/C1.html",
- "pkg1/\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>"
- }
- };
- private static final String[] ARGS =
- new String[]{
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1"
- };
+ public static void main(String... args) throws Exception {
+ TestSingleQuotedLink tester = new TestSingleQuotedLink();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSingleQuotedLink tester = new TestSingleQuotedLink();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ @Test
+ void run() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1");
+ checkExit(Exit.OK);
+
+ // We are testing the redirection algorithm with a known scenario when a
+ // writer is not forced to ignore it: "-use".
+
+ checkOutput("pkg1/class-use/C1.html", true,
+ "<a href=\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>");
+
+ checkOutput("pkg1/class-use/C1.html", false,
+ "pkg1/\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>");
}
}
--- a/langtools/test/com/sun/javadoc/testSourceTab/TestSourceTab.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSourceTab/TestSourceTab.java Fri May 16 14:35:37 2014 -0700
@@ -27,9 +27,8 @@
* @summary Test to make sure that the source documentation is indented properly
* when -linksourcetab is used.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSourceTab
* @run main TestSourceTab
*/
@@ -37,45 +36,39 @@
public class TestSourceTab extends JavadocTester {
- private static final String TMP_SRC_DIR = "tmpSrc";
- private static final String OUTPUT_DIR1 = OUTPUT_DIR + "-tabLengthEight";
- private static final String OUTPUT_DIR2 = OUTPUT_DIR + "-tabLengthFour";
-
- //Run Javadoc on a source file with that is indented with a single tab per line
- private static final String[] ARGS1 =
- new String[] {
- "-d", OUTPUT_DIR1, "-sourcepath", TMP_SRC_DIR,
- "-notimestamp", "-linksource", TMP_SRC_DIR + "/SingleTab/C.java"
- };
-
- //Run Javadoc on a source file with that is indented with a two tab per line
- //If we double the tabs and decrease the tab length by a half, the output should
- //be the same as the one generated above.
- private static final String[] ARGS2 =
- new String[] {
- "-d", OUTPUT_DIR2, "-sourcepath", TMP_SRC_DIR,
- "-notimestamp", "-sourcetab", "4", TMP_SRC_DIR + "/DoubleTab/C.java"
- };
-
- //Files to diff
- private static final String[] FILES_TO_DIFF = {
- "src-html/C.html",
- "C.html"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws IOException {
+ public static void main(String... args) throws Exception {
TestSourceTab tester = new TestSourceTab();
- tester.run(ARGS1, NO_TEST, NO_TEST);
- tester.run(ARGS2, NO_TEST, NO_TEST);
- tester.runDiffs(OUTPUT_DIR1, OUTPUT_DIR2, FILES_TO_DIFF);
+ tester.runTests();
}
- TestSourceTab() throws IOException {
- initTabs(new File(SRC_DIR), new File(TMP_SRC_DIR));
+ @Test
+ void test() throws Exception {
+ String tmpSrcDir = "tmpSrc";
+ String outdir1 = "out-tabLengthEight";
+ String outdir2 = "out-tabLengthFour";
+ initTabs(new File(testSrc), new File(tmpSrcDir));
+
+ // Run Javadoc on a source file with that is indented with a single tab per line
+ javadoc("-d", outdir1,
+ "-sourcepath", tmpSrcDir,
+ "-notimestamp",
+ "-linksource",
+ tmpSrcDir + "/SingleTab/C.java");
+ checkExit(Exit.OK);
+
+ // Run Javadoc on a source file with that is indented with a two tab per line
+ // If we double the tabs and decrease the tab length by a half, the output should
+ // be the same as the one generated above.
+ javadoc("-d", outdir2,
+ "-sourcepath", tmpSrcDir,
+ "-notimestamp",
+ "-sourcetab", "4",
+ tmpSrcDir + "/DoubleTab/C.java");
+ checkExit(Exit.OK);
+
+ diff(outdir1, outdir2,
+ "src-html/C.html",
+ "C.html");
}
void initTabs(File from, File to) throws IOException {
@@ -91,26 +84,20 @@
String read(File f) throws IOException {
StringBuilder sb = new StringBuilder();
- BufferedReader in = new BufferedReader(new FileReader(f));
- try {
+ try (BufferedReader in = new BufferedReader(new FileReader(f))) {
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
- sb.append("\n");
+ sb.append(NL);
}
- } finally {
- in.close();
}
return sb.toString();
}
void write(File f, String s) throws IOException {
f.getParentFile().mkdirs();
- Writer out = new FileWriter(f);
- try {
+ try (Writer out = new FileWriter(f)) {
out.write(s);
- } finally {
- out.close();
}
}
}
--- a/langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java Fri May 16 14:35:37 2014 -0700
@@ -26,132 +26,118 @@
* @bug 4494033 7028815 7052425 8007338 8023608 8008164 8016549
* @summary Run tests on doclet stylesheet.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestStylesheet
+ * @library ../lib
+ * @build JavadocTester
* @run main TestStylesheet
*/
public class TestStylesheet extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestStylesheet tester = new TestStylesheet();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "stylesheet.css",
- "/* Javadoc style sheet */"},
- { "stylesheet.css",
- "/*\n" +
- "Overall document style\n" +
- "*/"},
- { "stylesheet.css",
- "/*\n" +
- "Heading styles\n" +
- "*/"},
- { "stylesheet.css",
- "/*\n" +
- "Navigation bar styles\n" +
- "*/"},
- { "stylesheet.css",
- "body {\n" +
- " background-color:#ffffff;\n" +
- " color:#353833;\n" +
- " font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;\n" +
- " font-size:14px;\n" +
- " margin:0;\n" +
- "}"},
- { "stylesheet.css",
- "ul {\n" +
- " list-style-type:disc;\n" +
- "}"},
- { "stylesheet.css",
- ".overviewSummary caption, .memberSummary caption, .typeSummary caption,\n" +
- ".useSummary caption, .constantsSummary caption, .deprecatedSummary caption {\n" +
- " position:relative;\n" +
- " text-align:left;\n" +
- " background-repeat:no-repeat;\n" +
- " color:#253441;\n" +
- " font-weight:bold;\n" +
- " clear:none;\n" +
- " overflow:hidden;\n" +
- " padding:0px;\n" +
- " padding-top:10px;\n" +
- " padding-left:1px;\n" +
- " margin:0px;\n" +
- " white-space:pre;\n" +
- "}"},
- { "stylesheet.css",
- ".overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,\n" +
- ".useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {\n" +
- " white-space:nowrap;\n" +
- " padding-top:5px;\n" +
- " padding-left:12px;\n" +
- " padding-right:12px;\n" +
- " padding-bottom:7px;\n" +
- " display:inline-block;\n" +
- " float:left;\n" +
- " background-color:#F8981D;\n" +
- " border: none;\n" +
- " height:16px;\n" +
- "}"},
- { "stylesheet.css",
- ".memberSummary caption span.activeTableTab span {\n" +
- " white-space:nowrap;\n" +
- " padding-top:5px;\n" +
- " padding-left:12px;\n" +
- " padding-right:12px;\n" +
- " margin-right:3px;\n" +
- " display:inline-block;\n" +
- " float:left;\n" +
- " background-color:#F8981D;\n" +
- " height:16px;\n" +
- "}"},
- { "stylesheet.css",
- ".memberSummary caption span.tableTab span {\n" +
- " white-space:nowrap;\n" +
- " padding-top:5px;\n" +
- " padding-left:12px;\n" +
- " padding-right:12px;\n" +
- " margin-right:3px;\n" +
- " display:inline-block;\n" +
- " float:left;\n" +
- " background-color:#4D7A97;\n" +
- " height:16px;\n" +
- "}"},
- { "stylesheet.css",
- ".memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {\n" +
- " padding-top:0px;\n" +
- " padding-left:0px;\n" +
- " padding-right:0px;\n" +
- " background-image:none;\n" +
- " float:none;\n" +
- " display:inline;\n" +
- "}"},
- { "stylesheet.css",
- "@import url('resources/fonts/dejavu.css');"},
+ // TODO: most of this test seems a bit silly, since javadoc is simply
+ // copying in the stylesheet from the source directory
+ checkOutput("stylesheet.css", true,
+ "/* Javadoc style sheet */",
+ "/*\n"
+ + "Overall document style\n"
+ + "*/",
+ "/*\n"
+ + "Heading styles\n"
+ + "*/",
+ "/*\n"
+ + "Navigation bar styles\n"
+ + "*/",
+ "body {\n"
+ + " background-color:#ffffff;\n"
+ + " color:#353833;\n"
+ + " font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;\n"
+ + " font-size:14px;\n"
+ + " margin:0;\n"
+ + "}",
+ "ul {\n"
+ + " list-style-type:disc;\n"
+ + "}",
+ ".overviewSummary caption, .memberSummary caption, .typeSummary caption,\n"
+ + ".useSummary caption, .constantsSummary caption, .deprecatedSummary caption {\n"
+ + " position:relative;\n"
+ + " text-align:left;\n"
+ + " background-repeat:no-repeat;\n"
+ + " color:#253441;\n"
+ + " font-weight:bold;\n"
+ + " clear:none;\n"
+ + " overflow:hidden;\n"
+ + " padding:0px;\n"
+ + " padding-top:10px;\n"
+ + " padding-left:1px;\n"
+ + " margin:0px;\n"
+ + " white-space:pre;\n"
+ + "}",
+ ".overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,\n"
+ + ".useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {\n"
+ + " white-space:nowrap;\n"
+ + " padding-top:5px;\n"
+ + " padding-left:12px;\n"
+ + " padding-right:12px;\n"
+ + " padding-bottom:7px;\n"
+ + " display:inline-block;\n"
+ + " float:left;\n"
+ + " background-color:#F8981D;\n"
+ + " border: none;\n"
+ + " height:16px;\n"
+ + "}",
+ ".memberSummary caption span.activeTableTab span {\n"
+ + " white-space:nowrap;\n"
+ + " padding-top:5px;\n"
+ + " padding-left:12px;\n"
+ + " padding-right:12px;\n"
+ + " margin-right:3px;\n"
+ + " display:inline-block;\n"
+ + " float:left;\n"
+ + " background-color:#F8981D;\n"
+ + " height:16px;\n"
+ + "}",
+ ".memberSummary caption span.tableTab span {\n"
+ + " white-space:nowrap;\n"
+ + " padding-top:5px;\n"
+ + " padding-left:12px;\n"
+ + " padding-right:12px;\n"
+ + " margin-right:3px;\n"
+ + " display:inline-block;\n"
+ + " float:left;\n"
+ + " background-color:#4D7A97;\n"
+ + " height:16px;\n"
+ + "}",
+ ".memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {\n"
+ + " padding-top:0px;\n"
+ + " padding-left:0px;\n"
+ + " padding-right:0px;\n"
+ + " background-image:none;\n"
+ + " float:none;\n"
+ + " display:inline;\n"
+ + "}",
+ "@import url('resources/fonts/dejavu.css');");
+
// Test whether a link to the stylesheet file is inserted properly
// in the class documentation.
- { "pkg/A.html",
- "<link rel=\"stylesheet\" type=\"text/css\" " +
- "href=\"../stylesheet.css\" title=\"Style\">"}
- };
- private static final String[][] NEGATED_TEST = {
- { "stylesheet.css",
- "* {\n" +
- " margin:0;\n" +
- " padding:0;\n" +
- "}"}
- };
+ checkOutput("pkg/A.html", true,
+ "<link rel=\"stylesheet\" type=\"text/css\" "
+ + "href=\"../stylesheet.css\" title=\"Style\">");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestStylesheet tester = new TestStylesheet();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("stylesheet.css", false,
+ "* {\n"
+ + " margin:0;\n"
+ + " padding:0;\n"
+ + "}");
}
}
--- a/langtools/test/com/sun/javadoc/testSubTitle/TestSubTitle.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSubTitle/TestSubTitle.java Fri May 16 14:35:37 2014 -0700
@@ -26,44 +26,38 @@
* @bug 7010342
* @summary Test for correct sub title generation.
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSubTitle
* @run main TestSubTitle
*/
public class TestSubTitle extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg/package-summary.html",
- "<div class=\"block\">This is the description of package pkg.</div>"
- },
- { "pkg/C.html",
- "<div class=\"subTitle\">pkg</div>"
- }
- };
- private static final String[][] NEG_TEST = {
- { "pkg/package-summary.html",
+ public static void main(String... args) throws Exception {
+ TestSubTitle tester = new TestSubTitle();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/package-summary.html", true,
+ "<div class=\"block\">This is the description of package pkg.</div>");
+
+ checkOutput("pkg/C.html", true,
+ "<div class=\"subTitle\">pkg</div>");
+
+ checkOutput("pkg/package-summary.html", false,
"<p class=\"subTitle\">\n" +
"<div class=\"block\">This is the " +
"description of package pkg.</div>\n" +
- "</p>"
- },
- { "pkg/C.html",
- "<p class=\"subTitle\">pkg</p>"
- }
- };
- private static final String[] ARGS = new String[]{
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ "</p>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSubTitle tester = new TestSubTitle();
- tester.run(ARGS, TEST, NEG_TEST);
- tester.printSummary();
+ checkOutput("pkg/C.html", false,
+ "<p class=\"subTitle\">pkg</p>");
}
}
--- a/langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java Fri May 16 14:35:37 2014 -0700
@@ -28,31 +28,26 @@
* "Method Summary" heading should still show up since the class
* inherits methods.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSummaryHeading
* @run main TestSummaryHeading
*/
public class TestSummaryHeading extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestSummaryHeading tester = new TestSummaryHeading();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "C.html", "<h3>Method Summary</h3>"}
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSummaryHeading tester = new TestSummaryHeading();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("C.html", true,
+ "<h3>Method Summary</h3>");
}
}
--- a/langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java Fri May 16 14:35:37 2014 -0700
@@ -27,30 +27,27 @@
* @summary Test to make sure link to superclass is generated for
* each class in serialized form page.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSuperClassInSerialForm
* @run main TestSuperClassInSerialForm
*/
public class TestSuperClassInSerialForm extends JavadocTester {
- private static final String[][] TEST = {
- { "serialized-form.html",
- "<a href=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</a> extends <a href=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</a>"}
- };
-
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestSuperClassInSerialForm tester = new TestSuperClassInSerialForm();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSuperClassInSerialForm tester = new TestSuperClassInSerialForm();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("serialized-form.html", true,
+ "<a href=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</a>"
+ + " extends <a href=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</a>");
}
}
--- a/langtools/test/com/sun/javadoc/testSupplementary/TestSupplementary.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSupplementary/TestSupplementary.java Fri May 16 14:35:37 2014 -0700
@@ -27,9 +27,8 @@
* @summary Test to make sure that "see" tag and "serialField" tag handle supplementary
* characters correctly. This test case needs to be run in en_US locale.
* @author Naoto Sato
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestSupplementary
* @run main TestSupplementary
*/
@@ -37,33 +36,33 @@
public class TestSupplementary extends JavadocTester {
- private static final String[][] TEST = {
- {WARNING_OUTPUT, "C.java:38: warning - Tag @see:illegal character: \"119040\" in \"C#method\ud834\udd00()"},
- {WARNING_OUTPUT, "C.java:44: warning - illegal character \ud801 in @serialField tag: field\ud801\ud801 int."},
- {WARNING_OUTPUT, "C.java:44: warning - illegal character \ud834\udd7b in @serialField tag: \ud834\udd7bfield int."},
- };
- private static final String[][] NEGATED_TEST = {
- {WARNING_OUTPUT, "C.java:14: warning - Tag @see:illegal character"},
- {WARNING_OUTPUT, "C.java:19: warning - Tag @see:illegal character"},
- {WARNING_OUTPUT, "C.java:24: warning - Tag @see:illegal character"},
- {WARNING_OUTPUT, "C.java:31: warning - illegal character"},
- };
- private static final String[] ARGS = new String[] {
- "-locale", "en_US", "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
Locale saveLocale = Locale.getDefault();
try {
TestSupplementary tester = new TestSupplementary();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ tester.runTests();
} finally {
Locale.setDefault(saveLocale);
}
}
+
+ @Test
+ void test() {
+ javadoc("-locale", "en_US",
+ "-d", "out",
+ testSrc("C.java"));
+ checkExit(Exit.FAILED);
+
+ checkOutput(Output.WARNING, true,
+ "C.java:38: warning - Tag @see:illegal character: \"119040\" in \"C#method\ud834\udd00()",
+ "C.java:44: warning - illegal character \ud801 in @serialField tag: field\ud801\ud801 int.",
+ "C.java:44: warning - illegal character \ud834\udd7b in @serialField tag: \ud834\udd7bfield int.");
+
+ // TODO: do we need to specify the file and line number in these messages?
+ checkOutput(Output.WARNING, false,
+ "C.java:14: warning - Tag @see:illegal character",
+ "C.java:19: warning - Tag @see:illegal character",
+ "C.java:24: warning - Tag @see:illegal character",
+ "C.java:31: warning - illegal character");
+ }
}
--- a/langtools/test/com/sun/javadoc/testTagHolderMethod/TestTagHolderMethod.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagHolderMethod/TestTagHolderMethod.java Fri May 16 14:35:37 2014 -0700
@@ -26,7 +26,7 @@
* @bug 4706525
* @summary Determine if the new Tag.holder() method works properly.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @build TestTagHolderMethod
* @run main TestTagHolderMethod
@@ -36,10 +36,6 @@
public class TestTagHolderMethod extends JavadocTester {
- public static final String[] ARGS = new String[] {
- "-docletpath", SRC_DIR, "-doclet", "TestTagHolderMethod", "-sourcepath",
- SRC_DIR, "pkg"};
-
/**
* Doclet entry point.
*/
@@ -55,14 +51,13 @@
}
private static void checkHolders(Doc[] holders) throws Exception {
- for (int i = 0; i < holders.length; i++) {
- Doc holder = holders[i];
+ for (Doc holder : holders) {
Tag[] tags = holder.tags();
- for (int j = 0; j < tags.length; j++) {
- if (! tags[j].holder().name().equals(holder.name())) {
+ for (Tag tag : tags) {
+ if (!tag.holder().name().equals(holder.name())) {
throw new Exception("The holder method does not return the correct Doc object.");
} else {
- System.out.println(tags[j].name() + " is held by " + holder.name());
+ System.out.println(tag.name() + " is held by " + holder.name());
}
}
}
@@ -71,9 +66,19 @@
/**
* The entry point of the test.
* @param args the array of command line arguments.
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
JavadocTester tester = new TestTagHolderMethod();
- tester.run(ARGS, new String[][]{}, new String[][]{});
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-docletpath", testSrc, // unlikely to be effective
+ "-doclet", "TestTagHolderMethod",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
}
}
--- a/langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java Fri May 16 14:35:37 2014 -0700
@@ -26,46 +26,44 @@
* @bug 4496223 4496270 4618686 4720974 4812240 6253614 6253604
* @summary <DESC>
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestTagInheritence
* @run main TestTagInheritence
*/
+// TODO: Inheritence should be Inheritance! fix separately as noreg-trivial
public class TestTagInheritence extends JavadocTester {
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg",
- "firstSentence", "firstSentence2"
- };
+ public static void main(String... args) throws Exception {
+ TestTagInheritence tester = new TestTagInheritence();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- String[][] tests = new String[42][2];
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ "pkg", "firstSentence", "firstSentence2");
+ checkExit(Exit.OK);
+
//Test bad inheritDoc tag warning.
- tests[0][0]= WARNING_OUTPUT;
- tests[0][1] = "warning - @inheritDoc used but testBadInheritDocTag() " +
- "does not override or implement any method.";
+ checkOutput(Output.WARNING, true,
+ "warning - @inheritDoc used but testBadInheritDocTag() "
+ + "does not override or implement any method.");
//Test valid usage of inheritDoc tag.
- for (int i = 1; i < tests.length-2; i++) {
- tests[i][0] = "pkg/TestTagInheritence.html";
- tests[i][1] = "Test " + i + " passes";
+ for (int i = 1; i < 40; i++) {
+ checkOutput("pkg/TestTagInheritence.html", true,
+ "Test " + i + " passes");
}
//First sentence test (6253614)
- tests[tests.length - 2][0] = "firstSentence/B.html";
- tests[tests.length - 2][1] = "<div class=\"block\">First sentence.</div>";
+ checkOutput("firstSentence/B.html", true,
+ "<div class=\"block\">First sentence.</div>");
//Another first sentence test (6253604)
- tests[tests.length - 1][0] = "firstSentence2/C.html";
- tests[tests.length - 1][1] = "<div class=\"block\">First sentence.</div>";
-
- TestTagInheritence tester = new TestTagInheritence();
- tester.run(ARGS, tests, NO_TEST);
- tester.printSummary();
+ checkOutput("firstSentence2/C.html", true,
+ "<div class=\"block\">First sentence.</div>");
}
}
--- a/langtools/test/com/sun/javadoc/testTagMisuse/TestTagMisuse.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagMisuse/TestTagMisuse.java Fri May 16 14:35:37 2014 -0700
@@ -25,31 +25,35 @@
* @test
* @summary Determine if proper warning messages are printed when know.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
* @build TestTagMisuse
* @run main TestTagMisuse
*/
public class TestTagMisuse extends JavadocTester {
- private static final String[][] TEST = {
- {WARNING_OUTPUT, "warning - Tag @param cannot be used in field documentation."},
- {WARNING_OUTPUT, "warning - Tag @throws cannot be used in field documentation."},
- {WARNING_OUTPUT, "warning - Tag @return cannot be used in constructor documentation."},
- {WARNING_OUTPUT, "warning - Tag @throws cannot be used in inline documentation."},
- };
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/TestTagMisuse.java"
- };
-
/**
* The entry point of the test.
* @param args the array of command line arguments.
+ * @throws Exception if the test fails
*/
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestTagMisuse tester = new TestTagMisuse();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ testSrc("TestTagMisuse.java"));
+ checkExit(Exit.OK);
+
+ checkOutput(Output.WARNING, true,
+ "warning - Tag @param cannot be used in field documentation.",
+ "warning - Tag @throws cannot be used in field documentation.",
+ "warning - Tag @return cannot be used in constructor documentation.",
+ "warning - Tag @throws cannot be used in inline documentation.");
}
/**
--- a/langtools/test/com/sun/javadoc/testTagOutput/TestTagOutput.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagOutput/TestTagOutput.java Fri May 16 14:35:37 2014 -0700
@@ -28,36 +28,32 @@
* @bug 8026370 8026567
* @summary This test checks the generated tag output.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestTagOutput
+ * @library ../lib
+ * @build JavadocTester
* @run main TestTagOutput
*/
public class TestTagOutput extends JavadocTester {
- private static final String[][] TEST = {
- { "pkg1/DeprecatedTag.html",
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>"},
- { "pkg1/DeprecatedTag.html",
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> " +
- "<span class=\"deprecationComment\">Do not use this.</span></div>"}};
-
- private static final String[][] NEGATED_TEST = {
- { "pkg1/DeprecatedTag.html",
- "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated." +
- "</span> <span class=\"deprecationComment\"></span></div>"}};
+ public static void main(String... args) throws Exception {
+ TestTagOutput tester = new TestTagOutput();
+ tester.runTests();
+ }
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg1");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTagOutput tester = new TestTagOutput();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg1/DeprecatedTag.html", true,
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> </div>",
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span> " +
+ "<span class=\"deprecationComment\">Do not use this.</span></div>");
+
+ checkOutput("pkg1/DeprecatedTag.html", false,
+ "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated." +
+ "</span> <span class=\"deprecationComment\"></span></div>");
}
}
--- a/langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java Fri May 16 14:35:37 2014 -0700
@@ -29,49 +29,41 @@
* Run Javadoc on some sample source that uses {@inheritDoc}. Make
* sure that only the first sentence shows up in the summary table.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester
- * @build TestTaglets
- * @build taglets.Foo
+ * @library ../lib
+ * @build JavadocTester taglets.Foo
* @run main TestTaglets
*/
public class TestTaglets extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS_4654308 = new String[] {
- "-d", "4654308", "-tagletpath", SRC_DIR, "-taglet", "taglets.Foo",
- "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestTaglets tester = new TestTaglets();
+ tester.runTests();
+ }
- private static final String[] ARGS_4767038 = new String[] {
- "-d", "4767038", "-sourcepath", SRC_DIR, SRC_DIR + "/Parent.java",
- SRC_DIR + "/Child.java"
- };
-
- //Input for string search tests.
- private static final String[][] TEST_4654308 = new String[][] {
- { "C.html", "<span class=\"simpleTagLabel\">Foo:</span></dt>" +
- "<dd>my only method is <a href=\"C.html#method--\"><code>here" +
- "</code></a></dd></dl>"}
- };
+ @Test
+ void test_4654308() {
+ javadoc("-d", "out-4654308",
+ "-tagletpath", testSrc, // TODO: probably does no good
+ "-taglet", "taglets.Foo",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- private static final String[][] TEST_4767038 = new String[][] {
- { "Child.html",
- "This is the first sentence."}
- };
-
+ checkOutput("C.html", true,
+ "<span class=\"simpleTagLabel\">Foo:</span></dt>"
+ + "<dd>my only method is <a href=\"C.html#method--\"><code>here"
+ + "</code></a></dd></dl>");
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTaglets tester = new TestTaglets();
- tester.run(ARGS_4654308, TEST_4654308, NO_TEST);
- tester.printSummary();
- tester = new TestTaglets();
- tester.run(ARGS_4767038, TEST_4767038, NO_TEST);
- tester.printSummary();
+ @Test
+ void test_4767038() {
+ javadoc("-d", "out-4767038",
+ "-sourcepath", testSrc,
+ testSrc("Parent.java"), testSrc("Child.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("Child.html", true,
+ "This is the first sentence.");
}
}
--- a/langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java Fri May 16 14:35:37 2014 -0700
@@ -28,28 +28,25 @@
* not documented with a throws tag, we generate a link to it in the
* throws section. Make sure that the link is below a Throws heading.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestThrowsHead
* @run main TestThrowsHead
*/
public class TestThrowsHead extends JavadocTester {
- private static final String[][] TEST = {
- { "C.html", "<dt><span class=\"throwsLabel\">Throws:</span>"}
- };
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestThrowsHead tester = new TestThrowsHead();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestThrowsHead tester = new TestThrowsHead();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ testSrc("C.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("C.html", true,
+ "<dt><span class=\"throwsLabel\">Throws:</span>");
}
}
--- a/langtools/test/com/sun/javadoc/testThrowsInheritence/TestThrowsTagInheritence.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsInheritence/TestThrowsTagInheritence.java Fri May 16 14:35:37 2014 -0700
@@ -28,36 +28,35 @@
* override the throws tags in interface. This test also verifies that throws tags are inherited properly
* the case where the name of one exception is not fully qualified.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestThrowsTagInheritence
* @run main TestThrowsTagInheritence
*/
+// TODO: should be TestThrowsInheritance!
public class TestThrowsTagInheritence extends JavadocTester {
- private static final String[][] TEST = {
- //The class should not inherit the tag from the interface.
- { "Foo.html", "Test 1 passes."}
- };
- private static final String[][] NEGATED_TEST = {
- //The class should not inherit the tag from the interface.
- { "C.html", "Test 1 fails."}
+ public static void main(String... args) throws Exception {
+ TestThrowsTagInheritence tester = new TestThrowsTagInheritence();
+ tester.runTests();
+ }
- };
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java",
- SRC_DIR + "/I.java", SRC_DIR + "/Foo.java",
- SRC_DIR + "/Iface.java"
- };
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"),
+ testSrc("I.java"),
+ testSrc("Foo.java"),
+ testSrc("Iface.java"));
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestThrowsTagInheritence tester = new TestThrowsTagInheritence();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ // The class should not inherit the tag from the interface.
+ checkOutput("Foo.html", true,
+ "Test 1 passes.");
+
+ //The class should not inherit the tag from the interface.
+ checkOutput("C.html", false,
+ "Test 1 fails.");
}
}
--- a/langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java Fri May 16 14:35:37 2014 -0700
@@ -27,22 +27,26 @@
* @summary Test to make sure that exceptions always show up in the
* correct order.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestThrowsTag
* @run main TestThrowsTag
*/
public class TestThrowsTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestThrowsTag tester = new TestThrowsTag();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/C.html",
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.FAILED); // TODO: investigate why failed
+
+ checkOutput("pkg/C.html", true,
"<dd><code><a href=\"../pkg/T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>\n" +
"<dd><code><a href=\"../pkg/T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>\n" +
"<dd><code><a href=\"../pkg/T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>\n" +
@@ -51,16 +55,6 @@
"<dd><code><a href=\"../pkg/T6.html\" title=\"class in pkg\">T6</a></code> - the second inherited throws tag.</dd>\n" +
"<dd><code><a href=\"../pkg/T7.html\" title=\"class in pkg\">T7</a></code> - the third inherited throws tag.</dd>\n" +
"<dd><code><a href=\"../pkg/T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
- },
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestThrowsTag tester = new TestThrowsTag();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ );
}
}
--- a/langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java Fri May 16 14:35:37 2014 -0700
@@ -26,42 +26,35 @@
* @bug 4714257
* @summary Test to make sure that the title attribute shows up in links.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestTitleInHref
* @run main TestTitleInHref
*/
public class TestTitleInHref extends JavadocTester {
- private static final String[][] TEST = {
- //Test to make sure that the title shows up in a class link.
- { "pkg/Links.html",
- "<a href=\"../pkg/Class.html\" title=\"class in pkg\">"},
-
- //Test to make sure that the title shows up in an interface link.
- { "pkg/Links.html",
- "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
-
- //Test to make sure that the title shows up in cross link shows up
- { "pkg/Links.html",
- "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><code>This is a cross link to class File</code></a>"},
-
- };
+ public static void main(String... args) throws Exception {
+ TestTitleInHref tester = new TestTitleInHref();
+ tester.runTests();
+ }
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api",
- SRC_DIR, "pkg"
- };
+ @Test
+ void test() {
+ String uri = "http://java.sun.com/j2se/1.4/docs/api";
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-linkoffline", uri, testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTitleInHref tester = new TestTitleInHref();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/Links.html", true,
+ //Test to make sure that the title shows up in a class link.
+ "<a href=\"../pkg/Class.html\" title=\"class in pkg\">",
+ //Test to make sure that the title shows up in an interface link.
+ "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">",
+ //Test to make sure that the title shows up in cross link shows up
+ "<a href=\"" + uri + "/java/io/File.html?is-external=true\" "
+ + "title=\"class or interface in java.io\">"
+ + "<code>This is a cross link to class File</code></a>");
}
}
--- a/langtools/test/com/sun/javadoc/testTopOption/TestTopOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTopOption/TestTopOption.java Fri May 16 14:35:37 2014 -0700
@@ -26,55 +26,44 @@
* @bug 6227616
* @summary Test the new -top option.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestTopOption
* @run main TestTopOption
*/
public class TestTopOption extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-overview", "SRC_DIR + '/' + overview.html", "-use", "-top",
- "TOP TEXT", "-d", OUTPUT_DIR, "-sourcepath",
- SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestTopOption tester = new TestTopOption();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/AnnotationType.html",
- "TOP TEXT"},
- { "pkg/class-use/AnnotationType.html",
- "TOP TEXT"},
-
- { "pkg/Cl.html",
- "TOP TEXT"},
- { "pkg/class-use/Cl.html",
- "TOP TEXT"},
+ @Test
+ void test() {
+ javadoc("-overview", testSrc("overview.html"),
+ "-use",
+ "-top", "TOP TEXT",
+ "-d", "out",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
- { "pkg/package-summary.html",
- "TOP TEXT"},
- { "pkg/package-use.html",
- "TOP TEXT"},
+ checkTopText(
+ "pkg/AnnotationType.html",
+ "pkg/class-use/AnnotationType.html",
+ "pkg/Cl.html",
+ "pkg/class-use/Cl.html",
+ "pkg/package-summary.html",
+ "pkg/package-use.html",
+ "overview-summary.html",
+ "overview-tree.html",
+ "constant-values.html",
+ "help-doc.html");
+ }
- { "overview-summary.html",
- "TOP TEXT"},
- { "overview-tree.html",
- "TOP TEXT"},
- { "constant-values.html",
- "TOP TEXT"},
- { "help-doc.html",
- "TOP TEXT"},
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTopOption tester = new TestTopOption();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ void checkTopText(String... files) {
+ for (String file : files) {
+ checkOutput(file, true, "TOP TEXT");
+ }
}
}
--- a/langtools/test/com/sun/javadoc/testTypeAnnotations/TestTypeAnnotations.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/TestTypeAnnotations.java Fri May 16 14:35:37 2014 -0700
@@ -26,360 +26,327 @@
* @bug 8005091 8009686 8025633 8026567
* @summary Make sure that type annotations are displayed correctly
* @author Bhavesh Patel
- * @library ../lib/
+ * @library ../lib
* @ignore
- * @build JavadocTester TestTypeAnnotations
+ * @build JavadocTester
* @run main TestTypeAnnotations
*/
public class TestTypeAnnotations extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-private", "typeannos"
- };
+ public static void main(String... args) throws Exception {
+ TestTypeAnnotations tester = new TestTypeAnnotations();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ "-private",
+ "typeannos");
+ checkExit(Exit.OK);
+
// Test for type annotations on Class Extends (ClassExtends.java).
- { "typeannos/MyClass.html",
- "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
- "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" " +
- "title=\"class in typeannos\">ParameterizedClass</a><<a href=\"" +
- "../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">" +
- "@ClassExtB</a> java.lang.String>"
- },
- { "typeannos/MyClass.html",
- "implements <a href=\"../typeannos/ClassExtB.html\" title=\"" +
- "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, " +
- "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in " +
- "typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedInterface.html\" " +
- "title=\"interface in typeannos\">ParameterizedInterface</a><" +
- "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
- "typeannos\">@ClassExtB</a> java.lang.String></pre>"
- },
- { "typeannos/MyInterface.html",
- "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
- "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/" +
- "ParameterizedInterface.html\" title=\"interface in typeannos\">" +
- "ParameterizedInterface</a><<a href=\"../typeannos/ClassExtA.html\" " +
- "title=\"annotation in typeannos\">@ClassExtA</a> java.lang.String>, " +
- "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
- "typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>"
- },
+ checkOutput("typeannos/MyClass.html", true,
+ "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation "
+ + "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" "
+ + "title=\"class in typeannos\">ParameterizedClass</a><<a href=\""
+ + "../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">"
+ + "@ClassExtB</a> java.lang.String>",
+
+ "implements <a href=\"../typeannos/ClassExtB.html\" title=\""
+ + "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, "
+ + "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in "
+ + "typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedInterface.html\" "
+ + "title=\"interface in typeannos\">ParameterizedInterface</a><"
+ + "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in "
+ + "typeannos\">@ClassExtB</a> java.lang.String></pre>");
+
+ checkOutput("typeannos/MyInterface.html", true,
+ "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation "
+ + "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/"
+ + "ParameterizedInterface.html\" title=\"interface in typeannos\">"
+ + "ParameterizedInterface</a><<a href=\"../typeannos/ClassExtA.html\" "
+ + "title=\"annotation in typeannos\">@ClassExtA</a> java.lang.String>, "
+ + "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in "
+ + "typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>");
// Test for type annotations on Class Parameters (ClassParameters.java).
- { "typeannos/ExtendsBound.html",
- "class <span class=\"typeNameLabel\">ExtendsBound<K extends <a " +
- "href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
- "typeannos\">@ClassParamA</a> java.lang.String></span>"
- },
- { "typeannos/ExtendsGeneric.html",
- "<pre>class <span class=\"typeNameLabel\">ExtendsGeneric<K extends " +
- "<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
- "typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" " +
- "title=\"class in typeannos\">Unannotated</a><<a href=\"" +
- "../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">" +
- "@ClassParamB</a> java.lang.String>></span>"
- },
- { "typeannos/TwoBounds.html",
- "<pre>class <span class=\"typeNameLabel\">TwoBounds<K extends <a href=\"" +
- "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
- "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/" +
- "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB" +
- "</a> java.lang.String></span>"
- },
- { "typeannos/Complex1.html",
- "class <span class=\"typeNameLabel\">Complex1<K extends <a href=\"../" +
- "typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
- "@ClassParamA</a> java.lang.String & java.lang.Runnable></span>"
- },
- { "typeannos/Complex2.html",
- "class <span class=\"typeNameLabel\">Complex2<K extends java.lang." +
- "String & <a href=\"../typeannos/ClassParamB.html\" title=\"" +
- "annotation in typeannos\">@ClassParamB</a> java.lang.Runnable></span>"
- },
- { "typeannos/ComplexBoth.html",
- "class <span class=\"typeNameLabel\">ComplexBoth<K extends <a href=\"" +
- "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\"" +
- ">@ClassParamA</a> java.lang.String & <a href=\"../typeannos/" +
- "ClassParamA.html\" title=\"annotation in typeannos\">@ClassParamA" +
- "</a> java.lang.Runnable></span>"
- },
+ checkOutput("typeannos/ExtendsBound.html", true,
+ "class <span class=\"typeNameLabel\">ExtendsBound<K extends <a "
+ + "href=\"../typeannos/ClassParamA.html\" title=\"annotation in "
+ + "typeannos\">@ClassParamA</a> java.lang.String></span>");
+
+ checkOutput("typeannos/ExtendsGeneric.html", true,
+ "<pre>class <span class=\"typeNameLabel\">ExtendsGeneric<K extends "
+ + "<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in "
+ + "typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" "
+ + "title=\"class in typeannos\">Unannotated</a><<a href=\""
+ + "../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">"
+ + "@ClassParamB</a> java.lang.String>></span>");
+
+ checkOutput("typeannos/TwoBounds.html", true,
+ "<pre>class <span class=\"typeNameLabel\">TwoBounds<K extends <a href=\""
+ + "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">"
+ + "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/"
+ + "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB"
+ + "</a> java.lang.String></span>");
+
+ checkOutput("typeannos/Complex1.html", true,
+ "class <span class=\"typeNameLabel\">Complex1<K extends <a href=\"../"
+ + "typeannos/ClassParamA.html\" title=\"annotation in typeannos\">"
+ + "@ClassParamA</a> java.lang.String & java.lang.Runnable></span>");
+
+ checkOutput("typeannos/Complex2.html", true,
+ "class <span class=\"typeNameLabel\">Complex2<K extends java.lang."
+ + "String & <a href=\"../typeannos/ClassParamB.html\" title=\""
+ + "annotation in typeannos\">@ClassParamB</a> java.lang.Runnable></span>");
+
+ checkOutput("typeannos/ComplexBoth.html", true,
+ "class <span class=\"typeNameLabel\">ComplexBoth<K extends <a href=\""
+ + "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\""
+ + ">@ClassParamA</a> java.lang.String & <a href=\"../typeannos/"
+ + "ClassParamA.html\" title=\"annotation in typeannos\">@ClassParamA"
+ + "</a> java.lang.Runnable></span>");
// Test for type annotations on fields (Fields.java).
- { "typeannos/DefaultScope.html",
- "<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in " +
- "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" " +
- "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
- "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
- "@FldB</a> java.lang.String> bothTypeArgs</pre>"
- },
- { "typeannos/DefaultScope.html",
- "<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in " +
- "typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/" +
- "FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] " +
- "array1Deep</pre>"
- },
- { "typeannos/DefaultScope.html",
- "<pre>java.lang.String[] <a href=\"../typeannos/FldB.html\" " +
- "title=\"annotation in typeannos\">@FldB</a> [] array2SecondOld</pre>"
- },
- { "typeannos/DefaultScope.html",
- "<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in " +
- "typeannos\">@FldD</a> java.lang.String <a href=\"../typeannos/" +
- "FldC.html\" title=\"annotation in typeannos\">@FldC</a> <a href=\"" +
- "../typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA" +
- "</a> [] <a href=\"../typeannos/FldC.html\" title=\"annotation in " +
- "typeannos\">@FldC</a> <a href=\"../typeannos/FldB.html\" title=\"" +
- "annotation in typeannos\">@FldB</a> [] array2Deep</pre>"
- },
- { "typeannos/ModifiedScoped.html",
- "<pre>public final <a href=\"../typeannos/Parameterized.html\" " +
- "title=\"class in typeannos\">Parameterized</a><<a href=\"../" +
- "typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> " +
- "<a href=\"../typeannos/Parameterized.html\" title=\"class in " +
- "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" " +
- "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
- "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
- "@FldB</a> java.lang.String>,<a href=\"../typeannos/FldB.html\" " +
- "title=\"annotation in typeannos\">@FldB</a> java.lang.String> " +
- "nestedParameterized</pre>"
- },
- { "typeannos/ModifiedScoped.html",
- "<pre>public final <a href=\"../typeannos/FldA.html\" " +
- "title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] " +
- "array2</pre>"
- },
+ checkOutput("typeannos/DefaultScope.html", true,
+ "<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in "
+ + "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" "
+ + "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a "
+ + "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">"
+ + "@FldB</a> java.lang.String> bothTypeArgs</pre>",
+
+ "<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in "
+ + "typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/"
+ + "FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] "
+ + "array1Deep</pre>",
+
+ "<pre>java.lang.String[] <a href=\"../typeannos/FldB.html\" "
+ + "title=\"annotation in typeannos\">@FldB</a> [] array2SecondOld</pre>",
+
+ "<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in "
+ + "typeannos\">@FldD</a> java.lang.String <a href=\"../typeannos/"
+ + "FldC.html\" title=\"annotation in typeannos\">@FldC</a> <a href=\""
+ + "../typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA"
+ + "</a> [] <a href=\"../typeannos/FldC.html\" title=\"annotation in "
+ + "typeannos\">@FldC</a> <a href=\"../typeannos/FldB.html\" title=\""
+ + "annotation in typeannos\">@FldB</a> [] array2Deep</pre>");
+
+ checkOutput("typeannos/ModifiedScoped.html", true,
+ "<pre>public final <a href=\"../typeannos/Parameterized.html\" "
+ + "title=\"class in typeannos\">Parameterized</a><<a href=\"../"
+ + "typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> "
+ + "<a href=\"../typeannos/Parameterized.html\" title=\"class in "
+ + "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" "
+ + "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a "
+ + "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">"
+ + "@FldB</a> java.lang.String>,<a href=\"../typeannos/FldB.html\" "
+ + "title=\"annotation in typeannos\">@FldB</a> java.lang.String> "
+ + "nestedParameterized</pre>",
+
+ "<pre>public final <a href=\"../typeannos/FldA.html\" "
+ + "title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] "
+ + "array2</pre>");
// Test for type annotations on method return types (MethodReturnType.java).
- { "typeannos/MtdDefaultScope.html",
- "<pre>public <T> <a href=\"../typeannos/MRtnA.html\" " +
- "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String" +
- " method()</pre>"
- },
- { "typeannos/MtdDefaultScope.html",
- "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
- "typeannos\">@MRtnA</a> java.lang.String <a href=\"../typeannos/" +
- "MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> [] <a " +
- "href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">" +
- "@MRtnB</a> [] array2Deep()</pre>"
- },
- { "typeannos/MtdDefaultScope.html",
- "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
- "typeannos\">@MRtnA</a> java.lang.String[][] array2()</pre>"
- },
- { "typeannos/MtdModifiedScoped.html",
- "<pre>public final <a href=\"../typeannos/MtdParameterized.html\" " +
- "title=\"class in typeannos\">MtdParameterized</a><<a href=\"../" +
- "typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> " +
- "<a href=\"../typeannos/MtdParameterized.html\" title=\"class in " +
- "typeannos\">MtdParameterized</a><<a href=\"../typeannos/MRtnA." +
- "html\" title=\"annotation in typeannos\">@MRtnA</a> java.lang." +
- "String,<a href=\"../typeannos/MRtnB.html\" title=\"annotation in " +
- "typeannos\">@MRtnB</a> java.lang.String>,<a href=\"../typeannos/" +
- "MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> java." +
- "lang.String> nestedMtdParameterized()</pre>"
- },
+ checkOutput("typeannos/MtdDefaultScope.html", true,
+ "<pre>public <T> <a href=\"../typeannos/MRtnA.html\" "
+ + "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String"
+ + " method()</pre>",
+
+ "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in "
+ + "typeannos\">@MRtnA</a> java.lang.String <a href=\"../typeannos/"
+ + "MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> [] <a "
+ + "href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">"
+ + "@MRtnB</a> [] array2Deep()</pre>",
+
+ "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in "
+ + "typeannos\">@MRtnA</a> java.lang.String[][] array2()</pre>");
+
+ checkOutput("typeannos/MtdModifiedScoped.html", true,
+ "<pre>public final <a href=\"../typeannos/MtdParameterized.html\" "
+ + "title=\"class in typeannos\">MtdParameterized</a><<a href=\"../"
+ + "typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> "
+ + "<a href=\"../typeannos/MtdParameterized.html\" title=\"class in "
+ + "typeannos\">MtdParameterized</a><<a href=\"../typeannos/MRtnA."
+ + "html\" title=\"annotation in typeannos\">@MRtnA</a> java.lang."
+ + "String,<a href=\"../typeannos/MRtnB.html\" title=\"annotation in "
+ + "typeannos\">@MRtnB</a> java.lang.String>,<a href=\"../typeannos/"
+ + "MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> java."
+ + "lang.String> nestedMtdParameterized()</pre>");
// Test for type annotations on method type parameters (MethodTypeParameters.java).
- { "typeannos/UnscopedUnmodified.html",
- "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
- "annotation in typeannos\">@MTyParamA</a> java.lang.String>" +
- " void methodExtends()</pre>"
- },
- { "typeannos/UnscopedUnmodified.html",
- "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
- "annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/" +
- "MtdTyParameterized.html\" title=\"class in typeannos\">" +
- "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" " +
- "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
- ">> void nestedExtends()</pre>"
- },
- { "typeannos/PublicModifiedMethods.html",
- "<pre>public final <K extends <a href=\"../typeannos/" +
- "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
- "java.lang.String> void methodExtends()</pre>"
- },
- { "typeannos/PublicModifiedMethods.html",
- "<pre>public final <K extends <a href=\"../typeannos/" +
- "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
- "java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" " +
- "title=\"annotation in typeannos\">@MTyParamA</a> <a href=\"../" +
- "typeannos/MtdTyParameterized.html\" title=\"class in typeannos\">" +
- "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" " +
- "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
- ">> void dual()</pre>"
- },
+ checkOutput("typeannos/UnscopedUnmodified.html", true,
+ "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\""
+ + "annotation in typeannos\">@MTyParamA</a> java.lang.String>"
+ + " void methodExtends()</pre>",
+
+ "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\""
+ + "annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/"
+ + "MtdTyParameterized.html\" title=\"class in typeannos\">"
+ + "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" "
+ + "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String"
+ + ">> void nestedExtends()</pre>");
+
+ checkOutput("typeannos/PublicModifiedMethods.html", true,
+ "<pre>public final <K extends <a href=\"../typeannos/"
+ + "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> "
+ + "java.lang.String> void methodExtends()</pre>",
+
+ "<pre>public final <K extends <a href=\"../typeannos/"
+ + "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> "
+ + "java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" "
+ + "title=\"annotation in typeannos\">@MTyParamA</a> <a href=\"../"
+ + "typeannos/MtdTyParameterized.html\" title=\"class in typeannos\">"
+ + "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" "
+ + "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String"
+ + ">> void dual()</pre>");
// Test for type annotations on parameters (Parameters.java).
- { "typeannos/Parameters.html",
- "<pre>void unannotated(<a href=\"../typeannos/" +
- "ParaParameterized.html\" title=\"class in typeannos\">" +
- "ParaParameterized</a><java.lang.String,java.lang.String>" +
- " a)</pre>"
- },
- { "typeannos/Parameters.html",
- "<pre>void nestedParaParameterized(<a href=\"../typeannos/" +
- "ParaParameterized.html\" title=\"class in typeannos\">" +
- "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" " +
- "title=\"annotation in typeannos\">@ParamA</a> <a href=\"../" +
- "typeannos/ParaParameterized.html\" title=\"class in typeannos\">" +
- "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" " +
- "title=\"annotation in typeannos\">@ParamA</a> java.lang.String," +
- "<a href=\"../typeannos/ParamB.html\" title=\"annotation in " +
- "typeannos\">@ParamB</a> java.lang.String>,<a href=\"../" +
- "typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB" +
- "</a> java.lang.String> a)</pre>"
- },
- { "typeannos/Parameters.html",
- "<pre>void array2Deep(<a href=\"../typeannos/ParamA.html\" " +
- "title=\"annotation in typeannos\">@ParamA</a> java.lang.String " +
- "<a href=\"../typeannos/ParamA.html\" title=\"annotation in " +
- "typeannos\">@ParamA</a> [] <a href=\"../typeannos/ParamB.html\" " +
- "title=\"annotation in typeannos\">@ParamB</a> [] a)</pre>"
- },
+ checkOutput("typeannos/Parameters.html", true,
+ "<pre>void unannotated(<a href=\"../typeannos/"
+ + "ParaParameterized.html\" title=\"class in typeannos\">"
+ + "ParaParameterized</a><java.lang.String,java.lang.String>"
+ + " a)</pre>",
+
+ "<pre>void nestedParaParameterized(<a href=\"../typeannos/"
+ + "ParaParameterized.html\" title=\"class in typeannos\">"
+ + "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" "
+ + "title=\"annotation in typeannos\">@ParamA</a> <a href=\"../"
+ + "typeannos/ParaParameterized.html\" title=\"class in typeannos\">"
+ + "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" "
+ + "title=\"annotation in typeannos\">@ParamA</a> java.lang.String,"
+ + "<a href=\"../typeannos/ParamB.html\" title=\"annotation in "
+ + "typeannos\">@ParamB</a> java.lang.String>,<a href=\"../"
+ + "typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB"
+ + "</a> java.lang.String> a)</pre>",
+
+ "<pre>void array2Deep(<a href=\"../typeannos/ParamA.html\" "
+ + "title=\"annotation in typeannos\">@ParamA</a> java.lang.String "
+ + "<a href=\"../typeannos/ParamA.html\" title=\"annotation in "
+ + "typeannos\">@ParamA</a> [] <a href=\"../typeannos/ParamB.html\" "
+ + "title=\"annotation in typeannos\">@ParamB</a> [] a)</pre>");
// Test for type annotations on throws (Throws.java).
- { "typeannos/ThrDefaultUnmodified.html",
- "<pre>void oneException()\n" +
- " throws <a href=\"../typeannos/ThrA.html\" title=\"" +
- "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
- },
- { "typeannos/ThrDefaultUnmodified.html",
- "<pre>void twoExceptions()\n" +
- " throws <a href=\"../typeannos/ThrA.html\" title=\"" +
- "annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n" +
- " <a href=\"../typeannos/ThrA.html\" title=\"" +
- "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
- },
- { "typeannos/ThrPublicModified.html",
- "<pre>public final void oneException(java.lang.String a)\n" +
- " throws <a href=\"../typeannos/ThrA.html\" " +
- "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
- },
- { "typeannos/ThrPublicModified.html",
- "<pre>public final void twoExceptions(java.lang.String a)\n" +
- " throws <a href=\"../typeannos/ThrA.html\" " +
- "title=\"annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n" +
- " <a href=\"../typeannos/ThrA.html\" " +
- "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
- },
- { "typeannos/ThrWithValue.html",
- "<pre>void oneException()\n" +
- " throws <a href=\"../typeannos/ThrB.html\" title=\"" +
- "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
- "ThrB.html#value--\">value</a>=\"m\") java.lang.Exception</pre>"
- },
- { "typeannos/ThrWithValue.html",
- "<pre>void twoExceptions()\n" +
- " throws <a href=\"../typeannos/ThrB.html\" title=\"" +
- "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
- "ThrB.html#value--\">value</a>=\"m\") java.lang.RuntimeException,\n" +
- " <a href=\"../typeannos/ThrA.html\" title=\"" +
- "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
- },
+ checkOutput("typeannos/ThrDefaultUnmodified.html", true,
+ "<pre>void oneException()\n"
+ + " throws <a href=\"../typeannos/ThrA.html\" title=\""
+ + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>",
+
+ "<pre>void twoExceptions()\n"
+ + " throws <a href=\"../typeannos/ThrA.html\" title=\""
+ + "annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n"
+ + " <a href=\"../typeannos/ThrA.html\" title=\""
+ + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
+
+ checkOutput("typeannos/ThrPublicModified.html", true,
+ "<pre>public final void oneException(java.lang.String a)\n"
+ + " throws <a href=\"../typeannos/ThrA.html\" "
+ + "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>",
+
+ "<pre>public final void twoExceptions(java.lang.String a)\n"
+ + " throws <a href=\"../typeannos/ThrA.html\" "
+ + "title=\"annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n"
+ + " <a href=\"../typeannos/ThrA.html\" "
+ + "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
+
+ checkOutput("typeannos/ThrWithValue.html", true,
+ "<pre>void oneException()\n"
+ + " throws <a href=\"../typeannos/ThrB.html\" title=\""
+ + "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/"
+ + "ThrB.html#value--\">value</a>=\"m\") java.lang.Exception</pre>",
+
+ "<pre>void twoExceptions()\n"
+ + " throws <a href=\"../typeannos/ThrB.html\" title=\""
+ + "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/"
+ + "ThrB.html#value--\">value</a>=\"m\") java.lang.RuntimeException,\n"
+ + " <a href=\"../typeannos/ThrA.html\" title=\""
+ + "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>");
// Test for type annotations on type parameters (TypeParameters.java).
- { "typeannos/TestMethods.html",
- "<pre><K,V extends <a href=\"../typeannos/TyParaA.html\" title=\"" +
- "annotation in typeannos\">@TyParaA</a> java.lang.String> " +
- "void secondAnnotated()</pre>"
- },
+ checkOutput("typeannos/TestMethods.html", true,
+ "<pre><K,V extends <a href=\"../typeannos/TyParaA.html\" title=\""
+ + "annotation in typeannos\">@TyParaA</a> java.lang.String> "
+ + "void secondAnnotated()</pre>");
// Test for type annotations on wildcard type (Wildcards.java).
- { "typeannos/BoundTest.html",
- "<pre>void wcExtends(<a href=\"../typeannos/MyList.html\" " +
- "title=\"class in typeannos\">MyList</a><? extends <a href=\"" +
- "../typeannos/WldA.html\" title=\"annotation in typeannos\">@WldA" +
- "</a> java.lang.String> l)</pre>"
- },
- { "typeannos/BoundTest.html",
- "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
- "typeannos\">MyList</a><? super <a href=\"../typeannos/WldA.html\" " +
- "title=\"annotation in typeannos\">@WldA</a> java.lang.String>" +
- " returnWcSuper()</pre>"
- },
- { "typeannos/BoundWithValue.html",
- "<pre>void wcSuper(<a href=\"../typeannos/MyList.html\" title=\"" +
- "class in typeannos\">MyList</a><? super <a href=\"../typeannos/" +
- "WldB.html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"" +
- "../typeannos/WldB.html#value--\">value</a>=\"m\") java.lang." +
- "String> l)</pre>"
- },
- { "typeannos/BoundWithValue.html",
- "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
- "typeannos\">MyList</a><? extends <a href=\"../typeannos/WldB." +
- "html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"../" +
- "typeannos/WldB.html#value--\">value</a>=\"m\") java.lang.String" +
- "> returnWcExtends()</pre>"
- },
+ checkOutput("typeannos/BoundTest.html", true,
+ "<pre>void wcExtends(<a href=\"../typeannos/MyList.html\" "
+ + "title=\"class in typeannos\">MyList</a><? extends <a href=\""
+ + "../typeannos/WldA.html\" title=\"annotation in typeannos\">@WldA"
+ + "</a> java.lang.String> l)</pre>",
+
+ "<pre><a href=\"../typeannos/MyList.html\" title=\"class in "
+ + "typeannos\">MyList</a><? super <a href=\"../typeannos/WldA.html\" "
+ + "title=\"annotation in typeannos\">@WldA</a> java.lang.String>"
+ + " returnWcSuper()</pre>");
+
+ checkOutput("typeannos/BoundWithValue.html", true,
+ "<pre>void wcSuper(<a href=\"../typeannos/MyList.html\" title=\""
+ + "class in typeannos\">MyList</a><? super <a href=\"../typeannos/"
+ + "WldB.html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\""
+ + "../typeannos/WldB.html#value--\">value</a>=\"m\") java.lang."
+ + "String> l)</pre>",
+
+ "<pre><a href=\"../typeannos/MyList.html\" title=\"class in "
+ + "typeannos\">MyList</a><? extends <a href=\"../typeannos/WldB."
+ + "html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"../"
+ + "typeannos/WldB.html#value--\">value</a>=\"m\") java.lang.String"
+ + "> returnWcExtends()</pre>");
// Test for receiver annotations (Receivers.java).
- { "typeannos/DefaultUnmodified.html",
- "<pre>void withException(<a href=\"../typeannos/RcvrA.html\" " +
- "title=\"annotation in typeannos\">@RcvrA</a> " +
- "DefaultUnmodified this)\n" +
- " throws java." +
- "lang.Exception</pre>"
- },
- { "typeannos/DefaultUnmodified.html",
- "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrA." +
- "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\"../" +
- "typeannos/RcvrB.html\" title=\"annotation in typeannos\">@RcvrB" +
- "</a>(<a href=\"../typeannos/RcvrB.html#value--\">value</a>=\"m\")" +
- " DefaultUnmodified this)</pre>"
- },
- { "typeannos/DefaultUnmodified.html",
- "<pre><T extends java.lang.Runnable> void accept(" +
- "<a href=\"../typeannos/RcvrA.html\" title=\"annotation in " +
- "typeannos\">@RcvrA</a> DefaultUnmodified this,\n" +
- " T r)\n" +
- " throws java.lang.Exception</pre>"
- },
- { "typeannos/PublicModified.html",
- "<pre>public final java.lang.String nonVoid(<a href=\"" +
- "../typeannos/RcvrA.html\" title=\"annotation in typeannos\">" +
- "@RcvrA</a> PublicModified this)</pre>"
- },
- { "typeannos/PublicModified.html",
- "<pre>public final <T extends java.lang.Runnable> " +
- "void accept(<a href=\"../typeannos/RcvrA.html\" title=\"" +
- "annotation in typeannos\">@RcvrA</a> PublicModified this,\n" +
- " T r)\n" +
- " throws java.lang.Exception</pre>"
- },
- { "typeannos/WithValue.html",
- "<pre><T extends java.lang.Runnable> void accept(" +
- "<a href=\"../typeannos/RcvrB.html\" title=\"annotation in " +
- "typeannos\">@RcvrB</a>(<a href=\"../typeannos/RcvrB.html#value--\">" +
- "value</a>=\"m\") WithValue this,\n" +
- " T r)\n" +
- " throws java.lang.Exception</pre>"
- },
- { "typeannos/WithFinal.html",
- "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrB." +
- "html\" title=\"annotation in typeannos\">@RcvrB</a>(<a href=\"../" +
- "typeannos/RcvrB.html#value--\">value</a>=\"m\") WithFinal" +
- " this)</pre>"
- },
- { "typeannos/WithBody.html",
- "<pre>void field(<a href=\"../typeannos/RcvrA.html\" title=\"" +
- "annotation in typeannos\">@RcvrA</a> WithBody this)</pre>"
- },
- { "typeannos/Generic2.html",
- "<pre>void test2(<a href=\"../typeannos/RcvrA.html\" title=\"" +
- "annotation in typeannos\">@RcvrA</a> Generic2<X> this)</pre>"
- }
- };
+ checkOutput("typeannos/DefaultUnmodified.html", true,
+ "<pre>void withException(<a href=\"../typeannos/RcvrA.html\" "
+ + "title=\"annotation in typeannos\">@RcvrA</a> "
+ + "DefaultUnmodified this)\n"
+ + " throws java."
+ + "lang.Exception</pre>",
+
+ "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrA."
+ + "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\"../"
+ + "typeannos/RcvrB.html\" title=\"annotation in typeannos\">@RcvrB"
+ + "</a>(<a href=\"../typeannos/RcvrB.html#value--\">value</a>=\"m\")"
+ + " DefaultUnmodified this)</pre>",
+
+ "<pre><T extends java.lang.Runnable> void accept("
+ + "<a href=\"../typeannos/RcvrA.html\" title=\"annotation in "
+ + "typeannos\">@RcvrA</a> DefaultUnmodified this,\n"
+ + " T r)\n"
+ + " throws java.lang.Exception</pre>");
+
+ checkOutput("typeannos/PublicModified.html", true,
+ "<pre>public final java.lang.String nonVoid(<a href=\""
+ + "../typeannos/RcvrA.html\" title=\"annotation in typeannos\">"
+ + "@RcvrA</a> PublicModified this)</pre>",
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTypeAnnotations tester = new TestTypeAnnotations();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ "<pre>public final <T extends java.lang.Runnable> "
+ + "void accept(<a href=\"../typeannos/RcvrA.html\" title=\""
+ + "annotation in typeannos\">@RcvrA</a> PublicModified this,\n"
+ + " T r)\n"
+ + " throws java.lang.Exception</pre>");
+
+ checkOutput("typeannos/WithValue.html", true,
+ "<pre><T extends java.lang.Runnable> void accept("
+ + "<a href=\"../typeannos/RcvrB.html\" title=\"annotation in "
+ + "typeannos\">@RcvrB</a>(<a href=\"../typeannos/RcvrB.html#value--\">"
+ + "value</a>=\"m\") WithValue this,\n"
+ + " T r)\n"
+ + " throws java.lang.Exception</pre>");
+
+ checkOutput("typeannos/WithFinal.html", true,
+ "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrB."
+ + "html\" title=\"annotation in typeannos\">@RcvrB</a>(<a href=\"../"
+ + "typeannos/RcvrB.html#value--\">value</a>=\"m\") WithFinal"
+ + " this)</pre>");
+
+ checkOutput("typeannos/WithBody.html", true,
+ "<pre>void field(<a href=\"../typeannos/RcvrA.html\" title=\""
+ + "annotation in typeannos\">@RcvrA</a> WithBody this)</pre>");
+
+ checkOutput("typeannos/Generic2.html", true,
+ "<pre>void test2(<a href=\"../typeannos/RcvrA.html\" title=\""
+ + "annotation in typeannos\">@RcvrA</a> Generic2<X> this)</pre>");
}
}
--- a/langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java Fri May 16 14:35:37 2014 -0700
@@ -30,66 +30,61 @@
* class-use pages. The class/annotation pages should check for type
* parameter links in the class/annotation signature section when -linksource is set.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestTypeParameters
+ * @library ../lib
+ * @build JavadocTester
* @run main TestTypeParameters
*/
public class TestTypeParameters extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS1 = new String[]{
- "-d", OUTPUT_DIR + "-1", "-use", "-sourcepath", SRC_DIR,
- "pkg"
- };
- private static final String[] ARGS2 = new String[]{
- "-d", OUTPUT_DIR + "-2", "-linksource", "-sourcepath", SRC_DIR,
- "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestTypeParameters tester = new TestTypeParameters();
+ tester.runTests();
+ }
+
+ @Test
+ void test1() {
+ javadoc("-d", "out-1",
+ "-use",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/C.html", true,
+ "<td class=\"colFirst\"><code><W extends java.lang.String,V extends "
+ + "java.util.List><br>java.lang.Object</code></td>",
+ "<code><T> java.lang.Object</code>");
+
+ checkOutput("pkg/package-summary.html", true,
+ "C</a><E extends <a href=\"../pkg/Parent.html\" "
+ + "title=\"class in pkg\">Parent</a>>");
- //Input for string search tests.
- private static final String[][] TEST1 = {
- { "pkg/C.html",
- "<td class=\"colFirst\"><code><W extends java.lang.String,V extends " +
- "java.util.List><br>java.lang.Object</code></td>"
- },
- { "pkg/C.html",
- "<code><T> java.lang.Object</code>"
- },
- { "pkg/package-summary.html",
- "C</a><E extends <a href=\"../pkg/Parent.html\" " +
- "title=\"class in pkg\">Parent</a>>"
- },
- { "pkg/class-use/Foo4.html",
- "<a href=\"../../pkg/ClassUseTest3.html\" title=\"class in pkg\">" +
- "ClassUseTest3</a><T extends <a href=\"../../pkg/ParamTest2.html\" " +
- "title=\"class in pkg\">ParamTest2</a><java.util.List<? extends " +
- "<a href=\"../../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>>>>"
- },
- //Nested type parameters
- { "pkg/C.html",
- "<a name=\"formatDetails-java.util.Collection-java.util.Collection-\">\n" +
- "<!-- -->\n" +
- "</a>"
- },
- };
- private static final String[][] TEST2 = {
- { "pkg/ClassUseTest3.html",
+ checkOutput("pkg/class-use/Foo4.html", true,
+ "<a href=\"../../pkg/ClassUseTest3.html\" title=\"class in pkg\">"
+ + "ClassUseTest3</a><T extends <a href=\"../../pkg/ParamTest2.html\" "
+ + "title=\"class in pkg\">ParamTest2</a><java.util.List<? extends "
+ + "<a href=\"../../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>>>>");
+
+ // Nested type parameters
+ checkOutput("pkg/C.html", true,
+ "<a name=\"formatDetails-java.util.Collection-java.util.Collection-\">\n"
+ + "<!-- -->\n"
+ + "</a>");
+ }
+
+
+ @Test
+ void test2() {
+ javadoc("-d", "out-2",
+ "-linksource",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/ClassUseTest3.html", true,
"public class <a href=\"../src-html/pkg/ClassUseTest3.html#line.28\">" +
"ClassUseTest3</a><T extends <a href=\"../pkg/ParamTest2.html\" " +
"title=\"class in pkg\">ParamTest2</a><java.util.List<? extends " +
- "<a href=\"../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>>>>"
- }
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestTypeParameters tester = new TestTypeParameters();
- tester.run(ARGS1, TEST1, NO_TEST);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.printSummary();
+ "<a href=\"../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>>>>");
}
}
--- a/langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java Fri May 16 14:35:37 2014 -0700
@@ -27,49 +27,40 @@
* @summary Reference unnamed package as "Unnamed", not empty string.
* Generate a package summary for the unnamed package.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestUnnamedPackage
* @run main TestUnnamedPackage
*/
public class TestUnnamedPackage extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestUnnamedPackage tester = new TestUnnamedPackage();
+ tester.runTests();
+ }
+
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-sourcepath", testSrc,
+ testSrc("C.java"));
+ checkExit(Exit.OK);
- //Input for string search tests.
- private static final String[][] TEST = {
- { "package-summary.html",
- "<h1 title=\"Package\" class=\"title\">Package <Unnamed></h1>"
- },
- { "package-summary.html",
- "This is a package comment for the unnamed package."
- },
- { "package-summary.html",
- "This is a class in the unnamed package."
- },
- { "package-tree.html",
- "<h1 class=\"title\">Hierarchy For Package <Unnamed></h1>"
- },
- { "index-all.html",
- "title=\"class in <Unnamed>\""
- },
- { "C.html", "<a href=\"package-summary.html\">"}
- };
- private static final String[][] NEGATED_TEST = {
- {ERROR_OUTPUT, "BadSource"},
- };
+ checkOutput("package-summary.html", true,
+ "<h1 title=\"Package\" class=\"title\">Package <Unnamed></h1>",
+ "This is a package comment for the unnamed package.",
+ "This is a class in the unnamed package.");
+
+ checkOutput("package-tree.html", true,
+ "<h1 class=\"title\">Hierarchy For Package <Unnamed></h1>");
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestUnnamedPackage tester = new TestUnnamedPackage();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("index-all.html", true,
+ "title=\"class in <Unnamed>\"");
+
+ checkOutput("C.html", true,
+ "<a href=\"package-summary.html\">");
+
+ checkOutput(Output.ERROR, false,
+ "BadSource");
}
}
--- a/langtools/test/com/sun/javadoc/testUseOption/TestUseOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testUseOption/TestUseOption.java Fri May 16 14:35:37 2014 -0700
@@ -26,100 +26,76 @@
* @bug 4496290 4985072 7006178 7068595 8016328
* @summary A simple test to determine if -use works.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestUseOption
* @run main TestUseOption
*/
public class TestUseOption extends JavadocTester {
- //Input for string search tests.
- private static final String[] TEST2 = {
- "Field in C1.",
- "Field in C2.",
- "Field in C4.",
- "Field in C5.",
- "Field in C6.",
- "Field in C7.",
- "Field in C8.",
- "Method in C1.",
- "Method in C2.",
- "Method in C4.",
- "Method in C5.",
- "Method in C6.",
- "Method in C7.",
- "Method in C8.",
- };
+ public static void main(String... args) throws Exception {
+ TestUseOption tester = new TestUseOption();
+ tester.runTests();
+ }
- private static final String[][] TEST3 = {
- { "class-use/UsedInC.html",
- "Uses of <a href=\"../UsedInC.html\" title=\"class in <Unnamed>\">" +
- "UsedInC</a> in <a href=\"../package-summary.html\"><Unnamed></a>"
- },
- { "package-use.html",
- "<td class=\"colOne\">" +
- "<a href=\"class-use/UsedInC.html#%3CUnnamed%3E\">UsedInC</a> </td>"
- }
- };
+ @Test
+ void test1() {
+ javadoc("-d", "out-1",
+ "-sourcepath", testSrc,
+ "-use",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
- private static final String[][] TEST4 = {
- { "pkg2/class-use/C3.html",
- "<a href=\"../../index.html?pkg2/class-use/C3.html\" target=\"_top\">" +
- "Frames</a></li>"
+ // Eight tests for class use.
+ for (int i = 1; i <= 8; i++) {
+ checkOutput("pkg1/class-use/C1.html", true,
+ "Test " + i + " passes");
}
- };
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
- };
-
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR+"-2", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
- };
+ // Three more tests for package use.
+ for (int i = 1; i <= 3; i++) {
+ checkOutput("pkg1/package-use.html", true,
+ "Test " + i + " passes");
+ }
- private static final String[] ARGS3 = new String[] {
- "-d", OUTPUT_DIR + "-3", "-sourcepath", SRC_DIR, "-use",
- SRC_DIR + "/C.java", SRC_DIR + "/UsedInC.java"
- };
-
- private static final String[] ARGS4 = new String[] {
- "-d", OUTPUT_DIR + "-4", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
- };
+ checkOrder("pkg1/class-use/UsedClass.html",
+ "Field in C1.",
+ "Field in C2.",
+ "Field in C4.",
+ "Field in C5.",
+ "Field in C6.",
+ "Field in C7.",
+ "Field in C8.",
+ "Method in C1.",
+ "Method in C2.",
+ "Method in C4.",
+ "Method in C5.",
+ "Method in C6.",
+ "Method in C7.",
+ "Method in C8."
+ );
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) throws Exception {
- String[][] tests = new String[11][2];
- //Eight tests for class use.
- for (int i = 0; i < 8; i++) {
- tests[i][0] = "pkg1/class-use/C1.html";
- tests[i][1] = "Test " + (i + 1) + " passes";
- }
- //Three more tests for package use.
- for (int i = 8, j = 1; i < tests.length; i++, j++) {
- tests[i][0] = "pkg1/package-use.html";
- tests[i][1] = "Test " + j + " passes";
- }
- TestUseOption tester = new TestUseOption();
- tester.run(ARGS, tests, NO_TEST);
- tester.printSummary();
- tester.run(ARGS2, NO_TEST, NO_TEST);
- String usePageContents = tester.readFileToString("pkg1/class-use/UsedClass.html");
- int prevIndex = -1;
- int currentIndex = -1;
- for (int i = 0; i < TEST2.length; i++) {
- currentIndex = usePageContents.indexOf(TEST2[i]);
- System.err.println(TEST2[i] + " at index " + currentIndex);
- if (currentIndex < prevIndex)
- throw new Exception(TEST2[i] + " is in the wrong order.");
- prevIndex = currentIndex;
- }
- tester.printSummary();
- tester.run(ARGS3, TEST3, NO_TEST);
- tester.run(ARGS4, TEST4, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg2/class-use/C3.html", true,
+ "<a href=\"../../index.html?pkg2/class-use/C3.html\" target=\"_top\">"
+ + "Frames</a></li>"
+ );
+ }
+
+ @Test
+ void test2() {
+ javadoc("-d", "out-2",
+ "-sourcepath", testSrc,
+ "-use",
+ testSrc("C.java"), testSrc("UsedInC.java"));
+ checkExit(Exit.OK);
+
+ checkOutput("class-use/UsedInC.html", true,
+ "Uses of <a href=\"../UsedInC.html\" title=\"class in <Unnamed>\">"
+ + "UsedInC</a> in <a href=\"../package-summary.html\"><Unnamed></a>"
+ );
+ checkOutput("package-use.html", true,
+ "<td class=\"colOne\">"
+ + "<a href=\"class-use/UsedInC.html#%3CUnnamed%3E\">UsedInC</a> </td>"
+ );
}
}
--- a/langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java Fri May 16 14:35:37 2014 -0700
@@ -27,141 +27,114 @@
* @summary This test ensures that the value tag works in all
* use cases. The explainations for each test case are written below.
* @author jamieh
- * @library ../lib/
- * @build JavadocTester TestValueTag
+ * @library ../lib
+ * @build JavadocTester
* @run main TestValueTag
*/
public class TestValueTag extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS =
- new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-tag",
- "todo", "pkg1", "pkg2"
- };
-
- private static final String[] ARGS1 =
- new String[] {
- "-Xdoclint:none",
- "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "-tag",
- "todo", "pkg1", "pkg2"
- };
-
- //Input for string search tests.
- private static final String[][] TEST = {
- //Base case: using @value on a constant.
- { "pkg1/Class1.html",
- "Result: \"Test 1 passes\""},
- //Retrieve value of constant in same class.
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>"},
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>"},
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>"},
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>"},
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>"},
- //Retrieve value of constant in different class.
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>"},
- //Retrieve value of constant in different package
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</a>"},
- { "pkg1/Class2.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</a>"},
- //Retrieve value of constant from a package page
- { "pkg2/package-summary.html",
- "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>"},
- //Test @value tag used with custom tag.
- { "pkg1/CustomTagUsage.html",
- "<dt><span class=\"simpleTagLabel\">Todo:</span></dt>\n" +
- "<dd>the value of this constant is 55.</dd>"},
- //Test @value errors printed dues to invalid use or when used with
- //non-constant or with bad references.
- {ERROR_OUTPUT,"error: value does not refer to a constant\n" +
- " * Result: {@value TEST_12_ERROR}"
- },
- {ERROR_OUTPUT,"error: {@value} not allowed here\n" +
- " * Result: {@value}"
- },
- {ERROR_OUTPUT,"error: value does not refer to a constant\n" +
- " * Result: {@value NULL}"
- },
- {ERROR_OUTPUT,"error: {@value} not allowed here\n" +
- " * Invalid (null): {@value}"
- },
- {ERROR_OUTPUT,"error: {@value} not allowed here\n" +
- " * Invalid (non-constant field): {@value}"
- },
- {ERROR_OUTPUT,"error: value does not refer to a constant\n" +
- " * Here is a bad value reference: {@value UnknownClass#unknownConstant}"
- },
- {ERROR_OUTPUT,"error: reference not found\n" +
- " * Here is a bad value reference: {@value UnknownClass#unknownConstant}"
- },
- {ERROR_OUTPUT,"error: {@value} not allowed here\n" +
- " * @todo the value of this constant is {@value}"
- }
- };
- private static final String[][] TEST1 = {
- //Test @value warning printed when used with non-constant.
- {WARNING_OUTPUT,"warning - @value tag (which references nonConstant) " +
- "can only be used in constants."
- },
- {WARNING_OUTPUT,"warning - @value tag (which references NULL) " +
- "can only be used in constants."
- },
- {WARNING_OUTPUT,"warning - @value tag (which references TEST_12_ERROR) " +
- "can only be used in constants."
- },
- //Test warning printed for bad reference.
- {WARNING_OUTPUT,"warning - UnknownClass#unknownConstant (referenced by " +
- "@value tag) is an unknown reference."
- },
- //Test warning printed for invalid use of @value.
- {WARNING_OUTPUT,"warning - @value tag cannot be used here."
- }
- };
- private static final String[][] NEGATED_TEST = {
- //Base case: using @value on a constant.
- { "pkg1/Class1.html",
- "Result: <a href=\"../pkg1/Class1.html#TEST_12_ERROR\">\"Test 12 " +
- "generates an error message\"</a>"},
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestValueTag tester = new TestValueTag();
- tester.run(ARGS, TEST, NEGATED_TEST);
- checkForException(tester);
- tester.run(ARGS1, TEST1, NO_TEST);
- checkForException(tester);
- tester.printSummary();
+ tester.runTests();
}
- public static void checkForException(TestValueTag tester) {
- if (tester.getErrorOutput().contains("DocletAbortException")) {
- throw new AssertionError("javadoc threw DocletAbortException");
- }
+ @Test
+ void test1() {
+ javadoc("-d", "out1",
+ "-sourcepath", testSrc,
+ "-tag", "todo",
+ "pkg1", "pkg2");
+ checkExit(Exit.FAILED);
+
+ checkOutput("pkg1/Class1.html", true,
+ // Base case: using @value on a constant.
+ "Result: \"Test 1 passes\"",
+ // Retrieve value of constant in same class.
+ "Result: <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>");
+
+ checkOutput("pkg1/Class2.html", true,
+ // Retrieve value of constant in different class.
+ "Result: <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>",
+ "Result: <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>",
+ // Retrieve value of constant in different package
+ "Result: <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>",
+ "Result: <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>",
+ "Result: <a href=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</a>",
+ "Result: <a href=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</a>",
+ "Result: <a href=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</a>");
+
+ checkOutput("pkg2/package-summary.html", true,
+ // Retrieve value of constant from a package page
+ "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>");
+
+ checkOutput("pkg1/CustomTagUsage.html", true,
+ // Test @value tag used with custom tag.
+ "<dt><span class=\"simpleTagLabel\">Todo:</span></dt>\n" +
+ "<dd>the value of this constant is 55.</dd>");
+
+ checkOutput(Output.ERROR, true,
+ // Test @value errors printed due to invalid use or when used with
+ // non-constant or with bad references.
+ "error: value does not refer to a constant\n"
+ + " * Result: {@value TEST_12_ERROR}",
+ "error: {@value} not allowed here\n"
+ + " * Result: {@value}",
+ "error: value does not refer to a constant\n"
+ + " * Result: {@value NULL}",
+ "error: {@value} not allowed here\n"
+ + " * Invalid (null): {@value}",
+ "error: {@value} not allowed here\n"
+ + " * Invalid (non-constant field): {@value}",
+ "error: value does not refer to a constant\n"
+ + " * Here is a bad value reference: {@value UnknownClass#unknownConstant}",
+ "error: reference not found\n"
+ + " * Here is a bad value reference: {@value UnknownClass#unknownConstant}",
+ "error: {@value} not allowed here\n"
+ + " * @todo the value of this constant is {@value}"
+ );
+
+ checkOutput("pkg1/Class1.html", false,
+ //Base case: using @value on a constant.
+ "Result: <a href=\"../pkg1/Class1.html#TEST_12_ERROR\">\"Test 12 "
+ + "generates an error message\"</a>");
+
+ checkForException();
+ }
+
+ @Test()
+ void test2() {
+ javadoc("-Xdoclint:none",
+ "-d", "out2",
+ "-sourcepath", testSrc,
+ "-tag", "todo",
+ "pkg1", "pkg2");
+ checkExit(Exit.OK);
+ checkOutput(Output.WARNING, true,
+ //Test @value warning printed when used with non-constant.
+ "warning - @value tag (which references nonConstant) "
+ + "can only be used in constants.",
+ "warning - @value tag (which references NULL) "
+ + "can only be used in constants.",
+ "warning - @value tag (which references TEST_12_ERROR) "
+ + "can only be used in constants.",
+ //Test warning printed for bad reference.
+ "warning - UnknownClass#unknownConstant (referenced by "
+ + "@value tag) is an unknown reference.",
+ //Test warning printed for invalid use of @value.
+ "warning - @value tag cannot be used here."
+ );
+ checkForException();
+ }
+
+ void checkForException() {
+ checkOutput(Output.STDERR, false, "DocletAbortException");
}
}
--- a/langtools/test/com/sun/javadoc/testWarnBadParamNames/TestWarnBadParamNames.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWarnBadParamNames/TestWarnBadParamNames.java Fri May 16 14:35:37 2014 -0700
@@ -24,33 +24,31 @@
/*
* @test
* @bug 4693440
- * @summary Test to make sure that warning is printed when bad paramenter
+ * @summary Test to make sure that warning is printed when bad parameter
* name is used with param.
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestWarnBadParamNames
* @run main TestWarnBadParamNames
*/
public class TestWarnBadParamNames extends JavadocTester {
- private static final String[][] TEST = {
- {WARNING_OUTPUT, "warning - @param argument \"int\" is not a parameter name."},
- {WARNING_OUTPUT, "warning - @param argument \"IDontExist\" is not a parameter name."},
- {WARNING_OUTPUT, "warning - Parameter \"arg\" is documented more than once."},
- };
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
- };
+ public static void main(String... args) throws Exception {
+ TestWarnBadParamNames tester = new TestWarnBadParamNames();
+ tester.runTests();
+ }
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestWarnBadParamNames tester = new TestWarnBadParamNames();
- tester.run(ARGS, TEST, NO_TEST);
- tester.printSummary();
+ @Test
+ void test() {
+ javadoc("-Xdoclint:none",
+ "-d", "out",
+ testSrc("C.java"));
+ checkExit(Exit.OK);
+
+ checkOutput(Output.WARNING, true,
+ "warning - @param argument \"int\" is not a parameter name.",
+ "warning - @param argument \"IDontExist\" is not a parameter name.",
+ "warning - Parameter \"arg\" is documented more than once.");
}
}
--- a/langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java Fri May 16 14:35:37 2014 -0700
@@ -30,55 +30,50 @@
* a "link unresolved" warning.
* Make sure error message starts with "error -".
* @author jamieh
- * @library ../lib/
+ * @library ../lib
* @build JavadocTester
- * @build TestWarnings
* @run main TestWarnings
*/
public class TestWarnings extends JavadocTester {
-
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestWarnings tester = new TestWarnings();
+ tester.runTests();
+ }
- private static final String[] ARGS2 = new String[] {
- "-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-private", "-sourcepath", SRC_DIR,
- "pkg"
- };
+ @Test
+ void testDefault() {
+ javadoc("-Xdoclint:none",
+ "-d", "out-default",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.FAILED); // TODO: investigate; suspect bad input HTML
- //Input for string search tests.
- private static final String[][] TEST = {
- {WARNING_OUTPUT,
- "X.java:11: warning - Missing closing '}' character for inline tag"},
- {ERROR_OUTPUT,
- "package.html: error - Body tag missing from HTML"},
+ checkOutput(Output.WARNING, true,
+ "X.java:11: warning - Missing closing '}' character for inline tag");
+ checkOutput(Output.ERROR, true,
+ "package.html: error - Body tag missing from HTML");
- };
- private static final String[][] NEGATED_TEST = {
- { "pkg/X.html", "can't find m()"},
- { "pkg/X.html", "can't find X()"},
- { "pkg/X.html", "can't find f"},
- };
+ checkOutput("pkg/X.html", false,
+ "can't find m()");
+ checkOutput("pkg/X.html", false,
+ "can't find X()");
+ checkOutput("pkg/X.html", false,
+ "can't find f");
+ }
- private static final String[][] TEST2 = {
- { "pkg/X.html",
- "<a href=\"../pkg/X.html#m--\"><code>m()</code></a><br/>"},
- { "pkg/X.html",
- "<a href=\"../pkg/X.html#X--\"><code>X()</code></a><br/>"},
- { "pkg/X.html",
- "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>"},
- };
+ @Test
+ void testPrivate() {
+ javadoc("-Xdoclint:none",
+ "-d", "out-private",
+ "-private",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.FAILED); // TODO: investigate; suspect bad input HTML
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestWarnings tester = new TestWarnings();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.run(ARGS2, TEST2, NO_TEST);
- tester.printSummary();
+ checkOutput("pkg/X.html", true,
+ "<a href=\"../pkg/X.html#m--\"><code>m()</code></a><br/>",
+ "<a href=\"../pkg/X.html#X--\"><code>X()</code></a><br/>",
+ "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>");
}
}
--- a/langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java Fri May 16 14:35:37 2014 -0700
@@ -26,180 +26,192 @@
* @bug 8016675 8026736
* @summary Test for window title.
* @author Bhavesh Patel
- * @library ../lib/
- * @build JavadocTester TestWindowTitle
+ * @library ../lib
+ * @build JavadocTester
* @run main TestWindowTitle
*/
-
public class TestWindowTitle extends JavadocTester {
- //Window title with JavaScript special characters.
- private static final String TITLE_JS_CHARS =
- "Testing \"Window 'Title'\" with a \\ backslash and a / " +
- "forward slash and a \u00e8 unicode char also a tab and also a " +
- "\t special character another \u0002 unicode)";
- private static final String[] ARGS_JS_CHARS = new String[]{
- "-d", OUTPUT_DIR + "-1", "-windowtitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] TEST_JS_CHARS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
- "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
- "also a tab and also a \\t special character another \\u0002 unicode))\";"
- },
- };
- private static final String[][] NEG_TEST_JS_CHARS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing \"Window \'Title\'\" " +
- "with a \\ backslash and a / forward slash and a \u00E8 unicode char " +
- "also a tab and also a \t special character another \u0002 unicode))\";"
- }
- };
-
- //Window title with a script tag.
- private static final String TITLE_SCRIPT_TAG =
- "Testing script tag in title </title><script>alert(\"Should not pop up\")</script>.";
- private static final String[] ARGS_SCRIPT_TAG = new String[]{
- "-d", OUTPUT_DIR + "-2", "-windowtitle", TITLE_SCRIPT_TAG, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] TEST_SCRIPT_TAG = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing script tag in title alert" +
- "(\\\"Should not pop up\\\").)\";"
- },
- { "p2/C2.html",
- "parent.document.title=\"C2 (Testing script tag in title alert" +
- "(\\\"Should not pop up\\\").)\";"
- }
- };
- private static final String[][] NEG_TEST_SCRIPT_TAG = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing script tag in title </title><script>" +
- "alert(\\\"Should not pop up\\\")</script>.)\";"
- },
- { "p2/C2.html",
- "parent.document.title=\"C2 (Testing script tag in title </title><script>" +
- "alert(\\\"Should not pop up\\\")</script>.)\";"
- }
- };
-
- //Window title with other HTML tags.
- private static final String TITLE_HTML_TAGS =
- "Testing another <p>HTML</p> tag. Another <h1>tag</h1>. A " +
- "<span id=\"testTag\">tag with attributes</span>. <script and </p are not tags.";
- private static final String[] ARGS_HTML_TAGS = new String[]{
- "-d", OUTPUT_DIR + "-3", "-windowtitle", TITLE_HTML_TAGS,
- "-sourcepath", SRC_DIR,
- "p1", "p2"
- };
- private static final String[][] TEST_HTML_TAGS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing another HTML tag. Another tag. A " +
- "tag with attributes. <script and </p are not tags.)\";"
- }
- };
- private static final String[][] NEG_TEST_HTML_TAGS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing another <p>HTML</p> tag. Another " +
- "<h1>tag</h1>. A <span id=\"testTag\">tag with attributes</span>. <script and " +
- "</p are not tags.)\";"
- }
- };
-
- //Window title using entities.
- private static final String TITLE_HTML_ENTITIES =
- "Testing entities <script>alert(\"Should not pop up\")</script>.";
- private static final String[] ARGS_HTML_ENTITIES = new String[]{
- "-d", OUTPUT_DIR + "-4", "-windowtitle", TITLE_HTML_ENTITIES,
- "-sourcepath", SRC_DIR,
- "p1", "p2"
- };
- private static final String[][] TEST_HTML_ENTITIES = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing entities <script>alert(\\\"Should " +
- "not pop up\\\")</script>.)\";"
- }
- };
- private static final String[][] NEG_TEST_HTML_ENTITIES = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing entities alert(\\\"Should not pop up\\\").)\";"
- }
- };
-
- //Window title with just empty HTML tags.
- private static final String TITLE_EMPTY_TAGS =
- "</title><script></script>";
- private static final String[] ARGS_EMPTY_TAGS = new String[]{
- "-d", OUTPUT_DIR + "-5", "-windowtitle", TITLE_EMPTY_TAGS, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] TEST_EMPTY_TAGS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview\";"
- }
- };
- private static final String[][] NEG_TEST_EMPTY_TAGS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (</title><script></script>)\";"
- }
- };
-
- //Window title with unicode characters.
- private static final String TITLE_UNICODE_CHARS =
- "Testing unicode \u003cscript\u003ealert(\"Should not pop up\")\u003c/script\u003e.";
- private static final String[] ARGS_UNICODE_CHARS = new String[]{
- "-d", OUTPUT_DIR + "-6", "-windowtitle", TITLE_UNICODE_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] TEST_UNICODE_CHARS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing unicode alert(\\\"Should " +
- "not pop up\\\").)\";"
- }
- };
- private static final String[][] NEG_TEST_UNICODE_CHARS = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing unicode <script>alert(\\\"Should not pop up\\\")" +
- "</script>.)\";"
- }
- };
-
- //An empty window title.
- private static final String TITLE_EMPTY =
- "";
- private static final String[] ARGS_EMPTY_TITLE = new String[]{
- "-d", OUTPUT_DIR + "-7", "-windowtitle", TITLE_EMPTY, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] TEST_EMPTY = {
- { "overview-summary.html",
- "parent.document.title=\"Overview\";"
- }
- };
-
- //Test doctitle.
- private static final String[] ARGS_DOCTITLE = new String[]{
- "-d", OUTPUT_DIR + "-8", "-doctitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
- };
- private static final String[][] NEG_TEST_DOCTITLE = {
- { "overview-summary.html",
- "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
- "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
- "also a tab and also a \\t special character another \\u0002 unicode)\";"
- },
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
+ public static void main(String... args) throws Exception {
TestWindowTitle tester = new TestWindowTitle();
- tester.run(ARGS_JS_CHARS, TEST_JS_CHARS, NEG_TEST_JS_CHARS);
- tester.run(ARGS_SCRIPT_TAG, TEST_SCRIPT_TAG, NEG_TEST_SCRIPT_TAG);
- tester.run(ARGS_HTML_TAGS, TEST_HTML_TAGS, NEG_TEST_HTML_TAGS);
- tester.run(ARGS_HTML_ENTITIES, TEST_HTML_ENTITIES, NEG_TEST_HTML_ENTITIES);
- tester.run(ARGS_EMPTY_TAGS, TEST_EMPTY_TAGS, NEG_TEST_EMPTY_TAGS);
- tester.run(ARGS_UNICODE_CHARS, TEST_UNICODE_CHARS, NEG_TEST_UNICODE_CHARS);
- tester.run(ARGS_EMPTY_TITLE, TEST_EMPTY, NO_TEST);
- tester.run(ARGS_DOCTITLE, NO_TEST, NEG_TEST_DOCTITLE);
+ tester.runTests();
tester.printSummary();
}
+
+ @Test
+ void testJavaScriptChars() {
+ // Window title with JavaScript special characters.
+ String title = "Testing \"Window 'Title'\" with a \\ backslash and a / "
+ + "forward slash and a \u00e8 unicode char also a tab and also a "
+ + "\t special character another \u0002 unicode)";
+
+ javadoc("-d", "out-js-chars",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" "
+ + "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char "
+ + "also a tab and also a \\t special character another \\u0002 unicode))\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing \"Window \'Title\'\" "
+ + "with a \\ backslash and a / forward slash and a \u00E8 unicode char "
+ + "also a tab and also a \t special character another \u0002 unicode))\";"
+ );
+ }
+
+ @Test
+ void testScriptTag() {
+ // Window title with a script tag.
+ String title = "Testing script tag in title </title><script>alert(\"Should not pop up\")</script>.";
+
+ javadoc("-d", "out-script",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview (Testing script tag in title alert"
+ + "(\\\"Should not pop up\\\").)\";"
+ );
+
+ checkOutput("p2/C2.html", true,
+ "parent.document.title=\"C2 (Testing script tag in title alert"
+ + "(\\\"Should not pop up\\\").)\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing script tag in title </title><script>"
+ + "alert(\\\"Should not pop up\\\")</script>.)\";"
+ );
+
+ checkOutput("p2/C2.html", false,
+ "parent.document.title=\"C2 (Testing script tag in title </title><script>"
+ + "alert(\\\"Should not pop up\\\")</script>.)\";"
+ );
+ }
+
+ @Test
+ void testHtmlTags() {
+ // Window title with other HTML tags.
+ String title = "Testing another <p>HTML</p> tag. Another <h1>tag</h1>. A "
+ + "<span id=\"testTag\">tag with attributes</span>. <script and </p are not tags.";
+
+ javadoc("-d", "out-html-tags",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview (Testing another HTML tag. Another tag. A "
+ + "tag with attributes. <script and </p are not tags.)\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing another <p>HTML</p> tag. Another "
+ + "<h1>tag</h1>. A <span id=\"testTag\">tag with attributes</span>. <script and "
+ + "</p are not tags.)\";"
+ );
+ }
+
+ @Test
+ void testHtmlEntities() {
+ // Window title using entities.
+ String title = "Testing entities <script>alert(\"Should not pop up\")</script>.";
+
+ javadoc("-d", "out-html-entities",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview (Testing entities <script>alert(\\\"Should "
+ + "not pop up\\\")</script>.)\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing entities alert(\\\"Should not pop up\\\").)\";"
+ );
+ }
+
+ @Test
+ void testEmptyTags() {
+ // Window title with just empty HTML tags.
+ String title = "</title><script></script>";
+
+ javadoc("-d", "out-empty-tags",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (</title><script></script>)\";"
+ );
+ }
+
+ @Test
+ void testUnicode() {
+ //Window title with unicode characters.
+ String title = "Testing unicode \u003cscript\u003ealert(\"Should not pop up\")\u003c/script\u003e.";
+
+ javadoc("-d", "out-unicode",
+ "-windowtitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview (Testing unicode alert(\\\"Should "
+ + "not pop up\\\").)\";"
+ );
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing unicode <script>alert(\\\"Should not pop up\\\")"
+ + "</script>.)\";"
+ );
+ }
+
+ @Test
+ void testEmpty() {
+ // An empty window title.
+ String title = "";
+ javadoc("-d", "out-empty",
+ "-windowtitle", title,
+ "-sourcepath", testSrc, "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", true,
+ "parent.document.title=\"Overview\";"
+ );
+ }
+
+ @Test
+ void testDocTitle() {
+ // Window title with JavaScript special characters, specified with -doctitle
+ String title = "Testing \"Window 'Title'\" with a \\ backslash and a / "
+ + "forward slash and a \u00e8 unicode char also a tab and also a "
+ + "\t special character another \u0002 unicode)";
+
+ javadoc("-d", "out-doctitle",
+ "-doctitle", title,
+ "-sourcepath", testSrc,
+ "p1", "p2");
+ checkExit(Exit.OK);
+
+ checkOutput("overview-summary.html", false,
+ "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" "
+ + "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char "
+ + "also a tab and also a \\t special character another \\u0002 unicode)\";"
+ );
+ }
}
--- a/langtools/test/com/sun/javadoc/testXOption/TestXOption.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testXOption/TestXOption.java Fri May 16 14:35:37 2014 -0700
@@ -25,43 +25,48 @@
* @test
* @bug 8007687
* @summary Make sure that the -X option works properly.
- * @library ../lib/
- * @build JavadocTester TestXOption
+ * @library ../lib
+ * @build JavadocTester
* @run main TestXOption
*/
public class TestXOption extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-X",
- SRC_DIR + "/TestXOption.java"
- };
+ public static void main(String... args) throws Exception {
+ TestXOption tester = new TestXOption();
+ tester.runTests();
+ }
- private static final String[] ARGS2 = new String[] {
- "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
- SRC_DIR + "/TestXOption.java"
- };
+ @Test
+ void testWithOption() {
+ javadoc("-d", "out1",
+ "-sourcepath", testSrc,
+ "-X",
+ testSrc("TestXOption.java"));
+ checkExit(Exit.OK);
+ checkOutput(true);
+ }
- private static final String[][] TEST = {
- {NOTICE_OUTPUT, "-Xmaxerrs "},
- {NOTICE_OUTPUT, "-Xmaxwarns "},
- {STANDARD_OUTPUT, "-Xdocrootparent "},
- {STANDARD_OUTPUT, "-Xdoclint "},
- {STANDARD_OUTPUT, "-Xdoclint:"},
- };
+ @Test
+ void testWithoutOption() {
+ javadoc("-d", "out2",
+ "-sourcepath", testSrc,
+ testSrc("TestXOption.java"));
+ checkExit(Exit.OK);
+ checkOutput(false);
+ }
- //The help option should not crash the doclet.
- private static final int EXPECTED_EXIT_CODE = 0;
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestXOption tester = new TestXOption();
- int actualExitCode = tester.run(ARGS, TEST, NO_TEST);
- tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
- tester.printSummary();
+ private void checkOutput(boolean expectFound) {
+ // TODO: It's an ugly hidden side-effect of the current doclet API
+ // that the -X output from the tool and the -X output from the doclet
+ // come out on different streams!
+ // When we clean up the doclet API, this should be rationalized.
+ checkOutput(Output.NOTICE, expectFound,
+ "-Xmaxerrs ",
+ "-Xmaxwarns ");
+ checkOutput(Output.STDOUT, expectFound,
+ "-Xdocrootparent ",
+ "-Xdoclint ",
+ "-Xdoclint:");
}
}
--- a/langtools/test/com/sun/javadoc/typeAnnotations/smoke/TestSmoke.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/com/sun/javadoc/typeAnnotations/smoke/TestSmoke.java Fri May 16 14:35:37 2014 -0700
@@ -27,91 +27,84 @@
* @summary Smoke test for ensuring that annotations are emitted to javadoc
*
* @author Mahmood Ali <mali>
- * @library ../../lib/
+ * @library ../../lib
* @ignore
* @build JavadocTester
- * @build TestSmoke
* @run main TestSmoke
*/
public class TestSmoke extends JavadocTester {
- //Javadoc arguments.
- private static final String[] ARGS = new String[] {
- "-d", OUTPUT_DIR, "-private", "-sourcepath", SRC_DIR, "pkg"
- };
+ public static void main(String... args) throws Exception {
+ TestSmoke tester = new TestSmoke();
+ tester.runTests();
+ }
- //Input for string search tests.
- private static final String[][] TEST = {
- { "pkg/T0x1C.html", "@DA"},
- { "pkg/T0x1D.html", "@DA"},
- { "pkg/T0x0D.html", "@DA"},
- { "pkg/T0x06.html", "@DA"},
- { "pkg/T0x0B.html", "@DA"},
- { "pkg/T0x0F.html", "@DA"},
+ @Test
+ void test() {
+ javadoc("-d", "out",
+ "-private",
+ "-sourcepath", testSrc,
+ "pkg");
+ checkExit(Exit.OK);
+
+ checkOutput("pkg/T0x1C.html", true, "@DA");
+ checkOutput("pkg/T0x1D.html", true, "@DA");
+ checkOutput("pkg/T0x0D.html", true, "@DA");
+ checkOutput("pkg/T0x06.html", true, "@DA");
+ checkOutput("pkg/T0x0B.html", true, "@DA");
+ checkOutput("pkg/T0x0F.html", true, "@DA");
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x20.html", "@DA"},
+ checkOutput("pkg/T0x20.html", true, "@DA");
*/
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x20A.html", "@DTPA"},
+ checkOutput("pkg/T0x20A.html", true, "@DTPA");
*/
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x20B.html", "@DA"},
+ checkOutput("pkg/T0x20B.html", true, "@DA");
*/
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x22.html", "@DA"},
+ checkOutput("pkg/T0x22.html", true, "@DA");
*/
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x22A.html", "@DTPA"},
+ checkOutput("pkg/T0x22A.html", true, "@DTPA");
*/
/* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
- { "pkg/T0x22B.html", "@DA"},
+ checkOutput("pkg/T0x22B.html", true, "@DA");
*/
- { "pkg/T0x10.html", "@DA"},
- { "pkg/T0x10A.html", "@DA"},
- { "pkg/T0x12.html", "@DA"},
- { "pkg/T0x11.html", "@DA"},
- { "pkg/T0x13.html", "@DA"},
- { "pkg/T0x15.html", "@DA"},
- { "pkg/T0x14.html", "@DA"},
- { "pkg/T0x16.html", "@DA"}
- };
+ checkOutput("pkg/T0x10.html", true, "@DA");
+ checkOutput("pkg/T0x10A.html", true, "@DA");
+ checkOutput("pkg/T0x12.html", true, "@DA");
+ checkOutput("pkg/T0x11.html", true, "@DA");
+ checkOutput("pkg/T0x13.html", true, "@DA");
+ checkOutput("pkg/T0x15.html", true, "@DA");
+ checkOutput("pkg/T0x14.html", true, "@DA");
+ checkOutput("pkg/T0x16.html", true, "@DA");
- private static final String[][] NEGATED_TEST = {
- { "pkg/T0x1C.html", "@A"},
- { "pkg/T0x1D.html", "@A"},
- { "pkg/T0x00.html", "@A"},
- { "pkg/T0x01.html", "@A"},
- { "pkg/T0x02.html", "@A"},
- { "pkg/T0x04.html", "@A"},
- { "pkg/T0x08.html", "@A"},
- { "pkg/T0x0D.html", "@A"},
- { "pkg/T0x06.html", "@A"},
- { "pkg/T0x0B.html", "@A"},
- { "pkg/T0x0F.html", "@A"},
- { "pkg/T0x20.html", "@A"},
- { "pkg/T0x20A.html", "@A"},
- { "pkg/T0x20B.html", "@A"},
- { "pkg/T0x22.html", "@A"},
- { "pkg/T0x22A.html", "@A"},
- { "pkg/T0x22B.html", "@A"},
- { "pkg/T0x10.html", "@A"},
- { "pkg/T0x10A.html", "@A"},
- { "pkg/T0x12.html", "@A"},
- { "pkg/T0x11.html", "@A"},
- { "pkg/T0x13.html", "@A"},
- { "pkg/T0x15.html", "@A"},
- { "pkg/T0x14.html", "@A"},
- { "pkg/T0x16.html", "@A"}
- };
-
- /**
- * The entry point of the test.
- * @param args the array of command line arguments.
- */
- public static void main(String[] args) {
- TestSmoke tester = new TestSmoke();
- tester.run(ARGS, TEST, NEGATED_TEST);
- tester.printSummary();
+ checkOutput("pkg/T0x1C.html", false, "@A");
+ checkOutput("pkg/T0x1D.html", false, "@A");
+ checkOutput("pkg/T0x00.html", false, "@A");
+ checkOutput("pkg/T0x01.html", false, "@A");
+ checkOutput("pkg/T0x02.html", false, "@A");
+ checkOutput("pkg/T0x04.html", false, "@A");
+ checkOutput("pkg/T0x08.html", false, "@A");
+ checkOutput("pkg/T0x0D.html", false, "@A");
+ checkOutput("pkg/T0x06.html", false, "@A");
+ checkOutput("pkg/T0x0B.html", false, "@A");
+ checkOutput("pkg/T0x0F.html", false, "@A");
+ checkOutput("pkg/T0x20.html", false, "@A");
+ checkOutput("pkg/T0x20A.html", false, "@A");
+ checkOutput("pkg/T0x20B.html", false, "@A");
+ checkOutput("pkg/T0x22.html", false, "@A");
+ checkOutput("pkg/T0x22A.html", false, "@A");
+ checkOutput("pkg/T0x22B.html", false, "@A");
+ checkOutput("pkg/T0x10.html", false, "@A");
+ checkOutput("pkg/T0x10A.html", false, "@A");
+ checkOutput("pkg/T0x12.html", false, "@A");
+ checkOutput("pkg/T0x11.html", false, "@A");
+ checkOutput("pkg/T0x13.html", false, "@A");
+ checkOutput("pkg/T0x15.html", false, "@A");
+ checkOutput("pkg/T0x14.html", false, "@A");
+ checkOutput("pkg/T0x16.html", false, "@A");
}
}
--- a/langtools/test/tools/javac/T8029569/VarargsAmbiguityCrashTest.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/T8029569/VarargsAmbiguityCrashTest.java Fri May 16 14:35:37 2014 -0700
@@ -1,30 +1,8 @@
/*
- * Copyright (c) 2013, 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 8029569
+ * @test /nodynamiccopyright/
+ * @bug 8029569 8037379
* @summary internal javac cast exception when resolving varargs ambiguity
+ * fix for JDK-8029569 doesn't cover all possible cases
* @compile/fail/ref=VarargsAmbiguityCrashTest.out -XDrawDiagnostics VarargsAmbiguityCrashTest.java
*/
--- a/langtools/test/tools/javac/T8029569/VarargsAmbiguityCrashTest.out Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/T8029569/VarargsAmbiguityCrashTest.out Fri May 16 14:35:37 2014 -0700
@@ -1,2 +1,2 @@
-VarargsAmbiguityCrashTest.java:33:9: compiler.err.ref.ambiguous: m2, kindname.method, m2(java.lang.Exception...), VarargsAmbiguityCrashTest, kindname.method, m2(java.lang.Long,java.lang.Exception...), VarargsAmbiguityCrashTest
+VarargsAmbiguityCrashTest.java:11:9: compiler.err.ref.ambiguous: m2, kindname.method, m2(java.lang.Exception...), VarargsAmbiguityCrashTest, kindname.method, m2(java.lang.Long,java.lang.Exception...), VarargsAmbiguityCrashTest
1 error
--- a/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java Fri May 16 14:35:37 2014 -0700
@@ -42,7 +42,7 @@
public class Driver {
- private static final PrintStream out = System.out;
+ private static final PrintStream out = System.err;
public static void main(String[] args) throws Exception {
if (args.length == 0 || args.length > 1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/api/taskListeners/EventsBalancedTest.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2014, 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 8040822
+ * @summary Check that all TaskEvents are balanced.
+ */
+
+import java.io.*;
+import java.net.URI;
+import java.util.*;
+import java.util.Map.Entry;
+
+import javax.tools.*;
+
+import com.sun.source.util.*;
+import com.sun.source.util.TaskEvent.Kind;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.comp.CompileStates.CompileState;
+
+public class EventsBalancedTest {
+ JavacTool tool = (JavacTool) ToolProvider.getSystemJavaCompiler();
+ StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
+
+ public static void main(String... args) throws IOException {
+ new EventsBalancedTest().test();
+ }
+
+ void test() throws IOException {
+ TestSource a = new TestSource("B", "class B extends A { }");
+ TestSource b = new TestSource("A", "abstract class A { }");
+
+ test(null, Arrays.asList(a, b));
+ test(null, Arrays.asList(b, a));
+ test(Arrays.asList("-XD-relax"), Arrays.asList(a, b));
+ test(Arrays.asList("-XD-relax"), Arrays.asList(b, a));
+
+ for (CompileState stop : CompileState.values()) {
+ test(Arrays.asList("-XDshouldStopPolicyIfNoError=" + stop,
+ "-XDshouldStopPolicyIfError=" + stop),
+ Arrays.asList(a, b));
+ test(Arrays.asList("-XDshouldStopPolicyIfNoError=" + stop,
+ "-XDshouldStopPolicyIfError=" + stop),
+ Arrays.asList(b, a));
+ }
+ }
+
+ void test(Iterable<String> options, Iterable<JavaFileObject> files) throws IOException {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ TestListener listener = new TestListener();
+ JavacTask task = tool.getTask(pw, fm, null, options, null, files);
+
+ task.setTaskListener(listener);
+
+ task.call();
+
+ for (Entry<Kind, Integer> e : listener.kind2Count.entrySet()) {
+ if (e.getValue() != null && e.getValue() != 0) {
+ throw new IllegalStateException("Not balanced event: " + e.getKey());
+ }
+ }
+ }
+
+ static class TestListener implements TaskListener {
+ final Map<Kind, Integer> kind2Count = new HashMap<>();
+
+ int get(Kind k) {
+ Integer count = kind2Count.get(k);
+
+ if (count == null)
+ kind2Count.put(k, count = 0);
+
+ return count;
+ }
+
+ @Override
+ public void started(TaskEvent e) {
+ kind2Count.put(e.getKind(), get(e.getKind()) + 1);
+ }
+
+ @Override
+ public void finished(TaskEvent e) {
+ int count = get(e.getKind());
+
+ if (count <= 0)
+ throw new IllegalStateException("count<=0 for: " + e.getKind());
+
+ kind2Count.put(e.getKind(), count - 1);
+ }
+
+ }
+ static class TestSource extends SimpleJavaFileObject {
+ final String content;
+ public TestSource(String fileName, String content) {
+ super(URI.create("myfo:/" + fileName + ".java"), JavaFileObject.Kind.SOURCE);
+ this.content = content;
+ }
+
+ @Override
+ public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+ return content;
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/T8028503/PrimitiveTypeInBoundForMethodRefTest.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2014, 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 8028503
+ * @summary javac, for method references a primitive type can be added as a bound
+ * @compile PrimitiveTypeInBoundForMethodRefTest.java
+ */
+
+class PrimitiveTypeInBoundForMethodRefTest {
+
+ interface Mapper<T, U> {
+ U map(T t);
+ }
+
+ static <U> Iterable<U> map(Mapper<String, U> mapper) {
+ return null;
+ }
+
+ static void test() {
+ Iterable<Integer> map = map(PrimitiveTypeInBoundForMethodRefTest::length);
+ }
+
+ public static <T> int length(String s) {
+ return 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/typevars/IntersectionSubVar.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2014, 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 8042656
+ * @summary Subtyping for intersection types containing type variables
+ * @compile IntersectionSubVar.java
+ */
+
+class IntersectionSubVar {
+
+ interface Box<T> {
+ void set(T arg);
+ T get();
+ }
+
+ <I> Box<I> glb(Box<? super I> arg1, Box<? super I> arg2) {
+ return null;
+ }
+
+ <E extends Cloneable> void takeBox(Box<? super E> box) {}
+
+ <T> void test(Box<T> arg1, Box<Cloneable> arg2, Box<? super T> arg3) {
+ T t = glb(arg1, arg2).get(); // assign T&Cloneable to T
+ takeBox(arg3); // inference tests Box<CAP> <: Box<? super CAP&Cloneable>
+ }
+
+}
--- a/langtools/test/tools/javac/lambda/MethodReference42.out Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/lambda/MethodReference42.out Fri May 16 14:35:37 2014 -0700
@@ -1,4 +1,4 @@
-MethodReference42.java:38:11: compiler.err.cant.apply.symbol: kindname.method, m1, MethodReference42.SAM1, @811, kindname.class, MethodReference42, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.String, java.lang.Number))
-MethodReference42.java:40:11: compiler.err.cant.apply.symbol: kindname.method, m3, MethodReference42.SAM3, @855, kindname.class, MethodReference42, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.Object, java.lang.Number))
+MethodReference42.java:38:11: compiler.err.cant.apply.symbol: kindname.method, m1, MethodReference42.SAM1, @811, kindname.class, MethodReference42, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.String, java.lang.Number)))
+MethodReference42.java:40:11: compiler.err.cant.apply.symbol: kindname.method, m3, MethodReference42.SAM3, @855, kindname.class, MethodReference42, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.Object, java.lang.Number)))
MethodReference42.java:41:9: compiler.err.ref.ambiguous: m4, kindname.method, m4(MethodReference42.SAM2), MethodReference42, kindname.method, m4(MethodReference42.SAM3), MethodReference42
3 errors
--- a/langtools/test/tools/javac/lambda/MethodReference44.out Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/lambda/MethodReference44.out Fri May 16 14:35:37 2014 -0700
@@ -1,4 +1,4 @@
-MethodReference44.java:40:11: compiler.err.cant.apply.symbol: kindname.method, g1, MethodReference44.SAM1, @864, kindname.class, MethodReference44, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.String, java.lang.Number))
-MethodReference44.java:42:11: compiler.err.cant.apply.symbol: kindname.method, g3, MethodReference44.SAM3, @932, kindname.class, MethodReference44, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.Object, java.lang.Number))
+MethodReference44.java:40:11: compiler.err.cant.apply.symbol: kindname.method, g1, MethodReference44.SAM1, @864, kindname.class, MethodReference44, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.String, java.lang.Number)))
+MethodReference44.java:42:11: compiler.err.cant.apply.symbol: kindname.method, g3, MethodReference44.SAM3, @932, kindname.class, MethodReference44, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.incompatible.eq.upper.bounds: X, java.lang.Object, java.lang.Number)))
MethodReference44.java:43:9: compiler.err.ref.ambiguous: g4, kindname.method, g4(MethodReference44.SAM2), MethodReference44, kindname.method, g4(MethodReference44.SAM3), MethodReference44
3 errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific10.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2014, 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 8034223
+ * @summary Structural most-specific logic for lambdas, method refs, parens, and conditionals
+ * @compile MostSpecific10.java
+ */
+class MostSpecific10 {
+
+ interface GetInt {
+ int get();
+ }
+
+ interface GetInteger {
+ Integer get();
+ }
+
+ void m(GetInt getter) {}
+ void m(GetInteger getter) {}
+
+ void test(boolean cond) {
+ m(() -> 23);
+ m("abc"::length);
+ m(( () -> 23 ));
+ m(( "abc"::length ));
+ m(cond ? () -> 23 : "abc"::length);
+ m(( cond ? () -> 23 : "abc"::length ));
+ m(cond ? (() -> 23) : ("abc"::length) );
+ m(( cond ? () -> 23 : cond ? ("abc"::length) : (() -> 23) ));
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific11.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2014, 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 8034223
+ * @summary Return type Object is not more specific than return type String
+ * @compile MostSpecific11.java
+ */
+class MostSpecific11 {
+
+ interface I { Object run(); }
+ interface J { String run(); }
+
+ void m(I arg) {}
+ void m(J arg) {}
+
+ void test() {
+ m(() -> { throw new RuntimeException(); });
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific12.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,38 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8034223
+ * @summary Most-specific testing with inference variables in function parameter types
+ * @compile/fail/ref=MostSpecific12.out -XDrawDiagnostics MostSpecific12.java
+ */
+class MostSpecific12 {
+
+ interface I<T> { void take(T arg1, String arg2); }
+ interface J<T> { void take(String arg1, T arg2); }
+ interface K { void take(String arg1, String arg2); }
+
+ <T> void m1(I<T> arg) {}
+ void m1(K arg) {}
+
+ <T> void m2(J<T> arg) {}
+ <T> void m2(K arg) {}
+
+ <T> void m3(I<T> arg) {}
+ <T> void m3(J<T> arg) {}
+
+ void test() {
+ m1((String s1, String s2) -> {}); // ok
+ m2((String s1, String s2) -> {}); // ok
+ m3((String s1, String s2) -> {}); // error
+
+ m1(this::referencedMethod); // ok
+ m2(this::referencedMethod); // ok
+ m3(this::referencedMethod); // error
+
+ m1(String::compareTo); // ok
+ m2(String::compareTo); // ok
+ m3(String::compareTo); // error
+ }
+
+ void referencedMethod(String s1, String s2) {}
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific12.out Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,4 @@
+MostSpecific12.java:25:9: compiler.err.ref.ambiguous: m3, kindname.method, <T>m3(MostSpecific12.I<T>), MostSpecific12, kindname.method, <T>m3(MostSpecific12.J<T>), MostSpecific12
+MostSpecific12.java:29:9: compiler.err.ref.ambiguous: m3, kindname.method, <T>m3(MostSpecific12.I<T>), MostSpecific12, kindname.method, <T>m3(MostSpecific12.J<T>), MostSpecific12
+MostSpecific12.java:33:9: compiler.err.ref.ambiguous: m3, kindname.method, <T>m3(MostSpecific12.I<T>), MostSpecific12, kindname.method, <T>m3(MostSpecific12.J<T>), MostSpecific12
+3 errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific13.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,21 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8034223
+ * @summary Most-specific testing with inference variables in function parameter types
+ * @compile/fail/ref=MostSpecific13.out -XDrawDiagnostics MostSpecific13.java
+ */
+class MostSpecific13 {
+
+ interface UnaryOp<T> { T apply(T arg); }
+ interface IntegerToNumber { Number apply(Integer arg); }
+
+ <T> void m(UnaryOp<T> f) {}
+ void m(IntegerToNumber f) {}
+
+ void test() {
+ m((Integer i) -> i); // error
+ m(this::id); // error
+ }
+
+ Integer id(Integer arg) { return arg; }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific13.out Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,3 @@
+MostSpecific13.java:16:9: compiler.err.ref.ambiguous: m, kindname.method, <T>m(MostSpecific13.UnaryOp<T>), MostSpecific13, kindname.method, m(MostSpecific13.IntegerToNumber), MostSpecific13
+MostSpecific13.java:17:9: compiler.err.ref.ambiguous: m, kindname.method, <T>m(MostSpecific13.UnaryOp<T>), MostSpecific13, kindname.method, m(MostSpecific13.IntegerToNumber), MostSpecific13
+2 errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific14.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,33 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8034223
+ * @summary Most-specific testing for nested functional interface types
+ * @compile/fail/ref=MostSpecific14.out -XDrawDiagnostics MostSpecific14.java
+ */
+class MostSpecific14 {
+ interface ToNumber { Number get(); }
+ interface ToToNumber { ToNumber get(); }
+ interface Factory<T> { T get(); }
+
+ void m1(Factory<Factory<Object>> f) {}
+ void m1(ToToNumber f) {}
+
+ void m2(Factory<Factory<Number>> f) {}
+ void m2(ToToNumber f) {}
+
+ void m3(Factory<Factory<Integer>> f) {}
+ void m3(ToToNumber f) {}
+
+
+ void test() {
+ m1(() -> () -> 23); // ok: choose ToToNumber
+ m2(() -> () -> 23); // error: ambiguous
+ m3(() -> () -> 23); // ok: choose Factory<Factory<Integer>>
+
+ m1(() -> this::getInteger); // ok: choose ToToNumber
+ m2(() -> this::getInteger); // error: ambiguous
+ m3(() -> this::getInteger); // ok: choose Factory<Factory<Integer>>
+ }
+
+ Integer getInteger() { return 23; }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific14.out Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,3 @@
+MostSpecific14.java:24:9: compiler.err.ref.ambiguous: m2, kindname.method, m2(MostSpecific14.Factory<MostSpecific14.Factory<java.lang.Number>>), MostSpecific14, kindname.method, m2(MostSpecific14.ToToNumber), MostSpecific14
+MostSpecific14.java:28:9: compiler.err.ref.ambiguous: m2, kindname.method, m2(MostSpecific14.Factory<MostSpecific14.Factory<java.lang.Number>>), MostSpecific14, kindname.method, m2(MostSpecific14.ToToNumber), MostSpecific14
+2 errors
--- a/langtools/test/tools/javac/lambda/TargetType16.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType16.java Fri May 16 14:35:37 2014 -0700
@@ -1,9 +1,9 @@
/*
* @test /nodynamiccopyright/
- * @bug 8003280
+ * @bug 8003280 8034223
* @summary Add lambda tests
* Check void-compatibility in strict vs. loose conversion contexts
- * @compile/fail/ref=TargetType16.out -XDrawDiagnostics TargetType16.java
+ * @compile TargetType16.java
*/
class TargetType16 {
@@ -20,6 +20,6 @@
static <T> void m(SAM2<T> s2) { }
public static void main(String[] args) {
- m(() -> { throw new AssertionError(); }); //ambiguous
+ m(() -> { throw new AssertionError(); }); // prefer SAM2
}
}
--- a/langtools/test/tools/javac/lambda/TargetType16.out Thu May 15 10:37:52 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-TargetType16.java:23:9: compiler.err.ref.ambiguous: m, kindname.method, m(TargetType16.SAM1), TargetType16, kindname.method, <T>m(TargetType16.SAM2<T>), TargetType16
-1 error
--- a/langtools/test/tools/javac/lambda/TargetType23.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType23.java Fri May 16 14:35:37 2014 -0700
@@ -31,7 +31,12 @@
void call(Sam2 s) { }
<Z> void call(Sam3<Z> s) { }
+ void call2(Sam0 s) { }
+ void call2(Sam2 s) { }
+ <Z> void call2(Sam3<Z> s) { }
+
void test() {
- call(()-> { throw new RuntimeException(); }); //ambiguous - both call(Sam0), call(Sam2), call(Sam3) match
+ call(()-> { throw new RuntimeException(); }); // ambiguous - call(Sam1) vs. call(Sam2)
+ call2(()-> { throw new RuntimeException(); }); // ok
}
}
--- a/langtools/test/tools/javac/lambda/TargetType23.out Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType23.out Fri May 16 14:35:37 2014 -0700
@@ -1,2 +1,2 @@
-TargetType23.java:35:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType23.Sam2), TargetType23, kindname.method, <Z>call(TargetType23.Sam3<Z>), TargetType23
+TargetType23.java:39:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType23.Sam1), TargetType23, kindname.method, call(TargetType23.Sam2), TargetType23
1 error
--- a/langtools/test/tools/javac/options/xprefer/XPreferTest.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/options/xprefer/XPreferTest.java Fri May 16 14:35:37 2014 -0700
@@ -26,6 +26,7 @@
* @summary Tests which path is used to represent an implicit type given
* various xprefer arguments and multiple .class / .java files involved.
* @bug 8028196
+ * @ignore 8042839 XPreferTest fails on Windows
*/
import java.io.File;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/resolve/AmbiguityErrorTest.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014, 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 8041663
+ */
+
+public class AmbiguityErrorTest {
+
+ public interface A { }
+
+ public interface B extends A { }
+
+ public interface C {
+ A m(B strategy);
+ }
+
+ public interface D {
+ A m(A strategy);
+ A m(B strategy);
+ }
+
+ public interface T1 extends C, D { }
+ public interface T2 extends D, C { }
+
+ int count;
+
+ class T1Impl implements T1, T2 {
+ public A m(B strategy) {
+ count++;
+ return null;
+ }
+ public A m(A strategy) {
+ throw new AssertionError("Should not get here.");
+ }
+ }
+
+ public static void main(String... args) {
+ new AmbiguityErrorTest().test();
+ }
+
+ void test() {
+ T1 t1 = new T1Impl();
+ T2 t2 = new T1Impl();
+ final B b = new B() { };
+ t1.m(b);
+ t2.m(b);
+
+ if (count != 2) {
+ throw new IllegalStateException("Did not call the methods properly");
+ }
+ }
+
+}
--- a/langtools/test/tools/javac/resolve/ResolveHarness.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/resolve/ResolveHarness.java Fri May 16 14:35:37 2014 -0700
@@ -23,8 +23,8 @@
/*
* @test
- * @bug 7098660 8014649
- * @summary Write better overload resolution/inference tests
+ * @bug 7098660 8014649 8034223
+ * @summary Test harness for overload resolution/inference tests
* @library /tools/javac/lib
* @build JavacTestingAbstractProcessor ResolveHarness
* @run main ResolveHarness
--- a/langtools/test/tools/javac/resolve/tests/PrimitiveOverReferenceVarargsAmbiguous.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/resolve/tests/PrimitiveOverReferenceVarargsAmbiguous.java Fri May 16 14:35:37 2014 -0700
@@ -23,44 +23,44 @@
@TraceResolve(keys={"compiler.err.ref.ambiguous"})
class PrimitiveOverReferenceVarargsAmbiguous {
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_byte(byte... b) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_byte(Byte... b) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_short(short... s) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_short(Short... s) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_int(int... i) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_int(Integer... i) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_long(long... l) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_long(Long... l) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_float(float... f) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_float(Float... f) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_double(double... d) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_double(Double... d) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_char(char... c) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_char(Character... c) {}
- @Candidate(applicable=Phase.VARARGS, mostSpecific=true)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_bool(boolean... z) {}
- @Candidate(applicable=Phase.VARARGS)
+ @Candidate(applicable=Phase.VARARGS, mostSpecific=false)
static void m_bool(Boolean... z) {}
{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/resolve/tests/PrimitiveVsReferenceSamePhase.java Fri May 16 14:35:37 2014 -0700
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2014 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.
+ */
+
+@TraceResolve(keys={"compiler.err.ref.ambiguous"})
+class PrimitiveVsReferenceSamePhase {
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_byte(Byte b1, byte b2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_byte(Byte b1, Byte b2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_short(Short s1, short s2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_short(Short s1, Short s2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_int(Integer i1, int i2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_int(Integer i1, Integer i2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_long(Long l1, long l2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_long(Long l1, Long l2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_float(Float f1, float f2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_float(Float f1, Float f2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_double(Double d1, double d2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_double(Double d1, Double d2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_char(Character c1, char c2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_char(Character c1, Character c2) {}
+
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_bool(Boolean z1, boolean z2) {}
+ @Candidate(applicable=Phase.BOX, mostSpecific=false)
+ static void m_bool(Boolean z1, Boolean z2) {}
+
+ {
+ m_byte((byte)0, (byte)0);
+ m_short((short)0, (short)0);
+ m_int(0, 0);
+ m_long(0L, 0L);
+ m_float(0.0f, 0.0f);
+ m_double(0.0, 0.0);
+ m_char('?', '?');
+ m_bool(false, false);
+ }
+}
--- a/langtools/test/tools/javac/types/TypeHarness.java Thu May 15 10:37:52 2014 -0700
+++ b/langtools/test/tools/javac/types/TypeHarness.java Fri May 16 14:35:37 2014 -0700
@@ -255,7 +255,8 @@
public ClassType Class(long flags, Type... typeArgs) {
ClassSymbol csym = new ClassSymbol(flags, syntheticName(), predef.noSymbol);
- csym.type = new ClassType(Type.noType, List.from(typeArgs), csym);
+ csym.type = new ClassType(Type.noType, List.from(typeArgs), csym,
+ Type.noAnnotations);
((ClassType)csym.type).supertype_field = predef.objectType;
return (ClassType)csym.type;
}
@@ -301,7 +302,7 @@
}
public ArrayType Array(Type elemType) {
- return new ArrayType(elemType, predef.arrayClass);
+ return new ArrayType(elemType, predef.arrayClass, Type.noAnnotations);
}
public TypeVar TypeVariable() {
@@ -310,16 +311,16 @@
public TypeVar TypeVariable(Type bound) {
TypeSymbol tvsym = new TypeVariableSymbol(0, syntheticName(), null, predef.noSymbol);
- tvsym.type = new TypeVar(tvsym, bound, null);
+ tvsym.type = new TypeVar(tvsym, bound, null, Type.noAnnotations);
return (TypeVar)tvsym.type;
}
public WildcardType Wildcard(BoundKind bk, Type bound) {
- return new WildcardType(bound, bk, predef.boundClass);
+ return new WildcardType(bound, bk, predef.boundClass, Type.noAnnotations);
}
public CapturedType CapturedVariable(Type upper, Type lower) {
- return new CapturedType(syntheticName(), predef.noSymbol, upper, lower, null);
+ return new CapturedType(syntheticName(), predef.noSymbol, upper, lower, null, Type.noAnnotations);
}
public ClassType Intersection(Type classBound, Type... intfBounds) {
--- a/nashorn/.hgtags Thu May 15 10:37:52 2014 -0700
+++ b/nashorn/.hgtags Fri May 16 14:35:37 2014 -0700
@@ -246,3 +246,4 @@
0eaa55c7abe5d96023a4b38a326f411209c43f49 jdk9-b10
4d60c3292e14aac90dc3b8232496ba4af4254cc3 jdk9-b11
282e9a675e079cc84dbfaa4c10050f08397faab0 jdk9-b12
+be4580ae56e2ef0ce521d3f840753eaa83cacf33 jdk9-b13
--- a/nashorn/make/build.xml Thu May 15 10:37:52 2014 -0700
+++ b/nashorn/make/build.xml Fri May 16 14:35:37 2014 -0700
@@ -279,6 +279,10 @@
<target name="generate-policy-file" depends="prepare">
<echo file="${build.dir}/nashorn.policy">
+grant codeBase "file:/${toString:nashorn.ext.path}/nashorn.jar" {
+ permission java.security.AllPermission;
+};
+
grant codeBase "file:/${basedir}/${nashorn.internal.tests.jar}" {
permission java.security.AllPermission;
};