blob: 8f50a615934c96a567409d8d96a5a5ce09abad4d [file] [log] [blame]
function shouldBe(actual, expected) {
if (actual !== expected)
throw new Error(`bad value: ${String(actual)}`);
}
// Class.
(function () {
{
class A {
get ['a' + 'b']() {
return 42;
}
}
let a = new A();
shouldBe(a.ab, 42);
a.ab = 20000;
shouldBe(a.ab, 42);
}
{
class A {
get ['a' + '0']() {
return 42;
}
}
let a = new A();
shouldBe(a.a0, 42);
a.a0 = 20000;
shouldBe(a.a0, 42);
}
{
class A {
get ['1' + '0']() {
return 42;
}
}
let a = new A();
shouldBe(a[10], 42);
a[10] = 20000;
shouldBe(a[10], 42);
}
{
class A {
get [0.1]() {
return 42;
}
}
let a = new A();
shouldBe(a[0.1], 42);
a[0.1] = 20000;
shouldBe(a[0.1], 42);
}
{
class A {
get [10.50]() {
return 42;
}
}
let a = new A();
shouldBe(a[10.5], 42);
a[10.5] = 20000;
shouldBe(a[10.5], 42);
}
{
function hello() {
return 'ok';
}
class A {
get [hello()]() {
return 42;
}
}
let a = new A();
shouldBe(a.ok, 42);
a.ok = 20000;
shouldBe(a.ok, 42);
}
{
function hello() {
return 'ok';
}
class A {
get [hello()]() {
return 42;
}
}
class Derived extends A { }
let a = new Derived();
shouldBe(a.ok, 42);
a.ok = 20000;
shouldBe(a.ok, 42);
}
{
class A {
set ['a' + 'b'](value) {
this.value = value;
}
}
let a = new A();
a.ab = 42;
shouldBe(a.value, 42);
shouldBe(a.ab, undefined);
}
{
class A {
set ['a' + '0'](value) {
this.value = value;
}
}
let a = new A();
a.a0 = 42;
shouldBe(a.value, 42);
shouldBe(a.a0, undefined);
}
{
class A {
set ['1' + '0'](value) {
this.value = value;
}
}
let a = new A();
a[10] = 42;
shouldBe(a.value, 42);
shouldBe(a[10], undefined);
}
{
class A {
set [0.1](value) {
this.value = value;
}
}
let a = new A();
a[0.1] = 42;
shouldBe(a.value, 42);
shouldBe(a[0.1], undefined);
}
{
class A {
set [10.50](value) {
this.value = value;
}
}
let a = new A();
a[10.5] = 42;
shouldBe(a.value, 42);
shouldBe(a[10.5], undefined);
}
{
function hello() {
return 'ok';
}
class A {
set [hello()](value) {
this.value = value;
}
}
let a = new A();
a.ok = 42;
shouldBe(a.value, 42);
shouldBe(a.ok, undefined);
}
{
function hello() {
return 'ok';
}
class A {
set [hello()](value) {
this.value = value;
}
}
class Derived extends A { }
let a = new Derived();
a.ok = 42;
shouldBe(a.value, 42);
shouldBe(a.ok, undefined);
}
}());
// Class static.
(function () {
{
class A {
static get ['a' + 'b']() {
return 42;
}
}
shouldBe(A.ab, 42);
A.ab = 20000;
shouldBe(A.ab, 42);
}
{
class A {
static get ['a' + '0']() {
return 42;
}
}
shouldBe(A.a0, 42);
A.a0 = 20000;
shouldBe(A.a0, 42);
}
{
class A {
static get ['1' + '0']() {
return 42;
}
}
shouldBe(A[10], 42);
A[10] = 20000;
shouldBe(A[10], 42);
}
{
class A {
static get [0.1]() {
return 42;
}
}
shouldBe(A[0.1], 42);
A[0.1] = 20000;
shouldBe(A[0.1], 42);
}
{
class A {
static get [10.50]() {
return 42;
}
}
shouldBe(A[10.5], 42);
A[10.5] = 20000;
shouldBe(A[10.5], 42);
}
{
function hello() {
return 'ok';
}
class A {
static get [hello()]() {
return 42;
}
}
shouldBe(A.ok, 42);
A.ok = 20000;
shouldBe(A.ok, 42);
}
{
function hello() {
return 'ok';
}
class A {
static get [hello()]() {
return 42;
}
}
class Derived extends A { }
shouldBe(Derived.ok, 42);
Derived.ok = 20000;
shouldBe(Derived.ok, 42);
}
{
function hello() {
return 'ok';
}
class A {
static get [hello()]() {
return 42;
}
}
class Derived extends A { }
shouldBe(Derived.ok, 42);
Derived.ok = 20000;
shouldBe(Derived.ok, 42);
}
{
class A {
static set ['a' + 'b'](value) {
this.value = value;
}
}
A.ab = 42;
shouldBe(A.value, 42);
shouldBe(A.ab, undefined);
}
{
class A {
static set ['a' + '0'](value) {
this.value = value;
}
}
A.a0 = 42;
shouldBe(A.value, 42);
shouldBe(A.a0, undefined);
}
{
class A {
static set ['1' + '0'](value) {
this.value = value;
}
}
A[10] = 42;
shouldBe(A.value, 42);
shouldBe(A[10], undefined);
}
{
class A {
static set [0.1](value) {
this.value = value;
}
}
A[0.1] = 42;
shouldBe(A.value, 42);
shouldBe(A[0.1], undefined);
}
{
class A {
static set [10.50](value) {
this.value = value;
}
}
A[10.5] = 42;
shouldBe(A.value, 42);
shouldBe(A[10.5], undefined);
}
{
function hello() {
return 'ok';
}
class A {
static set [hello()](value) {
this.value = value;
}
}
A.ok = 42;
shouldBe(A.value, 42);
shouldBe(A.ok, undefined);
}
{
function hello() {
return 'ok';
}
class A {
static set [hello()](value) {
this.value = value;
}
}
class Derived extends A { }
Derived.ok = 42;
shouldBe(Derived.value, 42);
shouldBe(Derived.ok, undefined);
}
}());
// Object.
(function () {
{
var a = {
get ['a' + 'b']() {
return 42;
}
}
shouldBe(a.ab, 42);
a.ab = 20000;
shouldBe(a.ab, 42);
}
{
var a = {
get ['a' + '0']() {
return 42;
}
}
shouldBe(a.a0, 42);
a.a0 = 20000;
shouldBe(a.a0, 42);
}
{
var a = {
get ['1' + '0']() {
return 42;
}
}
shouldBe(a[10], 42);
a[10] = 20000;
shouldBe(a[10], 42);
}
{
var a = {
get [0.1]() {
return 42;
}
}
shouldBe(a[0.1], 42);
a[0.1] = 20000;
shouldBe(a[0.1], 42);
}
{
var a = {
get [10.50]() {
return 42;
}
}
shouldBe(a[10.5], 42);
a[10.5] = 20000;
shouldBe(a[10.5], 42);
}
{
function hello() {
return 'ok';
}
var a = {
get [hello()]() {
return 42;
}
}
shouldBe(a.ok, 42);
a.ok = 20000;
shouldBe(a.ok, 42);
}
{
var a = {
set ['a' + 'b'](value) {
this.value = value;
}
}
a.ab = 42;
shouldBe(a.value, 42);
shouldBe(a.ab, undefined);
}
{
var a = {
set ['a' + '0'](value) {
this.value = value;
}
}
a.a0 = 42;
shouldBe(a.value, 42);
shouldBe(a.a0, undefined);
}
{
var a = {
set ['1' + '0'](value) {
this.value = value;
}
}
a[10] = 42;
shouldBe(a.value, 42);
shouldBe(a[10], undefined);
}
{
var a = {
set [0.1](value) {
this.value = value;
}
}
a[0.1] = 42;
shouldBe(a.value, 42);
shouldBe(a[0.1], undefined);
}
{
var a = {
set [10.50](value) {
this.value = value;
}
}
a[10.5] = 42;
shouldBe(a.value, 42);
shouldBe(a[10.5], undefined);
}
{
function hello() {
return 'ok';
}
var a = {
set [hello()](value) {
this.value = value;
}
}
a.ok = 42;
shouldBe(a.value, 42);
shouldBe(a.ok, undefined);
}
}());