1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 function getStrictF() {
7 return function f() {};
11 function getSloppyF() {
12 return function f() {};
16 function test(testFunction) {
17 testFunction(getStrictF());
18 testFunction(getSloppyF());
22 function testDescriptor(f) {
23 var descr = Object.getOwnPropertyDescriptor(f, 'name');
24 assertTrue(descr.configurable);
25 assertFalse(descr.enumerable);
26 assertEquals('f', descr.value);
27 assertFalse(descr.writable);
34 assertEquals('f', f.name);
39 function testSetStrict(f) {
41 assertThrows(function() {
48 function testReconfigureAsDataProperty(f) {
49 Object.defineProperty(f, 'name', {
52 assertEquals('g', f.name);
53 Object.defineProperty(f, 'name', {
57 assertEquals('h', f.name);
60 assertEquals(42, f.name);
62 test(testReconfigureAsDataProperty);
65 function testReconfigureAsAccessorProperty(f) {
67 Object.defineProperty(f, 'name', {
68 get: function() { return name; },
69 set: function(v) { name = v; }
71 assertEquals('g', f.name);
73 assertEquals('h', f.name);
75 test(testReconfigureAsAccessorProperty);
78 function testFunctionToString(f) {
79 Object.defineProperty(f, 'name', {
80 value: {toString: function() { assertUnreachable(); }},
82 assertEquals('function f() {}', f.toString());
84 test(testFunctionToString);
87 (function testSetOnInstance() {
88 // This needs to come before testDelete below
89 assertTrue(Function.prototype.hasOwnProperty('name'));
93 assertEquals('Empty', f.name);
96 assertEquals('Empty', f.name); // non writable prototype property.
97 assertFalse(f.hasOwnProperty('name'));
99 Object.defineProperty(Function.prototype, 'name', {writable: true});
102 assertTrue(f.hasOwnProperty('name'));
103 assertEquals(123, f.name);
107 (function testDelete() {
109 assertTrue(delete f.name);
110 assertFalse(f.hasOwnProperty('name'));
111 assertEquals('Empty', f.name);
113 assertTrue(delete Function.prototype.name);
114 assertEquals(undefined, f.name);