diff -r 000000000000 -r 6474c204b198 js/src/jit-test/tests/for-of/array-iterator-proxy.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/src/jit-test/tests/for-of/array-iterator-proxy.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,47 @@ +// An array iterator for a proxy calls the traps in a predictable order. + +load(libdir + "asserts.js"); +load(libdir + "iteration.js"); + +var s = ''; + +var proxyObj = { + get: function (recipient, name) { + if (name == 'length') { + s += 'L'; + return 2; + } else { + s += name; + return name; + } + } +}; + +var it = Array.prototype[std_iterator].call(Proxy.create(proxyObj)); + +assertIteratorNext(it, "0"); +s += ' '; +assertIteratorNext(it, "1"); +s += ' '; +assertIteratorDone(it, undefined); +assertEq(s, "L0 L1 L"); + +s = ''; +var ki = Array.prototype.keys.call(Proxy.create(proxyObj)); + +assertIteratorNext(ki, 0); +s += ' '; +assertIteratorNext(ki, 1); +s += ' '; +assertIteratorDone(ki, undefined); +assertEq(s, "L L L"); + +s = ''; +var ei = Array.prototype.entries.call(Proxy.create(proxyObj)); + +assertIteratorNext(ei, [0, "0"]); +s += ' '; +assertIteratorNext(ei, [1, "1"]); +s += ' '; +assertIteratorDone(ei, undefined); +assertEq(s, "L0 L1 L");