mirror of
https://github.com/tc39/test262.git
synced 2025-08-28 13:28:38 +02:00
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
/// Copyright (c) 2012 Ecma International. All rights reserved.
|
||
/// Ecma International makes this code available under the terms and conditions set
|
||
/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
|
||
/// "Use Terms"). Any redistribution of this code must retain the above
|
||
/// copyright and this notice and otherwise comply with the Use Terms.
|
||
/**
|
||
* @path ch15/15.4/15.4.4/15.4.4.20/15.4.4.20-3-22.js
|
||
* @description Array.prototype.filter throws TypeError exception when 'length' is an object with toString and valueOf methods that don<6F>t return primitive values
|
||
*/
|
||
|
||
|
||
function testcase() {
|
||
|
||
var accessed = false;
|
||
var firstStepOccured = false;
|
||
var secondStepOccured = false;
|
||
|
||
function callbackfn(val, idx, obj) {
|
||
accessed = true;
|
||
return true;
|
||
}
|
||
|
||
var obj = {
|
||
1: 11,
|
||
2: 12,
|
||
|
||
length: {
|
||
valueOf: function () {
|
||
firstStepOccured = true;
|
||
return {};
|
||
},
|
||
toString: function () {
|
||
secondStepOccured = true;
|
||
return {};
|
||
}
|
||
}
|
||
};
|
||
|
||
try {
|
||
Array.prototype.filter.call(obj, callbackfn);
|
||
return false;
|
||
} catch (ex) {
|
||
return (ex instanceof TypeError) && !accessed && firstStepOccured && secondStepOccured;
|
||
}
|
||
}
|
||
runTestCase(testcase);
|