def __init__(self): self.array = STPyV8.JSArray([1, 2, 3])
def testArray(self): with STPyV8.JSContext() as ctxt: array = ctxt.eval(""" var array = new Array(); for (i=0; i<10; i++) { array[i] = 10-i; } array; """) self.assertTrue(isinstance(array, STPyV8.JSArray)) self.assertEqual(10, len(array)) self.assertTrue(5 in array) self.assertFalse(15 in array) self.assertEqual(10, len(array)) for i in range(10): self.assertEqual(10 - i, array[i]) array[5] = 0 self.assertEqual(0, array[5]) del array[5] self.assertEqual(None, array[5]) # array [10, 9, 8, 7, 6, None, 4, 3, 2, 1] # array[4:7] 4^^^^^^^^^7 # array[-3:-1] -3^^^^^^-1 # array[0:0] [] self.assertEqual([6, None, 4], array[4:7]) self.assertEqual([3, 2], array[-3:-1]) self.assertEqual([], array[0:0]) self.assertEqual([10, 9, 8, 7, 6, None, 4, 3, 2, 1], list(array)) array[1:3] = [9, 9] self.assertEqual([10, 9, 9, 7, 6, None, 4, 3, 2, 1], list(array)) array[5:7] = [8, 8] self.assertEqual([10, 9, 9, 7, 6, 8, 8, 3, 2, 1], list(array)) del array[1] self.assertEqual([10, None, 9, 7, 6, 8, 8, 3, 2, 1], list(array)) ctxt.locals.array1 = STPyV8.JSArray(5) ctxt.locals.array2 = STPyV8.JSArray([1, 2, 3, 4, 5]) for i in range(len(ctxt.locals.array2)): ctxt.locals.array1[i] = ctxt.locals.array2[i] * 10 ctxt.eval(""" var sum = 0; for (i=0; i<array1.length; i++) sum += array1[i] for (i=0; i<array2.length; i++) sum += array2[i] """) self.assertEqual(165, ctxt.locals.sum) ctxt.locals.array3 = [1, 2, 3, 4, 5] self.assertTrue(ctxt.eval('array3[1] === 2')) self.assertTrue(ctxt.eval('array3[9] === undefined')) args = [ [ "a = Array(7); for(i=0; i<a.length; i++) a[i] = i; a[3] = undefined; a[a.length-1]; a", "0,1,2,,4,5,6", [0, 1, 2, None, 4, 5, 6] ], [ "a = Array(7); for(i=0; i<a.length - 1; i++) a[i] = i; a[a.length-1]; a", "0,1,2,3,4,5,", [0, 1, 2, 3, 4, 5, None] ], [ "a = Array(7); for(i=1; i<a.length; i++) a[i] = i; a[a.length-1]; a", ",1,2,3,4,5,6", [None, 1, 2, 3, 4, 5, 6] ] ] for arg in args: array = ctxt.eval(arg[0]) self.assertEqual(arg[1], str(array)) self.assertEqual(arg[2], [array[i] for i in range(len(array))]) self.assertEqual( 3, ctxt.eval("(function (arr) { return arr.length; })")( STPyV8.JSArray([1, 2, 3]))) self.assertEqual( 2, ctxt.eval("(function (arr, idx) { return arr[idx]; })")( STPyV8.JSArray([1, 2, 3]), 1)) self.assertEqual( '[object Array]', ctxt.eval( "(function (arr) { return Object.prototype.toString.call(arr); })" )(STPyV8.JSArray([1, 2, 3]))) self.assertEqual( '[object Array]', ctxt.eval( "(function (arr) { return Object.prototype.toString.call(arr); })" )(STPyV8.JSArray((1, 2, 3)))) self.assertEqual( '[object Array]', ctxt.eval( "(function (arr) { return Object.prototype.toString.call(arr); })" )(STPyV8.JSArray(list(range(3)))))