Skip to content

Commit

Permalink
Adding test for excess/missing properties
Browse files Browse the repository at this point in the history
  • Loading branch information
ahejlsberg committed Sep 5, 2015
1 parent f801420 commit 31f8a81
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 0 deletions.
85 changes: 85 additions & 0 deletions tests/baselines/reference/missingAndExcessProperties.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(3,11): error TS2459: Type '{}' has no property 'x' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(3,14): error TS2459: Type '{}' has no property 'y' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(4,18): error TS2459: Type '{ x?: number; }' has no property 'y' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(5,11): error TS2459: Type '{ y?: number; }' has no property 'x' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(12,8): error TS2459: Type '{}' has no property 'x' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(12,11): error TS2459: Type '{}' has no property 'y' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(13,18): error TS2459: Type '{ x?: number; }' has no property 'y' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(14,8): error TS2459: Type '{ y?: number; }' has no property 'x' and no string index signature.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(20,17): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(20,23): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(21,25): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(22,19): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(29,14): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(29,20): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(30,22): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: number; }'.
tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts(31,16): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: number; }'.


==== tests/cases/conformance/es6/destructuring/missingAndExcessProperties.ts (16 errors) ====
// Missing properties
function f1() {
var { x, y } = {};
~
!!! error TS2459: Type '{}' has no property 'x' and no string index signature.
~
!!! error TS2459: Type '{}' has no property 'y' and no string index signature.
var { x = 1, y } = {};
~
!!! error TS2459: Type '{ x?: number; }' has no property 'y' and no string index signature.
var { x, y = 1 } = {};
~
!!! error TS2459: Type '{ y?: number; }' has no property 'x' and no string index signature.
var { x = 1, y = 1 } = {};
}

// Missing properties
function f2() {
var x: number, y: number;
({ x, y } = {});
~
!!! error TS2459: Type '{}' has no property 'x' and no string index signature.
~
!!! error TS2459: Type '{}' has no property 'y' and no string index signature.
({ x: x = 1, y } = {});
~
!!! error TS2459: Type '{ x?: number; }' has no property 'y' and no string index signature.
({ x, y: y = 1 } = {});
~
!!! error TS2459: Type '{ y?: number; }' has no property 'x' and no string index signature.
({ x: x = 1, y: y = 1 } = {});
}

// Excess properties
function f3() {
var { } = { x: 0, y: 0 };
~
!!! error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'.
~
!!! error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'.
var { x } = { x: 0, y: 0 };
~
!!! error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'.
var { y } = { x: 0, y: 0 };
~
!!! error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'.
var { x, y } = { x: 0, y: 0 };
}

// Excess properties
function f4() {
var x: number, y: number;
({ } = { x: 0, y: 0 });
~
!!! error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'.
~
!!! error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'.
({ x } = { x: 0, y: 0 });
~
!!! error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: number; }'.
({ y } = { x: 0, y: 0 });
~
!!! error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: number; }'.
({ x, y } = { x: 0, y: 0 });
}

69 changes: 69 additions & 0 deletions tests/baselines/reference/missingAndExcessProperties.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//// [missingAndExcessProperties.ts]
// Missing properties
function f1() {
var { x, y } = {};
var { x = 1, y } = {};
var { x, y = 1 } = {};
var { x = 1, y = 1 } = {};
}

// Missing properties
function f2() {
var x: number, y: number;
({ x, y } = {});
({ x: x = 1, y } = {});
({ x, y: y = 1 } = {});
({ x: x = 1, y: y = 1 } = {});
}

// Excess properties
function f3() {
var { } = { x: 0, y: 0 };
var { x } = { x: 0, y: 0 };
var { y } = { x: 0, y: 0 };
var { x, y } = { x: 0, y: 0 };
}

// Excess properties
function f4() {
var x: number, y: number;
({ } = { x: 0, y: 0 });
({ x } = { x: 0, y: 0 });
({ y } = { x: 0, y: 0 });
({ x, y } = { x: 0, y: 0 });
}


//// [missingAndExcessProperties.js]
// Missing properties
function f1() {
var _a = {}, x = _a.x, y = _a.y;
var _b = {}, _c = _b.x, x = _c === void 0 ? 1 : _c, y = _b.y;
var _d = {}, x = _d.x, _e = _d.y, y = _e === void 0 ? 1 : _e;
var _f = {}, _g = _f.x, x = _g === void 0 ? 1 : _g, _h = _f.y, y = _h === void 0 ? 1 : _h;
}
// Missing properties
function f2() {
var x, y;
(_a = {}, x = _a.x, y = _a.y, _a);
(_b = {}, _c = _b.x, x = _c === void 0 ? 1 : _c, y = _b.y, _b);
(_d = {}, x = _d.x, _e = _d.y, y = _e === void 0 ? 1 : _e, _d);
(_f = {}, _g = _f.x, x = _g === void 0 ? 1 : _g, _h = _f.y, y = _h === void 0 ? 1 : _h, _f);
var _a, _b, _c, _d, _e, _f, _g, _h;
}
// Excess properties
function f3() {
var _a = { x: 0, y: 0 };
var x = { x: 0, y: 0 }.x;
var y = { x: 0, y: 0 }.y;
var _b = { x: 0, y: 0 }, x = _b.x, y = _b.y;
}
// Excess properties
function f4() {
var x, y;
({ x: 0, y: 0 });
(_a = { x: 0, y: 0 }, x = _a.x, _a);
(_b = { x: 0, y: 0 }, y = _b.y, _b);
(_c = { x: 0, y: 0 }, x = _c.x, y = _c.y, _c);
var _a, _b, _c;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Missing properties
function f1() {
var { x, y } = {};
var { x = 1, y } = {};
var { x, y = 1 } = {};
var { x = 1, y = 1 } = {};
}

// Missing properties
function f2() {
var x: number, y: number;
({ x, y } = {});
({ x: x = 1, y } = {});
({ x, y: y = 1 } = {});
({ x: x = 1, y: y = 1 } = {});
}

// Excess properties
function f3() {
var { } = { x: 0, y: 0 };
var { x } = { x: 0, y: 0 };
var { y } = { x: 0, y: 0 };
var { x, y } = { x: 0, y: 0 };
}

// Excess properties
function f4() {
var x: number, y: number;
({ } = { x: 0, y: 0 });
({ x } = { x: 0, y: 0 });
({ y } = { x: 0, y: 0 });
({ x, y } = { x: 0, y: 0 });
}

1 comment on commit 31f8a81

@JsonFreeman
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably good to add a test where you use the suppressExcessPropertyErrors flag.

Please sign in to comment.