function shouldBe(actual, expected) { if (actual !== expected) throw new Error(`bad value: ${String(actual)}`); } // Class methods. (function () { var method1 = 'taste'; var method2 = 'taste'; class Cocoa { get [method1]() { return 'awesome'; } get [method2]() { return 'great'; } } var cocoa = new Cocoa(); shouldBe(cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { get [method1()]() { return 'awesome'; } get [method2()]() { return 'great'; } } var cocoa = new Cocoa(); shouldBe(cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { get [method1()]() { return this.value; } set [method2()](value) { this.value = value; } } var cocoa = new Cocoa(); shouldBe(cocoa.taste, undefined); cocoa.taste = 'great'; shouldBe(cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { get 'taste'() { return 'bad'; } get [method1()]() { return this.value; } set [method2()](value) { this.value = value; } } var cocoa = new Cocoa(); shouldBe(cocoa.taste, undefined); cocoa.taste = 'great'; shouldBe(cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { get [method1()]() { return this.value; } set [method2()](value) { this.value = value; } get 'taste'() { return 'awesome'; } set taste(value) { } } var cocoa = new Cocoa(); shouldBe(cocoa.taste, 'awesome'); cocoa.taste = 'great'; shouldBe(cocoa.taste, 'awesome'); }()); // Class static methods. (function () { var method1 = 'taste'; var method2 = 'taste'; class Cocoa { static get [method1]() { return 'awesome'; } static get [method2]() { return 'great'; } } shouldBe(Cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { static get [method1()]() { return 'awesome'; } static get [method2()]() { return 'great'; } } shouldBe(Cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { static get [method1()]() { return this.value; } static set [method2()](value) { this.value = value; } } shouldBe(Cocoa.taste, undefined); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { static get 'taste'() { return 'bad'; } static get [method1()]() { return this.value; } static set [method2()](value) { this.value = value; } } shouldBe(Cocoa.taste, undefined); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } class Cocoa { static get [method1()]() { return this.value; } static set [method2()](value) { this.value = value; } static get 'taste'() { return 'awesome'; } static set taste(value) { } } shouldBe(Cocoa.taste, 'awesome'); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'awesome'); }()); // Object. (function () { var method1 = 'taste'; var method2 = 'taste'; let Cocoa = { get [method1]() { return 'awesome'; }, get [method2]() { return 'great'; } } shouldBe(Cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } let Cocoa = { get [method1()]() { return 'awesome'; }, get [method2()]() { return 'great'; } } shouldBe(Cocoa.taste, "great"); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } let Cocoa = { get [method1()]() { return this.value; }, set [method2()](value) { this.value = value; } } shouldBe(Cocoa.taste, undefined); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } let Cocoa = { get 'taste'() { return 'bad'; }, get [method1()]() { return this.value; }, set [method2()](value) { this.value = value; } } shouldBe(Cocoa.taste, undefined); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'great'); }()); (function () { var counter = 0; function method1() { shouldBe(counter++, 0); return 'taste'; } function method2() { shouldBe(counter++, 1); return 'taste'; } let Cocoa = { get [method1()]() { return this.value; }, set [method2()](value) { this.value = value; }, get 'taste'() { return 'awesome'; }, set taste(value) { } } shouldBe(Cocoa.taste, 'awesome'); Cocoa.taste = 'great'; shouldBe(Cocoa.taste, 'awesome'); }());