Exemple #1
0
 def __init__(self):
     self.array = STPyV8.JSArray([1, 2, 3])
Exemple #2
0
    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)))))