1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/for-of/semantics-11.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,43 @@ 1.4 +// for-of on a proxy causes a predictable sequence of trap calls. 1.5 + 1.6 +load(libdir + "iteration.js"); 1.7 + 1.8 +var s = ''; 1.9 + 1.10 +var i = 0; 1.11 +var next_fn = Proxy.createFunction({}, function () { 1.12 + s += "n"; 1.13 + if (i == 3) 1.14 + return { value: undefined, done: true }; 1.15 + return { value: i++, done: false }; 1.16 +}); 1.17 + 1.18 +var it = Proxy.create({ 1.19 + get: function (receiver, name) { 1.20 + if (name == 'toSource') { 1.21 + s += '?'; 1.22 + return function () 'it'; 1.23 + } 1.24 + assertEq(name, "next"); 1.25 + s += "N"; 1.26 + return next_fn; 1.27 + } 1.28 +}); 1.29 + 1.30 +var iterator_fn = Proxy.createFunction({}, function () { 1.31 + s += 'i'; 1.32 + return it; 1.33 +}); 1.34 + 1.35 +var obj = Proxy.create({ 1.36 + get: function (receiver, name) { 1.37 + assertEq(name, std_iterator); 1.38 + s += "I"; 1.39 + return iterator_fn; 1.40 + } 1.41 +}); 1.42 + 1.43 +for (var v of obj) 1.44 + s += v; 1.45 + 1.46 +assertEq(s, 'IiNn0Nn1Nn2Nn');