Skip to content

Commit 35f7909

Browse files
committed
Add tests
1 parent d468f21 commit 35f7909

File tree

4 files changed

+539
-0
lines changed

4 files changed

+539
-0
lines changed

tests/baselines/reference/dependentDestructuredVariables.js

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,64 @@ const { value, done } = it.next();
167167
if (!done) {
168168
value; // number
169169
}
170+
171+
// Repro from #46658
172+
173+
declare function f50(cb: (...args: Args) => void): void
174+
175+
f50((kind, data) => {
176+
if (kind === 'A') {
177+
data.toFixed();
178+
}
179+
if (kind === 'B') {
180+
data.toUpperCase();
181+
}
182+
});
183+
184+
const f51: (...args: ['A', number] | ['B', string]) => void = (kind, payload) => {
185+
if (kind === 'A') {
186+
payload.toFixed();
187+
}
188+
if (kind === 'B') {
189+
payload.toUpperCase();
190+
}
191+
};
192+
193+
const f52: (...args: ['A', number] | ['B']) => void = (kind, payload?) => {
194+
if (kind === 'A') {
195+
payload.toFixed();
196+
}
197+
else {
198+
payload; // undefined
199+
}
200+
};
201+
202+
declare function readFile(path: string, callback: (...args: [err: null, data: unknown[]] | [err: Error, data: undefined]) => void): void;
203+
204+
readFile('hello', (err, data) => {
205+
if (err === null) {
206+
data.length;
207+
}
208+
else {
209+
err.message;
210+
}
211+
});
212+
213+
type ReducerArgs = ["add", { a: number, b: number }] | ["concat", { firstArr: any[], secondArr: any[] }];
214+
215+
const reducer: (...args: ReducerArgs) => void = (op, args) => {
216+
switch (op) {
217+
case "add":
218+
console.log(args.a + args.b);
219+
break;
220+
case "concat":
221+
console.log(args.firstArr.concat(args.secondArr));
222+
break;
223+
}
224+
}
225+
226+
reducer("add", { a: 1, b: 3 });
227+
reducer("concat", { firstArr: [1, 2], secondArr: [3, 4] });
170228

171229

172230
//// [dependentDestructuredVariables.js]
@@ -292,6 +350,50 @@ const { value, done } = it.next();
292350
if (!done) {
293351
value; // number
294352
}
353+
f50((kind, data) => {
354+
if (kind === 'A') {
355+
data.toFixed();
356+
}
357+
if (kind === 'B') {
358+
data.toUpperCase();
359+
}
360+
});
361+
const f51 = (kind, payload) => {
362+
if (kind === 'A') {
363+
payload.toFixed();
364+
}
365+
if (kind === 'B') {
366+
payload.toUpperCase();
367+
}
368+
};
369+
const f52 = (kind, payload) => {
370+
if (kind === 'A') {
371+
payload.toFixed();
372+
}
373+
else {
374+
payload; // undefined
375+
}
376+
};
377+
readFile('hello', (err, data) => {
378+
if (err === null) {
379+
data.length;
380+
}
381+
else {
382+
err.message;
383+
}
384+
});
385+
const reducer = (op, args) => {
386+
switch (op) {
387+
case "add":
388+
console.log(args.a + args.b);
389+
break;
390+
case "concat":
391+
console.log(args.firstArr.concat(args.secondArr));
392+
break;
393+
}
394+
};
395+
reducer("add", { a: 1, b: 3 });
396+
reducer("concat", { firstArr: [1, 2], secondArr: [3, 4] });
295397

296398

297399
//// [dependentDestructuredVariables.d.ts]
@@ -355,3 +457,15 @@ declare type Action3 = {
355457
declare const reducerBroken: (state: number, { type, payload }: Action3) => number;
356458
declare var it: Iterator<number>;
357459
declare const value: any, done: boolean | undefined;
460+
declare function f50(cb: (...args: Args) => void): void;
461+
declare const f51: (...args: ['A', number] | ['B', string]) => void;
462+
declare const f52: (...args: ['A', number] | ['B']) => void;
463+
declare function readFile(path: string, callback: (...args: [err: null, data: unknown[]] | [err: Error, data: undefined]) => void): void;
464+
declare type ReducerArgs = ["add", {
465+
a: number;
466+
b: number;
467+
}] | ["concat", {
468+
firstArr: any[];
469+
secondArr: any[];
470+
}];
471+
declare const reducer: (...args: ReducerArgs) => void;

tests/baselines/reference/dependentDestructuredVariables.symbols

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,3 +434,164 @@ if (!done) {
434434
>value : Symbol(value, Decl(dependentDestructuredVariables.ts, 164, 7))
435435
}
436436

437+
// Repro from #46658
438+
439+
declare function f50(cb: (...args: Args) => void): void
440+
>f50 : Symbol(f50, Decl(dependentDestructuredVariables.ts, 167, 1))
441+
>cb : Symbol(cb, Decl(dependentDestructuredVariables.ts, 171, 21))
442+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 171, 26))
443+
>Args : Symbol(Args, Decl(dependentDestructuredVariables.ts, 111, 1))
444+
445+
f50((kind, data) => {
446+
>f50 : Symbol(f50, Decl(dependentDestructuredVariables.ts, 167, 1))
447+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 173, 5))
448+
>data : Symbol(data, Decl(dependentDestructuredVariables.ts, 173, 10))
449+
450+
if (kind === 'A') {
451+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 173, 5))
452+
453+
data.toFixed();
454+
>data.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
455+
>data : Symbol(data, Decl(dependentDestructuredVariables.ts, 173, 10))
456+
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
457+
}
458+
if (kind === 'B') {
459+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 173, 5))
460+
461+
data.toUpperCase();
462+
>data.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
463+
>data : Symbol(data, Decl(dependentDestructuredVariables.ts, 173, 10))
464+
>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
465+
}
466+
});
467+
468+
const f51: (...args: ['A', number] | ['B', string]) => void = (kind, payload) => {
469+
>f51 : Symbol(f51, Decl(dependentDestructuredVariables.ts, 182, 5))
470+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 182, 12))
471+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 182, 63))
472+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 182, 68))
473+
474+
if (kind === 'A') {
475+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 182, 63))
476+
477+
payload.toFixed();
478+
>payload.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
479+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 182, 68))
480+
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
481+
}
482+
if (kind === 'B') {
483+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 182, 63))
484+
485+
payload.toUpperCase();
486+
>payload.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
487+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 182, 68))
488+
>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
489+
}
490+
};
491+
492+
const f52: (...args: ['A', number] | ['B']) => void = (kind, payload?) => {
493+
>f52 : Symbol(f52, Decl(dependentDestructuredVariables.ts, 191, 5))
494+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 191, 12))
495+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 191, 55))
496+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 191, 60))
497+
498+
if (kind === 'A') {
499+
>kind : Symbol(kind, Decl(dependentDestructuredVariables.ts, 191, 55))
500+
501+
payload.toFixed();
502+
>payload.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
503+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 191, 60))
504+
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
505+
}
506+
else {
507+
payload; // undefined
508+
>payload : Symbol(payload, Decl(dependentDestructuredVariables.ts, 191, 60))
509+
}
510+
};
511+
512+
declare function readFile(path: string, callback: (...args: [err: null, data: unknown[]] | [err: Error, data: undefined]) => void): void;
513+
>readFile : Symbol(readFile, Decl(dependentDestructuredVariables.ts, 198, 2))
514+
>path : Symbol(path, Decl(dependentDestructuredVariables.ts, 200, 26))
515+
>callback : Symbol(callback, Decl(dependentDestructuredVariables.ts, 200, 39))
516+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 200, 51))
517+
>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
518+
519+
readFile('hello', (err, data) => {
520+
>readFile : Symbol(readFile, Decl(dependentDestructuredVariables.ts, 198, 2))
521+
>err : Symbol(err, Decl(dependentDestructuredVariables.ts, 202, 19))
522+
>data : Symbol(data, Decl(dependentDestructuredVariables.ts, 202, 23))
523+
524+
if (err === null) {
525+
>err : Symbol(err, Decl(dependentDestructuredVariables.ts, 202, 19))
526+
527+
data.length;
528+
>data.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
529+
>data : Symbol(data, Decl(dependentDestructuredVariables.ts, 202, 23))
530+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
531+
}
532+
else {
533+
err.message;
534+
>err.message : Symbol(Error.message, Decl(lib.es5.d.ts, --, --))
535+
>err : Symbol(err, Decl(dependentDestructuredVariables.ts, 202, 19))
536+
>message : Symbol(Error.message, Decl(lib.es5.d.ts, --, --))
537+
}
538+
});
539+
540+
type ReducerArgs = ["add", { a: number, b: number }] | ["concat", { firstArr: any[], secondArr: any[] }];
541+
>ReducerArgs : Symbol(ReducerArgs, Decl(dependentDestructuredVariables.ts, 209, 3))
542+
>a : Symbol(a, Decl(dependentDestructuredVariables.ts, 211, 28))
543+
>b : Symbol(b, Decl(dependentDestructuredVariables.ts, 211, 39))
544+
>firstArr : Symbol(firstArr, Decl(dependentDestructuredVariables.ts, 211, 67))
545+
>secondArr : Symbol(secondArr, Decl(dependentDestructuredVariables.ts, 211, 84))
546+
547+
const reducer: (...args: ReducerArgs) => void = (op, args) => {
548+
>reducer : Symbol(reducer, Decl(dependentDestructuredVariables.ts, 213, 5))
549+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 16))
550+
>ReducerArgs : Symbol(ReducerArgs, Decl(dependentDestructuredVariables.ts, 209, 3))
551+
>op : Symbol(op, Decl(dependentDestructuredVariables.ts, 213, 49))
552+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 52))
553+
554+
switch (op) {
555+
>op : Symbol(op, Decl(dependentDestructuredVariables.ts, 213, 49))
556+
557+
case "add":
558+
console.log(args.a + args.b);
559+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
560+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
561+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
562+
>args.a : Symbol(a, Decl(dependentDestructuredVariables.ts, 211, 28))
563+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 52))
564+
>a : Symbol(a, Decl(dependentDestructuredVariables.ts, 211, 28))
565+
>args.b : Symbol(b, Decl(dependentDestructuredVariables.ts, 211, 39))
566+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 52))
567+
>b : Symbol(b, Decl(dependentDestructuredVariables.ts, 211, 39))
568+
569+
break;
570+
case "concat":
571+
console.log(args.firstArr.concat(args.secondArr));
572+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
573+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
574+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
575+
>args.firstArr.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
576+
>args.firstArr : Symbol(firstArr, Decl(dependentDestructuredVariables.ts, 211, 67))
577+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 52))
578+
>firstArr : Symbol(firstArr, Decl(dependentDestructuredVariables.ts, 211, 67))
579+
>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
580+
>args.secondArr : Symbol(secondArr, Decl(dependentDestructuredVariables.ts, 211, 84))
581+
>args : Symbol(args, Decl(dependentDestructuredVariables.ts, 213, 52))
582+
>secondArr : Symbol(secondArr, Decl(dependentDestructuredVariables.ts, 211, 84))
583+
584+
break;
585+
}
586+
}
587+
588+
reducer("add", { a: 1, b: 3 });
589+
>reducer : Symbol(reducer, Decl(dependentDestructuredVariables.ts, 213, 5))
590+
>a : Symbol(a, Decl(dependentDestructuredVariables.ts, 224, 16))
591+
>b : Symbol(b, Decl(dependentDestructuredVariables.ts, 224, 22))
592+
593+
reducer("concat", { firstArr: [1, 2], secondArr: [3, 4] });
594+
>reducer : Symbol(reducer, Decl(dependentDestructuredVariables.ts, 213, 5))
595+
>firstArr : Symbol(firstArr, Decl(dependentDestructuredVariables.ts, 225, 19))
596+
>secondArr : Symbol(secondArr, Decl(dependentDestructuredVariables.ts, 225, 37))
597+

0 commit comments

Comments
 (0)