test262/test/built-ins/Function/StrictFunction_restricted-properties.js
Mike Pennisi c0a3b2db7d Relax test for forbidden extension
According to ES2015, functions created using the FunctionDeclaration
syntax may define "own" properties named "caller" and "arguments" as
long as this is done using the AddRestrictedFunctionProperties abstract
operation.

Remove the assertions that prohibit this extension.
2016-06-14 15:26:12 -04:00

52 lines
1.3 KiB
JavaScript

// Copyright (C) 2015 Caitlin Potter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
ECMAScript Function objects defined using syntactic constructors
in strict mode code do not have own properties "caller" or
"arguments" other than those that are created by applying the
AddRestrictedFunctionProperties abstract operation to the function.
flags: [onlyStrict]
es6id: 16.1
---*/
function func() {}
assert.throws(TypeError, function() {
return func.caller;
});
assert.throws(TypeError, function() {
func.caller = {};
});
assert.throws(TypeError, function() {
return func.arguments;
});
assert.throws(TypeError, function() {
func.arguments = {};
});
var newfunc = new Function('"use strict"');
assert.sameValue(newfunc.hasOwnProperty('caller'), false, 'strict Functions created using Function constructor do not have own property "caller"');
assert.sameValue(newfunc.hasOwnProperty('arguments'), false, 'strict Functions created using Function constructor do not have own property "arguments"');
assert.throws(TypeError, function() {
return newfunc.caller;
});
assert.throws(TypeError, function() {
newfunc.caller = {};
});
assert.throws(TypeError, function() {
return newfunc.arguments;
});
assert.throws(TypeError, function() {
newfunc.arguments = {};
});