From 4ac2b4b9c87d4025e47bde52d2cadd31b2c18870 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Mon, 12 Jan 2015 14:04:34 -0800 Subject: [PATCH] Add tests for object literals with computed properties --- .../reference/computedPropertyNames4.js | 35 ++++++++++++++ .../reference/computedPropertyNames4.types | 48 +++++++++++++++++++ .../computedPropertyNames5.errors.txt | 30 ++++++++++++ .../reference/computedPropertyNames5.js | 21 ++++++++ .../computedPropertyNames6.errors.txt | 20 ++++++++ .../reference/computedPropertyNames6.js | 19 ++++++++ .../computedPropertyNames7.errors.txt | 12 +++++ .../reference/computedPropertyNames7.js | 16 +++++++ .../computedPropertyNames8.errors.txt | 17 +++++++ .../reference/computedPropertyNames8.js | 19 ++++++++ .../computedPropertyNames9.errors.txt | 16 +++++++ .../reference/computedPropertyNames9.js | 20 ++++++++ .../computedPropertyNames4.ts | 17 +++++++ .../computedPropertyNames5.ts | 10 ++++ .../computedPropertyNames6.ts | 9 ++++ .../computedPropertyNames7.ts | 7 +++ .../computedPropertyNames8.ts | 9 ++++ .../computedPropertyNames9.ts | 11 +++++ 18 files changed, 336 insertions(+) create mode 100644 tests/baselines/reference/computedPropertyNames4.js create mode 100644 tests/baselines/reference/computedPropertyNames4.types create mode 100644 tests/baselines/reference/computedPropertyNames5.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNames5.js create mode 100644 tests/baselines/reference/computedPropertyNames6.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNames6.js create mode 100644 tests/baselines/reference/computedPropertyNames7.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNames7.js create mode 100644 tests/baselines/reference/computedPropertyNames8.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNames8.js create mode 100644 tests/baselines/reference/computedPropertyNames9.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNames9.js create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames4.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts diff --git a/tests/baselines/reference/computedPropertyNames4.js b/tests/baselines/reference/computedPropertyNames4.js new file mode 100644 index 00000000000..5acb6d957da --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames4.js @@ -0,0 +1,35 @@ +//// [computedPropertyNames4.ts] +var s: string; +var n: number; +var a: any; +var v = { + [s]: 0, + [n]: n, + [s + s]: 1, + [s + n]: 2, + [+s]: s, + [""]: 0, + [0]: 0, + [a]: 1, + [true]: 0, + [`hello bye`]: 0, + [`hello ${a} bye`]: 0 +} + +//// [computedPropertyNames4.js] +var s; +var n; +var a; +var v = { + [s]: 0, + [n]: n, + [s + s]: 1, + [s + n]: 2, + [+s]: s, + [""]: 0, + [0]: 0, + [a]: 1, + [true]: 0, + [`hello bye`]: 0, + [`hello ${a} bye`]: 0 +}; diff --git a/tests/baselines/reference/computedPropertyNames4.types b/tests/baselines/reference/computedPropertyNames4.types new file mode 100644 index 00000000000..968cc86b598 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames4.types @@ -0,0 +1,48 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNames4.ts === +var s: string; +>s : string + +var n: number; +>n : number + +var a: any; +>a : any + +var v = { +>v : {} +>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : {} + + [s]: 0, +>s : string + + [n]: n, +>n : number +>n : number + + [s + s]: 1, +>s + s : string +>s : string +>s : string + + [s + n]: 2, +>s + n : string +>s : string +>n : number + + [+s]: s, +>+s : number +>s : string +>s : string + + [""]: 0, + [0]: 0, + [a]: 1, +>a : any + + [true]: 0, +>true : any + + [`hello bye`]: 0, + [`hello ${a} bye`]: 0 +>a : any +} diff --git a/tests/baselines/reference/computedPropertyNames5.errors.txt b/tests/baselines/reference/computedPropertyNames5.errors.txt new file mode 100644 index 00000000000..f7ca4b97e9f --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames5.errors.txt @@ -0,0 +1,30 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(3,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(4,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(5,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(6,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(7,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts(8,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts (6 errors) ==== + var b: boolean; + var v = { + [b]: 0, + ~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [true]: 1, + ~~~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [[]]: 0, + ~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [{}]: 0, + ~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [undefined]: undefined, + ~~~~~~~~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [null]: null + ~~~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames5.js b/tests/baselines/reference/computedPropertyNames5.js new file mode 100644 index 00000000000..d0158da6400 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames5.js @@ -0,0 +1,21 @@ +//// [computedPropertyNames5.ts] +var b: boolean; +var v = { + [b]: 0, + [true]: 1, + [[]]: 0, + [{}]: 0, + [undefined]: undefined, + [null]: null +} + +//// [computedPropertyNames5.js] +var b; +var v = { + [b]: 0, + [true]: 1, + [[]]: 0, + [{}]: 0, + [undefined]: undefined, + [null]: null +}; diff --git a/tests/baselines/reference/computedPropertyNames6.errors.txt b/tests/baselines/reference/computedPropertyNames6.errors.txt new file mode 100644 index 00000000000..e9e150e2739 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames6.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts(5,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts(6,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts(7,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts (3 errors) ==== + var p1: number | string; + var p2: number | number[]; + var p3: string | boolean; + var v = { + [p1]: 0, + ~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [p2]: 1, + ~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [p3]: 2 + ~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames6.js b/tests/baselines/reference/computedPropertyNames6.js new file mode 100644 index 00000000000..e131ef4417f --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames6.js @@ -0,0 +1,19 @@ +//// [computedPropertyNames6.ts] +var p1: number | string; +var p2: number | number[]; +var p3: string | boolean; +var v = { + [p1]: 0, + [p2]: 1, + [p3]: 2 +} + +//// [computedPropertyNames6.js] +var p1; +var p2; +var p3; +var v = { + [p1]: 0, + [p2]: 1, + [p3]: 2 +}; diff --git a/tests/baselines/reference/computedPropertyNames7.errors.txt b/tests/baselines/reference/computedPropertyNames7.errors.txt new file mode 100644 index 00000000000..b519369956c --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames7.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts(5,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts (1 errors) ==== + enum E { + member + } + var v = { + [E.member]: 0 + ~~~~~~~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames7.js b/tests/baselines/reference/computedPropertyNames7.js new file mode 100644 index 00000000000..075b149522b --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames7.js @@ -0,0 +1,16 @@ +//// [computedPropertyNames7.ts] +enum E { + member +} +var v = { + [E.member]: 0 +} + +//// [computedPropertyNames7.js] +var E; +(function (E) { + E[E["member"] = 0] = "member"; +})(E || (E = {})); +var v = { + [0 /* member */]: 0 +}; diff --git a/tests/baselines/reference/computedPropertyNames8.errors.txt b/tests/baselines/reference/computedPropertyNames8.errors.txt new file mode 100644 index 00000000000..99aa43b9276 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames8.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts(5,9): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. +tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts(6,9): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts (2 errors) ==== + function f() { + var t: T; + var u: U; + var v = { + [t]: 0, + ~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + [u]: 1 + ~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + }; + } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames8.js b/tests/baselines/reference/computedPropertyNames8.js new file mode 100644 index 00000000000..44a21d79a1c --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames8.js @@ -0,0 +1,19 @@ +//// [computedPropertyNames8.ts] +function f() { + var t: T; + var u: U; + var v = { + [t]: 0, + [u]: 1 + }; +} + +//// [computedPropertyNames8.js] +function f() { + var t; + var u; + var v = { + [t]: 0, + [u]: 1 + }; +} diff --git a/tests/baselines/reference/computedPropertyNames9.errors.txt b/tests/baselines/reference/computedPropertyNames9.errors.txt new file mode 100644 index 00000000000..8450e1fd092 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames9.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts(9,5): error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts (1 errors) ==== + function f(s: string): string; + function f(n: number): number; + function f(x: T): T; + function f(x): any { } + + var v = { + [f("")]: 0, + [f(0)]: 0, + [f(true)]: 0 + ~~~~~~~~~ +!!! error TS2463: A computed property name must be of type 'string', 'number', or 'any'. + } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames9.js b/tests/baselines/reference/computedPropertyNames9.js new file mode 100644 index 00000000000..ede8bb3012b --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames9.js @@ -0,0 +1,20 @@ +//// [computedPropertyNames9.ts] +function f(s: string): string; +function f(n: number): number; +function f(x: T): T; +function f(x): any { } + +var v = { + [f("")]: 0, + [f(0)]: 0, + [f(true)]: 0 +} + +//// [computedPropertyNames9.js] +function f(x) { +} +var v = { + [f("")]: 0, + [f(0)]: 0, + [f(true)]: 0 +}; diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames4.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames4.ts new file mode 100644 index 00000000000..a6d4e17c44a --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames4.ts @@ -0,0 +1,17 @@ +// @target: es6 +var s: string; +var n: number; +var a: any; +var v = { + [s]: 0, + [n]: n, + [s + s]: 1, + [s + n]: 2, + [+s]: s, + [""]: 0, + [0]: 0, + [a]: 1, + [true]: 0, + [`hello bye`]: 0, + [`hello ${a} bye`]: 0 +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts new file mode 100644 index 00000000000..590f819c4e4 --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames5.ts @@ -0,0 +1,10 @@ +// @target: es6 +var b: boolean; +var v = { + [b]: 0, + [true]: 1, + [[]]: 0, + [{}]: 0, + [undefined]: undefined, + [null]: null +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts new file mode 100644 index 00000000000..b21b76b03f2 --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames6.ts @@ -0,0 +1,9 @@ +// @target: es6 +var p1: number | string; +var p2: number | number[]; +var p3: string | boolean; +var v = { + [p1]: 0, + [p2]: 1, + [p3]: 2 +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts new file mode 100644 index 00000000000..5063d1e2d0c --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames7.ts @@ -0,0 +1,7 @@ +// @target: es6 +enum E { + member +} +var v = { + [E.member]: 0 +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts new file mode 100644 index 00000000000..95b6398a62d --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames8.ts @@ -0,0 +1,9 @@ +// @target: es6 +function f() { + var t: T; + var u: U; + var v = { + [t]: 0, + [u]: 1 + }; +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts new file mode 100644 index 00000000000..21dc4eaa1e9 --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNames9.ts @@ -0,0 +1,11 @@ +// @target: es6 +function f(s: string): string; +function f(n: number): number; +function f(x: T): T; +function f(x): any { } + +var v = { + [f("")]: 0, + [f(0)]: 0, + [f(true)]: 0 +} \ No newline at end of file