Simple test case with 2 files: Bar.java and Foo.java
If I run "jtreg Bar.java" from scratch, it compiles Foo.java, but then if I later modify Foo.java, it uses the existing Foo.class instead of noticing that the source file Foo.java has changed and recompiling. i.e. I made Foo.java uncompilable, but subsequent test runs of "jtreg Bar.java" pass.
Updates to Bar.java will be noticed, just not Foo.java.
---output---
% cat Bar.java
/*
* @test
* @key closed-security
* @bug 1234567
* @run main/othervm Bar
* @summary Some summary
*/
public class Bar {
public static void main(String[] args) throws Exception {
Foo foo = new Foo();
}
}
% cat Foo.java
class Foo {
byte i;
Foo() {
i = (byte) 68;
}
}
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...
TEST RESULT: Passed. Execution successful
--------------------------------------------------
Test results: passed: 1
Report written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTreport/html/report.html
Results written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTwork
% echo "blah blah" >> Foo.java
% ls -al Foo.java JTwork/classes/0/tmp.min/Bar.d/Foo.class
-rw-r--r-- 1 me me 78 Sep 2 08:08 Foo.java
-rw-r--r-- 1 me me 274 Sep 2 08:07 JTwork/classes/0/tmp.min/Bar.d/Foo.class
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...
TEST RESULT: Passed. Execution successful
--------------------------------------------------
Test results: passed: 1
Report written to ...
% ls -al Foo.java JTwork/classes/0/tmp.min/Bar.d/Foo.class
-rw-r--r-- 1 me me 78 Sep 2 08:08 Foo.java
-rw-r--r-- 1 me me 274 Sep 2 08:07 JTwork/classes/0/tmp.min/Bar.d/Foo.class
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g -version
jtreg 6.1+1-19
Installed in /java/jtreg/6.1+1/lib/jtreg.jar
Running on platform version 17.0.4 from /java/bootdirs/jdk-17.0.4.
Built with Java(TM) 2 SDK, Version 1.8.0_261-b33 on August 11, 2021.
Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
Use is subject to license terms.
JT Harness, version 6.0 ea b14 (November 04, 2020)
Java Assembler Tools, version 7.0 ea b09 (June 04, 2020)
TestNG (testng.jar): version 7.3.0
TestNG (jcommander.jar): version unknown
TestNG (guice.jar): version 4.2.3
JUnit (junit.jar): version 4.13.2
JUnit (hamcrest.jar): version 2.2
% rm -rf JT*
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...deleted...
/java/ws/jdk-closed/closed/test/jdk/tmp.min/Foo.java:8: error: class, interface, enum, or record expected
blah blah
^
1 error
TEST RESULT: Failed. Compilation failed: Compilation failed
--------------------------------------------------
Test results: failed: 1
Report written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTreport/html/report.html
Results written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTwork
Error: Some tests failed or other problems occurred.
Two workarounds:
1. to either remove the JTwork directory, or
2. touch the @run file which forces jtreg to rerun the javac, and the file/dependents to be recompiled.
If I run "jtreg Bar.java" from scratch, it compiles Foo.java, but then if I later modify Foo.java, it uses the existing Foo.class instead of noticing that the source file Foo.java has changed and recompiling. i.e. I made Foo.java uncompilable, but subsequent test runs of "jtreg Bar.java" pass.
Updates to Bar.java will be noticed, just not Foo.java.
---output---
% cat Bar.java
/*
* @test
* @key closed-security
* @bug 1234567
* @run main/othervm Bar
* @summary Some summary
*/
public class Bar {
public static void main(String[] args) throws Exception {
Foo foo = new Foo();
}
}
% cat Foo.java
class Foo {
byte i;
Foo() {
i = (byte) 68;
}
}
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...
TEST RESULT: Passed. Execution successful
--------------------------------------------------
Test results: passed: 1
Report written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTreport/html/report.html
Results written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTwork
% echo "blah blah" >> Foo.java
% ls -al Foo.java JTwork/classes/0/tmp.min/Bar.d/Foo.class
-rw-r--r-- 1 me me 78 Sep 2 08:08 Foo.java
-rw-r--r-- 1 me me 274 Sep 2 08:07 JTwork/classes/0/tmp.min/Bar.d/Foo.class
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...
TEST RESULT: Passed. Execution successful
--------------------------------------------------
Test results: passed: 1
Report written to ...
% ls -al Foo.java JTwork/classes/0/tmp.min/Bar.d/Foo.class
-rw-r--r-- 1 me me 78 Sep 2 08:08 Foo.java
-rw-r--r-- 1 me me 274 Sep 2 08:07 JTwork/classes/0/tmp.min/Bar.d/Foo.class
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g -version
jtreg 6.1+1-19
Installed in /java/jtreg/6.1+1/lib/jtreg.jar
Running on platform version 17.0.4 from /java/bootdirs/jdk-17.0.4.
Built with Java(TM) 2 SDK, Version 1.8.0_261-b33 on August 11, 2021.
Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
Use is subject to license terms.
JT Harness, version 6.0 ea b14 (November 04, 2020)
Java Assembler Tools, version 7.0 ea b09 (June 04, 2020)
TestNG (testng.jar): version 7.3.0
TestNG (jcommander.jar): version unknown
TestNG (guice.jar): version 4.2.3
JUnit (junit.jar): version 4.13.2
JUnit (hamcrest.jar): version 2.2
% rm -rf JT*
% /java/jtreg/latest/bin/jtreg -a -verbose:all -agentvm -conc:auto -testjdk:/java/ws/jdk-closed/build/linux-x64/jdk -javacoption:-g Bar.java
...deleted...
/java/ws/jdk-closed/closed/test/jdk/tmp.min/Foo.java:8: error: class, interface, enum, or record expected
blah blah
^
1 error
TEST RESULT: Failed. Compilation failed: Compilation failed
--------------------------------------------------
Test results: failed: 1
Report written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTreport/html/report.html
Results written to /java/ws/jdk-closed/closed/test/jdk/tmp.min/JTwork
Error: Some tests failed or other problems occurred.
Two workarounds:
1. to either remove the JTwork directory, or
2. touch the @run file which forces jtreg to rerun the javac, and the file/dependents to be recompiled.