1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/for-of/array-iterator-proxy.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,47 @@ 1.4 +// An array iterator for a proxy calls the traps in a predictable order. 1.5 + 1.6 +load(libdir + "asserts.js"); 1.7 +load(libdir + "iteration.js"); 1.8 + 1.9 +var s = ''; 1.10 + 1.11 +var proxyObj = { 1.12 + get: function (recipient, name) { 1.13 + if (name == 'length') { 1.14 + s += 'L'; 1.15 + return 2; 1.16 + } else { 1.17 + s += name; 1.18 + return name; 1.19 + } 1.20 + } 1.21 +}; 1.22 + 1.23 +var it = Array.prototype[std_iterator].call(Proxy.create(proxyObj)); 1.24 + 1.25 +assertIteratorNext(it, "0"); 1.26 +s += ' '; 1.27 +assertIteratorNext(it, "1"); 1.28 +s += ' '; 1.29 +assertIteratorDone(it, undefined); 1.30 +assertEq(s, "L0 L1 L"); 1.31 + 1.32 +s = ''; 1.33 +var ki = Array.prototype.keys.call(Proxy.create(proxyObj)); 1.34 + 1.35 +assertIteratorNext(ki, 0); 1.36 +s += ' '; 1.37 +assertIteratorNext(ki, 1); 1.38 +s += ' '; 1.39 +assertIteratorDone(ki, undefined); 1.40 +assertEq(s, "L L L"); 1.41 + 1.42 +s = ''; 1.43 +var ei = Array.prototype.entries.call(Proxy.create(proxyObj)); 1.44 + 1.45 +assertIteratorNext(ei, [0, "0"]); 1.46 +s += ' '; 1.47 +assertIteratorNext(ei, [1, "1"]); 1.48 +s += ' '; 1.49 +assertIteratorDone(ei, undefined); 1.50 +assertEq(s, "L0 L1 L");