package be.klak.rhino; import static org.fest.assertions.Assertions.assertThat; import org.junit.Test; import org.mozilla.javascript.NativeObject; import org.mozilla.javascript.ScriptableObject; import be.klak.rhino.RhinoContext; import be.klak.rhino.RhinoRunnable; public class RhinoContextTest { @Test public void executeFunctionOnPrototypeAndActualObject() { RhinoContext context = new RhinoContext(); String js = "" + "var obj = function() {" + " this.actual = function() { " + " return 5; " + " }" + "};" + "obj.prototype = {" + " go : function() {" + " return 3; " + " }" + "}"; context.evalJS(js); ScriptableObject obj = (ScriptableObject) context.evalJS("new obj()"); assertThat(context.executeFunction(obj, "go")).isEqualTo(3.0); assertThat(context.executeFunction(obj, "actual")).isEqualTo(5.0); } @Test public void runAsyncUsesTheSameSharedGlobalScope() throws InterruptedException { RhinoContext baseContext = new RhinoContext(); baseContext.evalJS("var base = 'base'"); baseContext.runAsync(new RhinoRunnable() { @Override public void run(RhinoContext context) { assertThat(context.evalJS("base")).isEqualTo("base"); } }); Thread.sleep(500); } @Test(expected = IllegalStateException.class) public void setPropertyOnUndefinedNotPossible() { RhinoContext context = new RhinoContext(); context.evalJS("var zever"); context.setProperty("zever", "prop", 1); } @Test(expected = IllegalStateException.class) public void setPropertyOnNullNotPossible() { RhinoContext context = new RhinoContext(); context.setProperty(null, null, null); } @Test public void setPropertyOnSomeObj() { RhinoContext context = new RhinoContext(); NativeObject anObj = (NativeObject) context.evalJS("var obj = { a: 'a'}; obj"); context.setProperty("obj", "b", "b"); assertThat(anObj.get("b", anObj)).isEqualTo("b"); } @Test public void loadMultipleJSFiles() { RhinoContext context = new RhinoContext(); context.load("src/test/javascript/", "loadTest.js", "loadTestTwo.js"); assertThat(context.evalJS("loaded")).isEqualTo(true); assertThat(context.evalJS("loadedTwo")).isEqualTo(true); } // {{{ loadsJSFilesFromClasspath @Test public void loadsJSFilesFromClasspath() { RhinoContext context = new RhinoContext(); context.loadFromClasspath("js/lib/loadsJSFilesFromClasspathTarget.js"); assertThat(context.evalJS("target.theAnswer")).isEqualTo("forty two"); } // }}} }