Bug 562079 - Add unit tests for RemoteEvaluations
Change-Id: I6237533602fb1f1b3f74e06bada54c2a9f172673
Signed-off-by: gayanper <gayanper@gmail.com>
diff --git a/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java b/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java
new file mode 100644
index 0000000..fe4c53c
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java
@@ -0,0 +1,23 @@
+import java.util.Arrays;
+import java.util.function.Predicate;
+
+public class RemoteEvaluator {
+ public static final Predicate<String> P_EMPTY = s -> s.isEmpty();
+
+ public static void main(String[] args) {
+ (new RemoteEvaluator()).exec();
+ }
+
+ public void exec() {
+ (new Inner()).run();
+ }
+
+ class Inner {
+ private final Predicate<String> Q_EMPTY = s -> s.isEmpty();
+
+ public void run() {
+ String y = "111";
+ Arrays.asList("111", "222", "aaa").stream().filter(a -> a.equals(y)).count();
+ }
+ }
+}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
index 537c152..45a356c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
@@ -475,6 +475,7 @@
cfgs.add(createLaunchConfiguration(jp, "Bug560392"));
cfgs.add(createLaunchConfiguration(jp, "Bug561715"));
cfgs.add(createLaunchConfiguration(jp, "Bug562056"));
+ cfgs.add(createLaunchConfiguration(jp, "RemoteEvaluator"));
loaded18 = true;
waitForBuild();
}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java
new file mode 100644
index 0000000..4ea3845
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Gayan Perera and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Gayan Perera - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.debug.tests.eval;
+
+import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.tests.AbstractDebugTest;
+
+public class RemoteEvaluatorTests extends AbstractDebugTest {
+ private IJavaThread javaThread;
+
+ public RemoteEvaluatorTests(String name) {
+ super(name);
+ }
+
+ public void testEvaluate_InInnerScope_FieldInOuterScope() throws Exception {
+ debugWithBreakpoint("RemoteEvaluator", 20);
+
+ String code = "java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> RemoteEvaluator.P_EMPTY.test(v)).count()";
+ IValue value = evaluate(code);
+
+ assertNotNull("result is null", value);
+ assertEquals("count is not 0", "0", value.getValueString());
+ }
+
+
+ public void testEvaluate_InOuterScope_FieldInSameScope() throws Exception {
+ debugWithBreakpoint("RemoteEvaluator", 12);
+ IValue value = evaluate("java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> RemoteEvaluator.P_EMPTY.test(v)).count()");
+
+ assertNotNull("result is null", value);
+ assertEquals("count is not 0", "0", value.getValueString());
+ }
+
+ @Override
+ protected IJavaProject getProjectContext() {
+ return get18Project();
+ }
+
+ private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
+ createLineBreakpoint(lineNumber, testClass);
+ javaThread = launchToBreakpoint(testClass);
+ assertNotNull("The program did not suspend", javaThread);
+ }
+
+ private IValue evaluate(String snippet) throws Exception {
+ return doEval(javaThread, snippet);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ try {
+ terminateAndRemove(javaThread);
+ } finally {
+ super.tearDown();
+ removeAllBreakpoints();
+ }
+ }
+}