update check for object literal properties according to ECMA spec

This commit is contained in:
Vladimir Matveev
2014-07-23 16:45:23 -07:00
parent 259f8a2091
commit ddfd0fe074
9 changed files with 118 additions and 163 deletions

View File

@@ -1,4 +1,4 @@
==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (8 errors) ====
==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (9 errors) ====
var x = {
a: 1,
b: true, // OK
@@ -30,6 +30,8 @@
~
!!! Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! An object literal cannot have multiple get/set accessors with the same name.
~
!!! Duplicate identifier 'a'.
};

View File

@@ -4,7 +4,7 @@
x: 1,
x: 2
~
!!! Object literal cannot contain more than one property with the same name in the strict mode.
!!! An object literal cannot have multiple properties with the same name in strict mode.
~
!!! Duplicate identifier 'x'.
}

View File

@@ -1,4 +1,4 @@
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (41 errors) ====
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (59 errors) ====
// Multiple properties with the same name
var e1 = { a: 0, a: 0 };
@@ -59,57 +59,93 @@
// Accessor and property with the same name
var f1 = { a: 0, get a() { return 0; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f2 = { a: '', get a() { return ''; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f3 = { a: 0, get a() { return ''; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f4 = { a: true, get a() { return false; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f5 = { a: {}, get a() { return {}; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f6 = { a: 0, get 'a'() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier ''a''.
var f7 = { 'a': 0, get a() { return 0; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
var f8 = { 'a': 0, get "a"() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier '"a"'.
var f9 = { 'a': 0, get 'a'() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier ''a''.
var f10 = { "a": 0, get 'a'() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier ''a''.
var f11 = { 1.0: 0, get '1'() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier ''1''.
var f12 = { 0: 0, get 0() { return 0; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier '0'.
var f13 = { 0: 0, get 0() { return 0; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier '0'.
var f14 = { 0: 0, get 0x0() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier '0x0'.
var f14 = { 0: 0, get 000() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier '000'.
var f15 = { "100": 0, get 1e2() { return 0; } };
~~~
!!! An object literal cannot have property and accessor with the same name.
~~~
!!! Duplicate identifier '1e2'.
var f16 = { 0x20: 0, get 3.2e1() { return 0; } };
~~~~~
!!! An object literal cannot have property and accessor with the same name.
~~~~~
!!! Duplicate identifier '3.2e1'.
var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } };
~
!!! An object literal cannot have property and accessor with the same name.
~
!!! Duplicate identifier 'a'.
// Get and set accessor with mismatched type annotations

View File

@@ -1,135 +0,0 @@
//// [objectLiteralErrors.ts]
// Multiple properties with the same name
var e1 = { a: 0, a: 0 };
var e2 = { a: '', a: '' };
var e3 = { a: 0, a: '' };
var e4 = { a: true, a: false };
var e5 = { a: {}, a: {} };
var e6 = { a: 0, 'a': 0 };
var e7 = { 'a': 0, a: 0 };
var e8 = { 'a': 0, "a": 0 };
var e9 = { 'a': 0, 'a': 0 };
var e10 = { "a": 0, 'a': 0 };
var e11 = { 1.0: 0, '1': 0 };
var e12 = { 0: 0, 0: 0 };
var e13 = { 0: 0, 0: 0 };
var e14 = { 0: 0, 0x0: 0 };
var e14 = { 0: 0, 000: 0 };
var e15 = { "100": 0, 1e2: 0 };
var e16 = { 0x20: 0, 3.2e1: 0 };
var e17 = { a: 0, b: 1, a: 0 };
// Accessor and property with the same name
var f1 = { a: 0, get a() { return 0; } };
var f2 = { a: '', get a() { return ''; } };
var f3 = { a: 0, get a() { return ''; } };
var f4 = { a: true, get a() { return false; } };
var f5 = { a: {}, get a() { return {}; } };
var f6 = { a: 0, get 'a'() { return 0; } };
var f7 = { 'a': 0, get a() { return 0; } };
var f8 = { 'a': 0, get "a"() { return 0; } };
var f9 = { 'a': 0, get 'a'() { return 0; } };
var f10 = { "a": 0, get 'a'() { return 0; } };
var f11 = { 1.0: 0, get '1'() { return 0; } };
var f12 = { 0: 0, get 0() { return 0; } };
var f13 = { 0: 0, get 0() { return 0; } };
var f14 = { 0: 0, get 0x0() { return 0; } };
var f14 = { 0: 0, get 000() { return 0; } };
var f15 = { "100": 0, get 1e2() { return 0; } };
var f16 = { 0x20: 0, get 3.2e1() { return 0; } };
var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } };
// Get and set accessor with mismatched type annotations
var g1 = { get a(): number { return 4; }, set a(n: string) { } };
var g2 = { get a() { return 4; }, set a(n: string) { } };
var g3 = { get a(): number { return undefined; }, set a(n: string) { } };
//// [objectLiteralErrors.js]
var e1 = { a: 0, a: 0 };
var e2 = { a: '', a: '' };
var e3 = { a: 0, a: '' };
var e4 = { a: true, a: false };
var e5 = { a: {}, a: {} };
var e6 = { a: 0, 'a': 0 };
var e7 = { 'a': 0, a: 0 };
var e8 = { 'a': 0, "a": 0 };
var e9 = { 'a': 0, 'a': 0 };
var e10 = { "a": 0, 'a': 0 };
var e11 = { 1.0: 0, '1': 0 };
var e12 = { 0: 0, 0: 0 };
var e13 = { 0: 0, 0: 0 };
var e14 = { 0: 0, 0x0: 0 };
var e14 = { 0: 0, 000: 0 };
var e15 = { "100": 0, 1e2: 0 };
var e16 = { 0x20: 0, 3.2e1: 0 };
var e17 = { a: 0, b: 1, a: 0 };
var f1 = { a: 0, get a() {
return 0;
} };
var f2 = { a: '', get a() {
return '';
} };
var f3 = { a: 0, get a() {
return '';
} };
var f4 = { a: true, get a() {
return false;
} };
var f5 = { a: {}, get a() {
return {};
} };
var f6 = { a: 0, get 'a'() {
return 0;
} };
var f7 = { 'a': 0, get a() {
return 0;
} };
var f8 = { 'a': 0, get "a"() {
return 0;
} };
var f9 = { 'a': 0, get 'a'() {
return 0;
} };
var f10 = { "a": 0, get 'a'() {
return 0;
} };
var f11 = { 1.0: 0, get '1'() {
return 0;
} };
var f12 = { 0: 0, get 0() {
return 0;
} };
var f13 = { 0: 0, get 0() {
return 0;
} };
var f14 = { 0: 0, get 0x0() {
return 0;
} };
var f14 = { 0: 0, get 000() {
return 0;
} };
var f15 = { "100": 0, get 1e2() {
return 0;
} };
var f16 = { 0x20: 0, get 3.2e1() {
return 0;
} };
var f17 = { a: 0, get b() {
return 1;
}, get a() {
return 0;
} };
var g1 = { get a() {
return 4;
}, set a(n) {
} };
var g2 = { get a() {
return 4;
}, set a(n) {
} };
var g3 = { get a() {
return undefined;
}, set a(n) {
} };

View File

@@ -1,9 +1,8 @@
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode14.ts (2 errors) ====
"use strict";
with (a) {
~~~~~~~~~~
~~~~
!!! 'with' statements are not allowed in strict mode.
~
!!! Cannot find name 'a'.
}
~
!!! 'with' statements are not allowed in strict mode.
}

View File

@@ -1,4 +1,4 @@
==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (13 errors) ====
==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (14 errors) ====
class C {
get x() { return 1; }
~
@@ -44,6 +44,8 @@
~
!!! Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! An object literal cannot have multiple get/set accessors with the same name.
~
!!! Duplicate identifier 'x'.
return 1;
}