@Override protected V8Value createTwin() { return new V8ArrayBuffer(v8, byteBuffer); }
/** * 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(); } }
@Override public Object invoke(final V8Object receiver, final V8Array parameters) { V8ArrayBuffer arrayBuffer = new V8ArrayBuffer(v8, 8); V8TypedArray array = new V8TypedArray(v8, arrayBuffer, V8Value.INT_32_ARRAY, 0, 2); array.add("0", 800000000); arrayBuffer.close(); return array; } };
@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(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(expected = IllegalStateException.class) public void testCreateArrayInvalidLengthWithOffset_Int32Array() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 12); try { new V8TypedArray(v8, buffer, V8Value.INTEGER, 4, 3).close(); } finally { buffer.close(); } }
@Test(expected = IllegalArgumentException.class) public void testCreateTypedArrayWithIllegalType_Undefined() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 10); try { new V8TypedArray(v8, buffer, V8Value.UNDEFINED, 0, 10).close(); } finally { 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 testGetInt8TypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 4); v8.add("buf", buffer); V8Array array = (V8Array) v8.executeScript("new Int8Array(buf);"); assertTrue(array instanceof V8TypedArray); array.close(); buffer.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 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 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 testInt32TypedArray_Twin() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int32Array = new V8TypedArray(v8, buffer, V8Value.INTEGER, 0, 2); V8Array twinArray = v8Int32Array.twin(); assertTrue(twinArray instanceof V8TypedArray); assertEquals(v8Int32Array, twinArray); v8Int32Array.close(); twinArray.close(); buffer.close(); }
@Test public void testInt8TypedArray_Length() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int8Array = new V8TypedArray(v8, buffer, V8Value.BYTE, 0, 2); buffer.put((byte) 4); buffer.put((byte) 8); assertEquals(2, v8Int8Array.length()); buffer.close(); v8Int8Array.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 testAccess64BitFloatFromTypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray typedArray = new V8TypedArray(v8, buffer, V8Value.FLOAT_64_ARRAY, 0, 1); typedArray.add("0", 3.14159265359); assertEquals(V8Value.FLOAT_64_ARRAY, typedArray.getType()); assertEquals(3.14159265359, buffer.getDouble(), 0.000000000001); buffer.close(); typedArray.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(); }
@Test public void testCreateIntegerTypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray v8Int32Array = new V8TypedArray(v8, buffer, V8Value.INTEGER, 0, 2); v8Int32Array.add("0", 7); v8Int32Array.add("1", 8); assertEquals(7, buffer.getInt()); assertEquals(8, buffer.getInt()); buffer.close(); v8Int32Array.close(); }
@Test public void testCreateByteTypedArray() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 8); V8TypedArray typedArray = new V8TypedArray(v8, buffer, V8Value.BYTE, 0, 2); typedArray.add("0", 7); typedArray.add("1", 8); assertEquals(7, buffer.get()); assertEquals(8, buffer.get()); buffer.close(); typedArray.close(); }
@Test public void testFloat64TypedArray_addInJava() { V8ArrayBuffer buffer = new V8ArrayBuffer(v8, 16); V8TypedArray typedArray = new V8TypedArray(v8, buffer, V8Value.FLOAT_64_ARRAY, 0, 2); typedArray.add("0", 123.45); typedArray.add("1", -3.14159); assertEquals(2, typedArray.length()); assertEquals(123.45, (Double) typedArray.get(0), 0.00001); assertEquals(-3.14159, (Double) typedArray.get(1), 0.0001); buffer.close(); typedArray.close(); }