BugĀ 541304 - Fork command in scripting module causes
NullPointerException
added check for debug target to omit fatal error
Change-Id: I1128a0e661265357714f9fafc63a2b01d90fe724
Signed-off-by: Hodorog Madalina <madalina.hodorog.dev@gmail.com>
diff --git a/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/ScriptingModule.java b/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/ScriptingModule.java
index a793d4e..113d20d 100644
--- a/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/ScriptingModule.java
+++ b/plugins/org.eclipse.ease.modules.platform/src/org/eclipse/ease/modules/platform/ScriptingModule.java
@@ -127,7 +127,7 @@
@ScriptParameter(defaultValue = ScriptParameter.NULL) String engineID) {
final ILaunch currentLaunch = getScriptEngine().getLaunch();
- final boolean useDebugger = currentLaunch.getDebugTarget() != null;
+ final boolean useDebugger = (currentLaunch != null) && (currentLaunch.getDebugTarget() != null);
IScriptService scriptService;
try {
diff --git a/tests/org.eclipse.ease.modules.platform.test/resources/test.js b/tests/org.eclipse.ease.modules.platform.test/resources/test.js
new file mode 100644
index 0000000..56bbe02
--- /dev/null
+++ b/tests/org.eclipse.ease.modules.platform.test/resources/test.js
@@ -0,0 +1,6 @@
+function main() {
+ print("testing fork command");
+ return "testing fork command";
+}
+
+main();
\ No newline at end of file
diff --git a/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/ScriptingModuleTest.java b/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/ScriptingModuleTest.java
index f923fbd..a9cabea 100644
--- a/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/ScriptingModuleTest.java
+++ b/tests/org.eclipse.ease.modules.platform.test/src/org/eclipse/ease/modules/platform/ScriptingModuleTest.java
@@ -12,33 +12,56 @@
package org.eclipse.ease.modules.platform;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import java.net.URL;
+
import org.eclipse.ease.IExecutionListener;
import org.eclipse.ease.IScriptEngine;
+import org.eclipse.ease.ScriptResult;
+import org.eclipse.ease.lang.javascript.rhino.RhinoScriptEngine;
+import org.eclipse.ease.service.EngineDescription;
+import org.eclipse.ease.service.IScriptService;
+import org.eclipse.ease.service.ScriptService;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
public class ScriptingModuleTest {
+ @Test(timeout = 2000)
+ public void forkWithoutDebugMode() throws Exception {
+ final IScriptService scriptService = ScriptService.getService();
+ final EngineDescription description = scriptService.getEngineByID(RhinoScriptEngine.ENGINE_ID);
+ final IScriptEngine engine = description.createEngine();
+
+ final ScriptingModule creatorModule = new ScriptingModule();
+ creatorModule.initialize(engine, null);
+ final URL location = new URL("platform:/plugin/org.eclipse.ease.modules.platform.test/resources/test.js");
+ final ScriptResult result = creatorModule.fork(location, "", RhinoScriptEngine.ENGINE_ID);
+ assertNotNull(result);
+ result.waitForResult();
+ assertEquals("testing fork command", result.getResult().toString());
+ }
+
@Test
public void storeTemporaryObject() {
- Object testObject = new Object();
+ final Object testObject = new Object();
// mocked script engine
- IScriptEngine mockEngine = mock(IScriptEngine.class);
+ final IScriptEngine mockEngine = mock(IScriptEngine.class);
// initialize module
- ScriptingModule module = new ScriptingModule();
+ final ScriptingModule module = new ScriptingModule();
module.initialize(mockEngine, null);
// set the object
try {
module.setSharedObject("temp", testObject, false, false);
- } catch (IllegalAccessException e) {
+ } catch (final IllegalAccessException e) {
fail(e.getMessage());
}
@@ -46,7 +69,7 @@
assertEquals(testObject, module.getSharedObject("temp"));
// capture execution listener
- ArgumentCaptor<IExecutionListener> argument = ArgumentCaptor.forClass(IExecutionListener.class);
+ final ArgumentCaptor<IExecutionListener> argument = ArgumentCaptor.forClass(IExecutionListener.class);
verify(mockEngine).addExecutionListener(argument.capture());
// terminate engine
@@ -58,13 +81,13 @@
@Test
public void storePermanentObject() {
- Object testObject = new Object();
+ final Object testObject = new Object();
// mocked script engine
- IScriptEngine mockEngine = mock(IScriptEngine.class);
+ final IScriptEngine mockEngine = mock(IScriptEngine.class);
// initialize module
- ScriptingModule module = new ScriptingModule();
+ final ScriptingModule module = new ScriptingModule();
module.initialize(mockEngine, null);
// set the object
@@ -73,7 +96,7 @@
// set another temp object to make sure the execution listener gets installed
module.setSharedObject("anotherTemp", testObject, false, false);
- } catch (IllegalAccessException e) {
+ } catch (final IllegalAccessException e) {
fail(e.getMessage());
}
@@ -81,7 +104,7 @@
assertEquals(testObject, module.getSharedObject("perm"));
// capture execution listener
- ArgumentCaptor<IExecutionListener> argument = ArgumentCaptor.forClass(IExecutionListener.class);
+ final ArgumentCaptor<IExecutionListener> argument = ArgumentCaptor.forClass(IExecutionListener.class);
verify(mockEngine).addExecutionListener(argument.capture());
// terminate engine
@@ -93,23 +116,23 @@
@Test(expected = IllegalAccessException.class)
public void overwriteForeignObject() throws IllegalAccessException {
- Object testObject = new Object();
+ final Object testObject = new Object();
// mocked script engine
- IScriptEngine creatorEngine = mock(IScriptEngine.class);
- IScriptEngine modifierEngine = mock(IScriptEngine.class);
+ final IScriptEngine creatorEngine = mock(IScriptEngine.class);
+ final IScriptEngine modifierEngine = mock(IScriptEngine.class);
// initialize modules
- ScriptingModule creatorModule = new ScriptingModule();
+ final ScriptingModule creatorModule = new ScriptingModule();
creatorModule.initialize(creatorEngine, null);
- ScriptingModule modifierModule = new ScriptingModule();
+ final ScriptingModule modifierModule = new ScriptingModule();
modifierModule.initialize(modifierEngine, null);
// set the object
try {
creatorModule.setSharedObject("foreign", testObject, false, false);
- } catch (IllegalAccessException e) {
+ } catch (final IllegalAccessException e) {
fail(e.getMessage());
}
@@ -118,17 +141,17 @@
@Test
public void overwriteForeignUnlockedObject() throws IllegalAccessException {
- Object testObject = new Object();
+ final Object testObject = new Object();
// mocked script engine
- IScriptEngine creatorEngine = mock(IScriptEngine.class);
- IScriptEngine modifierEngine = mock(IScriptEngine.class);
+ final IScriptEngine creatorEngine = mock(IScriptEngine.class);
+ final IScriptEngine modifierEngine = mock(IScriptEngine.class);
// initialize modules
- ScriptingModule creatorModule = new ScriptingModule();
+ final ScriptingModule creatorModule = new ScriptingModule();
creatorModule.initialize(creatorEngine, null);
- ScriptingModule modifierModule = new ScriptingModule();
+ final ScriptingModule modifierModule = new ScriptingModule();
modifierModule.initialize(modifierEngine, null);
// set the object