0N/A#!/bin/sh
0N/A
0N/A#
553N/A# Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
0N/A# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A#
0N/A# This code is free software; you can redistribute it and/or modify it
0N/A# under the terms of the GNU General Public License version 2 only, as
0N/A# published by the Free Software Foundation.
0N/A#
0N/A# This code is distributed in the hope that it will be useful, but WITHOUT
0N/A# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A# version 2 for more details (a copy is included in the LICENSE file that
0N/A# accompanied this code).
0N/A#
0N/A# You should have received a copy of the GNU General Public License version
0N/A# 2 along with this work; if not, write to the Free Software Foundation,
0N/A# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A#
553N/A# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
553N/A# or visit www.oracle.com if you need additional information or have any
553N/A# questions.
0N/A#
0N/A
0N/A# @test
0N/A# @bug 5033855 4990902 5023880 5043516 5048534 5048535 5041279 5048539 5067261 5068145 5023881 4996963 5095716 6191667 6433634
0N/A# @run shell ../verifyVariables.sh
0N/A# @build ErrorAPF
0N/A# @build WarnAPF
0N/A# @build StaticApf
0N/A# @build ClassDeclApf
0N/A# @build ClassDeclApf2
0N/A# @build Rounds
0N/A# @build Round1Apf Round2Apf Round3Apf Round4Apf
0N/A# @build WrappedStaticApf
0N/A# @run shell compile.sh
0N/A# @summary Test simple usages of apt, including delegating to javac
0N/A# @author Joseph D. Darcy
0N/A
0N/A# If the file *does* exist, exit with an error
0N/ATestNoFile() {
0N/A if [ -f ${1} ]; then
0N/A printf "%s\n" "File ${1} found."
0N/A exit 1
0N/A fi
0N/A}
0N/A
0N/A# If the file does not exist, exit with an error
0N/ATestFile() {
0N/A if [ ! -f ${1} ]; then
0N/A printf "%s\n" "File ${1} not found."
0N/A exit 1
0N/A fi
0N/A}
0N/A
0N/A
0N/AOS=`uname -s`;
0N/Acase "${OS}" in
386N/A Windows* )
386N/A SEP=";"
386N/A ;;
386N/A
386N/A CYGWIN* )
386N/A DIFFOPTS="--strip-trailing-cr"
0N/A SEP=";"
0N/A ;;
0N/A
0N/A * )
0N/A SEP=":"
0N/A ;;
0N/Aesac
0N/A
0N/A
330N/AAPT="${TESTJAVA}/bin/apt ${TESTTOOLVMOPTS} -XDsuppress-tool-api-removal-message "
0N/AJAVA="${TESTJAVA}/bin/java ${TESTVMOPTS} "
0N/AJAVAC="${TESTJAVA}/bin/javac ${TESTTOOLVMOPTS} "
0N/A
0N/Aunset CLASSPATH
0N/A
0N/A
0N/A# ---------------------------------------------------------------
0N/Aecho "Verify that source 1.6 is not supported
0N/Arm -f HelloWorld.class
0N/A
0N/Aprintf "%s\n" "-source 1.6" > options0
0N/Aprintf "%s\n" "${TESTSRC}/HelloWorld.java" >> options0
0N/A${APT} @options0
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A echo "FAILED: accepted source 1.6"
0N/A exit 1
0N/A ;;
0N/Aesac
0N/A
0N/ATestNoFile "HelloWorld.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verify that target 1.6 is not supported
0N/Arm -f HelloWorld.class
0N/A
0N/Aprintf "%s\n" "-target 1.6" > options00
0N/Aprintf "%s\n" "${TESTSRC}/HelloWorld.java" >> options00
0N/A${APT} @options00
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A echo "FAILED: accepted target 1.6"
0N/A exit 1
0N/A ;;
0N/Aesac
0N/A
0N/ATestNoFile "HelloWorld.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Testing javac pass-through with -A in options file"
0N/Arm -f HelloWorld.class
0N/A
0N/Aprintf "%s\n" "-A" > options1
0N/Aprintf "%s\n" "-d ." >> options1
0N/Aprintf "%s\n" "${TESTSRC}/HelloWorld.java" >> options1
0N/A${APT} @options1
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: javac with -A in options file did not compile"
0N/A exit 1
0N/Aesac
0N/ATestFile "HelloWorld.class"
0N/A
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying reporting an error will prevent compilation"
0N/Arm -f HelloWorld.class
0N/Aif [ ! -f HelloWorld.java ]; then
0N/A cp ${TESTSRC}/HelloWorld.java .
0N/Afi
0N/A
0N/A
0N/Aprintf "%s\n" "-factory ErrorAPF" > options2
0N/Aprintf "%s\n" "-d ." >> options2
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options2
0N/Aprintf "%s\n" "HelloWorld.java" >> options2
0N/A${APT} @options2 2> output
0N/A
0N/ATestNoFile "HelloWorld.class"
0N/A
386N/Adiff ${DIFFOPTS} output ${TESTSRC}/golden.txt
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: did not record expected error messages"
0N/A exit 1
0N/Aesac
0N/A
0N/A
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying reporting a warning *won't* prevent compilation"
0N/A
0N/Arm -f HelloAnnotation.class
0N/Aif [ ! -f HelloAnnotation.java ]; then
0N/A cp ${TESTSRC}/HelloAnnotation.java .
0N/Afi
0N/A
0N/A
0N/Aprintf "%s\n" "-factory WarnAPF" > options3
0N/Aprintf "%s\n" "-d ." >> options3
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options3
0N/Aprintf "%s\n" "HelloAnnotation.java" >> options3
0N/A${APT} @options3 2> output
0N/A
386N/Adiff ${DIFFOPTS} output ${TESTSRC}/goldenWarn.txt
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: did not record expected warning messages"
0N/A exit 1
0N/Aesac
0N/A
0N/ATestFile "HelloAnnotation.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying static state is available across apt rounds; -factory, -cp"
0N/A
0N/Amkdir -p ./src
0N/Amkdir -p ./class
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Aprintf "%s\n" "-factory StaticApf" > options4
0N/Aprintf "%s\n" "-s ./src" >> options4
0N/Aprintf "%s\n" "-d ./class" >> options4
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options4
0N/A# printf "%s\n" "-XPrintAptRounds" >> options4
0N/A${APT} @options4
0N/A
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying static state is available across apt rounds; -factory, -factorypath"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Aprintf "%s\n" "-factory StaticApf" > options5
0N/Aprintf "%s\n" "-s ./src" >> options5
0N/Aprintf "%s\n" "-d ./class" >> options5
0N/Aprintf "%s\n" "-factorypath ${TESTCLASSES}" >> options5
0N/A# printf "%s\n" "-XPrintAptRounds" >> options5
0N/A${APT} @options5
0N/A
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/A# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
0N/A
0N/A# Create jar file for StaticApf
0N/AJAR="${TESTJAVA}/bin/jar "
0N/Amkdir -p META-INF/services
0N/Acp ${TESTSRC}/servicesStaticApf META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
0N/Acp ${TESTCLASSES}/StaticApf*.class .
0N/A${JAR} cf0 staticApf.jar StaticApf*.class META-INF
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying static state is available across apt rounds; -cp"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Aprintf "%s\n" "-cp staticApf.jar" > options6
0N/Aprintf "%s\n" "-s ./src" >> options6
0N/Aprintf "%s\n" "-d ./class" >> options6
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options6
0N/A${APT} @options6
0N/A
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying static state is available across apt rounds; -factorypath"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Aprintf "%s\n" "-factorypath staticApf.jar" > options7
0N/Aprintf "%s\n" "-s ./src" >> options7
0N/Aprintf "%s\n" "-d ./class" >> options7
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options7
0N/A${APT} @options7
0N/A
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying -XclassesAsDecls handles class files properly"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Amkdir -p ./tmp/classes
0N/A
0N/A${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AhOneClass.java ${TESTSRC}/src/AndAhTwoClass.java
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: javac failed to succesfully compile."
0N/A exit 1
0N/Aesac
0N/A
0N/Aprintf "%s\n" "-factorypath ${TESTCLASSES}" > options7a
0N/Aprintf "%s\n" "-factory ClassDeclApf" >> options7a
0N/Aprintf "%s\n" "-s ./src" >> options7a
0N/Aprintf "%s\n" "-d ./class" >> options7a
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options7a
0N/Aprintf "%s\n" "-XclassesAsDecls" >> options7a
0N/A${APT} @options7a
0N/A
0N/ATestFile "./class/AndAhTwoClass.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying -XclassesAsDecls works with command-line arguments"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/Arm -Rf ./tmp/classes
0N/A
0N/Amkdir -p ./tmp/classes
0N/A
0N/A${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: javac failed to succesfully compile."
0N/A exit 1
0N/Aesac
0N/A
0N/Aprintf "%s\n" "-factorypath ${TESTCLASSES}" > options7b
0N/Aprintf "%s\n" "-factory ClassDeclApf2" >> options7b
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options7b
0N/Aprintf "%s\n" "-XclassesAsDecls" >> options7b
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options7b
0N/Aprintf "%s\n" "ErrorAPF" >> options7b
0N/Aprintf "%s\n" "WarnAPF" >> options7b
0N/Aprintf "%s\n" "-s ./src" >> options7b
0N/Aprintf "%s\n" "-d ./class" >> options7b
0N/Aprintf "%s\n" "ClassDeclApf" >> options7b
0N/A${APT} @options7b
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: apt exited with an error code."
0N/A exit 1
0N/Aesac
0N/A
0N/ATestFile "./class/AndAhTwoClass.class"
0N/ATestFile "./class/AhOne.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying -XclassesAsDecls works with all source files"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/Arm -Rf ./tmp/classes
0N/A
0N/Amkdir -p ./tmp/classes
0N/A
0N/A${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: javac failed to succesfully compile."
0N/A exit 1
0N/Aesac
0N/A
0N/Aprintf "%s\n" "-factorypath ${TESTCLASSES}" > options7c
0N/Aprintf "%s\n" "-factory ClassDeclApf2" >> options7c
0N/Aprintf "%s\n" "-s ./src" >> options7c
0N/Aprintf "%s\n" "-d ./class" >> options7c
0N/Aprintf "%s\n" "-sourcepath ${TESTSRC}" >> options7c
0N/Aprintf "%s\n" "${TESTSRC}/HelloAnnotation.java" >> options7c
0N/Aprintf "%s\n" "${TESTSRC}/HelloWorld.java" >> options7c
0N/Aprintf "%s\n" "${TESTSRC}/Dummy1.java" >> options7c
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options7c
0N/Aprintf "%s\n" "-XclassesAsDecls" >> options7c
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options7c
0N/A${APT} @options7c
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: apt exited with an error code."
0N/A exit 1
0N/Aesac
0N/A
0N/ATestFile "./class/AndAhTwoClass.class"
0N/ATestFile "./class/AhOne.class"
0N/ATestFile "./class/HelloWorld.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying -XclassesAsDecls works with mixed class and source files"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/Arm -Rf ./tmp/classes
0N/A
0N/Amkdir -p ./tmp/classes
0N/A
0N/A${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: javac failed to succesfully compile."
0N/A exit 1
0N/Aesac
0N/A
0N/Aprintf "%s\n" "-factorypath ${TESTCLASSES}" > options7d
0N/Aprintf "%s\n" "-factory ClassDeclApf2" >> options7d
0N/Aprintf "%s\n" "-s ./src" >> options7d
0N/Aprintf "%s\n" "-XclassesAsDecls" >> options7d
0N/Aprintf "%s\n" "ClassDeclApf" >> options7d
0N/Aprintf "%s\n" "-d ./class" >> options7d
0N/Aprintf "%s\n" "ErrorAPF" >> options7d
0N/Aprintf "%s\n" "-XPrintAptRounds" >> options7d
0N/Aprintf "%s\n" "${TESTSRC}/HelloWorld.java" >> options7d
0N/Aprintf "%s\n" "-cp ${TESTCLASSES}" >> options7d
0N/A${APT} @options7d
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: apt exited with an error code."
0N/A exit 1
0N/Aesac
0N/A
0N/ATestFile "./class/AndAhTwoClass.class"
0N/ATestFile "./class/AhOne.class"
0N/ATestFile "./class/HelloWorld.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Testing productive factories are called on subsequent rounds"
0N/A
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A
0N/Arm -Rf META-INF/services/*
0N/Acp ${TESTSRC}/servicesRound1 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
0N/Acp ${TESTCLASSES}/Round1Apf*.class .
0N/A${JAR} cf0 round1Apf.jar Round1Apf*.class META-INF
0N/A
0N/Arm -Rf META-INF/services/*
0N/Acp ${TESTSRC}/servicesRound2 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
0N/Acp ${TESTCLASSES}/Round2Apf*.class .
0N/A${JAR} cf0 round2Apf.jar Round2Apf*.class META-INF
0N/A
0N/Arm -Rf META-INF/services/*
0N/Acp ${TESTSRC}/servicesRound3 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
0N/Acp ${TESTCLASSES}/Round3Apf*.class .
0N/A${JAR} cf0 round3Apf.jar Round3Apf*.class META-INF
0N/A
0N/Arm -Rf META-INF/services/*
0N/Acp ${TESTSRC}/servicesRound4 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
0N/Acp ${TESTCLASSES}/Round4Apf*.class .
0N/A${JAR} cf0 round4Apf.jar Round4Apf*.class META-INF
0N/A
0N/Acp ${TESTCLASSES}/Round?.class .
0N/A${JAR} cf0 rounds.jar Round?.class
0N/A
147N/A# cleanup file to prevent accidental discovery in current directory
147N/Arm -Rf META-INF/services/*
147N/A
0N/Aprintf "%s\n" "-factorypath round1Apf.jar${SEP}round2Apf.jar${SEP}round3Apf.jar${SEP}round4Apf.jar" > options8
0N/Aprintf "%s\n" "-classpath rounds.jar" >> options8
0N/Aprintf "%s\n" "-s ./src" >> options8
0N/Aprintf "%s\n" "-d ./class" >> options8
0N/A#printf "%s\n" "-XPrintFactoryInfo" >> options8
0N/A#printf "%s\n" "-XPrintAptRounds" >> options8
0N/Aprintf "%s\n" "${TESTSRC}/Dummy1.java" >> options8
0N/A${APT} @options8 > multiRoundOutput 2> multiRoundError
0N/A
386N/Adiff ${DIFFOPTS} multiRoundOutput ${TESTSRC}/goldenFactory.txt
0N/A
0N/ARESULT=$?
0N/Acase "$RESULT" in
0N/A 0 )
0N/A ;;
0N/A
0N/A * )
0N/A echo "FAILED: unexpected factory state"
0N/A exit 1
0N/Aesac
0N/A
0N/ATestFile "./class/Dummy5.class"
0N/A
0N/A# ---------------------------------------------------------------
0N/A
0N/Aecho "Verifying static state with programmatic apt entry; no factory options"
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -s ./src -d ./class -XPrintAptRounds
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/Aecho "Verifying static state with programmatic apt entry; -factory"
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factory ErrorAPF -s ./src -d ./class -XPrintAptRounds
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/Aecho "Verifying static state with programmatic apt entry; -factorypath"
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -s ./src -d ./class -XPrintAptRounds
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/Aecho "Verifying static state with programmatic apt entry; -factory and -factorypath"
0N/Arm -Rf ./src/*
0N/Arm -Rf ./class/*
0N/A${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -factory Round1Apf -s ./src -d ./class -XPrintAptRounds
0N/ATestFile "./class/AndAhTwo.class"
0N/A
0N/Aexit 0