protected Object callObjectJavaMethod(final long methodID, final V8Object receiver, final V8Array parameters) throws Throwable { MethodDescriptor methodDescriptor = functionRegistry.get(methodID); if (methodDescriptor.callback != null) { return checkResult(methodDescriptor.callback.invoke(receiver, parameters)); } boolean hasVarArgs = methodDescriptor.method.isVarArgs(); Object[] args = getArgs(receiver, methodDescriptor, parameters, hasVarArgs); checkArgs(args); try { Object result = methodDescriptor.method.invoke(methodDescriptor.object, args); return checkResult(result); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (IllegalAccessException e) { throw e; } catch (IllegalArgumentException e) { throw e; } finally { releaseArguments(args, hasVarArgs); } }
protected Object callObjectJavaMethod(final long methodID, final V8Object receiver, final V8Array parameters) throws Throwable { MethodDescriptor methodDescriptor = functionRegistry.get(methodID); if (methodDescriptor.callback != null) { return checkResult(methodDescriptor.callback.invoke(receiver, parameters)); } boolean hasVarArgs = methodDescriptor.method.isVarArgs(); Object[] args = getArgs(receiver, methodDescriptor, parameters, hasVarArgs); checkArgs(args); try { Object result = methodDescriptor.method.invoke(methodDescriptor.object, args); return checkResult(result); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (IllegalAccessException e) { throw e; } catch (IllegalArgumentException e) { throw e; } finally { releaseArguments(args, hasVarArgs); } }
@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 testRegisterJavaCallback() { JavaCallback callback = mock(JavaCallback.class); v8.registerJavaMethod(callback, "foo"); v8.executeVoidScript("foo()"); verify(callback).invoke(any(V8Object.class), any(V8Array.class)); }
@Test public void testInvokeCallbackWithReturnValue() { JavaCallback callback = mock(JavaCallback.class); v8.registerJavaMethod(callback, "foo"); doAnswer(constructAnswer(null, null, 77)).when(callback).invoke(any(V8Object.class), any(V8Array.class)); int result = v8.executeIntegerFunction("foo", null); assertEquals(77, result); }
@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(); }
protected Object callObjectJavaMethod(final long methodID, final V8Object receiver, final V8Array parameters) throws Throwable { MethodDescriptor methodDescriptor = functionRegistry.get(methodID); if (methodDescriptor.callback != null) { return checkResult(methodDescriptor.callback.invoke(receiver, parameters)); } boolean hasVarArgs = methodDescriptor.method.isVarArgs(); Object[] args = getArgs(receiver, methodDescriptor, parameters, hasVarArgs); checkArgs(args); try { Object result = methodDescriptor.method.invoke(methodDescriptor.object, args); return checkResult(result); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (IllegalAccessException e) { throw e; } catch (IllegalArgumentException e) { throw e; } finally { releaseArguments(args, hasVarArgs); } }
protected Object callObjectJavaMethod(final long methodID, final V8Object receiver, final V8Array parameters) throws Throwable { MethodDescriptor methodDescriptor = functionRegistry.get(methodID); if (methodDescriptor.callback != null) { return checkResult(methodDescriptor.callback.invoke(receiver, parameters)); } boolean hasVarArgs = methodDescriptor.method.isVarArgs(); Object[] args = getArgs(receiver, methodDescriptor, parameters, hasVarArgs); checkArgs(args); try { Object result = methodDescriptor.method.invoke(methodDescriptor.object, args); return checkResult(result); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (IllegalAccessException e) { throw e; } catch (IllegalArgumentException e) { throw e; } finally { releaseArguments(args, hasVarArgs); } }