1616import static org .junit .Assert .assertNotEquals ;
1717import static org .junit .Assert .assertTrue ;
1818
19- import java .io .File ;
20- import java .util .Collections ;
2119import java .util .HashMap ;
2220import java .util .List ;
2321
2725import org .eclipse .jdt .launching .IVMInstall ;
2826import org .eclipse .jdt .launching .JavaRuntime ;
2927import org .eclipse .jdt .launching .environments .IExecutionEnvironment ;
30- import org .eclipse .jdt .ls .core .internal .JDTUtils ;
3128import org .eclipse .jdt .ls .core .internal .JVMConfigurator ;
3229import org .eclipse .jdt .ls .core .internal .JobHelpers ;
3330import org .eclipse .jdt .ls .core .internal .ResourceUtils ;
34- import org .eclipse .jdt .ls .core .internal .RuntimeEnvironment ;
3531import org .eclipse .jdt .ls .core .internal .TestVMType ;
3632import org .eclipse .jdt .ls .core .internal .managers .AbstractProjectsManagerBasedTest ;
37- import org .eclipse .jdt .ls .core .internal .preferences .Preferences ;
3833import org .hamcrest .core .IsNull ;
3934import org .junit .After ;
4035import org .junit .Assume ;
4338public class JavaFXTest extends AbstractProjectsManagerBasedTest {
4439
4540 private static final String VERSION_1_8 = "1.8" ;
46- private static final String JAVA8FX_HOME = "java8fx.home" ;
4741 private static final String JAVA_SE_8 = "JavaSE-1.8" ;
4842 private static final String JAVA_SE_17 = "JavaSE-17" ;
4943
@@ -53,29 +47,37 @@ public class JavaFXTest extends AbstractProjectsManagerBasedTest {
5347 */
5448 @ Test
5549 public void testJavaFX () throws Exception {
56- String jdkFXHome = System .getProperty (JAVA8FX_HOME );
57- Assume .assumeThat ("No java8fx.home path set, skipping test" , jdkFXHome , IsNull .notNullValue ());
58-
5950 IVMInstall defaultJRE = JavaRuntime .getDefaultVMInstall ();
60-
6151 String name = "java8fx" ;
6252 IProject project = null ;
6353 try {
64- // Create JavaFX runtime
65- Preferences prefs = createJavaFXRuntimePrefs (jdkFXHome );
66- JVMConfigurator .configureJVMs (prefs );
67- JobHelpers .waitForJobsToComplete ();
68-
54+ IExecutionEnvironment java8env = JVMConfigurator .getExecutionEnvironment (JAVA_SE_8 );
55+ IVMInstall java8vm = null ;
56+ IVMInstall java8DefaultVm = null ;
57+ if (java8env != null ) {
58+ java8DefaultVm = java8env .getDefaultVM ();
59+ IVMInstall [] compatibleVms = java8env .getCompatibleVMs ();
60+ for (IVMInstall vm : compatibleVms ) {
61+ if (vm .getVMInstallType ().getName ().startsWith ("TestVMInstall-" )) {
62+ continue ;
63+ }
64+ if (java8env .isStrictlyCompatible (vm )) {
65+ java8vm = vm ;
66+ java8env .setDefaultVM (java8vm );
67+ break ;
68+ }
69+ }
70+ }
71+ Assume .assumeThat ("JavaSE-1.8 VM is not found, skipping test" , java8vm , IsNull .notNullValue ());
6972 // Import JavaFX project and checks it compiles without errors
73+ JavaRuntime .setDefaultVMInstall (java8vm , monitor , true );
7074 importProjects ("eclipse/" + name );
7175 project = getProject (name );
7276 assertNoErrors (project );
73-
74- // Delete JavaFX runtime, project should fail to compile
75- IVMInstall vm = JVMConfigurator .findVM (new File (jdkFXHome ), null );
76- vm .getVMInstallType ().disposeVMInstall (vm .getId ());
77- TestVMType .setTestJREAsDefault (VERSION_1_8 );
78- JDTUtils .setCompatibleVMs (VERSION_1_8 );
77+ JavaRuntime .setDefaultVMInstall (defaultJRE , monitor , true );
78+ if (java8env != null ) {
79+ java8env .setDefaultVM (java8DefaultVm );
80+ }
7981 JobHelpers .waitForJobsToComplete ();
8082 List <IMarker > errors = ResourceUtils .getErrorMarkers (project );
8183 assertNotEquals (0 , errors .size ());
@@ -94,15 +96,7 @@ public void testJavaFX() throws Exception {
9496 @ After
9597 public void cleanUp () throws Exception {
9698 super .cleanUp ();
97- String jdkFXHome = System .getProperty (JAVA8FX_HOME );
98- if (jdkFXHome != null && !jdkFXHome .isBlank ()) {
99- IVMInstall vm = JVMConfigurator .findVM (new File (jdkFXHome ), null );
100- if (vm != null ) {
101- vm .getVMInstallType ().disposeVMInstall (vm .getId ());
102- }
103- }
10499 TestVMType .setTestJREAsDefault ("17" );
105- JDTUtils .setCompatibleVMs (VERSION_1_8 );
106100 // Copied from org.eclipse.jdt.core.tests.model.ClasspathInitializerTests.tearDown()
107101 // Cleanup caches
108102 JavaModelManager manager = JavaModelManager .getJavaModelManager ();
@@ -111,15 +105,4 @@ public void cleanUp() throws Exception {
111105 JobHelpers .waitForJobsToComplete ();
112106 }
113107
114- private Preferences createJavaFXRuntimePrefs (String path ) {
115- Preferences prefs = new Preferences ();
116- RuntimeEnvironment runtime = new RuntimeEnvironment ();
117- runtime .setPath (path );
118- runtime .setName (JAVA_SE_8 );
119- runtime .setDefault (true );
120- assertTrue (runtime .isValid ());
121- prefs .setRuntimes (Collections .singleton (runtime ));
122- return prefs ;
123- }
124-
125108}
0 commit comments