Index: test/mjsunit/harmony/function-name.js |
diff --git a/test/mjsunit/harmony/function-name.js b/test/mjsunit/harmony/function-name.js |
index 5da761f3c2ca7823b1a8f1212254610da035f0c0..af49bc0b2c3b4843b3bda782be397638d005afc5 100644 |
--- a/test/mjsunit/harmony/function-name.js |
+++ b/test/mjsunit/harmony/function-name.js |
@@ -33,3 +33,90 @@ |
assertEquals('x', x.name); |
assertEquals('NamedClass', y.name); |
})(); |
+ |
+(function testObjectProperties() { |
+ 'use strict'; |
+ var obj = { |
+ a: function() {}, |
+ b: () => {}, |
+ c() { }, |
+ get d() { }, |
+ set d(val) { }, |
+ x: function withName() { }, |
+ y: class { }, |
+ z: class ClassName { }, |
+ 42: function() {}, |
+ 4.2: function() {}, |
+ __proto__: function() {}, |
+ }; |
+ |
+ assertEquals('a', obj.a.name); |
+ assertEquals('b', obj.b.name); |
+ assertEquals('c', obj.c.name); |
+ var dDescriptor = Object.getOwnPropertyDescriptor(obj, 'd'); |
+ assertEquals('get d', dDescriptor.get.name); |
+ assertEquals('set d', dDescriptor.set.name); |
+ assertEquals('withName', obj.x.name); |
+ assertEquals('y', obj.y.name); |
+ assertEquals('ClassName', obj.z.name); |
+ assertEquals('42', obj[42].name); |
+ assertEquals('4.2', obj[4.2].name); |
+ assertEquals('', obj.__proto__.name); |
+})(); |
+ |
+(function testClassProperties() { |
+ 'use strict'; |
+ class C { |
+ a() { } |
+ static b() { } |
+ get c() { } |
+ set c(val) { } |
+ 42() { } |
+ static 43() { } |
+ get 44() { } |
+ set 44(val) { } |
+ }; |
+ |
+ assertEquals('a', C.prototype.a.name); |
+ assertEquals('b', C.b.name); |
+ var descriptor = Object.getOwnPropertyDescriptor(C.prototype, 'c'); |
+ assertEquals('get c', descriptor.get.name); |
+ assertEquals('set c', descriptor.set.name); |
+ assertEquals('42', C.prototype[42].name); |
+ assertEquals('43', C[43].name); |
+ var descriptor = Object.getOwnPropertyDescriptor(C.prototype, '44'); |
+ assertEquals('get 44', descriptor.get.name); |
+ assertEquals('set 44', descriptor.set.name); |
+})(); |
+ |
+// TODO(adamk): Make computed property names work. |
+(function testComputedProperties() { |
+ 'use strict'; |
+ var a = 'a'; |
+ var sym1 = Symbol('1'); |
+ var sym2 = Symbol('2'); |
+ var obj = { |
+ [a]: function() {}, |
+ [sym1]: function() {}, |
+ [sym2]: function withName() {}, |
+ }; |
+ |
+ // Should be 'a' |
+ assertEquals('', obj[a].name); |
+ // Should be '[1]' |
+ assertEquals('', obj[sym1].name); |
+ assertEquals('withName', obj[sym2].name); |
+ |
+ class C { |
+ [a]() { } |
+ [sym1]() { } |
+ static [sym2]() { } |
+ } |
+ |
+ // Should be 'a' |
+ assertEquals('', C.prototype[a].name); |
+ // Should be '[1]' |
+ assertEquals('', C.prototype[sym1].name); |
+ // Should be '[2]' |
+ assertEquals('', C[sym2].name); |
+})(); |