langtools/test/tools/apt/Compile/compile.sh
changeset 11914 d1311b0c757f
parent 11913 be61e1597cc6
parent 11872 c51754cddc03
child 11915 33f703959597
child 11986 6f383069eb6d
equal deleted inserted replaced
11913:be61e1597cc6 11914:d1311b0c757f
     1 #!/bin/sh
       
     2 
       
     3 #
       
     4 # Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
       
     5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     6 #
       
     7 # This code is free software; you can redistribute it and/or modify it
       
     8 # under the terms of the GNU General Public License version 2 only, as
       
     9 # published by the Free Software Foundation.
       
    10 #
       
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14 # version 2 for more details (a copy is included in the LICENSE file that
       
    15 # accompanied this code).
       
    16 #
       
    17 # You should have received a copy of the GNU General Public License version
       
    18 # 2 along with this work; if not, write to the Free Software Foundation,
       
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20 #
       
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22 # or visit www.oracle.com if you need additional information or have any
       
    23 # questions.
       
    24 #
       
    25 
       
    26 # @test
       
    27 # @bug 5033855 4990902 5023880 5043516 5048534 5048535 5041279 5048539 5067261 5068145 5023881 4996963 5095716 6191667 6433634
       
    28 # @run shell ../verifyVariables.sh
       
    29 # @build ErrorAPF
       
    30 # @build WarnAPF
       
    31 # @build StaticApf
       
    32 # @build ClassDeclApf
       
    33 # @build ClassDeclApf2
       
    34 # @build Rounds
       
    35 # @build Round1Apf Round2Apf Round3Apf Round4Apf
       
    36 # @build WrappedStaticApf
       
    37 # @run shell compile.sh
       
    38 # @summary Test simple usages of apt, including delegating to javac
       
    39 # @author Joseph D. Darcy
       
    40 
       
    41 # If the file *does* exist, exit with an error
       
    42 TestNoFile() {
       
    43         if [ -f ${1} ]; then
       
    44                 printf "%s\n" "File ${1} found."
       
    45                 exit 1
       
    46         fi
       
    47 }
       
    48 
       
    49 # If the file does not exist, exit with an error
       
    50 TestFile() {
       
    51         if [ ! -f ${1} ]; then
       
    52                 printf "%s\n" "File ${1} not found."
       
    53                 exit 1
       
    54         fi
       
    55 }
       
    56 
       
    57 
       
    58 OS=`uname -s`;
       
    59 case "${OS}" in
       
    60         Windows* )
       
    61                 SEP=";"
       
    62         ;;
       
    63 
       
    64         CYGWIN* )
       
    65 		DIFFOPTS="--strip-trailing-cr"
       
    66                 SEP=";"
       
    67         ;;
       
    68 
       
    69         * )
       
    70         SEP=":"
       
    71         ;;
       
    72 esac
       
    73 
       
    74 
       
    75 APT="${TESTJAVA}/bin/apt ${TESTTOOLVMOPTS} -XDsuppress-tool-api-removal-message "
       
    76 JAVA="${TESTJAVA}/bin/java ${TESTVMOPTS} "
       
    77 JAVAC="${TESTJAVA}/bin/javac ${TESTTOOLVMOPTS} "
       
    78 
       
    79 unset CLASSPATH
       
    80 
       
    81 
       
    82 # ---------------------------------------------------------------
       
    83 echo "Verify that source 1.6 is not supported
       
    84 rm -f HelloWorld.class
       
    85 
       
    86 printf "%s\n" "-source 1.6"     > options0
       
    87 printf "%s\n" "${TESTSRC}/HelloWorld.java"  >> options0
       
    88 ${APT} @options0
       
    89 
       
    90 RESULT=$?
       
    91 case "$RESULT" in
       
    92 	0  )
       
    93         echo "FAILED: accepted source 1.6"
       
    94 	exit 1
       
    95         ;;
       
    96 esac
       
    97 
       
    98 TestNoFile "HelloWorld.class"
       
    99 
       
   100 # ---------------------------------------------------------------
       
   101 
       
   102 echo "Verify that target 1.6 is not supported
       
   103 rm -f HelloWorld.class
       
   104 
       
   105 printf "%s\n" "-target 1.6"     > options00
       
   106 printf "%s\n" "${TESTSRC}/HelloWorld.java"  >> options00
       
   107 ${APT} @options00
       
   108 
       
   109 RESULT=$?
       
   110 case "$RESULT" in
       
   111 	0  )
       
   112         echo "FAILED: accepted target 1.6"
       
   113 	exit 1
       
   114         ;;
       
   115 esac
       
   116 
       
   117 TestNoFile "HelloWorld.class"
       
   118 
       
   119 # ---------------------------------------------------------------
       
   120 
       
   121 echo "Testing javac pass-through with -A in options file"
       
   122 rm -f HelloWorld.class
       
   123 
       
   124 printf "%s\n" "-A"     > options1
       
   125 printf "%s\n" "-d ."     >> options1
       
   126 printf "%s\n" "${TESTSRC}/HelloWorld.java"  >> options1
       
   127 ${APT} @options1
       
   128 
       
   129 RESULT=$?
       
   130 case "$RESULT" in
       
   131 	0  )
       
   132         ;;
       
   133 
       
   134         * )
       
   135         echo "FAILED: javac with -A in options file did not compile"
       
   136         exit 1
       
   137 esac
       
   138 TestFile "HelloWorld.class"
       
   139 
       
   140 
       
   141 # ---------------------------------------------------------------
       
   142 
       
   143 echo "Verifying reporting an error will prevent compilation"
       
   144 rm -f HelloWorld.class
       
   145 if [ ! -f HelloWorld.java ]; then
       
   146 	cp ${TESTSRC}/HelloWorld.java .
       
   147 fi
       
   148 
       
   149 
       
   150 printf "%s\n" "-factory ErrorAPF"            > options2
       
   151 printf "%s\n" "-d ."                        >> options2
       
   152 printf "%s\n" "-cp ${TESTCLASSES}"          >> options2
       
   153 printf "%s\n" "HelloWorld.java"             >> options2
       
   154 ${APT} @options2 2> output
       
   155 
       
   156 TestNoFile "HelloWorld.class"
       
   157 
       
   158 diff ${DIFFOPTS} output ${TESTSRC}/golden.txt
       
   159 
       
   160 RESULT=$?
       
   161 case "$RESULT" in
       
   162 	0  )
       
   163         ;;
       
   164 
       
   165         * )
       
   166         echo "FAILED: did not record expected error messages"
       
   167         exit 1
       
   168 esac
       
   169 
       
   170 
       
   171 
       
   172 # ---------------------------------------------------------------
       
   173 
       
   174 echo "Verifying reporting a warning *won't* prevent compilation"
       
   175 
       
   176 rm -f HelloAnnotation.class
       
   177 if [ ! -f HelloAnnotation.java ]; then
       
   178 	cp ${TESTSRC}/HelloAnnotation.java .
       
   179 fi
       
   180 
       
   181 
       
   182 printf "%s\n" "-factory WarnAPF"             > options3
       
   183 printf "%s\n" "-d ."                        >> options3
       
   184 printf "%s\n" "-cp ${TESTCLASSES}"          >> options3
       
   185 printf "%s\n" "HelloAnnotation.java"        >> options3
       
   186 ${APT} @options3 2> output
       
   187 
       
   188 diff ${DIFFOPTS} output ${TESTSRC}/goldenWarn.txt
       
   189 
       
   190 RESULT=$?
       
   191 case "$RESULT" in
       
   192 	0  )
       
   193         ;;
       
   194 
       
   195         * )
       
   196         echo "FAILED: did not record expected warning messages"
       
   197         exit 1
       
   198 esac
       
   199 
       
   200 TestFile "HelloAnnotation.class"
       
   201 
       
   202 # ---------------------------------------------------------------
       
   203 
       
   204 echo "Verifying static state is available across apt rounds; -factory, -cp"
       
   205 
       
   206 mkdir -p ./src
       
   207 mkdir -p ./class
       
   208 
       
   209 rm -Rf ./src/*
       
   210 rm -Rf ./class/*
       
   211 
       
   212 printf "%s\n" "-factory StaticApf"           > options4
       
   213 printf "%s\n" "-s ./src"                    >> options4
       
   214 printf "%s\n" "-d ./class"                  >> options4
       
   215 printf "%s\n" "-cp ${TESTCLASSES}"          >> options4
       
   216 # printf "%s\n" "-XPrintAptRounds"            >> options4
       
   217 ${APT} @options4
       
   218 
       
   219 TestFile "./class/AndAhTwo.class"
       
   220 
       
   221 # ---------------------------------------------------------------
       
   222 
       
   223 echo "Verifying static state is available across apt rounds; -factory, -factorypath"
       
   224 
       
   225 rm -Rf ./src/*
       
   226 rm -Rf ./class/*
       
   227 
       
   228 printf "%s\n" "-factory StaticApf"           > options5
       
   229 printf "%s\n" "-s ./src"                    >> options5
       
   230 printf "%s\n" "-d ./class"                  >> options5
       
   231 printf "%s\n" "-factorypath ${TESTCLASSES}" >> options5
       
   232 # printf "%s\n" "-XPrintAptRounds"          >> options5
       
   233 ${APT} @options5
       
   234 
       
   235 TestFile "./class/AndAhTwo.class"
       
   236 
       
   237 # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
       
   238 
       
   239 # Create jar file for StaticApf
       
   240 JAR="${TESTJAVA}/bin/jar "
       
   241 mkdir -p META-INF/services
       
   242 cp ${TESTSRC}/servicesStaticApf META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
       
   243 cp ${TESTCLASSES}/StaticApf*.class .
       
   244 ${JAR} cf0 staticApf.jar StaticApf*.class META-INF
       
   245 
       
   246 # ---------------------------------------------------------------
       
   247 
       
   248 echo "Verifying static state is available across apt rounds; -cp"
       
   249 
       
   250 rm -Rf ./src/*
       
   251 rm -Rf ./class/*
       
   252 
       
   253 printf "%s\n" "-cp staticApf.jar"           > options6
       
   254 printf "%s\n" "-s ./src"                    >> options6
       
   255 printf "%s\n" "-d ./class"                  >> options6
       
   256 printf "%s\n" "-XPrintAptRounds"          >> options6
       
   257 ${APT} @options6
       
   258 
       
   259 TestFile "./class/AndAhTwo.class"
       
   260 
       
   261 # ---------------------------------------------------------------
       
   262 
       
   263 echo "Verifying static state is available across apt rounds; -factorypath"
       
   264 
       
   265 rm -Rf ./src/*
       
   266 rm -Rf ./class/*
       
   267 
       
   268 printf "%s\n" "-factorypath staticApf.jar"   > options7
       
   269 printf "%s\n" "-s ./src"                    >> options7
       
   270 printf "%s\n" "-d ./class"                  >> options7
       
   271 printf "%s\n" "-XPrintAptRounds"            >> options7
       
   272 ${APT} @options7
       
   273 
       
   274 TestFile "./class/AndAhTwo.class"
       
   275 
       
   276 # ---------------------------------------------------------------
       
   277 
       
   278 echo "Verifying -XclassesAsDecls handles class files properly"
       
   279 
       
   280 rm -Rf ./src/*
       
   281 rm -Rf ./class/*
       
   282 
       
   283 mkdir -p ./tmp/classes
       
   284 
       
   285 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AhOneClass.java ${TESTSRC}/src/AndAhTwoClass.java
       
   286 
       
   287 RESULT=$?
       
   288 case "$RESULT" in
       
   289 	0  )
       
   290         ;;
       
   291 
       
   292         * )
       
   293         echo "FAILED: javac failed to succesfully compile."
       
   294         exit 1
       
   295 esac
       
   296 
       
   297 printf "%s\n" "-factorypath ${TESTCLASSES}"  > options7a
       
   298 printf "%s\n" "-factory ClassDeclApf"       >> options7a
       
   299 printf "%s\n" "-s ./src"                    >> options7a
       
   300 printf "%s\n" "-d ./class"                  >> options7a
       
   301 printf "%s\n" "-XPrintAptRounds"            >> options7a
       
   302 printf "%s\n" "-XclassesAsDecls"            >> options7a
       
   303 ${APT} @options7a
       
   304 
       
   305 TestFile "./class/AndAhTwoClass.class"
       
   306 
       
   307 # ---------------------------------------------------------------
       
   308 
       
   309 echo "Verifying -XclassesAsDecls works with command-line arguments"
       
   310 
       
   311 rm -Rf ./src/*
       
   312 rm -Rf ./class/*
       
   313 rm -Rf ./tmp/classes
       
   314 
       
   315 mkdir -p ./tmp/classes
       
   316 
       
   317 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
       
   318 
       
   319 RESULT=$?
       
   320 case "$RESULT" in
       
   321 	0  )
       
   322         ;;
       
   323 
       
   324         * )
       
   325         echo "FAILED: javac failed to succesfully compile."
       
   326         exit 1
       
   327 esac
       
   328 
       
   329 printf "%s\n" "-factorypath ${TESTCLASSES}"  > options7b
       
   330 printf "%s\n" "-factory ClassDeclApf2"       >> options7b
       
   331 printf "%s\n" "-XPrintAptRounds"            >> options7b
       
   332 printf "%s\n" "-XclassesAsDecls"            >> options7b
       
   333 printf "%s\n" "-cp ${TESTCLASSES}"          >> options7b
       
   334 printf "%s\n" "ErrorAPF"                    >> options7b
       
   335 printf "%s\n" "WarnAPF"                     >> options7b
       
   336 printf "%s\n" "-s ./src"                    >> options7b
       
   337 printf "%s\n" "-d ./class"                  >> options7b
       
   338 printf "%s\n" "ClassDeclApf"                >> options7b
       
   339 ${APT} @options7b
       
   340 
       
   341 RESULT=$?
       
   342 case "$RESULT" in
       
   343 	0  )
       
   344         ;;
       
   345 
       
   346         * )
       
   347         echo "FAILED: apt exited with an error code."
       
   348         exit 1
       
   349 esac
       
   350 
       
   351 TestFile "./class/AndAhTwoClass.class"
       
   352 TestFile "./class/AhOne.class"
       
   353 
       
   354 # ---------------------------------------------------------------
       
   355 
       
   356 echo "Verifying -XclassesAsDecls works with all source files"
       
   357 
       
   358 rm -Rf ./src/*
       
   359 rm -Rf ./class/*
       
   360 rm -Rf ./tmp/classes
       
   361 
       
   362 mkdir -p ./tmp/classes
       
   363 
       
   364 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
       
   365 
       
   366 RESULT=$?
       
   367 case "$RESULT" in
       
   368 	0  )
       
   369         ;;
       
   370 
       
   371         * )
       
   372         echo "FAILED: javac failed to succesfully compile."
       
   373         exit 1
       
   374 esac
       
   375 
       
   376 printf "%s\n" "-factorypath ${TESTCLASSES}"      > options7c
       
   377 printf "%s\n" "-factory ClassDeclApf2"          >> options7c
       
   378 printf "%s\n" "-s ./src"                        >> options7c
       
   379 printf "%s\n" "-d ./class"                      >> options7c
       
   380 printf "%s\n" "-sourcepath ${TESTSRC}"          >> options7c
       
   381 printf "%s\n" "${TESTSRC}/HelloAnnotation.java" >> options7c
       
   382 printf "%s\n" "${TESTSRC}/HelloWorld.java"      >> options7c
       
   383 printf "%s\n" "${TESTSRC}/Dummy1.java"          >> options7c
       
   384 printf "%s\n" "-XPrintAptRounds"                >> options7c
       
   385 printf "%s\n" "-XclassesAsDecls"                >> options7c
       
   386 printf "%s\n" "-cp ${TESTCLASSES}"              >> options7c
       
   387 ${APT} @options7c
       
   388 
       
   389 RESULT=$?
       
   390 case "$RESULT" in
       
   391 	0  )
       
   392         ;;
       
   393 
       
   394         * )
       
   395         echo "FAILED: apt exited with an error code."
       
   396         exit 1
       
   397 esac
       
   398 
       
   399 TestFile "./class/AndAhTwoClass.class"
       
   400 TestFile "./class/AhOne.class"
       
   401 TestFile "./class/HelloWorld.class"
       
   402 
       
   403 # ---------------------------------------------------------------
       
   404 
       
   405 echo "Verifying -XclassesAsDecls works with mixed class and source files"
       
   406 
       
   407 rm -Rf ./src/*
       
   408 rm -Rf ./class/*
       
   409 rm -Rf ./tmp/classes
       
   410 
       
   411 mkdir -p ./tmp/classes
       
   412 
       
   413 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java
       
   414 
       
   415 RESULT=$?
       
   416 case "$RESULT" in
       
   417 	0  )
       
   418         ;;
       
   419 
       
   420         * )
       
   421         echo "FAILED: javac failed to succesfully compile."
       
   422         exit 1
       
   423 esac
       
   424 
       
   425 printf "%s\n" "-factorypath ${TESTCLASSES}"  > options7d
       
   426 printf "%s\n" "-factory ClassDeclApf2"      >> options7d
       
   427 printf "%s\n" "-s ./src"                    >> options7d
       
   428 printf "%s\n" "-XclassesAsDecls"            >> options7d
       
   429 printf "%s\n" "ClassDeclApf"                >> options7d
       
   430 printf "%s\n" "-d ./class"                  >> options7d
       
   431 printf "%s\n" "ErrorAPF"                    >> options7d
       
   432 printf "%s\n" "-XPrintAptRounds"            >> options7d
       
   433 printf "%s\n" "${TESTSRC}/HelloWorld.java"  >> options7d
       
   434 printf "%s\n" "-cp ${TESTCLASSES}"          >> options7d
       
   435 ${APT} @options7d
       
   436 
       
   437 RESULT=$?
       
   438 case "$RESULT" in
       
   439 	0  )
       
   440         ;;
       
   441 
       
   442         * )
       
   443         echo "FAILED: apt exited with an error code."
       
   444         exit 1
       
   445 esac
       
   446 
       
   447 TestFile "./class/AndAhTwoClass.class"
       
   448 TestFile "./class/AhOne.class"
       
   449 TestFile "./class/HelloWorld.class"
       
   450 
       
   451 # ---------------------------------------------------------------
       
   452 
       
   453 echo "Testing productive factories are called on subsequent rounds"
       
   454 
       
   455 rm -Rf ./src/*
       
   456 rm -Rf ./class/*
       
   457 
       
   458 rm -Rf META-INF/services/*
       
   459 cp ${TESTSRC}/servicesRound1 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
       
   460 cp ${TESTCLASSES}/Round1Apf*.class .
       
   461 ${JAR} cf0 round1Apf.jar Round1Apf*.class META-INF
       
   462 
       
   463 rm -Rf META-INF/services/*
       
   464 cp ${TESTSRC}/servicesRound2 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
       
   465 cp ${TESTCLASSES}/Round2Apf*.class .
       
   466 ${JAR} cf0 round2Apf.jar Round2Apf*.class META-INF
       
   467 
       
   468 rm -Rf META-INF/services/*
       
   469 cp ${TESTSRC}/servicesRound3 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
       
   470 cp ${TESTCLASSES}/Round3Apf*.class .
       
   471 ${JAR} cf0 round3Apf.jar Round3Apf*.class META-INF
       
   472 
       
   473 rm -Rf META-INF/services/*
       
   474 cp ${TESTSRC}/servicesRound4 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
       
   475 cp ${TESTCLASSES}/Round4Apf*.class .
       
   476 ${JAR} cf0 round4Apf.jar Round4Apf*.class META-INF
       
   477 
       
   478 cp ${TESTCLASSES}/Round?.class .
       
   479 ${JAR} cf0 rounds.jar Round?.class
       
   480 
       
   481 # cleanup file to prevent accidental discovery in current directory
       
   482 rm -Rf META-INF/services/*
       
   483 
       
   484 printf "%s\n" "-factorypath round1Apf.jar${SEP}round2Apf.jar${SEP}round3Apf.jar${SEP}round4Apf.jar"   > options8
       
   485 printf "%s\n" "-classpath rounds.jar"  >> options8
       
   486 printf "%s\n" "-s ./src"               >> options8
       
   487 printf "%s\n" "-d ./class"             >> options8
       
   488 #printf "%s\n" "-XPrintFactoryInfo"     >> options8
       
   489 #printf "%s\n" "-XPrintAptRounds"       >> options8
       
   490 printf "%s\n" "${TESTSRC}/Dummy1.java" >> options8
       
   491 ${APT} @options8 > multiRoundOutput 2> multiRoundError
       
   492 
       
   493 diff ${DIFFOPTS} multiRoundOutput  ${TESTSRC}/goldenFactory.txt
       
   494 
       
   495 RESULT=$?
       
   496 case "$RESULT" in
       
   497 	0  )
       
   498         ;;
       
   499 
       
   500         * )
       
   501         echo "FAILED: unexpected factory state"
       
   502         exit 1
       
   503 esac
       
   504 
       
   505 TestFile "./class/Dummy5.class"
       
   506 
       
   507 # ---------------------------------------------------------------
       
   508 
       
   509 echo "Verifying static state with programmatic apt entry; no factory options"
       
   510 rm -Rf ./src/*
       
   511 rm -Rf ./class/*
       
   512 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -s ./src -d ./class -XPrintAptRounds
       
   513 TestFile "./class/AndAhTwo.class"
       
   514 
       
   515 echo "Verifying static state with programmatic apt entry; -factory"
       
   516 rm -Rf ./src/*
       
   517 rm -Rf ./class/*
       
   518 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factory ErrorAPF -s ./src -d ./class -XPrintAptRounds
       
   519 TestFile "./class/AndAhTwo.class"
       
   520 
       
   521 echo "Verifying static state with programmatic apt entry; -factorypath"
       
   522 rm -Rf ./src/*
       
   523 rm -Rf ./class/*
       
   524 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -s ./src -d ./class -XPrintAptRounds
       
   525 TestFile "./class/AndAhTwo.class"
       
   526 
       
   527 echo "Verifying static state with programmatic apt entry; -factory and -factorypath"
       
   528 rm -Rf ./src/*
       
   529 rm -Rf ./class/*
       
   530 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -factory Round1Apf -s ./src -d ./class -XPrintAptRounds
       
   531 TestFile "./class/AndAhTwo.class"
       
   532 
       
   533 exit 0