1 #!/bin/sh 2 3 # 4 # Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22 # CA 95054 USA or visit www.sun.com if you need additional information or 23 # have any 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* | CYGWIN* ) 61 SEP=";" 62 ;; 63 64 * ) 65 SEP=":" 66 ;; 67 esac 68 69 70 APT="${TESTJAVA}/bin/apt ${TESTTOOLVMOPTS} " 71 JAVA="${TESTJAVA}/bin/java ${TESTVMOPTS} " 72 JAVAC="${TESTJAVA}/bin/javac ${TESTTOOLVMOPTS} " 73 74 unset CLASSPATH 75 76 77 # --------------------------------------------------------------- 78 echo "Verify that source 1.6 is not supported 79 rm -f HelloWorld.class 80 81 printf "%s\n" "-source 1.6" > options0 82 printf "%s\n" "${TESTSRC}/HelloWorld.java" >> options0 83 ${APT} @options0 84 85 RESULT=$? 86 case "$RESULT" in 87 0 ) 88 echo "FAILED: accepted source 1.6" 89 exit 1 90 ;; 91 esac 92 93 TestNoFile "HelloWorld.class" 94 95 # --------------------------------------------------------------- 96 97 echo "Verify that target 1.6 is not supported 98 rm -f HelloWorld.class 99 100 printf "%s\n" "-target 1.6" > options00 101 printf "%s\n" "${TESTSRC}/HelloWorld.java" >> options00 102 ${APT} @options00 103 104 RESULT=$? 105 case "$RESULT" in 106 0 ) 107 echo "FAILED: accepted target 1.6" 108 exit 1 109 ;; 110 esac 111 112 TestNoFile "HelloWorld.class" 113 114 # --------------------------------------------------------------- 115 116 echo "Testing javac pass-through with -A in options file" 117 rm -f HelloWorld.class 118 119 printf "%s\n" "-A" > options1 120 printf "%s\n" "-d ." >> options1 121 printf "%s\n" "${TESTSRC}/HelloWorld.java" >> options1 122 ${APT} @options1 123 124 RESULT=$? 125 case "$RESULT" in 126 0 ) 127 ;; 128 129 * ) 130 echo "FAILED: javac with -A in options file did not compile" 131 exit 1 132 esac 133 TestFile "HelloWorld.class" 134 135 136 # --------------------------------------------------------------- 137 138 echo "Verifying reporting an error will prevent compilation" 139 rm -f HelloWorld.class 140 if [ ! -f HelloWorld.java ]; then 141 cp ${TESTSRC}/HelloWorld.java . 142 fi 143 144 145 printf "%s\n" "-factory ErrorAPF" > options2 146 printf "%s\n" "-d ." >> options2 147 printf "%s\n" "-cp ${TESTCLASSES}" >> options2 148 printf "%s\n" "HelloWorld.java" >> options2 149 ${APT} @options2 2> output 150 151 TestNoFile "HelloWorld.class" 152 153 diff output ${TESTSRC}/golden.txt 154 155 RESULT=$? 156 case "$RESULT" in 157 0 ) 158 ;; 159 160 * ) 161 echo "FAILED: did not record expected error messages" 162 exit 1 163 esac 164 165 166 167 # --------------------------------------------------------------- 168 169 echo "Verifying reporting a warning *won't* prevent compilation" 170 171 rm -f HelloAnnotation.class 172 if [ ! -f HelloAnnotation.java ]; then 173 cp ${TESTSRC}/HelloAnnotation.java . 174 fi 175 176 177 printf "%s\n" "-factory WarnAPF" > options3 178 printf "%s\n" "-d ." >> options3 179 printf "%s\n" "-cp ${TESTCLASSES}" >> options3 180 printf "%s\n" "HelloAnnotation.java" >> options3 181 ${APT} @options3 2> output 182 183 diff output ${TESTSRC}/goldenWarn.txt 184 185 RESULT=$? 186 case "$RESULT" in 187 0 ) 188 ;; 189 190 * ) 191 echo "FAILED: did not record expected warning messages" 192 exit 1 193 esac 194 195 TestFile "HelloAnnotation.class" 196 197 # --------------------------------------------------------------- 198 199 echo "Verifying static state is available across apt rounds; -factory, -cp" 200 201 mkdir -p ./src 202 mkdir -p ./class 203 204 rm -Rf ./src/* 205 rm -Rf ./class/* 206 207 printf "%s\n" "-factory StaticApf" > options4 208 printf "%s\n" "-s ./src" >> options4 209 printf "%s\n" "-d ./class" >> options4 210 printf "%s\n" "-cp ${TESTCLASSES}" >> options4 211 # printf "%s\n" "-XPrintAptRounds" >> options4 212 ${APT} @options4 213 214 TestFile "./class/AndAhTwo.class" 215 216 # --------------------------------------------------------------- 217 218 echo "Verifying static state is available across apt rounds; -factory, -factorypath" 219 220 rm -Rf ./src/* 221 rm -Rf ./class/* 222 223 printf "%s\n" "-factory StaticApf" > options5 224 printf "%s\n" "-s ./src" >> options5 225 printf "%s\n" "-d ./class" >> options5 226 printf "%s\n" "-factorypath ${TESTCLASSES}" >> options5 227 # printf "%s\n" "-XPrintAptRounds" >> options5 228 ${APT} @options5 229 230 TestFile "./class/AndAhTwo.class" 231 232 # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 233 234 # Create jar file for StaticApf 235 JAR="${TESTJAVA}/bin/jar " 236 mkdir -p META-INF/services 237 cp ${TESTSRC}/servicesStaticApf META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 238 cp ${TESTCLASSES}/StaticApf*.class . 239 ${JAR} cf0 staticApf.jar StaticApf*.class META-INF 240 241 # --------------------------------------------------------------- 242 243 echo "Verifying static state is available across apt rounds; -cp" 244 245 rm -Rf ./src/* 246 rm -Rf ./class/* 247 248 printf "%s\n" "-cp staticApf.jar" > options6 249 printf "%s\n" "-s ./src" >> options6 250 printf "%s\n" "-d ./class" >> options6 251 printf "%s\n" "-XPrintAptRounds" >> options6 252 ${APT} @options6 253 254 TestFile "./class/AndAhTwo.class" 255 256 # --------------------------------------------------------------- 257 258 echo "Verifying static state is available across apt rounds; -factorypath" 259 260 rm -Rf ./src/* 261 rm -Rf ./class/* 262 263 printf "%s\n" "-factorypath staticApf.jar" > options7 264 printf "%s\n" "-s ./src" >> options7 265 printf "%s\n" "-d ./class" >> options7 266 printf "%s\n" "-XPrintAptRounds" >> options7 267 ${APT} @options7 268 269 TestFile "./class/AndAhTwo.class" 270 271 # --------------------------------------------------------------- 272 273 echo "Verifying -XclassesAsDecls handles class files properly" 274 275 rm -Rf ./src/* 276 rm -Rf ./class/* 277 278 mkdir -p ./tmp/classes 279 280 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AhOneClass.java ${TESTSRC}/src/AndAhTwoClass.java 281 282 RESULT=$? 283 case "$RESULT" in 284 0 ) 285 ;; 286 287 * ) 288 echo "FAILED: javac failed to succesfully compile." 289 exit 1 290 esac 291 292 printf "%s\n" "-factorypath ${TESTCLASSES}" > options7a 293 printf "%s\n" "-factory ClassDeclApf" >> options7a 294 printf "%s\n" "-s ./src" >> options7a 295 printf "%s\n" "-d ./class" >> options7a 296 printf "%s\n" "-XPrintAptRounds" >> options7a 297 printf "%s\n" "-XclassesAsDecls" >> options7a 298 ${APT} @options7a 299 300 TestFile "./class/AndAhTwoClass.class" 301 302 # --------------------------------------------------------------- 303 304 echo "Verifying -XclassesAsDecls works with command-line arguments" 305 306 rm -Rf ./src/* 307 rm -Rf ./class/* 308 rm -Rf ./tmp/classes 309 310 mkdir -p ./tmp/classes 311 312 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java 313 314 RESULT=$? 315 case "$RESULT" in 316 0 ) 317 ;; 318 319 * ) 320 echo "FAILED: javac failed to succesfully compile." 321 exit 1 322 esac 323 324 printf "%s\n" "-factorypath ${TESTCLASSES}" > options7b 325 printf "%s\n" "-factory ClassDeclApf2" >> options7b 326 printf "%s\n" "-XPrintAptRounds" >> options7b 327 printf "%s\n" "-XclassesAsDecls" >> options7b 328 printf "%s\n" "-cp ${TESTCLASSES}" >> options7b 329 printf "%s\n" "ErrorAPF" >> options7b 330 printf "%s\n" "WarnAPF" >> options7b 331 printf "%s\n" "-s ./src" >> options7b 332 printf "%s\n" "-d ./class" >> options7b 333 printf "%s\n" "ClassDeclApf" >> options7b 334 ${APT} @options7b 335 336 RESULT=$? 337 case "$RESULT" in 338 0 ) 339 ;; 340 341 * ) 342 echo "FAILED: apt exited with an error code." 343 exit 1 344 esac 345 346 TestFile "./class/AndAhTwoClass.class" 347 TestFile "./class/AhOne.class" 348 349 # --------------------------------------------------------------- 350 351 echo "Verifying -XclassesAsDecls works with all source files" 352 353 rm -Rf ./src/* 354 rm -Rf ./class/* 355 rm -Rf ./tmp/classes 356 357 mkdir -p ./tmp/classes 358 359 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java 360 361 RESULT=$? 362 case "$RESULT" in 363 0 ) 364 ;; 365 366 * ) 367 echo "FAILED: javac failed to succesfully compile." 368 exit 1 369 esac 370 371 printf "%s\n" "-factorypath ${TESTCLASSES}" > options7c 372 printf "%s\n" "-factory ClassDeclApf2" >> options7c 373 printf "%s\n" "-s ./src" >> options7c 374 printf "%s\n" "-d ./class" >> options7c 375 printf "%s\n" "-sourcepath ${TESTSRC}" >> options7c 376 printf "%s\n" "${TESTSRC}/HelloAnnotation.java" >> options7c 377 printf "%s\n" "${TESTSRC}/HelloWorld.java" >> options7c 378 printf "%s\n" "${TESTSRC}/Dummy1.java" >> options7c 379 printf "%s\n" "-XPrintAptRounds" >> options7c 380 printf "%s\n" "-XclassesAsDecls" >> options7c 381 printf "%s\n" "-cp ${TESTCLASSES}" >> options7c 382 ${APT} @options7c 383 384 RESULT=$? 385 case "$RESULT" in 386 0 ) 387 ;; 388 389 * ) 390 echo "FAILED: apt exited with an error code." 391 exit 1 392 esac 393 394 TestFile "./class/AndAhTwoClass.class" 395 TestFile "./class/AhOne.class" 396 TestFile "./class/HelloWorld.class" 397 398 # --------------------------------------------------------------- 399 400 echo "Verifying -XclassesAsDecls works with mixed class and source files" 401 402 rm -Rf ./src/* 403 rm -Rf ./class/* 404 rm -Rf ./tmp/classes 405 406 mkdir -p ./tmp/classes 407 408 ${JAVAC} -d ./tmp/classes ${TESTSRC}/src/Round1Class.java ${TESTSRC}/src/AndAhTwoClass.java 409 410 RESULT=$? 411 case "$RESULT" in 412 0 ) 413 ;; 414 415 * ) 416 echo "FAILED: javac failed to succesfully compile." 417 exit 1 418 esac 419 420 printf "%s\n" "-factorypath ${TESTCLASSES}" > options7d 421 printf "%s\n" "-factory ClassDeclApf2" >> options7d 422 printf "%s\n" "-s ./src" >> options7d 423 printf "%s\n" "-XclassesAsDecls" >> options7d 424 printf "%s\n" "ClassDeclApf" >> options7d 425 printf "%s\n" "-d ./class" >> options7d 426 printf "%s\n" "ErrorAPF" >> options7d 427 printf "%s\n" "-XPrintAptRounds" >> options7d 428 printf "%s\n" "${TESTSRC}/HelloWorld.java" >> options7d 429 printf "%s\n" "-cp ${TESTCLASSES}" >> options7d 430 ${APT} @options7d 431 432 RESULT=$? 433 case "$RESULT" in 434 0 ) 435 ;; 436 437 * ) 438 echo "FAILED: apt exited with an error code." 439 exit 1 440 esac 441 442 TestFile "./class/AndAhTwoClass.class" 443 TestFile "./class/AhOne.class" 444 TestFile "./class/HelloWorld.class" 445 446 # --------------------------------------------------------------- 447 448 echo "Testing productive factories are called on subsequent rounds" 449 450 rm -Rf ./src/* 451 rm -Rf ./class/* 452 453 rm -Rf META-INF/services/* 454 cp ${TESTSRC}/servicesRound1 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 455 cp ${TESTCLASSES}/Round1Apf*.class . 456 ${JAR} cf0 round1Apf.jar Round1Apf*.class META-INF 457 458 rm -Rf META-INF/services/* 459 cp ${TESTSRC}/servicesRound2 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 460 cp ${TESTCLASSES}/Round2Apf*.class . 461 ${JAR} cf0 round2Apf.jar Round2Apf*.class META-INF 462 463 rm -Rf META-INF/services/* 464 cp ${TESTSRC}/servicesRound3 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 465 cp ${TESTCLASSES}/Round3Apf*.class . 466 ${JAR} cf0 round3Apf.jar Round3Apf*.class META-INF 467 468 rm -Rf META-INF/services/* 469 cp ${TESTSRC}/servicesRound4 META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory 470 cp ${TESTCLASSES}/Round4Apf*.class . 471 ${JAR} cf0 round4Apf.jar Round4Apf*.class META-INF 472 473 cp ${TESTCLASSES}/Round?.class . 474 ${JAR} cf0 rounds.jar Round?.class 475 476 # cleanup file to prevent accidental discovery in current directory 477 rm -Rf META-INF/services/* 478 479 printf "%s\n" "-factorypath round1Apf.jar${SEP}round2Apf.jar${SEP}round3Apf.jar${SEP}round4Apf.jar" > options8 480 printf "%s\n" "-classpath rounds.jar" >> options8 481 printf "%s\n" "-s ./src" >> options8 482 printf "%s\n" "-d ./class" >> options8 483 #printf "%s\n" "-XPrintFactoryInfo" >> options8 484 #printf "%s\n" "-XPrintAptRounds" >> options8 485 printf "%s\n" "${TESTSRC}/Dummy1.java" >> options8 486 ${APT} @options8 > multiRoundOutput 2> multiRoundError 487 488 diff multiRoundOutput ${TESTSRC}/goldenFactory.txt 489 490 RESULT=$? 491 case "$RESULT" in 492 0 ) 493 ;; 494 495 * ) 496 echo "FAILED: unexpected factory state" 497 exit 1 498 esac 499 500 TestFile "./class/Dummy5.class" 501 502 # --------------------------------------------------------------- 503 504 echo "Verifying static state with programmatic apt entry; no factory options" 505 rm -Rf ./src/* 506 rm -Rf ./class/* 507 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -s ./src -d ./class -XPrintAptRounds 508 TestFile "./class/AndAhTwo.class" 509 510 echo "Verifying static state with programmatic apt entry; -factory" 511 rm -Rf ./src/* 512 rm -Rf ./class/* 513 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factory ErrorAPF -s ./src -d ./class -XPrintAptRounds 514 TestFile "./class/AndAhTwo.class" 515 516 echo "Verifying static state with programmatic apt entry; -factorypath" 517 rm -Rf ./src/* 518 rm -Rf ./class/* 519 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -s ./src -d ./class -XPrintAptRounds 520 TestFile "./class/AndAhTwo.class" 521 522 echo "Verifying static state with programmatic apt entry; -factory and -factorypath" 523 rm -Rf ./src/* 524 rm -Rf ./class/* 525 ${JAVA} -cp ${TESTJAVA}/lib/tools.jar${SEP}${TESTCLASSES} WrappedStaticApf -factorypath round1Apf.jar -factory Round1Apf -s ./src -d ./class -XPrintAptRounds 526 TestFile "./class/AndAhTwo.class" 527 528 exit 0