OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Flags: --harmony-function-name | 5 // Flags: --harmony-function-name |
6 // Flags: --harmony-destructuring-bind --harmony-destructuring-assignment | 6 // Flags: --harmony-destructuring-bind --harmony-destructuring-assignment |
7 | 7 |
8 (function testVariableDeclarationsFunction() { | 8 (function testVariableDeclarationsFunction() { |
9 'use strict'; | 9 'use strict'; |
10 var a = function(){}; | 10 var a = function(){}; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 var descriptor = Object.getOwnPropertyDescriptor(C.prototype, 'c'); | 83 var descriptor = Object.getOwnPropertyDescriptor(C.prototype, 'c'); |
84 assertEquals('get c', descriptor.get.name); | 84 assertEquals('get c', descriptor.get.name); |
85 assertEquals('set c', descriptor.set.name); | 85 assertEquals('set c', descriptor.set.name); |
86 assertEquals('42', C.prototype[42].name); | 86 assertEquals('42', C.prototype[42].name); |
87 assertEquals('43', C[43].name); | 87 assertEquals('43', C[43].name); |
88 var descriptor = Object.getOwnPropertyDescriptor(C.prototype, '44'); | 88 var descriptor = Object.getOwnPropertyDescriptor(C.prototype, '44'); |
89 assertEquals('get 44', descriptor.get.name); | 89 assertEquals('get 44', descriptor.get.name); |
90 assertEquals('set 44', descriptor.set.name); | 90 assertEquals('set 44', descriptor.set.name); |
91 })(); | 91 })(); |
92 | 92 |
93 // TODO(adamk): Make computed property names work. | |
94 (function testComputedProperties() { | 93 (function testComputedProperties() { |
95 'use strict'; | 94 'use strict'; |
96 var a = 'a'; | 95 var a = 'a'; |
| 96 var b = 'b'; |
97 var sym1 = Symbol('1'); | 97 var sym1 = Symbol('1'); |
98 var sym2 = Symbol('2'); | 98 var sym2 = Symbol('2'); |
| 99 var sym3 = Symbol('3'); |
| 100 var symNoDescription = Symbol(); |
99 var obj = { | 101 var obj = { |
100 [a]: function() {}, | 102 [a]: function() {}, |
101 [sym1]: function() {}, | 103 [sym1]: function() {}, |
102 [sym2]: function withName() {}, | 104 [sym2]: function withName() {}, |
| 105 [symNoDescription]: function() {}, |
| 106 |
| 107 get [sym3]() {}, |
| 108 set [b](val) {}, |
103 }; | 109 }; |
104 | 110 |
105 // Should be 'a' | 111 assertEquals('a', obj[a].name); |
106 assertEquals('', obj[a].name); | 112 assertEquals('[1]', obj[sym1].name); |
107 // Should be '[1]' | |
108 assertEquals('', obj[sym1].name); | |
109 assertEquals('withName', obj[sym2].name); | 113 assertEquals('withName', obj[sym2].name); |
| 114 assertEquals('', obj[symNoDescription].name); |
| 115 |
| 116 assertEquals('get [3]', Object.getOwnPropertyDescriptor(obj, sym3).get.name); |
| 117 assertEquals('set b', Object.getOwnPropertyDescriptor(obj, 'b').set.name); |
| 118 |
| 119 var objMethods = { |
| 120 [a]() {}, |
| 121 [sym1]() {}, |
| 122 [symNoDescription]: function() {}, |
| 123 }; |
| 124 |
| 125 assertEquals('a', objMethods[a].name); |
| 126 assertEquals('[1]', objMethods[sym1].name); |
| 127 assertEquals('', objMethods[symNoDescription].name); |
110 | 128 |
111 class C { | 129 class C { |
112 [a]() { } | 130 [a]() { } |
113 [sym1]() { } | 131 [sym1]() { } |
114 static [sym2]() { } | 132 static [sym2]() { } |
| 133 [symNoDescription]() { } |
| 134 |
| 135 get [sym3]() { } |
| 136 static set [b](val) { } |
115 } | 137 } |
116 | 138 |
117 // Should be 'a' | 139 assertEquals('a', C.prototype[a].name); |
118 assertEquals('', C.prototype[a].name); | 140 assertEquals('[1]', C.prototype[sym1].name); |
119 // Should be '[1]' | 141 assertEquals('[2]', C[sym2].name); |
120 assertEquals('', C.prototype[sym1].name); | 142 assertEquals('', C.prototype[symNoDescription].name); |
121 // Should be '[2]' | 143 |
122 assertEquals('', C[sym2].name); | 144 assertEquals('get [3]', Object.getOwnPropertyDescriptor(C.prototype, sym3).get
.name); |
| 145 assertEquals('set b', Object.getOwnPropertyDescriptor(C, 'b').set.name); |
123 })(); | 146 })(); |
124 | 147 |
125 | 148 |
126 (function testAssignment() { | 149 (function testAssignment() { |
127 var basicFn, arrowFn, generatorFn, classLit; | 150 var basicFn, arrowFn, generatorFn, classLit; |
128 | 151 |
129 basicFn = function() { return true; }; | 152 basicFn = function() { return true; }; |
130 assertEquals('basicFn', basicFn.name); | 153 assertEquals('basicFn', basicFn.name); |
131 var basicFn2 = basicFn; | 154 var basicFn2 = basicFn; |
132 assertEquals('basicFn', basicFn2.name); | 155 assertEquals('basicFn', basicFn2.name); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 assertEquals('a', a.name); | 326 assertEquals('a', a.name); |
304 assertEquals('b', b.name); | 327 assertEquals('b', b.name); |
305 assertEquals('withName', x.name); | 328 assertEquals('withName', x.name); |
306 assertEquals('y', y.name); | 329 assertEquals('y', y.name); |
307 assertEquals('ClassName', z.name); | 330 assertEquals('ClassName', z.name); |
308 assertEquals('function', typeof q.name); | 331 assertEquals('function', typeof q.name); |
309 assertEquals('inParens', inParens.name) | 332 assertEquals('inParens', inParens.name) |
310 assertEquals('inManyParens', inManyParens.name) | 333 assertEquals('inManyParens', inManyParens.name) |
311 })(); | 334 })(); |
312 })(); | 335 })(); |
| 336 |
| 337 (function testComputedNameNotShared() { |
| 338 function makeClass(propName) { |
| 339 return class { |
| 340 static [propName]() {} |
| 341 } |
| 342 } |
| 343 |
| 344 var sym1 = Symbol('1'); |
| 345 var sym2 = Symbol('2'); |
| 346 var class1 = makeClass(sym1); |
| 347 assertEquals('[1]', class1[sym1].name); |
| 348 var class2 = makeClass(sym2); |
| 349 assertEquals('[2]', class2[sym2].name); |
| 350 assertEquals('[1]', class1[sym1].name); |
| 351 })(); |
| 352 |
| 353 |
| 354 (function testComputedNamesOnlyAppliedSyntactically() { |
| 355 function factory() { return () => {}; } |
| 356 |
| 357 var obj = { ['foo']: factory() }; |
| 358 assertEquals('', obj.foo.name); |
| 359 })(); |
OLD | NEW |