X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/arguments-iterator.js?ds=inline diff --git a/tests/stress/arguments-iterator.js b/tests/stress/arguments-iterator.js new file mode 100644 index 0000000..1980532 --- /dev/null +++ b/tests/stress/arguments-iterator.js @@ -0,0 +1,70 @@ +function test(actual, expected) { + if (actual !== expected) + throw new Error('bad value: ' + actual); +} + +function testArguments(check) { + (function () { + check(arguments, []); + }()); + + (function (a, b, c) { + check(arguments, [a, b, c]); + }()); + + (function () { + 'use strict'; + check(arguments, []); + }()); + + (function (a, b, c) { + 'use strict'; + check(arguments, [a, b, c]); + }()); +} + +testArguments(function (args) { + var iteratorMethod = args[Symbol.iterator]; + test(iteratorMethod, Array.prototype.values); + var descriptor = Object.getOwnPropertyDescriptor(args, Symbol.iterator); + test(descriptor.writable, true); + test(descriptor.configurable, true); + test(descriptor.enumerable, false); + test(descriptor.value, iteratorMethod); +}); + +testArguments(function (args, expected) { + var iterator = args[Symbol.iterator](); + test(iterator.toString(), '[object Array Iterator]'); + var index = 0; + for (var value of iterator) { + test(value, expected[index++]); + } + test(args.length, index); + + var index = 0; + for (var value of args) { + test(value, expected[index++]); + } + test(args.length, index); +}); + +testArguments(function (args) { + var symbols = Object.getOwnPropertySymbols(args); + test(symbols.length, 1); + test(symbols[0], Symbol.iterator); +}); + +testArguments(function (args) { + 'use strict'; + args[Symbol.iterator] = 'not throw error'; +}); + +testArguments(function (args) { + 'use strict'; + delete args[Symbol.iterator]; + test(args[Symbol.iterator], undefined); + + var symbols = Object.getOwnPropertySymbols(args); + test(symbols.length, 0); +});