Tests for various method names On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". Instance methods PASS class A { 0.1() { return 1; } }; (new A)[0.1]() is 1 PASS class A { get() { return 2; } }; (new A).get() is 2 PASS class A { set() { return 3; } }; (new A).set() is 3 PASS class A { get get() { return 4; } }; (new A).get is 4 PASS class A { get set() { return 5; } }; (new A).set is 5 PASS setterValue = undefined; class A { set get(x) { setterValue = x; } }; (new A).get = 6; setterValue is 6 PASS setterValue = undefined; class A { set set(x) { setterValue = x; } }; (new A).set = 7; setterValue is 7 Static methods PASS class A { static 0.1() { return 101; } }; A[0.1]() is 101 PASS class A { static get() { return 102; } }; A.get() is 102 PASS class A { static set() { return 103; } }; A.set() is 103 PASS class A { static get get() { return 104; } }; A.get is 104 PASS class A { static get set() { return 105; } }; A.set is 105 PASS setterValue = undefined; class A { static set get(x) { setterValue = x; } }; A.get = 106; setterValue is 106 PASS setterValue = undefined; class A { static set set(x) { setterValue = x; } }; A.set = 107; setterValue is 107 PASS class X {static arguments() {}} did not throw exception. PASS class X {static caller() {}} did not throw exception. PASS (class X {static arguments() {return staticMethodValue;}}).arguments() is staticMethodValue PASS (class X {static caller() {return staticMethodValue;}}).caller() is staticMethodValue PASS (class X {static arguments() {return staticMethodValue;}}).hasOwnProperty('arguments') is true PASS (class X {static caller() {return staticMethodValue;}}).hasOwnProperty('caller') is true PASS class X {static get arguments() {}} did not throw exception. PASS class X {static get caller() {}} did not throw exception. PASS (class X {static get arguments() {return staticMethodValue;}}).arguments is staticMethodValue PASS (class X {static get caller() {return staticMethodValue;}}).caller is staticMethodValue PASS (class X {static get arguments() {return staticMethodValue;}}).hasOwnProperty('arguments') is true PASS (class X {static get caller() {return staticMethodValue;}}).hasOwnProperty('caller') is true PASS class X {static caller() {return staticMethodValue;}};X.arguments = function(){} threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.. PASS class X {static arguments() {return staticMethodValue;}}; X.caller = function(){} threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.. PASS class X {static caller() {return "";}} X.caller = function(){ return staticMethodValue; };X.caller() is staticMethodValue PASS class X {static arguments() {return "";}}; X.arguments = function(){ return staticMethodValue; };X.arguments() is staticMethodValue PASS class X {static caller() {return "";}} X["caller"] = function(){ return staticMethodValue; };X.caller() is staticMethodValue PASS class X {static arguments() {return "";}}; X["arguments"] = function(){ return staticMethodValue; };X.arguments() is staticMethodValue PASS class X {static *caller() {yield staticMethodValue;}}; X.caller().next().value is staticMethodValue PASS class X {static *arguments() {yield staticMethodValue;}}; X.arguments().next().value is staticMethodValue PASS class X {static *caller() {yield;}}; X["caller"] = function*(){yield staticMethodValue;}; X.caller().next().value is staticMethodValue PASS class X {static *arguments() {yield;}}; X["arguments"] = function*(){yield staticMethodValue;}; X.arguments().next().value is staticMethodValue PASS class X {*caller() {yield staticMethodValue;}}; let x = new X; x.caller().next().value is staticMethodValue PASS class X {*arguments() {yield staticMethodValue;}}; let x = new X; x.arguments().next().value is staticMethodValue PASS class X {*caller() {yield;}}; let x = new X; x["caller"] = function*(){yield staticMethodValue;}; x.caller().next().value is staticMethodValue PASS class X {*arguments() {yield;}}; let x = new X; x["arguments"] = function*(){yield staticMethodValue;}; x.arguments().next().value is staticMethodValue Instance methods with computed names PASS class A { ['a' + 'b']() { return 211; } }; (new A).ab() is 211 PASS class A { ['a' + 0]() { return 212; } }; (new A).a0() is 212 PASS class A { [0.1]() { return 213; } }; (new A)[0.1]() is 213 PASS class A { [1]() { return 214; } }; (new A)[1]() is 214 PASS A = createClassWithInstanceMethod('foo', 215); (new A)['foo']() is 215 PASS A = createClassWithInstanceMethod('foo', 216); B = createClassWithInstanceMethod('bar', 217); [(new A)['foo'](), (new B)['bar']()] is [216, 217] PASS x = 218; class A { [x++]() { return x; } }; (new A)[218]() is 219 PASS x = undefined; class A { [(x=220) && 'foo']() { return x; } }; (new A).foo() is 220 PASS var x = 221, x1, x2; class A { [(x1=x) && x++]() { return x1; } [(x2=x) && x++]() { return x2; } }; [(new A)[221](), (new A)[222]()] is [221, 222] PASS x = 1; class A { ['foo' + x++]() { return 223; } ['foo' + x++]() { return 224; } }; [(new A).foo1(), (new A).foo2()] is [223, 224] PASS var x = 1, x1; class A { ['foo' + ++x]() { return 225; } [(x1=x) && 'foo' + x++]() { return 226; } }; [x1, x, (new A).foo2()] is [2, 3, 226] Static methods with computed names PASS class A { static ['a' + 'b']() { return 311; } }; A.ab() is 311 PASS class A { static ['a' + 0]() { return 312; } }; A.a0() is 312 PASS class A { static [0.1]() { return 313; } }; A[0.1]() is 313 PASS class A { static [1]() { return 314; } }; A[1]() is 314 PASS A = createClassWithStaticMethod('foo', 315); A['foo']() is 315 PASS A = createClassWithStaticMethod('foo', 316); B = createClassWithStaticMethod('bar', 317); [A['foo'](), B['bar']()] is [316, 317] PASS x = 218; class A { static [x++]() { return x; } }; A[218]() is 219 PASS x = undefined; class A { static [(x=220) && 'foo']() { return x; } }; A.foo() is 220 PASS var x = 221, x1, x2; class A { static [(x1=x) && x++]() { return x1; } static [(x2=x) && x++]() { return x2; } }; [A[221](), A[222]()] is [221, 222] PASS x = 1; class A { static ['foo' + x++]() { return 223; } static ['foo' + x++]() { return 224; } }; [A.foo1(), A.foo2()] is [223, 224] PASS var x = 1, x1; class A { static ['foo' + ++x]() { return 225; } static [(x1=x) && 'foo' + x++]() { return 226; } }; [x1, x, A.foo2()] is [2, 3, 226] Instance methods with duplicated names PASS class A { ab() { return 401 } ab() { return 402; } }; (new A).ab() is 402 PASS class A { 'a'() { return 403 } 'a'() { return 404; } }; (new A).a() is 404 PASS class A { 1() { return 405 } 1() { return 406; } }; (new A)[1]() is 406 PASS class A { 0.1() { return 407 } 0.1() { return 408; } }; (new A)[0.1]() is 408 PASS class A { ab() { return 409 } ['a' + 'b']() { return 410; } }; (new A).ab() is 410 PASS class A { ['ab']() { return 411 } ab() { return 412; } }; (new A).ab() is 412 PASS class A { a() { return 413 } ['a']() { return 414; } a() { return 415; } }; (new A).a() is 415 PASS class A { ['b']() { return 416 } b() { return 417; } ['b']() { return 418; } }; (new A).b() is 418 PASS class A { a() { return 419 } get a() { return 420; } }; (new A).a is 420 PASS class A { get a() { return 421 } a() { return 422 } }; (new A).a() is 422 PASS setterValue = undefined; class A { a() { return 423 } set a(x) { setterValue = x } }; (new A).a = 424; setterValue is 424 PASS setterValue = undefined; class A { set a(x) { setterValue = x } a() { return 425 } }; (new A).a() is 425 PASS setterValue = undefined; class A { get foo() { return 426 } set foo(x) { setterValue = x; } }; a = new A; a.foo = a.foo; setterValue is 426 PASS class A { get foo() { } foo() { } set foo(x) { } }; valueTypes((new A).__proto__, 'foo') is ['value'] PASS class A { set foo(x) { } foo() { } get foo() { } }; valueTypes((new A).__proto__, 'foo') is ['value'] PASS class A { foo() { } get foo() { } set foo(x) { } }; valueTypes((new A).__proto__, 'foo') is ['get', 'set'] PASS class A { foo() { } set foo(x) { } get foo() { } }; valueTypes((new A).__proto__, 'foo') is ['get', 'set'] PASS class A { get foo() { } set foo(x) { } foo() { } }; valueTypes((new A).__proto__, 'foo') is ['value'] PASS class A { set foo(x) { } get foo() { } foo() { } }; valueTypes((new A).__proto__, 'foo') is ['value'] Static methods with duplicated names PASS class A { static ab() { return 501 } static ab() { return 502; } }; A.ab() is 502 PASS class A { static 'a'() { return 503 } static 'a'() { return 504; } }; A.a() is 504 PASS class A { static 1() { return 505 } static 1() { return 506; } }; A[1]() is 506 PASS class A { static 0.1() { return 507 } static 0.1() { return 508; } }; A[0.1]() is 508 PASS class A { static ab() { return 509 } static ['a' + 'b']() { return 510; } }; A.ab() is 510 PASS class A { static ['ab']() { return 511 } static ab() { return 512; } }; A.ab() is 512 PASS class A { static a() { return 513 } static ['a']() { return 514; } static a() { return 515; } }; A.a() is 515 PASS class A { static ['b']() { return 516 } static b() { return 517; } static ['b']() { return 518; } }; A.b() is 518 PASS class A { static a() { return 519 } static get a() { return 520; } }; A.a is 520 PASS class A { static get a() { return 521 } static a() { return 522 } }; A.a() is 522 PASS setterValue = undefined; class A { static a() { return 523 } static set a(x) { setterValue = x } }; A.a = 524; setterValue is 524 PASS setterValue = undefined; class A { static set a(x) { setterValue = x } static a() { return 525 } }; A.a() is 525 PASS setterValue = undefined; class A { static get foo() { return 526 } static set foo(x) { setterValue = x; } }; A.foo = A.foo; setterValue is 526 PASS class A { static get foo() { } static foo() { } static set foo(x) { } }; valueTypes(A, 'foo') is ['value'] PASS class A { static set foo(x) { } static foo() { } static get foo() { } }; valueTypes(A, 'foo') is ['value'] PASS class A { static foo() { } static get foo() { } static set foo(x) { } }; valueTypes(A, 'foo') is ['get', 'set'] PASS class A { static foo() { } static set foo(x) { } static get foo() { } }; valueTypes(A, 'foo') is ['get', 'set'] PASS class A { static get foo() { } static set foo(x) { } static foo() { } }; valueTypes(A, 'foo') is ['value'] PASS class A { static set foo(x) { } static get foo() { } static foo() { } }; valueTypes(A, 'foo') is ['value'] Static methods with duplicated names PASS successfullyParsed is true TEST COMPLETE