private Object getArrayItem(final V8Array array, final int index) { try { int type = array.getType(index); switch (type) { case INTEGER: return array.getInteger(index); case DOUBLE: return array.getDouble(index); case BOOLEAN: return array.getBoolean(index); case STRING: return array.getString(index); case V8_ARRAY: case V8_TYPED_ARRAY: return array.getArray(index); case V8_OBJECT: return array.getObject(index); case V8_FUNCTION: return array.getObject(index); case V8_ARRAY_BUFFER: return array.get(index); case UNDEFINED: return V8.getUndefined(); } } catch (V8ResultUndefined e) { // do nothing } return null; }
private static JavaVoidCallback console(V8 v8, final Consumer<String> log) { return (self, args) -> { StringBuilder buff = new StringBuilder(); for (int i = 0; i < args.length(); i++) { buff.append(args.get(i)); } log.accept(buff.toString()); }; }
@SuppressWarnings("unchecked") private static List<? super Object> toList(final V8Array array, final V8Map<Object> cache, final TypeAdapter adapter) { if (array == null) { return Collections.emptyList(); } if (cache.containsKey(array)) { return (List<? super Object>) cache.get(array); } List<? super Object> result = new ArrayList<Object>(); cache.put(array, result); for (int i = 0; i < array.length(); i++) { Object object = null; int type = V8Value.UNDEFINED; try { object = array.get(i); type = array.getType(i); Object value = getValue(object, type, cache, adapter); if (value != IGNORE) { result.add(value); } } finally { if (object instanceof Releasable) { ((Releasable) object).release(); } } } return result; }
private static void b64(final V8 v8) { v8.registerJavaMethod((JavaCallback) (receiver, args) -> { byte[] bytes = args.get(0).toString().getBytes(StandardCharsets.UTF_8); return BaseEncoding.base64().encode(bytes); }, "btoa"); v8.registerJavaMethod((JavaCallback) (receiver, args) -> { byte[] atob = BaseEncoding.base64().decode(args.get(0).toString()); return new String(atob, StandardCharsets.UTF_8); }, "atob"); }
int type = V8Value.UNDEFINED; try { object = array.get(index); type = array.getType(index); Object result = getValue(object, type, cache, DEFAULT_TYPE_ADAPTER);
@Override public Object get(final int index) { v8.checkThread(); checkReleased(); int type = getType(); switch (type) { case FLOAT_32_ARRAY: return ((Number) super.get(index)).floatValue(); case FLOAT_64_ARRAY: return super.get(index); case INT_32_ARRAY: return super.get(index); case INT_16_ARRAY: return ((Number) super.get(index)).shortValue(); case INT_8_ARRAY: return ((Number) super.get(index)).byteValue(); case UNSIGNED_INT_16_ARRAY: return 0xFFFF & (Integer) super.get(index); case UNSIGNED_INT_32_ARRAY: return 0x00000000FFFFFFFF & ((Number) super.get(index)).longValue(); case UNSIGNED_INT_8_CLAMPED_ARRAY: return (short) (0x00FF & ((Number) super.get(index)).byteValue()); case UNSIGNED_INT_8_ARRAY: return (short) (0x00FF & ((Number) super.get(index)).shortValue()); } return null; }
int type = V8Value.UNDEFINED; try { object = array.get(index); type = array.getType(index); Object result = getValue(object, type, cache, adapter);
@Override public void invoke(final V8Object receiver, final V8Array parameters) { V8Function require = (V8Function) parameters.get(0); try { node.init(require.twin()); } finally { require.close(); } } }, STARTUP_CALLBACK);
Path path = Paths.get(arguments.get(0).toString()); if (includes.stream().filter(it -> it.matches(path)).findFirst().isPresent()) { return !excludes.stream().filter(it -> it.matches(path)).findFirst().isPresent();
private static void assets(Class<?> loader, final V8 v8) { V8Object assets = new V8Object(v8); v8.add("assets", assets); assets.registerJavaMethod((JavaCallback) (receiver, args) -> { try { return V8Engine.readFile(loader, args.get(0).toString()); } catch (IOException ex) { // we can't fire exceptions from Java :S return V8.getUndefined(); } }, "readFile"); assets.registerJavaMethod( (JavaCallback) (receiver, args) -> V8Engine.exists(loader, args.get(0).toString()), "exists"); assets.registerJavaMethod((JavaCallback) (receiver, args) -> { try { return load(loader, v8, args.get(0).toString()); } catch (Exception ex) { // we can't fire exceptions from Java :S return V8.getUndefined(); } }, "load"); }
@Override public Object invoke(final V8Object receiver, final V8Array parameters) { return parameters.get(0); } });
@Test public void testGenericPushInteger() { V8Array array = new V8Array(v8); array.push(new Integer(7)); assertEquals(7, array.get(0)); array.close(); }
@Test public void testGenericPushFloat() { V8Array array = new V8Array(v8); array.push(new Float(3.14)); assertEquals(3.14, (Double) array.get(0), 0.0001); array.close(); }
@Test public void testGenericPushBoolean() { V8Array array = new V8Array(v8); array.push(new Boolean(true)); assertTrue((Boolean) array.get(0)); array.close(); }
@Test public void testGetIsInteger() { V8Array array = v8.executeArrayScript("foo = [7]"); Object result = array.get(0); assertTrue(result instanceof Integer); assertEquals(7, result); array.close(); }
@Test public void testGetIsDouble() { V8Array array = v8.executeArrayScript("foo = [7.7]"); Object result = array.get(0); assertTrue(result instanceof Double); assertEquals(7.7, result); array.close(); }
@Test public void testGetIsObject() { V8Array array = v8.executeArrayScript("foo = [{}]"); Object result = array.get(0); assertTrue(result instanceof V8Object); array.close(); ((Releasable) result).release(); }
@Test public void testGetIsArray() { V8Array array = v8.executeArrayScript("foo = [[]]"); Object result = array.get(0); assertTrue(result instanceof V8Array); array.close(); ((Releasable) result).release(); }
@Test public void testGetTypedArrayIntValue_WithArrayBuffer() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 4); v8.add("buf", buffer); V8Array result = (V8Array) v8.executeScript("var ints = new Int16Array(buf); ints[0] = 7; ints"); assertEquals((short) 7, result.get(0)); result.close(); buffer.close(); }