Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: test/mjsunit/es6/function-length-configurable.js

Issue 993073002: [es6] Function length property should be configurable (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix status file again Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/bootstrapper.cc ('k') | test/mjsunit/es7/object-observe.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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.
4
5 function getStrictF() {
6 'use strict';
7 return function f(x) {};
8 }
9
10
11 function getSloppyF() {
12 return function f(x) {};
13 }
14
15
16 function getStrictGenerator() {
17 'use strict';
18 return function* f(x) {};
19 }
20
21
22 function getSloppyGenerator() {
23 return function* f(x) {};
24 }
25
26
27 function test(testFunction) {
28 testFunction(getStrictF());
29 testFunction(getSloppyF());
30 testFunction(getStrictGenerator());
31 testFunction(getSloppyGenerator());
32 }
33
34
35 function testDescriptor(f) {
36 var descr = Object.getOwnPropertyDescriptor(f, 'length');
37 assertTrue(descr.configurable);
38 assertFalse(descr.enumerable);
39 assertEquals(1, descr.value);
40 assertFalse(descr.writable);
41 }
42 test(testDescriptor);
43
44
45 function testSet(f) {
46 f.length = 2;
47 assertEquals(1, f.length);
48 }
49 test(testSet);
50
51
52 function testSetStrict(f) {
53 'use strict';
54 assertThrows(function() {
55 f.length = 2;
56 }, TypeError);
57 }
58 test(testSetStrict);
59
60
61 function testReconfigureAsDataProperty(f) {
62 Object.defineProperty(f, 'length', {
63 value: 2,
64 });
65 assertEquals(2, f.length);
66 Object.defineProperty(f, 'length', {
67 writable: true
68 });
69 f.length = 3;
70 assertEquals(3, f.length);
71
72 f.length = 42;
73 assertEquals(42, f.length);
74 }
75 test(testReconfigureAsDataProperty);
76
77
78 function testReconfigureAsAccessorProperty(f) {
79 var length = 2;
80 Object.defineProperty(f, 'length', {
81 get: function() { return length; },
82 set: function(v) { length = v; }
83 });
84 assertEquals(2, f.length);
85 f.length = 3;
86 assertEquals(3, f.length);
87 }
88 test(testReconfigureAsAccessorProperty);
89
90
91 (function testSetOnInstance() {
92 // This needs to come before testDelete below
93 assertTrue(Function.prototype.hasOwnProperty('length'));
94
95 function f() {}
96 delete f.length;
97 assertEquals(0, f.length);
98
99 f.length = 42;
100 assertEquals(0, f.length); // non writable prototype property.
101 assertFalse(f.hasOwnProperty('length'));
102
103 Object.defineProperty(Function.prototype, 'length', {writable: true});
104
105 f.length = 123;
106 assertTrue(f.hasOwnProperty('length'));
107 assertEquals(123, f.length);
108 })();
109
110
111 (function testDelete() {
112 function f(x) {}
113 assertTrue(delete f.length);
114 assertFalse(f.hasOwnProperty('length'));
115 assertEquals(0, f.length);
116
117 assertTrue(delete Function.prototype.length);
118 assertEquals(undefined, f.length);
119 })();
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | test/mjsunit/es7/object-observe.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698