diff --git a/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java b/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java index a5a6155..a4ab95c 100755 --- a/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java +++ b/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java @@ -9,6 +9,7 @@ import org.junit.Before; import org.junit.runner.Description; import org.junit.runner.Runner; import org.junit.runner.notification.RunNotifier; +import org.mozilla.javascript.ContextFactory; import org.mozilla.javascript.NativeArray; import org.mozilla.javascript.tools.debugger.Main; @@ -35,7 +36,7 @@ public class JasmineTestRunner extends Runner { Main debugger = null; if (this.suiteAnnotation.debug()) { - debugger = this.rhinoContext.createDebugger(); + debugger = createDebugger(); } this.rhinoContext = setUpRhinoScope(); @@ -62,6 +63,23 @@ public class JasmineTestRunner extends Runner { context.evalJS("jasmine.getEnv().addReporter(new jasmine.DelegatorJUnitReporter());"); } + private Main createDebugger() { + Main debugger = new Main("JS Debugger"); + + debugger.setExitAction(new Runnable() { + public void run() { + System.exit(0); + } + }); + + debugger.attachTo(ContextFactory.getGlobal()); + debugger.pack(); + debugger.setSize(600, 460); + debugger.setVisible(true); + + return debugger; + } + private JasmineSuite getJasmineSuiteAnnotationFromTestClass() { JasmineSuite suiteAnnotation = testClass.getAnnotation(JasmineSuite.class); if (suiteAnnotation == null) { diff --git a/src/main/java/be/klak/rhino/RhinoContext.java b/src/main/java/be/klak/rhino/RhinoContext.java index d373b11..62fd850 100755 --- a/src/main/java/be/klak/rhino/RhinoContext.java +++ b/src/main/java/be/klak/rhino/RhinoContext.java @@ -5,150 +5,132 @@ import org.mozilla.javascript.ContextFactory; import org.mozilla.javascript.Function; import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.ScriptableObject; -import org.mozilla.javascript.tools.debugger.Main; import org.mozilla.javascript.tools.shell.Global; public class RhinoContext { - private Context jsContext; - private Scriptable jsScope; + private Context jsContext; + private Scriptable jsScope; - public RhinoContext() { - this.jsContext = createJavascriptContext(); - this.jsScope = createJavascriptScopeForContext(this.jsContext); - } + public RhinoContext() { + this.jsContext = createJavascriptContext(); + this.jsScope = createJavascriptScopeForContext(this.jsContext); + } - public RhinoContext(Scriptable sharedScope) { - this.jsContext = createJavascriptContext(); - Scriptable newScope = this.jsContext.newObject(sharedScope); - newScope.setPrototype(sharedScope); - newScope.setParentScope(null); + public RhinoContext(Scriptable sharedScope) { + this.jsContext = createJavascriptContext(); + Scriptable newScope = this.jsContext.newObject(sharedScope); + newScope.setPrototype(sharedScope); + newScope.setParentScope(null); - this.jsScope = newScope; - } + this.jsScope = newScope; + } - private RhinoContext createNewRhinoContextBasedOnPrevious() { - return new RhinoContext(this.jsScope); - } + private RhinoContext createNewRhinoContextBasedOnPrevious() { + return new RhinoContext(this.jsScope); + } - public void runAsync(final RhinoRunnable runnable) { - new Thread(new Runnable() { + public void runAsync(final RhinoRunnable runnable) { + new Thread(new Runnable() { - @Override - public void run() { - RhinoContext newRhinoContextBasedOnPrevious = createNewRhinoContextBasedOnPrevious(); - try { - runnable.run(newRhinoContextBasedOnPrevious); - } finally { - newRhinoContextBasedOnPrevious.exit(); - } - } - }).start(); - } + @Override + public void run() { + RhinoContext newRhinoContextBasedOnPrevious = createNewRhinoContextBasedOnPrevious(); + try { + runnable.run(newRhinoContextBasedOnPrevious); + } finally { + newRhinoContextBasedOnPrevious.exit(); + } + } + }).start(); + } - public Object evalJS(String js) { - return this.jsContext.evaluateString(this.jsScope, js, "script", 1, null); - } + public Object evalJS(String js) { + return this.jsContext.evaluateString(this.jsScope, js, "script", 1, null); + } - @SuppressWarnings("unchecked") - public T createClassInJS(Class classToExport) { - exportClass(classToExport); - T newObj = (T) jsContext.newObject(jsScope, classToExport.getSimpleName()); - return newObj; - } + @SuppressWarnings("unchecked") + public T createClassInJS(Class classToExport) { + exportClass(classToExport); + T newObj = (T) jsContext.newObject(jsScope, classToExport.getSimpleName()); + return newObj; + } - public void setProperty(String objectToReceiveProperty, String property, Object value) { - Object obj = evalJS(objectToReceiveProperty); - if (obj == null || !(obj instanceof ScriptableObject)) { - throw new IllegalStateException("object to receive property is no ScriptableObject but a " - + (obj == null ? "" : obj.getClass().getSimpleName())); - } + public void setProperty(String objectToReceiveProperty, String property, Object value) { + Object obj = evalJS(objectToReceiveProperty); + if (obj == null || !(obj instanceof ScriptableObject)) { + throw new IllegalStateException("object to receive property is no ScriptableObject but a " + + (obj == null ? "" : obj.getClass().getSimpleName())); + } - ScriptableObject objectToReceive = (ScriptableObject) obj; - objectToReceive.put(property, objectToReceive, value); - } + ScriptableObject objectToReceive = (ScriptableObject) obj; + objectToReceive.put(property, objectToReceive, value); + } - private void exportClass(Class classToExport) { - try { - ScriptableObject.defineClass(this.jsScope, classToExport); - } catch (Exception e) { - throw new RuntimeException(e); - } - } + private void exportClass(Class classToExport) { + try { + ScriptableObject.defineClass(this.jsScope, classToExport); + } catch (Exception e) { + throw new RuntimeException(e); + } + } - public void load(String path, String... jsFiles) { - for (String jsFile : jsFiles) { - load(path + jsFile); - } - } + public void load(String path, String... jsFiles) { + for (String jsFile : jsFiles) { + load(path + jsFile); + } + } - public void load(String fileName) { - evalJS("load('" + fileName + "')"); - // Main.processFile(this.jsContext, this.jsScope, fileName); - } + public void load(String fileName) { + evalJS("load('" + fileName + "')"); + // Main.processFile(this.jsContext, this.jsScope, fileName); + } - public Object executeFunction(ScriptableObject object, String fnName, Object[] arguments) { - Object fnPointer = object.get(fnName, object); - if (fnPointer == null || !(fnPointer instanceof Function)) { - fnPointer = object.getPrototype().get(fnName, object); - } + public Object executeFunction(ScriptableObject object, String fnName, Object[] arguments) { + Object fnPointer = object.get(fnName, object); + if (fnPointer == null || !(fnPointer instanceof Function)) { + fnPointer = object.getPrototype().get(fnName, object); + } - return ((Function) fnPointer).call(jsContext, jsScope, object, arguments); - } + return ((Function) fnPointer).call(jsContext, jsScope, object, arguments); + } - public Object executeFunction(ScriptableObject object, String fnName) { - return executeFunction(object, fnName, new Object[] {}); - } + public Object executeFunction(ScriptableObject object, String fnName) { + return executeFunction(object, fnName, new Object[] {}); + } - public Context getJsContext() { - return jsContext; - } + public Context getJsContext() { + return jsContext; + } - public Scriptable getJsScope() { - return jsScope; - } + public Scriptable getJsScope() { + return jsScope; + } - public void loadEnv(String jsDir) { - // TODO ensure rhino 1.7R3 instead of R2 -> geen shim nodig + paths - // gedoe in orde zetten hier - load(jsDir + "/lib/es5-shim-0.0.4.min.js"); - load(jsDir + "/lib/env.rhino.1.2.js"); - load(jsDir + "/lib/env.utils.js"); - load(jsDir + "/envJsOptions.js"); - } + public void loadEnv(String jsDir) { + // TODO ensure rhino 1.7R3 instead of R2 -> geen shim nodig + paths + // gedoe in orde zetten hier + load(jsDir + "/lib/es5-shim-0.0.4.min.js"); + load(jsDir + "/lib/env.rhino.1.2.js"); + load(jsDir + "/lib/env.utils.js"); + load(jsDir + "/envJsOptions.js"); + } - private Global createJavascriptScopeForContext(Context jsContext) { - Global scope = new Global(); - scope.init(jsContext); - return scope; - } + private Global createJavascriptScopeForContext(Context jsContext) { + Global scope = new Global(); + scope.init(jsContext); + return scope; + } - private Context createJavascriptContext() { - Context jsContext = ContextFactory.getGlobal().enterContext(); - jsContext.setOptimizationLevel(-1); - jsContext.setLanguageVersion(Context.VERSION_1_5); // TODO 1.8 plx - jsContext.setErrorReporter(new ChainedErrorReporter(jsContext.getErrorReporter())); - return jsContext; - } + private Context createJavascriptContext() { + Context jsContext = ContextFactory.getGlobal().enterContext(); + jsContext.setOptimizationLevel(-1); + jsContext.setLanguageVersion(Context.VERSION_1_5); // TODO 1.8 plx + jsContext.setErrorReporter(new ChainedErrorReporter(jsContext.getErrorReporter())); + return jsContext; + } - public void exit() { - Context.exit(); - } - - public Main createDebugger() { - Main debugger = new Main("JS Rhino Debugger"); - - debugger.setExitAction(new Runnable() { - - public void run() { - System.exit(0); - } - }); - - debugger.attachTo(ContextFactory.getGlobal()); - debugger.pack(); - debugger.setSize(600, 460); - debugger.setVisible(true); - return debugger; - } + public void exit() { + Context.exit(); + } }