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