2929import java .io .PrintStream ;
3030import java .nio .charset .StandardCharsets ;
3131import java .nio .file .Files ;
32+ import java .nio .file .Path ;
3233import java .util .regex .Matcher ;
3334import java .util .regex .Pattern ;
3435
3839import org .apache .bcel .classfile .Utility ;
3940import org .apache .bcel .generic .BinaryOpCreator ;
4041import org .apache .commons .lang3 .SystemProperties ;
42+ import org .apache .commons .lang3 .SystemUtils ;
4143import org .junit .jupiter .api .Test ;
4244import org .junit .jupiter .params .ParameterizedTest ;
4345import org .junit .jupiter .params .provider .ValueSource ;
@@ -55,7 +57,7 @@ private String canonHashRef(String input) {
5557 }
5658
5759 private String exec (final File workDir , final String ... args ) throws Exception {
58- // System.err .println(java.util.Arrays.toString(args));
60+ // System.out .println("ProcessBuilder: " + java.util.Arrays.toString(args));
5961 final ProcessBuilder pb = new ProcessBuilder (args );
6062 pb .directory (workDir );
6163 pb .redirectErrorStream (true );
@@ -74,6 +76,22 @@ private String exec(final File workDir, final String... args) throws Exception {
7476 }
7577 }
7678
79+ private String getJava () {
80+ return getJavaBin ().resolve ("java" ).toAbsolutePath ().toString ();
81+ }
82+
83+ private Path getJavaBin () {
84+ return SystemUtils .getJavaHomePath ().resolve ("bin" );
85+ }
86+
87+ private String getJavaC () {
88+ return getJavaBin ().resolve ("javac" ).toAbsolutePath ().toString ();
89+ }
90+
91+ private String getJavaP () {
92+ return getJavaBin ().resolve ("javap" ).toAbsolutePath ().toString ();
93+ }
94+
7795 @ ParameterizedTest
7896 @ ValueSource (strings = {
7997 // @formatter:off
@@ -123,10 +141,10 @@ void testBinaryOp(final String exp) throws Exception {
123141 final String expected = matcher .group (4 );
124142 final String javaAgent = getJavaAgent ();
125143 if (javaAgent == null ) {
126- assertEquals (expected + EOL , exec (workDir , "java" , "-cp" , CLASSPATH , "org.apache.bcel.generic.BinaryOp" , op , a , b ));
144+ assertEquals (expected + EOL , exec (workDir , getJava () , "-cp" , CLASSPATH , "org.apache.bcel.generic.BinaryOp" , op , a , b ));
127145 } else {
128146 final String runtimeExecJavaAgent = javaAgent .replace ("jacoco.exec" , "jacoco_org.apache.bcel.generic.BinaryOp.exec" );
129- assertEquals (expected + EOL , exec (workDir , "java" , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.generic.BinaryOp" , op , a , b ));
147+ assertEquals (expected + EOL , exec (workDir , getJava () , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.generic.BinaryOp" , op , a , b ));
130148 }
131149 }
132150
@@ -137,27 +155,28 @@ private void testClassOnPath(final String javaClassFileName) throws Exception {
137155 assertNotNull (javaClass );
138156
139157 // Get javap of the input class
140- final String initial = exec (null , "javap" , "-cp" , CLASSPATH , "-p" , "-c" , javaClass .getClassName ());
158+ // System.out.println(exec(null, getJavaP(), "-version"));
159+ final String initial = exec (null , getJavaP (), "-cp" , CLASSPATH , "-p" , "-c" , javaClass .getClassName ());
141160 final String outFileName = javaClass .getSourceFilePath ().replace (".java" , "Creator.java" );
142161 final File outfile = new File (workDir , outFileName );
143162 Files .createDirectories (outfile .getParentFile ().toPath ());
144163 final String javaAgent = getJavaAgent ();
145164 String creatorSourceContents = null ;
146165 if (javaAgent == null ) {
147- creatorSourceContents = exec (workDir , "java" , "-cp" , CLASSPATH , "org.apache.bcel.util.BCELifier" , javaClass .getClassName ());
166+ creatorSourceContents = exec (workDir , getJava () , "-cp" , CLASSPATH , "org.apache.bcel.util.BCELifier" , javaClass .getClassName ());
148167 } else {
149168 final String runtimeExecJavaAgent = javaAgent .replace ("jacoco.exec" , "jacoco_" + infile .getName () + ".exec" );
150- creatorSourceContents = exec (workDir , "java" , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.util.BCELifier" , javaClass .getClassName ());
169+ creatorSourceContents = exec (workDir , getJava () , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.util.BCELifier" , javaClass .getClassName ());
151170 }
152171 Files .write (outfile .toPath (), creatorSourceContents .getBytes (StandardCharsets .UTF_8 ));
153- assertEquals ("" , exec (workDir , "javac" , "-cp" , CLASSPATH , outFileName .toString ()));
172+ assertEquals ("" , exec (workDir , getJavaC () , "-cp" , CLASSPATH , outFileName .toString ()));
154173 if (javaAgent == null ) {
155- assertEquals ("" , exec (workDir , "java" , "-cp" , CLASSPATH , javaClass .getClassName () + "Creator" ));
174+ assertEquals ("" , exec (workDir , getJava () , "-cp" , CLASSPATH , javaClass .getClassName () + "Creator" ));
156175 } else {
157176 final String runtimeExecJavaAgent = javaAgent .replace ("jacoco.exec" , "jacoco_" + Utility .pathToPackage (outFileName ) + ".exec" );
158- assertEquals ("" , exec (workDir , "java" , runtimeExecJavaAgent , "-cp" , CLASSPATH , javaClass .getClassName () + "Creator" ));
177+ assertEquals ("" , exec (workDir , getJava () , runtimeExecJavaAgent , "-cp" , CLASSPATH , javaClass .getClassName () + "Creator" ));
159178 }
160- final String output = exec (workDir , "javap" , "-p" , "-c" , infile .getName ());
179+ final String output = exec (workDir , getJavaP () , "-p" , "-c" , infile .getName ());
161180 assertEquals (canonHashRef (initial ), canonHashRef (output ));
162181 }
163182
@@ -167,10 +186,10 @@ void testHelloWorld() throws Exception {
167186 final File workDir = new File ("target" );
168187 final String javaAgent = getJavaAgent ();
169188 if (javaAgent == null ) {
170- assertEquals ("Hello World!" + EOL , exec (workDir , "java" , "-cp" , CLASSPATH , "org.apache.bcel.HelloWorld" ));
189+ assertEquals ("Hello World!" + EOL , exec (workDir , getJava () , "-cp" , CLASSPATH , "org.apache.bcel.HelloWorld" ));
171190 } else {
172191 final String runtimeExecJavaAgent = javaAgent .replace ("jacoco.exec" , "jacoco_org.apache.bcel.HelloWorld.exec" );
173- assertEquals ("Hello World!" + EOL , exec (workDir , "java" , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.HelloWorld" ));
192+ assertEquals ("Hello World!" + EOL , exec (workDir , getJava () , runtimeExecJavaAgent , "-cp" , CLASSPATH , "org.apache.bcel.HelloWorld" ));
174193 }
175194 }
176195
@@ -216,7 +235,7 @@ void testMainNoArg() throws Exception {
216235 void testStackMap (final String className ) throws Exception {
217236 testJavapCompare (className );
218237 final File workDir = new File ("target" );
219- assertEquals ("Hello World" + EOL , exec (workDir , "java" , "-cp" , CLASSPATH , className , "Hello" ));
238+ assertEquals ("Hello World" + EOL , exec (workDir , getJava () , "-cp" , CLASSPATH , className , "Hello" ));
220239 }
221240
222241 @ Test
0 commit comments