Skip to content

Commit bfd8704

Browse files
committed
Adding tests
1 parent 88d7f23 commit bfd8704

10 files changed

Lines changed: 756 additions & 0 deletions

File tree

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
//// [neverType.ts]
2+
3+
function error(message: string) {
4+
throw new Error(message);
5+
}
6+
7+
function fail() {
8+
return error("Something failed");
9+
}
10+
11+
function infiniteLoop() {
12+
while (true) {
13+
}
14+
}
15+
16+
function move1(direction: "up" | "down") {
17+
switch (direction) {
18+
case "up":
19+
return 1;
20+
case "down":
21+
return -1;
22+
}
23+
return error("Should never get here");
24+
}
25+
26+
function move2(direction: "up" | "down") {
27+
return direction === "up" ? 1 :
28+
direction === "down" ? -1 :
29+
error("Should never get here");
30+
}
31+
32+
function check<T>(x: T | undefined) {
33+
return x || error("Undefined value");
34+
}
35+
36+
function f1(x: string | number) {
37+
if (typeof x === "boolean") {
38+
x; // never
39+
}
40+
}
41+
42+
function f2(x: string | number) {
43+
while (true) {
44+
if (typeof x === "boolean") {
45+
return x; // never
46+
}
47+
}
48+
}
49+
50+
function failOrThrow(shouldFail: boolean) {
51+
if (shouldFail) {
52+
return fail();
53+
}
54+
throw new Error();
55+
}
56+
57+
function test(cb: () => string) {
58+
let s = cb();
59+
return s;
60+
}
61+
62+
let errorCallback = () => error("Error callback");
63+
64+
test(() => "hello");
65+
test(() => fail());
66+
test(() => { throw new Error(); })
67+
test(errorCallback);
68+
69+
70+
//// [neverType.js]
71+
function error(message) {
72+
throw new Error(message);
73+
}
74+
function fail() {
75+
return error("Something failed");
76+
}
77+
function infiniteLoop() {
78+
while (true) {
79+
}
80+
}
81+
function move1(direction) {
82+
switch (direction) {
83+
case "up":
84+
return 1;
85+
case "down":
86+
return -1;
87+
}
88+
return error("Should never get here");
89+
}
90+
function move2(direction) {
91+
return direction === "up" ? 1 :
92+
direction === "down" ? -1 :
93+
error("Should never get here");
94+
}
95+
function check(x) {
96+
return x || error("Undefined value");
97+
}
98+
function f1(x) {
99+
if (typeof x === "boolean") {
100+
x; // never
101+
}
102+
}
103+
function f2(x) {
104+
while (true) {
105+
if (typeof x === "boolean") {
106+
return x; // never
107+
}
108+
}
109+
}
110+
function failOrThrow(shouldFail) {
111+
if (shouldFail) {
112+
return fail();
113+
}
114+
throw new Error();
115+
}
116+
function test(cb) {
117+
var s = cb();
118+
return s;
119+
}
120+
var errorCallback = function () { return error("Error callback"); };
121+
test(function () { return "hello"; });
122+
test(function () { return fail(); });
123+
test(function () { throw new Error(); });
124+
test(errorCallback);
125+
126+
127+
//// [neverType.d.ts]
128+
declare function error(message: string): never;
129+
declare function fail(): never;
130+
declare function infiniteLoop(): never;
131+
declare function move1(direction: "up" | "down"): number;
132+
declare function move2(direction: "up" | "down"): number;
133+
declare function check<T>(x: T | undefined): T;
134+
declare function f1(x: string | number): void;
135+
declare function f2(x: string | number): never;
136+
declare function failOrThrow(shouldFail: boolean): never;
137+
declare function test(cb: () => string): string;
138+
declare let errorCallback: () => never;
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
=== tests/cases/conformance/types/never/neverType.ts ===
2+
3+
function error(message: string) {
4+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
5+
>message : Symbol(message, Decl(neverType.ts, 1, 15))
6+
7+
throw new Error(message);
8+
>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
9+
>message : Symbol(message, Decl(neverType.ts, 1, 15))
10+
}
11+
12+
function fail() {
13+
>fail : Symbol(fail, Decl(neverType.ts, 3, 1))
14+
15+
return error("Something failed");
16+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
17+
}
18+
19+
function infiniteLoop() {
20+
>infiniteLoop : Symbol(infiniteLoop, Decl(neverType.ts, 7, 1))
21+
22+
while (true) {
23+
}
24+
}
25+
26+
function move1(direction: "up" | "down") {
27+
>move1 : Symbol(move1, Decl(neverType.ts, 12, 1))
28+
>direction : Symbol(direction, Decl(neverType.ts, 14, 15))
29+
30+
switch (direction) {
31+
>direction : Symbol(direction, Decl(neverType.ts, 14, 15))
32+
33+
case "up":
34+
return 1;
35+
case "down":
36+
return -1;
37+
}
38+
return error("Should never get here");
39+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
40+
}
41+
42+
function move2(direction: "up" | "down") {
43+
>move2 : Symbol(move2, Decl(neverType.ts, 22, 1))
44+
>direction : Symbol(direction, Decl(neverType.ts, 24, 15))
45+
46+
return direction === "up" ? 1 :
47+
>direction : Symbol(direction, Decl(neverType.ts, 24, 15))
48+
49+
direction === "down" ? -1 :
50+
>direction : Symbol(direction, Decl(neverType.ts, 24, 15))
51+
52+
error("Should never get here");
53+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
54+
}
55+
56+
function check<T>(x: T | undefined) {
57+
>check : Symbol(check, Decl(neverType.ts, 28, 1))
58+
>T : Symbol(T, Decl(neverType.ts, 30, 15))
59+
>x : Symbol(x, Decl(neverType.ts, 30, 18))
60+
>T : Symbol(T, Decl(neverType.ts, 30, 15))
61+
62+
return x || error("Undefined value");
63+
>x : Symbol(x, Decl(neverType.ts, 30, 18))
64+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
65+
}
66+
67+
function f1(x: string | number) {
68+
>f1 : Symbol(f1, Decl(neverType.ts, 32, 1))
69+
>x : Symbol(x, Decl(neverType.ts, 34, 12))
70+
71+
if (typeof x === "boolean") {
72+
>x : Symbol(x, Decl(neverType.ts, 34, 12))
73+
74+
x; // never
75+
>x : Symbol(x, Decl(neverType.ts, 34, 12))
76+
}
77+
}
78+
79+
function f2(x: string | number) {
80+
>f2 : Symbol(f2, Decl(neverType.ts, 38, 1))
81+
>x : Symbol(x, Decl(neverType.ts, 40, 12))
82+
83+
while (true) {
84+
if (typeof x === "boolean") {
85+
>x : Symbol(x, Decl(neverType.ts, 40, 12))
86+
87+
return x; // never
88+
>x : Symbol(x, Decl(neverType.ts, 40, 12))
89+
}
90+
}
91+
}
92+
93+
function failOrThrow(shouldFail: boolean) {
94+
>failOrThrow : Symbol(failOrThrow, Decl(neverType.ts, 46, 1))
95+
>shouldFail : Symbol(shouldFail, Decl(neverType.ts, 48, 21))
96+
97+
if (shouldFail) {
98+
>shouldFail : Symbol(shouldFail, Decl(neverType.ts, 48, 21))
99+
100+
return fail();
101+
>fail : Symbol(fail, Decl(neverType.ts, 3, 1))
102+
}
103+
throw new Error();
104+
>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
105+
}
106+
107+
function test(cb: () => string) {
108+
>test : Symbol(test, Decl(neverType.ts, 53, 1))
109+
>cb : Symbol(cb, Decl(neverType.ts, 55, 14))
110+
111+
let s = cb();
112+
>s : Symbol(s, Decl(neverType.ts, 56, 7))
113+
>cb : Symbol(cb, Decl(neverType.ts, 55, 14))
114+
115+
return s;
116+
>s : Symbol(s, Decl(neverType.ts, 56, 7))
117+
}
118+
119+
let errorCallback = () => error("Error callback");
120+
>errorCallback : Symbol(errorCallback, Decl(neverType.ts, 60, 3))
121+
>error : Symbol(error, Decl(neverType.ts, 0, 0))
122+
123+
test(() => "hello");
124+
>test : Symbol(test, Decl(neverType.ts, 53, 1))
125+
126+
test(() => fail());
127+
>test : Symbol(test, Decl(neverType.ts, 53, 1))
128+
>fail : Symbol(fail, Decl(neverType.ts, 3, 1))
129+
130+
test(() => { throw new Error(); })
131+
>test : Symbol(test, Decl(neverType.ts, 53, 1))
132+
>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
133+
134+
test(errorCallback);
135+
>test : Symbol(test, Decl(neverType.ts, 53, 1))
136+
>errorCallback : Symbol(errorCallback, Decl(neverType.ts, 60, 3))
137+

0 commit comments

Comments
 (0)