Skip to content

Commit 54d2e6a

Browse files
committed
Add tests for generics
1 parent 7862722 commit 54d2e6a

File tree

15 files changed

+522
-0
lines changed

15 files changed

+522
-0
lines changed
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
interface MyGeneric<A, B> {
2+
a: A;
3+
b: B;
4+
}
5+
6+
export interface MyObject {
7+
value1: MyGeneric<string, number>;
8+
value2: MyGeneric<number, string>;
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"$ref": "#/definitions/MyObject",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"definitions": {
5+
"MyGeneric<number, string>": {
6+
"additionalProperties": false,
7+
"properties": {
8+
"a": {
9+
"type": "number"
10+
},
11+
"b": {
12+
"type": "string"
13+
}
14+
},
15+
"required": [
16+
"a",
17+
"b"
18+
],
19+
"type": "object"
20+
},
21+
"MyGeneric<string, number>": {
22+
"additionalProperties": false,
23+
"properties": {
24+
"a": {
25+
"type": "string"
26+
},
27+
"b": {
28+
"type": "number"
29+
}
30+
},
31+
"required": [
32+
"a",
33+
"b"
34+
],
35+
"type": "object"
36+
},
37+
"MyObject": {
38+
"additionalProperties": false,
39+
"properties": {
40+
"value1": {
41+
"$ref": "#/definitions/MyGeneric<string, number>"
42+
},
43+
"value2": {
44+
"$ref": "#/definitions/MyGeneric<number, string>"
45+
}
46+
},
47+
"required": [
48+
"value1",
49+
"value2"
50+
],
51+
"type": "object"
52+
}
53+
}
54+
}
55+

test/programs/generic-arrays/main.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface MyObject {
2+
numberArray: Array<number>;
3+
stringArray: ReadonlyArray<string>;
4+
}
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"$ref": "#/definitions/MyObject",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"definitions": {
5+
"MyObject": {
6+
"additionalProperties": false,
7+
"properties": {
8+
"numberArray": {
9+
"items": {
10+
"type": "number"
11+
},
12+
"type": "array"
13+
},
14+
"stringArray": {
15+
"items": {
16+
"type": "string"
17+
},
18+
"type": "array"
19+
}
20+
},
21+
"required": [
22+
"numberArray",
23+
"stringArray"
24+
],
25+
"type": "object"
26+
}
27+
}
28+
}
29+

test/programs/generic-hell/main.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export interface GenericA<A> {
2+
a: A;
3+
}
4+
export interface B {
5+
b: number;
6+
}
7+
export interface GenericC<C> {
8+
c: C;
9+
}
10+
11+
export type SomeAlias<T> = SomeGeneric<T, T>;
12+
export interface SomeGeneric<A, B> {
13+
a: A;
14+
b: B;
15+
c: GenericA<A>;
16+
d: GenericC<B>;
17+
}
18+
19+
export interface MyObject extends GenericC<GenericC<GenericC<GenericA<string>>>>, B {
20+
someGeneric: SomeGeneric<1, 2>;
21+
someAlias: SomeAlias<"alias">;
22+
}
+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
{
2+
"$ref": "#/definitions/MyObject",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"definitions": {
5+
"GenericA<\"alias\">": {
6+
"additionalProperties": false,
7+
"properties": {
8+
"a": {
9+
"enum": [
10+
"alias"
11+
],
12+
"type": "string"
13+
}
14+
},
15+
"required": [
16+
"a"
17+
],
18+
"type": "object"
19+
},
20+
"GenericA<1>": {
21+
"additionalProperties": false,
22+
"properties": {
23+
"a": {
24+
"enum": [
25+
1
26+
],
27+
"type": "number"
28+
}
29+
},
30+
"required": [
31+
"a"
32+
],
33+
"type": "object"
34+
},
35+
"GenericA<string>": {
36+
"additionalProperties": false,
37+
"properties": {
38+
"a": {
39+
"type": "string"
40+
}
41+
},
42+
"required": [
43+
"a"
44+
],
45+
"type": "object"
46+
},
47+
"GenericC<\"alias\">": {
48+
"additionalProperties": false,
49+
"properties": {
50+
"c": {
51+
"enum": [
52+
"alias"
53+
],
54+
"type": "string"
55+
}
56+
},
57+
"required": [
58+
"c"
59+
],
60+
"type": "object"
61+
},
62+
"GenericC<2>": {
63+
"additionalProperties": false,
64+
"properties": {
65+
"c": {
66+
"enum": [
67+
2
68+
],
69+
"type": "number"
70+
}
71+
},
72+
"required": [
73+
"c"
74+
],
75+
"type": "object"
76+
},
77+
"GenericC<GenericA<string>>": {
78+
"additionalProperties": false,
79+
"properties": {
80+
"c": {
81+
"$ref": "#/definitions/GenericA<string>"
82+
}
83+
},
84+
"required": [
85+
"c"
86+
],
87+
"type": "object"
88+
},
89+
"GenericC<GenericC<GenericA<string>>>": {
90+
"additionalProperties": false,
91+
"properties": {
92+
"c": {
93+
"$ref": "#/definitions/GenericC<GenericA<string>>"
94+
}
95+
},
96+
"required": [
97+
"c"
98+
],
99+
"type": "object"
100+
},
101+
"MyObject": {
102+
"additionalProperties": false,
103+
"properties": {
104+
"b": {
105+
"type": "number"
106+
},
107+
"c": {
108+
"$ref": "#/definitions/GenericC<GenericC<GenericA<string>>>"
109+
},
110+
"someAlias": {
111+
"$ref": "#/definitions/SomeGeneric<\"alias\", \"alias\">"
112+
},
113+
"someGeneric": {
114+
"$ref": "#/definitions/SomeGeneric<1, 2>"
115+
}
116+
},
117+
"required": [
118+
"b",
119+
"c",
120+
"someAlias",
121+
"someGeneric"
122+
],
123+
"type": "object"
124+
},
125+
"SomeGeneric<\"alias\", \"alias\">": {
126+
"additionalProperties": false,
127+
"properties": {
128+
"a": {
129+
"enum": [
130+
"alias"
131+
],
132+
"type": "string"
133+
},
134+
"b": {
135+
"enum": [
136+
"alias"
137+
],
138+
"type": "string"
139+
},
140+
"c": {
141+
"$ref": "#/definitions/GenericA<\"alias\">"
142+
},
143+
"d": {
144+
"$ref": "#/definitions/GenericC<\"alias\">"
145+
}
146+
},
147+
"required": [
148+
"a",
149+
"b",
150+
"c",
151+
"d"
152+
],
153+
"type": "object"
154+
},
155+
"SomeGeneric<1, 2>": {
156+
"additionalProperties": false,
157+
"properties": {
158+
"a": {
159+
"enum": [
160+
1
161+
],
162+
"type": "number"
163+
},
164+
"b": {
165+
"enum": [
166+
2
167+
],
168+
"type": "number"
169+
},
170+
"c": {
171+
"$ref": "#/definitions/GenericA<1>"
172+
},
173+
"d": {
174+
"$ref": "#/definitions/GenericC<2>"
175+
}
176+
},
177+
"required": [
178+
"a",
179+
"b",
180+
"c",
181+
"d"
182+
],
183+
"type": "object"
184+
}
185+
}
186+
}
187+
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface MyGeneric<A, B> {
2+
a: A;
3+
b: B;
4+
}
5+
6+
export interface MyObject {
7+
value1: MyGeneric<string, number>;
8+
value2: MyGeneric<number, string>;
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"$ref": "#/definitions/MyObject",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"definitions": {
5+
"MyGeneric<number, string>": {
6+
"additionalProperties": false,
7+
"properties": {
8+
"a": {
9+
"type": "number"
10+
},
11+
"b": {
12+
"type": "string"
13+
}
14+
},
15+
"required": [
16+
"a",
17+
"b"
18+
],
19+
"type": "object"
20+
},
21+
"MyGeneric<string, number>": {
22+
"additionalProperties": false,
23+
"properties": {
24+
"a": {
25+
"type": "string"
26+
},
27+
"b": {
28+
"type": "number"
29+
}
30+
},
31+
"required": [
32+
"a",
33+
"b"
34+
],
35+
"type": "object"
36+
},
37+
"MyObject": {
38+
"additionalProperties": false,
39+
"properties": {
40+
"value1": {
41+
"$ref": "#/definitions/MyGeneric<string, number>"
42+
},
43+
"value2": {
44+
"$ref": "#/definitions/MyGeneric<number, string>"
45+
}
46+
},
47+
"required": [
48+
"value1",
49+
"value2"
50+
],
51+
"type": "object"
52+
}
53+
}
54+
}
55+
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export interface MyGeneric<T> {
2+
field: T;
3+
}
4+
5+
export interface MyObject {
6+
value1: MyGeneric<number>;
7+
value2: MyGeneric<string>;
8+
}

0 commit comments

Comments
 (0)