Skip to content

Commit ac20b46

Browse files
committed
Add rest tests
1 parent e3a08ed commit ac20b46

10 files changed

Lines changed: 122 additions & 0 deletions
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// @target: es2015
2+
let o = { a: 1, b: 'no' }
3+
var { ...clone } = o;
4+
var { a, ...justB } = o;
5+
var { a, b: renamed, ...empty } = o;
6+
var { ['b']: renamed, ...justA } = o;
7+
var { 'b': renamed, ...justA } = o;
8+
var { b: { '0': n, '1': oooo }, ...justA } = o;
9+
10+
let o2 = { c: 'terrible idea?', d: 'yes' };
11+
var { d: renamed, ...d } = o2;
12+
13+
let nestedrest: { x: number, n1: { y: number, n2: { z: number, n3: { n4: number } } }, rest: number, restrest: number };
14+
var { x, n1: { y, n2: { z, n3: { ...nr } } }, ...restrest } = nestedrest;
15+
16+
let complex: { x: { ka, ki }, y: number };
17+
var { x: { ka, ...nested }, y: other, ...rest } = complex;
18+
({x: { ka, ...nested }, y: other, ...rest} = complex);
19+
var { x, ...fresh } = { x: 1, y: 2 };
20+
({ x, ...fresh } = { x: 1, y: 2 });
21+
22+
class Removable {
23+
private x: number;
24+
protected y: number;
25+
set z(value: number) { }
26+
get both(): number { return 12 }
27+
set both(value: number) { }
28+
m() { }
29+
removed: string;
30+
remainder: string;
31+
}
32+
var removable = new Removable();
33+
var { removed, ...removableRest } = removable;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
let x;
2+
let ka;
3+
let nested;
4+
let other;
5+
let rest;
6+
let complex: { x: { ka, ki }, y: number };
7+
({x: { ka, ...nested }, y: other, ...rest} = complex);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @target: es2015
2+
let array: { x: number, y: string }[];
3+
for (let { x, ...restOf } of array) {
4+
[x, restOf];
5+
}
6+
let xx: number;
7+
let rrestOff: { y: string };
8+
for ({ x: xx, ...rrestOff } of array ) {
9+
[xx, rrestOff];
10+
}
11+
for (const norest of array.map(a => ({ ...a, x: 'a string' }))) {
12+
[norest.x, norest.y];
13+
// x is now a string. who knows why.
14+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
let o = { a: 1, b: 'no' };
2+
var { ...mustBeLast, a } = o;
3+
function stillMustBeLast({ ...mustBeLast, a }: { a: number, b: string }): void {
4+
}
5+
function generic<T extends { x, y }>(t: T) {
6+
let { x, ...rest } = t;
7+
return rest;
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @target: es2015
2+
function cloneAgain({ a, ...clone }: { a: number, b: string }): void {
3+
}
4+
5+
declare function suddenly(f: (a: { x: { z, ka }, y: string }) => void);
6+
suddenly(({ x: a, ...rest }) => rest.y);
7+
suddenly(({ x: { z = 12, ...nested }, ...rest } = { x: { z: 1, ka: 1 }, y: 'noo' }) => rest.y + nested.ka);
8+

tests/cases/conformance/es6/destructuring/restElementMustBeLast.ts renamed to tests/cases/conformance/types/rest/restElementMustBeLast.ts

File renamed without changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/// <reference path='fourslash.ts'/>
2+
////interface Gen {
3+
//// x: number;
4+
//// parent: Gen;
5+
//// millenial: string;
6+
////}
7+
////let t: Gen;
8+
////var { x, ...rest } = t;
9+
////rest./*1*/x;
10+
goTo.marker('1');
11+
verify.memberListContains('parent', '(property) Gen.parent: Gen');
12+
verify.memberListContains('millenial', '(property) Gen.millenial: string');
13+
verify.memberListCount(2);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/// <reference path='fourslash.ts'/>
2+
////interface Gen {
3+
//// x: number
4+
//// [|parent|]: Gen;
5+
//// millenial: string;
6+
////}
7+
////let t: Gen;
8+
////var { x, ...rest } = t;
9+
////rest.[|parent|];
10+
const ranges = test.ranges();
11+
verify.referencesOf(ranges[0], ranges);
12+
verify.referencesOf(ranges[1], ranges);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
/// <reference path='fourslash.ts'/>
3+
////interface Gen {
4+
//// x: number;
5+
//// /*1*/parent: Gen;
6+
//// millenial: string;
7+
////}
8+
////let t: Gen;
9+
////var { x, ...rest } = t;
10+
////rest./*2*/parent;
11+
const ranges = test.ranges();
12+
verify.goToDefinition('2', [ '1' ]);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/// <reference path='fourslash.ts'/>
2+
////interface Gen {
3+
//// x: number;
4+
//// [|parent|]: Gen;
5+
//// millenial: string;
6+
////}
7+
////let t: Gen;
8+
////var { x, ...rest } = t;
9+
////rest.[|parent|];
10+
const ranges = test.ranges();
11+
verify.assertHasRanges(ranges);
12+
goTo.position(ranges[0].start);
13+
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, ranges);
14+
goTo.position(ranges[1].start);
15+
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, ranges);

0 commit comments

Comments
 (0)