| Tests for Array.from |
| |
| On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". |
| |
| |
| |
| Length of Array.from |
| ------- |
| PASS Array.from.length is 1 |
| |
| Simple construction |
| ------- |
| PASS Array.from instanceof Function is true |
| PASS Array.from([1]) is [1] |
| PASS Array.from([1, 2, 3]) is [1, 2, 3] |
| PASS Array.from([1, 2, 3]).length is 3 |
| PASS Array.from('abc') is ['a', 'b', 'c'] |
| PASS Array.from('abc').length is 3 |
| PASS Array.from(Array.from([4, 5, 6])) is [4, 5, 6] |
| PASS Array.from([null, null]) is [null, null] |
| PASS Array.from([]).length is 0 |
| PASS Array.from(new Uint8Array([1, 2, 3])) is [1, 2, 3] |
| |
| Incorrect construction |
| ------- |
| PASS Array.from() threw exception TypeError: Array.from requires an array-like object - not null or undefined. |
| PASS Array.from(null) threw exception TypeError: Array.from requires an array-like object - not null or undefined. |
| PASS Array.from(undefined) threw exception TypeError: Array.from requires an array-like object - not null or undefined. |
| Declare wayTooSmall = { length: -1 } |
| PASS Array.from(wayTooSmall) is [] |
| Declare wayTooBig = { length: Infinity } |
| PASS Array.from(wayTooBig) threw exception RangeError: Array size is not a small enough positive integer.. |
| |
| Mapped construction |
| ------- |
| PASS Array.from([1, 2, 3], function (x) { return x * 10; }) is [10, 20, 30] |
| PASS Array.from([1, 2, 3], function (x) { return null; }) is [null, null, null] |
| PASS Array.from([1, 2, 3], function (x) { }).length is 3 |
| PASS Array.from({length: 5}, function(v, k) { return k; }) is [0, 1, 2, 3, 4] |
| Declare var bacon = { eggs: 5 } |
| PASS Array.from([1, 2, 3], function (x) { return x * this.eggs; }, bacon) is [5, 10, 15] |
| |
| Incorrect mapped construction |
| ------- |
| PASS Array.from([1, 2, 3], null) threw exception TypeError: Array.from requires that the second argument, when provided, be a function. |
| PASS Array.from([1, 2, 3], []) threw exception TypeError: Array.from requires that the second argument, when provided, be a function. |
| PASS Array.from([1, 2, 3], [1]) threw exception TypeError: Array.from requires that the second argument, when provided, be a function. |
| |
| Weird construction |
| ------- |
| PASS Array.from(Math).length is 0 |
| Declare wayTooWrong = { length: NaN } |
| PASS Array.from(wayTooWrong) is [] |
| |
| Array with holes |
| ------- |
| PASS Array.from(arrayWithHoles) is [,,, true,,,, , , 'hi'] |
| |
| Modify length during construction |
| ------- |
| PASS Array.from(crazyPants) is ['one', 'two', 'three', 'four'] |
| |
| Modify length during mapping |
| ------- |
| PASS Array.from(crazyPants, function (x) { crazyPants.length = x; return x; }) is ['one', 'two', 'three', 'four'] |
| |
| Construction using Set object |
| ------- |
| PASS Array.from(set) is ['zero', 'one', 'two'] |
| |
| "this" is a constructor |
| ------- |
| PASS Array.from.call(CustomConstructor, ['WebKit']).constructor is CustomConstructor |
| PASS Object.getPrototypeOf(Array.from.call(CustomConstructor, ['WebKit'])) is CustomConstructor.prototype |
| PASS Array.from.call(nonConstructor, ['WebKit']).length is 1 |
| PASS Array.from.call(nonConstructor, ['WebKit'])[0] is "WebKit" |
| PASS Array.from.call(CustomConstructor, nonIterable).constructor is CustomConstructor |
| PASS Object.getPrototypeOf(Array.from.call(CustomConstructor, nonIterable)) is CustomConstructor.prototype |
| PASS Array.from.call(nonConstructor, nonIterable).length is 2 |
| PASS Array.from.call(nonConstructor, nonIterable)[0] is "one" |
| PASS Array.from.call(nonConstructor, nonIterable)[1] is 2 |
| |
| "this" is not a constructor |
| ------- |
| PASS Array.from.call(nonConstructor, ['WebKit']).constructor is Array |
| PASS Object.getPrototypeOf(Array.from.call(nonConstructor, ['WebKit'])) is Array.prototype |
| PASS Array.from.call(nonConstructor, ['WebKit']).length is 1 |
| PASS Array.from.call(nonConstructor, ['WebKit'])[0] is "WebKit" |
| PASS nonConstructorWasCalled is false |
| PASS Array.from.call(nonConstructor, nonIterable).constructor is Array |
| PASS Object.getPrototypeOf(Array.from.call(nonConstructor, nonIterable)) is Array.prototype |
| PASS Array.from.call(nonConstructor, nonIterable).length is 2 |
| PASS Array.from.call(nonConstructor, nonIterable)[0] is "one" |
| PASS Array.from.call(nonConstructor, nonIterable)[1] is 2 |
| PASS successfullyParsed is true |
| |
| TEST COMPLETE |
| |