diff --git a/test/test_jsinterp_parser.py b/test/test_jsinterp_parser.py index 5b15edb70..b62442d8c 100644 --- a/test/test_jsinterp_parser.py +++ b/test/test_jsinterp_parser.py @@ -547,6 +547,31 @@ class TestJSInterpreterParser(unittest.TestCase): ] self.assertEqual(list(jsi.statements()), ast) + def test_unshift(self): + # https://hg.mozilla.org/mozilla-central/file/tip/js/src/tests/ecma_5/Array/unshift-01.js + jsi = JSInterpreter( + '''var MAX_LENGTH = 0xffffffff; + + var a = {}; + a.length = MAX_LENGTH + 1; + assertEq([].unshift.call(a), MAX_LENGTH); + assertEq(a.length, MAX_LENGTH); + + function testGetSet(len, expected) { + var newlen; + var a = { get length() { return len; }, set length(v) { newlen = v; } }; + var res = [].unshift.call(a); + assertEq(res, expected); + assertEq(newlen, expected); + } + + testGetSet(0, 0); + testGetSet(10, 10); + testGetSet("1", 1); + testGetSet(null, 0); + testGetSet(MAX_LENGTH + 2, MAX_LENGTH); + testGetSet(-5, 0);''') + jsi.statements() if __name__ == '__main__': unittest.main()