mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 20:14:01 -06:00
Add rest tests
This commit is contained in:
parent
e3a08ed663
commit
ac20b46f4f
33
tests/cases/conformance/types/rest/objectRest.ts
Normal file
33
tests/cases/conformance/types/rest/objectRest.ts
Normal file
@ -0,0 +1,33 @@
|
||||
// @target: es2015
|
||||
let o = { a: 1, b: 'no' }
|
||||
var { ...clone } = o;
|
||||
var { a, ...justB } = o;
|
||||
var { a, b: renamed, ...empty } = o;
|
||||
var { ['b']: renamed, ...justA } = o;
|
||||
var { 'b': renamed, ...justA } = o;
|
||||
var { b: { '0': n, '1': oooo }, ...justA } = o;
|
||||
|
||||
let o2 = { c: 'terrible idea?', d: 'yes' };
|
||||
var { d: renamed, ...d } = o2;
|
||||
|
||||
let nestedrest: { x: number, n1: { y: number, n2: { z: number, n3: { n4: number } } }, rest: number, restrest: number };
|
||||
var { x, n1: { y, n2: { z, n3: { ...nr } } }, ...restrest } = nestedrest;
|
||||
|
||||
let complex: { x: { ka, ki }, y: number };
|
||||
var { x: { ka, ...nested }, y: other, ...rest } = complex;
|
||||
({x: { ka, ...nested }, y: other, ...rest} = complex);
|
||||
var { x, ...fresh } = { x: 1, y: 2 };
|
||||
({ x, ...fresh } = { x: 1, y: 2 });
|
||||
|
||||
class Removable {
|
||||
private x: number;
|
||||
protected y: number;
|
||||
set z(value: number) { }
|
||||
get both(): number { return 12 }
|
||||
set both(value: number) { }
|
||||
m() { }
|
||||
removed: string;
|
||||
remainder: string;
|
||||
}
|
||||
var removable = new Removable();
|
||||
var { removed, ...removableRest } = removable;
|
||||
@ -0,0 +1,7 @@
|
||||
let x;
|
||||
let ka;
|
||||
let nested;
|
||||
let other;
|
||||
let rest;
|
||||
let complex: { x: { ka, ki }, y: number };
|
||||
({x: { ka, ...nested }, y: other, ...rest} = complex);
|
||||
14
tests/cases/conformance/types/rest/objectRestForOf.ts
Normal file
14
tests/cases/conformance/types/rest/objectRestForOf.ts
Normal file
@ -0,0 +1,14 @@
|
||||
// @target: es2015
|
||||
let array: { x: number, y: string }[];
|
||||
for (let { x, ...restOf } of array) {
|
||||
[x, restOf];
|
||||
}
|
||||
let xx: number;
|
||||
let rrestOff: { y: string };
|
||||
for ({ x: xx, ...rrestOff } of array ) {
|
||||
[xx, rrestOff];
|
||||
}
|
||||
for (const norest of array.map(a => ({ ...a, x: 'a string' }))) {
|
||||
[norest.x, norest.y];
|
||||
// x is now a string. who knows why.
|
||||
}
|
||||
8
tests/cases/conformance/types/rest/objectRestNegative.ts
Normal file
8
tests/cases/conformance/types/rest/objectRestNegative.ts
Normal file
@ -0,0 +1,8 @@
|
||||
let o = { a: 1, b: 'no' };
|
||||
var { ...mustBeLast, a } = o;
|
||||
function stillMustBeLast({ ...mustBeLast, a }: { a: number, b: string }): void {
|
||||
}
|
||||
function generic<T extends { x, y }>(t: T) {
|
||||
let { x, ...rest } = t;
|
||||
return rest;
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
// @target: es2015
|
||||
function cloneAgain({ a, ...clone }: { a: number, b: string }): void {
|
||||
}
|
||||
|
||||
declare function suddenly(f: (a: { x: { z, ka }, y: string }) => void);
|
||||
suddenly(({ x: a, ...rest }) => rest.y);
|
||||
suddenly(({ x: { z = 12, ...nested }, ...rest } = { x: { z: 1, ka: 1 }, y: 'noo' }) => rest.y + nested.ka);
|
||||
|
||||
13
tests/cases/fourslash/completionListForRest.ts
Normal file
13
tests/cases/fourslash/completionListForRest.ts
Normal file
@ -0,0 +1,13 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
////interface Gen {
|
||||
//// x: number;
|
||||
//// parent: Gen;
|
||||
//// millenial: string;
|
||||
////}
|
||||
////let t: Gen;
|
||||
////var { x, ...rest } = t;
|
||||
////rest./*1*/x;
|
||||
goTo.marker('1');
|
||||
verify.memberListContains('parent', '(property) Gen.parent: Gen');
|
||||
verify.memberListContains('millenial', '(property) Gen.millenial: string');
|
||||
verify.memberListCount(2);
|
||||
12
tests/cases/fourslash/findAllRefsForRest.ts
Normal file
12
tests/cases/fourslash/findAllRefsForRest.ts
Normal file
@ -0,0 +1,12 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
////interface Gen {
|
||||
//// x: number
|
||||
//// [|parent|]: Gen;
|
||||
//// millenial: string;
|
||||
////}
|
||||
////let t: Gen;
|
||||
////var { x, ...rest } = t;
|
||||
////rest.[|parent|];
|
||||
const ranges = test.ranges();
|
||||
verify.referencesOf(ranges[0], ranges);
|
||||
verify.referencesOf(ranges[1], ranges);
|
||||
12
tests/cases/fourslash/goToDefinitionRest.ts
Normal file
12
tests/cases/fourslash/goToDefinitionRest.ts
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
/// <reference path='fourslash.ts'/>
|
||||
////interface Gen {
|
||||
//// x: number;
|
||||
//// /*1*/parent: Gen;
|
||||
//// millenial: string;
|
||||
////}
|
||||
////let t: Gen;
|
||||
////var { x, ...rest } = t;
|
||||
////rest./*2*/parent;
|
||||
const ranges = test.ranges();
|
||||
verify.goToDefinition('2', [ '1' ]);
|
||||
15
tests/cases/fourslash/renameRest.ts
Normal file
15
tests/cases/fourslash/renameRest.ts
Normal file
@ -0,0 +1,15 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
////interface Gen {
|
||||
//// x: number;
|
||||
//// [|parent|]: Gen;
|
||||
//// millenial: string;
|
||||
////}
|
||||
////let t: Gen;
|
||||
////var { x, ...rest } = t;
|
||||
////rest.[|parent|];
|
||||
const ranges = test.ranges();
|
||||
verify.assertHasRanges(ranges);
|
||||
goTo.position(ranges[0].start);
|
||||
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, ranges);
|
||||
goTo.position(ranges[1].start);
|
||||
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, ranges);
|
||||
Loading…
x
Reference in New Issue
Block a user