// Copyright (C) 2015 Caitlin Potter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: Intrinsic %FunctionPrototype% has poisoned own property "arguments"
includes: [propertyHelper.js]
es6id: 8.2.2 S12, 9.2.7
---*/

var FunctionPrototype = Function.prototype;

assert.sameValue(FunctionPrototype.hasOwnProperty('arguments'), true, 'The result of %FunctionPrototype%.hasOwnProperty("arguments") is true');
var descriptor = Object.getOwnPropertyDescriptor(FunctionPrototype, 'arguments');
assert.sameValue(typeof descriptor.get, 'function', '%FunctionPrototype%.arguments is an accessor property');
assert.sameValue(typeof descriptor.set, 'function', '%FunctionPrototype%.arguments is an accessor property');
assert.sameValue(descriptor.get, descriptor.set, '%FunctionPrototype%.arguments getter/setter are both %ThrowTypeError%');

assert.throws(TypeError, function() {
  return FunctionPrototype.arguments;
});

assert.throws(TypeError, function() {
  FunctionPrototype.arguments = {};
});

verifyNotEnumerable(FunctionPrototype, 'arguments');
verifyConfigurable(FunctionPrototype, 'arguments');
