diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js')
-rw-r--r-- | js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js new file mode 100644 index 0000000000..14b44fe52f --- /dev/null +++ b/js/src/tests/test262/built-ins/Array/from/iter-map-fn-this-non-strict.js @@ -0,0 +1,62 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-array.from +description: > + `this` value of mapping function in non-strict mode (traversed via iterator) +info: | + [...] + 2. If mapfn is undefined, let mapping be false. + 3. else + a. If IsCallable(mapfn) is false, throw a TypeError exception. + b. If thisArg was supplied, let T be thisArg; else let T be undefined. + c. Let mapping be true + [...] + 6. If usingIterator is not undefined, then + [...] + g. Repeat + [...] + vii. If mapping is true, then + 1. Let mappedValue be Call(mapfn, T, «nextValue, k»). +features: [Symbol.iterator] +flags: [noStrict] +---*/ + +var thisVals = []; +var nextResult = { + done: false, + value: {} +}; +var nextNextResult = { + done: false, + value: {} +}; +var mapFn = function() { + thisVals.push(this); +}; +var items = {}; +var global = function() { + return this; +}(); + +items[Symbol.iterator] = function() { + return { + next: function() { + var result = nextResult; + nextResult = nextNextResult; + nextNextResult = { + done: true + }; + + return result; + } + }; +}; + +Array.from(items, mapFn); + +assert.sameValue(thisVals.length, 2); +assert.sameValue(thisVals[0], global, 'First iteration `this` value'); +assert.sameValue(thisVals[1], global, 'Second iteration `this` value'); + +reportCompare(0, 0); |