@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; }
try { object = array.get(index); type = array.getType(index); Object result = getValue(object, type, cache, adapter); if ((result == object) && (result instanceof V8Value)) {
try { object = array.get(index); type = array.getType(index); Object result = getValue(object, type, cache, DEFAULT_TYPE_ADAPTER); if ((result == object) && (result instanceof V8Value)) {
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; }
@Test(expected = UnsupportedOperationException.class) public void testGetTypeKeyUndefined() { V8Array undefined = v8.getArray("array"); undefined.getType("bar"); }
@Test(expected = V8ResultUndefined.class) public void testGetTypeRangeSizeZeroThrowsUndefinedException() { V8Array a = v8.executeArrayScript("[1, false, true, false, 2];"); try { a.getType(0, 0); } finally { a.close(); } }
@Test public void testGetTypeRangeOfDoubles() { V8Array a = v8.executeArrayScript("[1.1,2.2,3.3,4.4,5.5];"); int result = a.getType(1, 3); assertEquals(DOUBLE, result); a.close(); }
@Test public void testGetTypeRangeOfStrings() { V8Array a = v8.executeArrayScript("['a', 'b', 'c', 1, 2];"); int result = a.getType(0, 3); assertEquals(STRING, result); a.close(); }
@Test public void testGetArrayTypeDoubleMixed() { V8Array a = v8.executeArrayScript("[0, 0.1]"); int type = a.getType(); assertEquals(V8Value.DOUBLE, type); a.close(); }
@Test public void testGetArrayTypeObjectWithArray1() { V8Array a = v8.executeArrayScript("[{}, []]"); int type = a.getType(); assertEquals(V8Value.V8_OBJECT, type); a.close(); }
@Test public void testGetArrayTypeUndefined2() { V8Array a = v8.executeArrayScript("['false', false]"); int type = a.getType(); assertEquals(V8Value.UNDEFINED, type); a.close(); }
@Test public void testGetArrayTypeArray() { V8Array a = v8.executeArrayScript("[[], [1,2,3], []]"); int type = a.getType(); assertEquals(V8Value.V8_ARRAY, type); a.close(); }
@Test public void testGetArrayTypeEmpty() { V8Array a = v8.executeArrayScript("['false', false]"); int type = a.getType(); assertEquals(V8Value.UNDEFINED, type); a.close(); }
@Test public void testGetTypeDouble() { V8Array v8Array = new V8Array(v8); v8Array.push(1.1); assertEquals(DOUBLE, v8Array.getType(0)); v8Array.close(); }
@Test public void testGetTypedArray_IntegerType() { v8.executeVoidScript("var buf = new ArrayBuffer(100);\n" + "var intsArray = new Int32Array(buf);\n"); V8Array intsArray = (V8Array) v8.get("intsArray"); assertEquals(V8Value.INTEGER, intsArray.getType()); intsArray.close(); }
@Test public void testUnsignedInt16Array_GetType() { V8Array result = (V8Array) v8.executeScript("var buf = new ArrayBuffer(8); var bytes = new Uint16Array(buf); bytes[0] = 1; bytes[1] = 256; bytes"); assertEquals(V8Value.UNSIGNED_INT_16_ARRAY, result.getType()); assertEquals(4, result.length()); result.close(); }
@Test public void testInt32Array_GetType() { V8Array result = (V8Array) v8.executeScript("var buf = new ArrayBuffer(8); var bytes = new Int32Array(buf); bytes[0] = 1; bytes[1] = 256; bytes"); assertEquals(V8Value.INT_32_ARRAY, result.getType()); assertEquals(2, result.length()); result.close(); }
@Test public void testUInt32Array_GetType() { V8Array result = (V8Array) v8.executeScript("var buf = new ArrayBuffer(8); var bytes = new Uint32Array(buf); bytes[0] = 1; bytes[1] = 256; bytes"); assertEquals(V8Value.UNSIGNED_INT_32_ARRAY, result.getType()); assertEquals(2, result.length()); result.close(); }
@Test public void testGetTypeFunction() { v8.executeVoidScript("var foo = function() {};"); V8Object function = v8.getObject("foo"); V8Array v8Array = new V8Array(v8); v8Array.push(function); assertEquals(V8_FUNCTION, v8Array.getType(0)); v8Array.close(); function.close(); }
@Test public void testAddNull() { V8Array v8Array = new V8Array(v8); v8Array.pushNull(); assertEquals(1, v8Array.length()); assertEquals(NULL, v8Array.getType(0)); assertNull(v8Array.getObject(0)); v8Array.close(); }