Skip to content

Commit f7e9a68

Browse files
committed
Log VM install changes during JDT debug tests, set default VM for execution environments
See: #782
1 parent 9ba1b48 commit f7e9a68

File tree

2 files changed

+69
-2
lines changed

2 files changed

+69
-2
lines changed

org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,20 @@
128128
import org.eclipse.jdt.debug.tests.core.LiteralTests17;
129129
import org.eclipse.jdt.debug.tests.refactoring.MemberParser;
130130
import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
131+
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
132+
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
131133
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
132134
import org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine;
133135
import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
134136
import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
135137
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
136138
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
137139
import org.eclipse.jdt.launching.IVMInstall;
140+
import org.eclipse.jdt.launching.IVMInstallChangedListener;
138141
import org.eclipse.jdt.launching.JavaRuntime;
142+
import org.eclipse.jdt.launching.PropertyChangeEvent;
139143
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
144+
import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
140145
import org.eclipse.jface.dialogs.ErrorDialog;
141146
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
142147
import org.eclipse.jface.preference.IPreferenceStore;
@@ -170,6 +175,8 @@
170175
@SuppressWarnings("deprecation")
171176
public abstract class AbstractDebugTest extends TestCase implements IEvaluationListener {
172177

178+
private static boolean setupFirstTest = false;
179+
173180
public static final String MULTI_OUTPUT_PROJECT_NAME = "MultiOutput";
174181
public static final String BOUND_EE_PROJECT_NAME = "BoundEE";
175182
public static final String ONE_FOUR_PROJECT_NAME = "DebugTests";
@@ -264,6 +271,12 @@ public AbstractDebugTest(String name) {
264271

265272
@Override
266273
protected void setUp() throws Exception {
274+
if (!setupFirstTest) {
275+
TestUtil.logInfo("SETTING UP TESTS");
276+
JavaRuntime.addVMInstallChangedListener(new LogVMInstallChanges());
277+
setExecutionEnvironments();
278+
setupFirstTest = true;
279+
}
267280
TestUtil.logInfo("SETUP " + getClass().getSimpleName() + "." + getName());
268281
super.setUp();
269282
setPreferences();
@@ -3090,4 +3103,58 @@ private static String toString(Collection<IMarker> markers) {
30903103
public interface StackFrameSupplier {
30913104
IJavaStackFrame get() throws Exception;
30923105
}
3106+
3107+
private static void setExecutionEnvironments() {
3108+
IVMInstall vm = JavaRuntime.getDefaultVMInstall();
3109+
TestUtil.logInfo("Default VM is \"" + vm.getName() + "\"");
3110+
String javaSEPrefix = "JavaSE-";
3111+
IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
3112+
IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
3113+
List<String> versions = new ArrayList<>();
3114+
for (IExecutionEnvironment environment : environments) {
3115+
String id = environment.getId();
3116+
if (id.startsWith(javaSEPrefix)) {
3117+
String version = id.substring(javaSEPrefix.length());
3118+
long jdkLevel = CompilerOptions.versionToJdkLevel(version, false);
3119+
if (jdkLevel != 0 && JavaRuntime.compareJavaVersions(vm, version) >= 0) {
3120+
environment.setDefaultVM(vm);
3121+
versions.add(environment.getId());
3122+
}
3123+
}
3124+
}
3125+
if (!versions.isEmpty()) {
3126+
TestUtil.logInfo("Set VM \"" + vm.getName() + "\" for execution environments: " + versions);
3127+
}
3128+
}
3129+
3130+
private static void logVMChange(String message, IVMInstall vm) {
3131+
IStatus status = new Status(IStatus.INFO, JDIDebugPlugin.getUniqueIdentifier(),
3132+
message + " " + vm.getName() + ", location: " + vm.getInstallLocation(),
3133+
new RuntimeException("strack trace info"));
3134+
JDIDebugPlugin.log(status);
3135+
}
3136+
3137+
private static class LogVMInstallChanges implements IVMInstallChangedListener {
3138+
3139+
@Override
3140+
public void vmRemoved(IVMInstall vm) {
3141+
logVMChange("VM removed", vm);
3142+
}
3143+
3144+
@Override
3145+
public void vmChanged(PropertyChangeEvent event) {
3146+
}
3147+
3148+
@Override
3149+
public void vmAdded(IVMInstall vm) {
3150+
logVMChange("VM added", vm);
3151+
3152+
}
3153+
3154+
@Override
3155+
public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
3156+
logVMChange("Default VM changed", current);
3157+
}
3158+
3159+
}
30933160
}

org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ public void testLimitModules1() throws Exception {
225225
}
226226

227227
private void checkVMInstall(IJavaProject javaProject) throws CoreException {
228+
IVMInstall defaultVm = JavaRuntime.getDefaultVMInstall();
228229
IVMInstall vm = JavaRuntime.getVMInstall(javaProject);
229-
assertTrue("Expected at least Java 21 for project JVM but got: " + vm.getName() + ", with location: "
230-
+ vm.getInstallLocation(), JavaRuntime.compareJavaVersions(vm, JavaCore.VERSION_21) >= 0);
230+
assertEquals("Expected default VM but got: " + vm.getInstallLocation(), defaultVm.getName(), vm.getName());
231231
}
232232
}

0 commit comments

Comments
 (0)