Fix Array.prototype.concat() when 'this' is not an array.

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai dbatyai.u-szeged@partner.samsung.com
This commit is contained in:
Dániel Bátyai
2015-07-15 14:45:31 +02:00
parent 27161d31df
commit 9513808647
4 changed files with 163 additions and 113 deletions
+17 -15
View File
@@ -21,10 +21,17 @@ for (i = 0; i < array.length; i++) {
assert(array[i] === new_arr[i]);
}
var obj = {};
var obj = { concat : Array.prototype.concat };
var arr1 = ["Apple", 6, "Peach"];
var arr2 = [obj, "Cherry", "Grape"];
var new_array = obj.concat(arr1);
assert(new_array.length === 4);
assert(new_array[0] === obj);
assert(new_array[1] === "Apple");
assert(new_array[2] === 6);
assert(new_array[3] === "Peach");
var new_array = arr1.concat(arr2, obj, 1);
assert(new_array.length === 8);
@@ -50,24 +57,19 @@ for (i = 0; i < result.length; i++) {
assert(result[i] === expected[i]);
}
// Checking behavior when unable to get length
var obj = { concat : Array.prototype.concat }
Object.defineProperty(obj, 'length', { 'get' : function () {throw new ReferenceError ("foo"); } });
try {
obj.concat();
assert(false);
} catch (e) {
assert(e.message === "foo");
assert(e instanceof ReferenceError);
}
var arr1 = [];
arr1.length = 2;
var arr2 = [];
arr2.length = 3;
assert(arr1.concat(arr2).length === arr1.length + arr2.length);
// Checking behavior when unable to get element
var obj = { concat : Array.prototype.concat, length : 1 }
Object.defineProperty(obj, '0', { 'get' : function () {throw new ReferenceError ("foo"); } });
var arr = []
Object.defineProperty(arr, '0', { 'get' : function () {throw new ReferenceError ("foo"); } });
arr.length = 1;
try {
obj.concat();
arr.concat();
assert(false);
} catch (e) {
assert(e.message === "foo");