mirror of https://github.com/tc39/test262.git
Merge pull request #376 from yanlxu/Array.from
update tests for Array.from
This commit is contained in:
commit
91e1a0b761
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Testing descriptor property of Array.from
|
||||||
|
includes:
|
||||||
|
- propertyHelper.js
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
verifyWritable(Array, "from");
|
||||||
|
verifyNotEnumerable(Array, "from");
|
||||||
|
verifyConfigurable(Array, "from");
|
|
@ -0,0 +1,30 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
description: '`name` property'
|
||||||
|
info: >
|
||||||
|
ES6 Section 17:
|
||||||
|
|
||||||
|
Every built-in Function object, including constructors, that is not
|
||||||
|
identified as an anonymous function has a name property whose value is a
|
||||||
|
String. Unless otherwise specified, this value is the name that is given to
|
||||||
|
the function in this specification.
|
||||||
|
|
||||||
|
[...]
|
||||||
|
|
||||||
|
Unless otherwise specified, the name property of a built-in Function
|
||||||
|
object, if it exists, has the attributes { [[Writable]]: false,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
Array.from.name,
|
||||||
|
'from',
|
||||||
|
'The value of `Array.from.name` is `"from"`'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyNotEnumerable(Array.from, 'name');
|
||||||
|
verifyNotWritable(Array.from, 'name');
|
||||||
|
verifyConfigurable(Array.from, 'name');
|
|
@ -4,9 +4,20 @@
|
||||||
/*---
|
/*---
|
||||||
es6id: 22.1.2.1
|
es6id: 22.1.2.1
|
||||||
description: >
|
description: >
|
||||||
The Array.from() method creates a new Array instance
|
The length property of the Array.from method is 1.
|
||||||
from an array-like or iterable object.
|
|
||||||
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
|
info: >
|
||||||
|
|
||||||
|
ES6 Section 17:
|
||||||
|
|
||||||
|
Unless otherwise specified, the length property of a built-in Function
|
||||||
|
object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
assert.sameValue(Array.from.length, 1);
|
assert.sameValue(Array.from.length, 1);
|
||||||
|
|
||||||
|
verifyNotEnumerable(Array.from, 'length');
|
||||||
|
verifyNotWritable(Array.from, 'length');
|
||||||
|
verifyConfigurable(Array.from, 'length');
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: this argument is passed as null
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.throws(TypeError, function(){Array.from.call(null);});
|
|
@ -0,0 +1,25 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Calling from with a valid map function without thisArg use noStrict
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
flags: [noStrict]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
var globalThis = this;
|
||||||
|
function mapFn(value, k) {
|
||||||
|
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "From mapFn Element mismatch for index " + arrayIndex + ".");
|
||||||
|
assert.sameValue(k, arrayIndex, "From mapFn index mismatch for " + arrayIndex + ".");
|
||||||
|
assert.sameValue(globalThis, this, "Wrong this value is passed to mapFn for index " + arrayIndex + ".");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
var a = Array.from(array, mapFn);
|
||||||
|
for (var j = 0; j < array.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Calling from with a valid map function without thisArg use onlyStrict
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
flags: [onlyStrict]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
|
||||||
|
function mapFn(value, k) {
|
||||||
|
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "From mapFn Element mismatch for index " + arrayIndex + ".");
|
||||||
|
assert.sameValue(k, arrayIndex, "From mapFn index mismatch for " + arrayIndex + ".");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
var a = Array.from(array, mapFn);
|
||||||
|
for (var j = 0; j < array.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Calling from with a valid map function with thisArg
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn (value, k) {
|
||||||
|
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "In mapFn element mismatch for index " + arrayIndex + " in the mapFn.");
|
||||||
|
assert.sameValue(k, arrayIndex, "From mapFn index mismatch for " + arrayIndex + ".");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = Array.from(array, mapFn, this);
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Create a TypedArray from another TypedArray
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var typedArray = Int32Array.from([1, 2, 4, 8, 16, 32, 64, 128]);
|
||||||
|
var a = Array.from(typedArray);
|
||||||
|
for (var j = 0; j < typedArray.length; j++) {
|
||||||
|
assert.sameValue(a[j], typedArray[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Elements added after the call to from
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var arrayIndex = -1;
|
||||||
|
var originalLength = 7;
|
||||||
|
var obj = {
|
||||||
|
length: originalLength,
|
||||||
|
0: 2,
|
||||||
|
1: 4,
|
||||||
|
2: 8,
|
||||||
|
3: 16,
|
||||||
|
4: 32,
|
||||||
|
5: 64,
|
||||||
|
6: 128
|
||||||
|
};
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
function mapFn(value, index) {
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, obj[arrayIndex], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
obj[originalLength + arrayIndex] = 2 * arrayIndex + 1;
|
||||||
|
|
||||||
|
return obj[arrayIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var a = Array.from(obj, mapFn);
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch.");
|
||||||
|
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Element mismatch for array at index " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: >
|
||||||
|
Elements deleted after the call started and before visited are not
|
||||||
|
visited
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var originalArray = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var array = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var a = [];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, index) {
|
||||||
|
this.arrayIndex++;
|
||||||
|
assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
|
||||||
|
array.splice(array.length - 1, 1);
|
||||||
|
return 127;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
a = Array.from(array, mapFn, this);
|
||||||
|
|
||||||
|
assert.sameValue(a.length, originalArray.length / 2, "Length mismatch. Old array : " + (originalArray.length / 2) + ". array : " + a.length + ".");
|
||||||
|
|
||||||
|
for (var j = 0; j < originalArray.length / 2; j++) {
|
||||||
|
assert.sameValue(a[j], 127, "Element mismatch for mapped array at index " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Elements are updated after the call to from
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 127, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, index) {
|
||||||
|
arrayIndex++;
|
||||||
|
if (index + 1 < array.length) {
|
||||||
|
array[index + 1] = 127;
|
||||||
|
}
|
||||||
|
assert.sameValue(value, 127, "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = Array.from(array, mapFn);
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch.");
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], 127, "Element mismatch for mapped array.");
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: map is called by passing null for thisArg
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var arrayIndex = -1;
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
|
||||||
|
function mapFn(value, index) {
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
|
||||||
|
return array[arrayIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var a = Array.from(array, mapFn, null);
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch. array : " + a.length + ". Original array : " + array.length + ".");
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Element mismatch for mapped array.");
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: mapFn is attached to the Array itself
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
var a = [];
|
||||||
|
var i = 0;
|
||||||
|
Array.prototype.mapFn = function(value, index) {
|
||||||
|
assert.sameValue(value, array[i], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, i, "Index mismatch in mapFn.");
|
||||||
|
i++;
|
||||||
|
|
||||||
|
return 127;
|
||||||
|
};
|
||||||
|
|
||||||
|
a = Array.from(array, a.mapFn , a);
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch. array : " + array.length + ". Mapped array : " + a.length + ".");
|
||||||
|
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], 127, "Element mismatch for mapped array at index " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: mapFn is invalid causes a TypeError
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.throws(TypeError, function(){Array.from(null);});
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: mapFn is invalid causes a TypeError
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var obj = {};
|
||||||
|
var array = [ ];
|
||||||
|
assert.throws(TypeError, function(){Array.from(array, obj);});
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: mapFn returns a non-integer
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, index) {
|
||||||
|
this.arrayIndex++;
|
||||||
|
assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
|
||||||
|
return {
|
||||||
|
val : 127,
|
||||||
|
get value() {
|
||||||
|
return this.val;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var a = Array.from(array, mapFn, this);
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch. array : " + array.length + ". Mapped array : " + a.length + ".");
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j].value, 127, "Element mismatch for mapped array at index " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: mapFn throws an exception
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
function mapFn(value, index, obj) {
|
||||||
|
throw new Test262Error();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(Test262Error, function(){Array.from(array, mapFn);});
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Passing array Buffer
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var arrayBuffer = new ArrayBuffer([ 1, 2, 4, 8, 16, 32, 64, 128 ]);
|
||||||
|
var a = Array.from(arrayBuffer);
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], arrayBuffer[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Passing a valid array
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 0, 1, -2, 4, -8, 16 ];
|
||||||
|
var a = Array.from(array);
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source array with boundary values
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ Number.MAX_VALUE, Number.MIN_VALUE, Number.NaN, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY ];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, index) {
|
||||||
|
this.arrayIndex++;
|
||||||
|
assert.sameValue(value, array[this.arrayIndex], "Value mismatch in mapFn at index " + index + ".");
|
||||||
|
assert.sameValue(index, this.arrayIndex, "Index mismatch in mapFn.");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = Array.from(array, mapFn, this);
|
||||||
|
|
||||||
|
assert.sameValue(a.length, array.length, "Length mismatch.");
|
||||||
|
assert.sameValue(a[0], Number.MAX_VALUE, "Element mismatch for mapped array at index 0.");
|
||||||
|
assert.sameValue(a[1], Number.MIN_VALUE, "Element mismatch for mapped array at index 1.");
|
||||||
|
assert.sameValue(a[2], Number.NaN, "Element mismatch for mapped array at index 2.");
|
||||||
|
assert.sameValue(a[3], Number.NEGATIVE_INFINITY, "Element mismatch for mapped array at index 3.");
|
||||||
|
assert.sameValue(a[4], Number.POSITIVE_INFINITY, "Element mismatch for mapped array at index 4.");
|
|
@ -0,0 +1,10 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: >
|
||||||
|
Array.from uses a constructor other than Array.
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.sameValue(Array.from.call(Object, []).constructor, Object);
|
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source object has iterator which throws
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
var obj = {
|
||||||
|
[Symbol.iterator]() {
|
||||||
|
return {
|
||||||
|
index: 0,
|
||||||
|
next() {
|
||||||
|
throw new Test262Error();
|
||||||
|
},
|
||||||
|
isDone : false,
|
||||||
|
get val() {
|
||||||
|
this.index++;
|
||||||
|
if (this.index > 7) {
|
||||||
|
this.isDone = true;
|
||||||
|
}
|
||||||
|
return 1 << this.index;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
assert.throws(Test262Error, function(){Array.from(obj);});
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source object has iterator
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [ 2, 4, 8, 16, 32, 64, 128 ];
|
||||||
|
var obj = {
|
||||||
|
[Symbol.iterator]() {
|
||||||
|
return {
|
||||||
|
index: 0,
|
||||||
|
next() {
|
||||||
|
return {
|
||||||
|
value: this.val,
|
||||||
|
done: this.isDone
|
||||||
|
};
|
||||||
|
},
|
||||||
|
isDone : false,
|
||||||
|
get val() {
|
||||||
|
this.index++;
|
||||||
|
if (this.index > 7) {
|
||||||
|
this.isDone = true;
|
||||||
|
}
|
||||||
|
return 1 << this.index;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var a = Array.from.call(Object, obj);
|
||||||
|
assert.sameValue(typeof a, typeof {}, "The returned type is expected to be object.");
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: >
|
||||||
|
Source is an object with length property and one item is deleted
|
||||||
|
from the source
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [2, 4, 0, 16];
|
||||||
|
var expectedArray = [2, 4, , 16];
|
||||||
|
var obj = {
|
||||||
|
length : 4,
|
||||||
|
0 : 2,
|
||||||
|
1 : 4,
|
||||||
|
2 : 0,
|
||||||
|
3 : 16
|
||||||
|
};
|
||||||
|
delete obj[2];
|
||||||
|
var a = Array.from(obj);
|
||||||
|
for (var j = 0; j < expectedArray.length; j++) {
|
||||||
|
assert.sameValue(a[j], expectedArray[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source is an object with missing values
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [2, 4, , 16];
|
||||||
|
var obj = {
|
||||||
|
length: 4,
|
||||||
|
0: 2,
|
||||||
|
1: 4,
|
||||||
|
3: 16
|
||||||
|
};
|
||||||
|
|
||||||
|
var a = Array.from.call(Object, obj);
|
||||||
|
assert.sameValue(typeof a, "object", "The returned type is expected to be object.");
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source is an object without length property
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var obj = {
|
||||||
|
0: 2,
|
||||||
|
1: 4,
|
||||||
|
2: 8,
|
||||||
|
3: 16
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = Array.from(obj);
|
||||||
|
assert.sameValue(a.length, 0, "Expected an array of length 0.");
|
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source is a sparse array use noStrict
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
flags: [noStrict]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [0, 1, -2, 4, -8, , -32, 64, , 256, -512, 1024];
|
||||||
|
var globalThis = this;
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, k) {
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "From mapFn Element mismatch for index " + arrayIndex + ".");
|
||||||
|
assert.sameValue(k, arrayIndex, "From mapFn index mismatch for " + arrayIndex + ".");
|
||||||
|
assert.sameValue(globalThis, this, "Wrong this value is passed to mapFn for index " + arrayIndex + ".");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
var a = Array.from(array, mapFn);
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
// Copyright 2015 Microsoft Corporation. All rights reserved.
|
||||||
|
// This code is governed by the license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
description: Source is a sparse array use onlyStrict
|
||||||
|
es6id: 22.1.2.1
|
||||||
|
flags: [onlyStrict]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var array = [0, 1, -2, 4, -8, , -32, 64, , 256, -512, 1024];
|
||||||
|
var arrayIndex = -1;
|
||||||
|
function mapFn(value, k) {
|
||||||
|
arrayIndex++;
|
||||||
|
assert.sameValue(value, array[arrayIndex], "From mapFn Element mismatch for index " + arrayIndex + ".");
|
||||||
|
assert.sameValue(k, arrayIndex, "From mapFn index mismatch for " + arrayIndex + ".");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
var a = Array.from(array, mapFn);
|
||||||
|
for (var j = 0; j < a.length; j++) {
|
||||||
|
assert.sameValue(a[j], array[j], "Elements mismatch at " + j + ".");
|
||||||
|
}
|
Loading…
Reference in New Issue