/** * Create a new ArrayBuffer from a java.nio.ByteBuffer * * @param v8 the Runtime on which to create the ArrayBuffer * @param byteBuffer the ByteBuffer to use to back the ArrayBuffer */ public ArrayBuffer(final V8 v8, final ByteBuffer byteBuffer) { V8ArrayBuffer v8ArrayBuffer = new V8ArrayBuffer(v8, byteBuffer); try { arrayBuffer = (V8ArrayBuffer) v8ArrayBuffer.twin().setWeak(); } finally { v8ArrayBuffer.close(); } }
/** * Create a new TypedArray from an ArrayBuffer. * * @param v8 the V8Runtime on which to create the TypedArray * @param buffer the ArrayBuffer to use to back the TypedArray * @param type the Type of Array to create * @param offset the Offset into the ArrayBuffer in which to map the TyepdArray * @param size the Size of the TypedArray */ public TypedArray(final V8 v8, final ArrayBuffer buffer, final int type, final int offset, final int size) { V8ArrayBuffer v8ArrayBuffer = buffer.getV8ArrayBuffer(); V8TypedArray v8typedArray = new V8TypedArray(v8, v8ArrayBuffer, type, offset, size); try { typedArray = (V8TypedArray) v8typedArray.twin().setWeak(); } finally { v8ArrayBuffer.close(); v8typedArray.close(); } }
@Test public void testArrayBufferGetValue() { V8ArrayBuffer buf = (V8ArrayBuffer) v8.executeScript("var buf = new ArrayBuffer(100);\n" + "buf;\n"); V8ArrayBuffer result = ((ArrayBuffer) V8ObjectUtils.getValue(buf)).getV8ArrayBuffer(); assertEquals(100, result.limit()); buf.close(); result.close(); }
@Test public void testGetV8ArrayBuffer() { ArrayBuffer arrayBuffer = new ArrayBuffer(v8, ByteBuffer.allocateDirect(8)); V8ArrayBuffer v8ArrayBuffer = arrayBuffer.getV8ArrayBuffer(); assertNotNull(v8ArrayBuffer); v8ArrayBuffer.close(); }
@Test public void testGetArrayBuffer_Int32Array() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int32Array = new V8TypedArray(v8, buffer, V8Value.INTEGER, 0, 2); V8ArrayBuffer result = v8Int32Array.getBuffer(); assertEquals(result, buffer); result.close(); buffer.close(); v8Int32Array.close(); }
@Test public void testGetByteBuffer_Int8Array() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int8Array = new V8TypedArray(v8, buffer, V8Value.BYTE, 0, 2); V8ArrayBuffer arrayBuffer = v8Int8Array.getBuffer(); assertEquals(arrayBuffer, buffer); buffer.close(); v8Int8Array.close(); arrayBuffer.close(); }
@Test public void testV8ArrayBufferInList() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 10); List<Object> list = new ArrayList<Object>(); list.add(buffer); V8Array v8Array = V8ObjectUtils.toV8Array(v8, list); V8Value result = (V8Value) v8Array.get(0); assertEquals(buffer, result); buffer.close(); result.close(); v8Array.close(); }
@Test public void testEmptyArrayBufferReturned() { V8ArrayBuffer arrayBuffer = (V8ArrayBuffer) v8.executeScript("new ArrayBuffer(0);"); assertEquals(arrayBuffer.capacity(), 0); arrayBuffer.close(); }
@Test(expected = IllegalArgumentException.class) public void testCreateTypedArrayWithIllegalType_V8Object() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 10); try { new V8TypedArray(v8, buffer, V8Value.V8_OBJECT, 0, 10).close(); } finally { buffer.close(); } }
@Test public void getArrayBuffer() { v8.executeVoidScript("var buffer = new ArrayBuffer(8);"); V8ArrayBuffer buffer = (V8ArrayBuffer) v8.get("buffer"); assertNotNull(buffer); buffer.close(); }
@Test public void testGetTypedArrayValue_WithArrayBuffer() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 4); v8.add("buf", buffer); int result = v8.executeIntegerScript("var ints = new Int16Array(buf); ints[0] = 7; ints[0]"); assertEquals(7, result); buffer.close(); }
@Test public void testAccessArrayBuffer_Int8ArrayView() { V8ArrayBuffer buffer = (V8ArrayBuffer) v8.executeScript("var buf = new ArrayBuffer(4); var ints = new Int8Array(buf); ints[0] = 7; buf"); assertEquals(4, buffer.limit()); assertEquals(7, buffer.get(0)); buffer.close(); }
@Test public void testAccessArrayBuffer_Float32rrayView() { V8ArrayBuffer buffer = (V8ArrayBuffer) v8.executeScript("var buf = new ArrayBuffer(4); var floats = new Float32Array(buf); floats[0] = 7.7; buf"); assertEquals(1, buffer.floatLimit()); assertEquals(7.7, buffer.getFloat(0), 0.00001); buffer.close(); }
@Test public void testCreateFloat64TypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray typedArray = new V8TypedArray(v8, buffer, V8Value.FLOAT_64_ARRAY, 0, 1); assertEquals(V8Value.FLOAT_64_ARRAY, typedArray.getType()); buffer.close(); typedArray.close(); }
@Test public void testGetType_TypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 64); V8Array array = new V8TypedArray(v8, buffer, V8Value.INT_8_ARRAY, 0, 8); assertEquals(V8Value.V8_TYPED_ARRAY, array.getV8Type()); array.close(); buffer.close(); }
@Test public void testCreateV8ArrayBuffer() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 100); v8.add("buffer", buffer); V8Value result = (V8Value) v8.executeScript("var ints = new Int8Array(buffer); ints"); assertNotNull(result); result.close(); buffer.close(); }
@Test public void testAccessArrayBuffer_Float64ArrayView() { V8ArrayBuffer buffer = (V8ArrayBuffer) v8.executeScript("var buf = new ArrayBuffer(8); var floats = new Float64Array(buf); floats[0] = 7.7; buf"); assertEquals(1, buffer.doubleLimit()); assertEquals(7.7, buffer.getDouble(0), 0.00001); buffer.close(); }
@Test public void testInt32TypedArray_CustomLength() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int32Array = new V8TypedArray(v8, buffer, V8Value.INTEGER, 0, 1); v8.add("v8Int32Array", v8Int32Array); assertEquals(1, v8Int32Array.length()); buffer.close(); v8Int32Array.close(); }
@Test public void testGetTypedRangeArrayValue_FromBackingStore() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 100); v8.add("buf", buffer); v8.executeVoidScript("var ints = new Int32Array(buf); for(var i = 0; i < 25; i++) {ints[i] = i;};"); assertEquals(25, buffer.intLimit()); for (int i = 0; i < buffer.intLimit(); i++) { assertEquals(i, buffer.getInt(i * 4)); } buffer.close(); }
@Test public void testInt8TypedArray_CustomOffset() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int8Array = new V8TypedArray(v8, buffer, V8Value.BYTE, 1, 1); buffer.put((byte) 4); buffer.put((byte) 8); assertEquals(1, v8Int8Array.length()); assertEquals((byte) 8, v8Int8Array.get(0)); buffer.close(); v8Int8Array.close(); }