/** * Invokes a JavaScript function which does not return a result. * * @param name The name of the JS Function to call. * * @param parameters The parameters to pass to the function. Parameters must be released. */ public void executeVoidFunction(final String name, final V8Array parameters) { v8.checkThread(); checkReleased(); v8.checkRuntime(parameters); long parametersHandle = parameters == null ? 0 : parameters.getHandle(); v8.executeVoidFunction(v8.getV8RuntimePtr(), objectHandle, name, parametersHandle); }
runtime.executeVoidFunction(messageHandler, parameters); } finally { strings.close();
@Test public void testRegisterJavaVoidCallbackExecuteFunction() { JavaVoidCallback callback = mock(JavaVoidCallback.class); v8.registerJavaMethod(callback, "foo"); v8.executeVoidFunction("foo", null); verify(callback).invoke(any(V8Object.class), any(V8Array.class)); }
@Test public void testRegisterJavaCallbackExecuteFunction() { JavaCallback callback = mock(JavaCallback.class); v8.registerJavaMethod(callback, "foo"); v8.executeVoidFunction("foo", null); verify(callback).invoke(any(V8Object.class), any(V8Array.class)); }
@Test public void testInvokeCallbackOnGlobalFunctionUsesGlobalScopeAsReciver() { JavaVoidCallback callback = mock(JavaVoidCallback.class); v8.registerJavaMethod(callback, "foo"); doAnswer(constructAnswer(v8, null, null)).when(callback).invoke(any(V8Object.class), any(V8Array.class)); v8.executeVoidFunction("foo", null); }
@Test(expected = V8ScriptExecutionException.class) public void testV8ScriptExceptionVoidCall() { v8.executeVoidScript(errorFunction); v8.executeVoidFunction("myFunction", null); }
/** * Invokes a JavaScript function which does not return a result. * * @param name The name of the JS Function to call. * * @param parameters The parameters to pass to the function. Parameters must be released. */ public void executeVoidFunction(final String name, final V8Array parameters) { v8.checkThread(); checkReleased(); v8.checkRuntime(parameters); long parametersHandle = parameters == null ? 0 : parameters.getHandle(); v8.executeVoidFunction(v8.getV8RuntimePtr(), objectHandle, name, parametersHandle); }
@Test public void testUnaccessibleMethod() { final boolean[] called = new boolean[] { false }; Runnable r = new Runnable() { @Override public void run() { called[0] = true; } }; v8.registerJavaMethod(r, "run", "run", new Class<?>[0]); v8.executeVoidFunction("run", null); assertTrue(called[0]); }
/*** Void Function ***/ @Test public void testSimpleVoidFunction() { v8.executeVoidScript("function foo() {x=1}"); v8.executeVoidFunction("foo", null); assertEquals(1, v8.getInteger("x")); }
@Test public void testVoidFunctionCallNullParameters() { v8.executeVoidScript("function foo() {x=7;}"); v8.executeVoidFunction("foo", null); assertEquals(7, v8.getInteger("x")); }
runtime.executeVoidFunction(messageHandler, parameters); } finally { strings.close();
@Test public void testVoidFunctionCallNoParameters() { v8.executeVoidScript("function foo() {x=7;}"); V8Array parameters = new V8Array(v8); v8.executeVoidFunction("foo", parameters); assertEquals(7, v8.getInteger("x")); parameters.close(); }
@Test public void testInvokeCallbackWithParameters() { JavaCallback callback = mock(JavaCallback.class); v8.registerJavaMethod(callback, "foo"); V8Object object = new V8Object(v8); object.add("foo", "bar"); V8Array array = new V8Array(v8); array.push(1).push(2).push(3); V8Array parameters = new V8Array(v8); parameters.push(7); parameters.push("test"); parameters.push(3.14159); parameters.push(true); parameters.push(object); parameters.push(array); doAnswer(constructAnswer(null, parameters, null)).when(callback).invoke(any(V8Object.class), any(V8Array.class)); v8.executeVoidFunction("foo", parameters); parameters.close(); object.close(); array.close(); }
@Test public void testInvokeVoidCallbackWithParameters() { JavaVoidCallback callback = mock(JavaVoidCallback.class); v8.registerJavaMethod(callback, "foo"); V8Object object = new V8Object(v8); object.add("foo", "bar"); V8Array array = new V8Array(v8); array.push(1).push(2).push(3); V8Array parameters = new V8Array(v8); parameters.push(7); parameters.push("test"); parameters.push(3.14159); parameters.push(true); parameters.push(object); parameters.push(array); doAnswer(constructAnswer(null, parameters, null)).when(callback).invoke(any(V8Object.class), any(V8Array.class)); v8.executeVoidFunction("foo", parameters); parameters.close(); object.close(); array.close(); }
@Test(expected = Error.class) public void testSharingObjectsAsFunctionCallParameters_VoidFunction() { V8 engine = null; V8 engine2 = null; try { engine = V8.createV8Runtime(); engine2 = V8.createV8Runtime(); engine.executeScript("b = function(param1, param2){ param1 + param2;}"); engine2.executeScript("a = [3, 4];"); V8Array a = (V8Array) engine2.get("a"); engine.executeVoidFunction("b", a); } finally { engine.release(false); engine2.release(false); } }
@Test public void testCreateV8Function_CalledFromJS() { v8.executeScript("function doSomething(callback) { callback(); }"); V8Function function = new V8Function(v8, new JavaCallback() { @Override public Object invoke(final V8Object receiver, final V8Array parameters) { result = "passed"; return null; } }); V8Array parameters = new V8Array(v8); parameters.push(function); v8.executeVoidFunction("doSomething", parameters); function.close(); parameters.close(); assertEquals("passed", result); }
@Test public void testCreateV8Function_CalledFromJS_AfterFunctionReleased() { v8.executeScript("function doSomething(callback) { callback(); }"); V8Function function = new V8Function(v8, new JavaCallback() { @Override public Object invoke(final V8Object receiver, final V8Array parameters) { result = "passed"; return null; } }); V8Array parameters = new V8Array(v8); parameters.push(function); function.close(); v8.executeVoidFunction("doSomething", parameters); parameters.close(); assertEquals("passed", result); }
@Test public void testVoidFunctionCall() { v8.executeVoidScript("function setPerson(first, last, age) {person = {'first':first, 'last':last, 'age':age};}"); V8Array parameters = new V8Array(v8); parameters.push("John"); parameters.push("Smith"); parameters.push(7); v8.executeVoidFunction("setPerson", parameters); V8Object result = v8.getObject("person"); assertEquals("John", result.getString("first")); assertEquals("Smith", result.getString("last")); assertEquals(7, result.getInteger("age")); parameters.close(); result.close(); }
/** * Invokes a JavaScript function which does not return a result. * * @param name The name of the JS Function to call. * * @param parameters The parameters to pass to the function. Parameters must be released. */ public void executeVoidFunction(final String name, final V8Array parameters) { v8.checkThread(); checkReleased(); long parametersHandle = parameters == null ? 0 : parameters.getHandle(); v8.executeVoidFunction(v8.getV8RuntimePtr(), objectHandle, name, parametersHandle); }
@Test public void testCreateMatrix() { V8Array a1 = new V8Array(v8); V8Array a2 = new V8Array(v8); V8Array a3 = new V8Array(v8); a1.push(1); a1.push(2); a1.push(3); a2.push(4); a2.push(5); a2.push(6); a3.push(7); a3.push(8); a3.push(9); V8Array array = new V8Array(v8); array.push(a1); array.push(a2); array.push(a3); V8Array parameters = new V8Array(v8); parameters.push(array); v8.executeVoidScript("var total = 0; function add(matrix) { for(var i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { total = total + matrix[i][j]; }}};"); v8.executeVoidFunction("add", parameters); int result = v8.getInteger("total"); assertEquals(45, result); a1.close(); a2.close(); a3.close(); array.close(); parameters.close(); }