257 newargs[asize] = "New110.java"; 258 fail(newargs); 259 } 260 261 protected void checksrc19(String... args) { 262 printargs("checksrc19", args); 263 checksrc18(args); 264 } 265 266 protected void checksrc110(String... args) { 267 printargs("checksrc110", args); 268 int asize = args.length; 269 String[] newargs = new String[asize+1]; 270 System.arraycopy(args, 0, newargs,0 , asize); 271 newargs[asize] = "New17.java"; 272 pass(newargs); 273 newargs[asize] = "New18.java"; 274 pass(newargs); 275 newargs[asize] = "New110.java"; 276 pass(newargs); 277 } 278 279 protected void checksrc111(String... args) { 280 printargs("checksrc111", args); 281 int asize = args.length; 282 String[] newargs = new String[asize+1]; 283 System.arraycopy(args, 0, newargs,0 , asize); 284 newargs[asize] = "New17.java"; 285 pass(newargs); 286 newargs[asize] = "New18.java"; 287 pass(newargs); 288 newargs[asize] = "New110.java"; 289 pass(newargs); 290 newargs[asize] = "New111.java"; 291 pass(newargs); 292 } 293 294 protected void checksrc112(String... args) { 295 printargs("checksrc112", args); 296 checksrc111(args); 297 } 298 299 protected void checksrc113(String... args) { 300 printargs("checksrc113", args); 301 checksrc111(args); 302 } 303 304 protected void checksrc114(String... args) { 305 printargs("checksrc114", args); 306 checksrc111(args); 307 } 308 309 protected void checksrc115(String... args) { 310 printargs("checksrc115", args); 311 checksrc111(args); 312 } 313 314 protected void pass(String... args) { 315 printargs("pass", args); 316 317 List<String> jcargs = new ArrayList<String>(); 318 jcargs.add("-Xlint:-options"); 319 320 // add in args conforming to List requrements of JavaCompiler 321 for (String onearg : args) { 322 String[] fields = onearg.split(" "); 323 for (String onefield : fields) { 324 jcargs.add(onefield); 325 } 326 } 327 328 // empty list is error 329 if (jcargs.isEmpty()) { 330 System.err.println("error: test error in pass() - No arguments"); 331 System.err.println("\t arguments:\t" + jcargs); 406 } 407 } catch (IOException e) { 408 throw new Error(e); 409 } 410 } 411 412 protected void writeSourceFile(String fileName, String body) throws IOException{ 413 try (Writer fw = new FileWriter(fileName)) { 414 fw.write(body); 415 } 416 } 417 418 protected void genSourceFiles() throws IOException{ 419 /* Create a file that executes with all supported versions. */ 420 writeSourceFile("Base.java","public class Base { }\n"); 421 422 /* 423 * Create a file with a new feature in 1.7, not in 1.6 : "<>" 424 */ 425 writeSourceFile("New17.java", 426 "import java.util.List;\n" + 427 "import java.util.ArrayList;\n" + 428 "class New17 { List<String> s = new ArrayList<>(); }\n" 429 ); 430 431 /* 432 * Create a file with a new feature in 1.8, not in 1.7 : lambda 433 */ 434 writeSourceFile("New18.java", 435 "public class New18 { \n" + 436 " void m() { \n" + 437 " new Thread(() -> { }); \n" + 438 " } \n" + 439 "} \n" 440 ); 441 442 /* 443 * Create a file with a new feature in 1.10, not in 1.9 : var 444 */ 445 writeSourceFile("New110.java", 446 "public class New110 { \n" + 447 " void m() { \n" + 448 " var tmp = new Thread(() -> { }); \n" + 449 " } \n" + 450 "} \n" 451 ); 452 453 /* 454 * Create a file with a new feature in 11, not in 10 : var for lambda parameters 455 */ 456 writeSourceFile("New111.java", 457 "public class New111 { \n" + 458 " static java.util.function.Function<String,String> f = (var x) -> x.substring(0);\n" + 459 " void m(String name) { \n" + 460 " var tmp = new Thread(() -> { }, f.apply(name)); \n" + 461 " } \n" + 462 "} \n" 463 ); 464 } 465 466 protected boolean checkClassFileVersion 467 (String filename,String classVersionNumber) { 468 ByteBuffer bb = ByteBuffer.allocate(1024); 469 try (FileChannel fc = new FileInputStream(filename).getChannel()) { 470 bb.clear(); 471 if (fc.read(bb) < 0) 472 throw new IOException("Could not read from file : " + filename); 473 bb.flip(); 474 int minor = bb.getShort(4); 475 int major = bb.getShort(6); 476 String fileVersion = major + "." + minor; 477 if (fileVersion.equals(classVersionNumber)) { 478 return true; 479 } else { 480 System.err.println("checkClassFileVersion : Failed"); 481 System.err.println("\tclassfile version mismatch"); 482 System.err.println("\texpected : " + classVersionNumber); | 257 newargs[asize] = "New110.java"; 258 fail(newargs); 259 } 260 261 protected void checksrc19(String... args) { 262 printargs("checksrc19", args); 263 checksrc18(args); 264 } 265 266 protected void checksrc110(String... args) { 267 printargs("checksrc110", args); 268 int asize = args.length; 269 String[] newargs = new String[asize+1]; 270 System.arraycopy(args, 0, newargs,0 , asize); 271 newargs[asize] = "New17.java"; 272 pass(newargs); 273 newargs[asize] = "New18.java"; 274 pass(newargs); 275 newargs[asize] = "New110.java"; 276 pass(newargs); 277 newargs[asize] = "New111.java"; 278 fail(newargs); 279 } 280 281 protected void checksrc111(String... args) { 282 printargs("checksrc111", args); 283 int asize = args.length; 284 String[] newargs = new String[asize+1]; 285 System.arraycopy(args, 0, newargs,0 , asize); 286 newargs[asize] = "New17.java"; 287 pass(newargs); 288 newargs[asize] = "New18.java"; 289 pass(newargs); 290 newargs[asize] = "New110.java"; 291 pass(newargs); 292 newargs[asize] = "New111.java"; 293 pass(newargs); 294 newargs[asize] = "New114.java"; 295 fail(newargs); 296 } 297 298 protected void checksrc112(String... args) { 299 printargs("checksrc112", args); 300 checksrc111(args); 301 } 302 303 protected void checksrc113(String... args) { 304 printargs("checksrc113", args); 305 checksrc111(args); 306 } 307 308 protected void checksrc114(String... args) { 309 printargs("checksrc114", args); 310 int asize = args.length; 311 String[] newargs = new String[asize+1]; 312 System.arraycopy(args, 0, newargs,0 , asize); 313 newargs[asize] = "New17.java"; 314 pass(newargs); 315 newargs[asize] = "New18.java"; 316 pass(newargs); 317 newargs[asize] = "New110.java"; 318 pass(newargs); 319 newargs[asize] = "New111.java"; 320 pass(newargs); 321 newargs[asize] = "New114.java"; 322 pass(newargs); 323 } 324 325 protected void checksrc115(String... args) { 326 printargs("checksrc115", args); 327 checksrc114(args); 328 } 329 330 protected void pass(String... args) { 331 printargs("pass", args); 332 333 List<String> jcargs = new ArrayList<String>(); 334 jcargs.add("-Xlint:-options"); 335 336 // add in args conforming to List requrements of JavaCompiler 337 for (String onearg : args) { 338 String[] fields = onearg.split(" "); 339 for (String onefield : fields) { 340 jcargs.add(onefield); 341 } 342 } 343 344 // empty list is error 345 if (jcargs.isEmpty()) { 346 System.err.println("error: test error in pass() - No arguments"); 347 System.err.println("\t arguments:\t" + jcargs); 422 } 423 } catch (IOException e) { 424 throw new Error(e); 425 } 426 } 427 428 protected void writeSourceFile(String fileName, String body) throws IOException{ 429 try (Writer fw = new FileWriter(fileName)) { 430 fw.write(body); 431 } 432 } 433 434 protected void genSourceFiles() throws IOException{ 435 /* Create a file that executes with all supported versions. */ 436 writeSourceFile("Base.java","public class Base { }\n"); 437 438 /* 439 * Create a file with a new feature in 1.7, not in 1.6 : "<>" 440 */ 441 writeSourceFile("New17.java", 442 """ 443 import java.util.List; 444 import java.util.ArrayList; 445 class New17 { List<String> s = new ArrayList<>(); } 446 """ 447 ); 448 449 /* 450 * Create a file with a new feature in 1.8, not in 1.7 : lambda 451 */ 452 writeSourceFile("New18.java", 453 """ 454 public class New18 { 455 void m() { 456 new Thread(() -> { }); 457 } 458 } 459 """ 460 ); 461 462 /* 463 * Create a file with a new feature in 1.10, not in 1.9 : var 464 */ 465 writeSourceFile("New110.java", 466 """ 467 public class New110 { 468 void m() { 469 var tmp = new Thread(() -> { }); 470 } 471 } 472 """ 473 ); 474 475 /* 476 * Create a file with a new feature in 11, not in 10 : var for lambda parameters 477 */ 478 writeSourceFile("New111.java", 479 """ 480 public class New111 { 481 static java.util.function.Function<String,String> f = (var x) -> x.substring(0); 482 void m(String name) { 483 var tmp = new Thread(() -> { }, f.apply(name)); 484 } 485 } 486 """ 487 ); 488 489 /* 490 * Create a file with a new feature in 14, not in 13 : switch expressions 491 */ 492 writeSourceFile("New114.java", 493 """ 494 public class New114 { 495 static { 496 int i = 5; 497 System.out.println( 498 switch(i) { 499 case 0 -> false; 500 default -> true; 501 } 502 ); 503 } 504 } 505 """ 506 ); 507 } 508 509 protected boolean checkClassFileVersion 510 (String filename,String classVersionNumber) { 511 ByteBuffer bb = ByteBuffer.allocate(1024); 512 try (FileChannel fc = new FileInputStream(filename).getChannel()) { 513 bb.clear(); 514 if (fc.read(bb) < 0) 515 throw new IOException("Could not read from file : " + filename); 516 bb.flip(); 517 int minor = bb.getShort(4); 518 int major = bb.getShort(6); 519 String fileVersion = major + "." + minor; 520 if (fileVersion.equals(classVersionNumber)) { 521 return true; 522 } else { 523 System.err.println("checkClassFileVersion : Failed"); 524 System.err.println("\tclassfile version mismatch"); 525 System.err.println("\texpected : " + classVersionNumber); |