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