keith_miller@apple.com | bcc77f2 | 2016-07-15 06:03:25 +0000 | [diff] [blame] | 1 | // Copyright 2015 Microsoft Corporation. All rights reserved.
|
| 2 | // This code is governed by the license found in the LICENSE file.
|
| 3 | /*---
|
| 4 | es6id: 22.1.2.1
|
| 5 | description: Map function without thisArg on non strict mode
|
| 6 | info: >
|
| 7 | 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
|
| 8 |
|
| 9 | ...
|
| 10 | 10. Let len be ToLength(Get(arrayLike, "length")).
|
| 11 | 11. ReturnIfAbrupt(len).
|
| 12 | 12. If IsConstructor(C) is true, then
|
| 13 | a. Let A be Construct(C, «len»).
|
| 14 | 13. Else,
|
| 15 | b. Let A be ArrayCreate(len).
|
| 16 | 14. ReturnIfAbrupt(A).
|
| 17 | 15. Let k be 0.
|
| 18 | 16. Repeat, while k < len
|
| 19 | a. Let Pk be ToString(k).
|
| 20 | b. Let kValue be Get(arrayLike, Pk).
|
| 21 | c. ReturnIfAbrupt(kValue).
|
| 22 | d. If mapping is true, then
|
| 23 | i. Let mappedValue be Call(mapfn, T, «kValue, k»).
|
| 24 | ...
|
| 25 | flags: [noStrict]
|
| 26 | ---*/
|
| 27 |
|
| 28 | var list = {
|
| 29 | '0': 41,
|
| 30 | '1': 42,
|
| 31 | '2': 43,
|
| 32 | length: 3
|
| 33 | };
|
| 34 | var calls = [];
|
| 35 |
|
| 36 | function mapFn (value) {
|
| 37 | calls.push({
|
| 38 | args: arguments,
|
| 39 | thisArg: this
|
| 40 | });
|
| 41 | return value * 2;
|
| 42 | }
|
| 43 |
|
| 44 | var result = Array.from(list, mapFn);
|
| 45 |
|
| 46 | assert.sameValue(result.length, 3, 'result.length');
|
| 47 | assert.sameValue(result[0], 82, 'result[0]');
|
| 48 | assert.sameValue(result[1], 84, 'result[1]');
|
| 49 | assert.sameValue(result[2], 86, 'result[2]');
|
| 50 |
|
| 51 | assert.sameValue(calls.length, 3, 'calls.length');
|
| 52 |
|
| 53 | assert.sameValue(calls[0].args.length, 2, 'calls[0].args.length');
|
| 54 | assert.sameValue(calls[0].args[0], 41, 'calls[0].args[0]');
|
| 55 | assert.sameValue(calls[0].args[1], 0, 'calls[0].args[1]');
|
| 56 | assert.sameValue(calls[0].thisArg, this, 'calls[0].thisArg');
|
| 57 |
|
| 58 | assert.sameValue(calls[1].args.length, 2, 'calls[1].args.length');
|
| 59 | assert.sameValue(calls[1].args[0], 42, 'calls[1].args[0]');
|
| 60 | assert.sameValue(calls[1].args[1], 1, 'calls[1].args[1]');
|
| 61 | assert.sameValue(calls[1].thisArg, this, 'calls[1].thisArg');
|
| 62 |
|
| 63 | assert.sameValue(calls[2].args.length, 2, 'calls[2].args.length');
|
| 64 | assert.sameValue(calls[2].args[0], 43, 'calls[2].args[0]');
|
| 65 | assert.sameValue(calls[2].args[1], 2, 'calls[2].args[1]');
|
| 66 | assert.sameValue(calls[2].thisArg, this, 'calls[2].thisArg'); |