Skip to content

Commit 093b8f6

Browse files
authored
Merge pull request YousefED#78 from YousefED/dom/fix-77
Fixes for aliased types
2 parents d8a2465 + 19bc460 commit 093b8f6

File tree

19 files changed

+310
-23
lines changed

19 files changed

+310
-23
lines changed

test/programs/interface-recursion/schema.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
"properties":{
88
"propA":{"type":"number"},
99
"propB":{"$ref": "#/definitions/MyObject"}
10-
}
10+
},
11+
"required": [
12+
"propA",
13+
"propB"
14+
]
1115
}
1216
}
1317
}
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
type MyString = string;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"type": "string"
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
interface MyObject {
3+
prop: number;
4+
}
5+
6+
type MyAlias = MyObject;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"definitions": {
4+
"MyObject": {
5+
"type": "object",
6+
"properties": {
7+
"prop": {
8+
"type": "number"
9+
}
10+
},
11+
"required": [
12+
"prop"
13+
]
14+
},
15+
"MyAlias": {
16+
"$ref": "#/definitions/MyObject"
17+
}
18+
},
19+
"$ref": "#/definitions/MyAlias"
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
interface MyObject {
3+
prop: number;
4+
}
5+
6+
type MyAlias = MyObject;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"properties": {
4+
"prop": {
5+
"type": "number"
6+
}
7+
},
8+
"required": [
9+
"prop"
10+
],
11+
"type": "object"
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace A {
2+
export interface A {a: any;}
3+
}
4+
namespace B {
5+
export interface B {b: any;}
6+
}
7+
namespace C {
8+
import A = B.B;
9+
export interface C {c: A;}
10+
}
11+
namespace D {
12+
import A = C.C;
13+
export interface D {d: A;}
14+
}
15+
16+
interface MyObject extends D.D {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"definitions": {
4+
"B.B": {
5+
"properties": {
6+
"b": {
7+
}
8+
},
9+
"required": [
10+
"b"
11+
],
12+
"type": "object"
13+
},
14+
"C.C": {
15+
"properties": {
16+
"c": {
17+
"$ref": "#/definitions/B.B"
18+
}
19+
},
20+
"required": [
21+
"c"
22+
],
23+
"type": "object"
24+
}
25+
},
26+
"properties": {
27+
"d": {
28+
"$ref": "#/definitions/C.C"
29+
}
30+
},
31+
"required": [
32+
"d"
33+
],
34+
"type": "object"
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
interface MyObject {
3+
alias: MyAlias;
4+
self: MyObject;
5+
}
6+
7+
type MyAlias = MyObject;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"definitions": {
4+
"MyAlias": {
5+
"$ref": "#/definitions/MyObject"
6+
},
7+
"MyObject": {
8+
"properties": {
9+
"alias": {
10+
"$ref": "#/definitions/MyAlias"
11+
},
12+
"self": {
13+
"$ref": "#/definitions/MyObject"
14+
}
15+
},
16+
"required": [
17+
"alias",
18+
"self"
19+
],
20+
"type": "object"
21+
}
22+
},
23+
"$ref": "#/definitions/MyAlias"
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
interface MyObject {
3+
alias: MyAlias;
4+
self: MyObject;
5+
}
6+
7+
type MyAlias = MyObject;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"definitions": {
4+
"MyAlias": {
5+
"$ref": "#/definitions/MyObject"
6+
},
7+
"MyObject": {
8+
"properties": {
9+
"alias": {
10+
"$ref": "#/definitions/MyAlias"
11+
},
12+
"self": {
13+
"$ref": "#/definitions/MyObject"
14+
}
15+
},
16+
"required": [
17+
"alias",
18+
"self"
19+
],
20+
"type": "object"
21+
}
22+
},
23+
"$ref": "#/definitions/MyObject"
24+
}

test/programs/type-aliases/main.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
11
type MyString = string;
2+
3+
interface MySubObject {
4+
propA: number;
5+
propB: number;
6+
}
7+
8+
interface MyObject {
9+
primitive: MyString;
10+
object: MySubObject;
11+
}
+33-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
{
22
"$schema": "http://json-schema.org/draft-04/schema#",
3-
"type": "string"
3+
"definitions": {
4+
"MyString": {
5+
"type": "string"
6+
},
7+
"MySubObject": {
8+
"properties": {
9+
"propA": {
10+
"type": "number"
11+
},
12+
"propB": {
13+
"type": "number"
14+
}
15+
},
16+
"type": "object",
17+
"required": [
18+
"propA",
19+
"propB"
20+
]
21+
}
22+
},
23+
"properties": {
24+
"object": {
25+
"$ref": "#/definitions/MySubObject"
26+
},
27+
"primitive": {
28+
"$ref": "#/definitions/MyString"
29+
}
30+
},
31+
"required": [
32+
"primitive",
33+
"object"
34+
],
35+
"type": "object"
436
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
interface MyObject {
3+
alias: MyAlias;
4+
self: MyObject;
5+
}
6+
7+
type MyAlias = MyObject;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"$ref": "#/definitions/MyObject",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"definitions": {
5+
"MyObject": {
6+
"properties": {
7+
"alias": {
8+
"$ref": "#/definitions/MyObject"
9+
},
10+
"self": {
11+
"$ref": "#/definitions/MyObject"
12+
}
13+
},
14+
"required": [
15+
"alias",
16+
"self"
17+
],
18+
"type": "object"
19+
}
20+
}
21+
}

test/schema.test.ts

+54-13
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ const ajv = new Ajv();
99

1010
const base = "test/programs/";
1111

12-
export function assertSchema(group: string, name: string, type: string, settings?: any, compilerOptions?: CompilerOptions) {
12+
export function assertSchema(group: string, name: string, type: string, settings: any = {}, compilerOptions?: CompilerOptions) {
1313
it(group + " should create correct schema", function() {
14-
if (!settings) {
15-
settings = TJS.getDefaultArgs();
16-
settings.generateRequired = true;
14+
const defaults = TJS.getDefaultArgs();
15+
defaults.generateRequired = true;
16+
17+
for (let pref in defaults) {
18+
if (!(pref in settings)) {
19+
settings[pref] = defaults[pref];
20+
}
1721
}
1822

1923
const actual = TJS.generateSchema(TJS.getProgramFromFiles([resolve(base + group + "/" + name)], compilerOptions), type, settings);
@@ -37,9 +41,9 @@ describe("schema", function () {
3741
assertSchema("interface-single", "main.ts", "MyObject");
3842
assertSchema("interface-multi", "main.ts", "MyObject");
3943

40-
let settings = TJS.getDefaultArgs();
41-
settings.useRootRef = true;
42-
assertSchema("interface-recursion", "main.ts", "MyObject", settings); // this sample needs rootRef
44+
assertSchema("interface-recursion", "main.ts", "MyObject", {
45+
useRootRef: true
46+
});
4347

4448
assertSchema("module-interface-single", "main.ts", "MyObject");
4549

@@ -59,12 +63,6 @@ describe("schema", function () {
5963

6064
assertSchema("namespace", "main.ts", "Type");
6165

62-
assertSchema("type-union", "main.ts", "MyObject");
63-
assertSchema("type-intersection", "main.ts", "MyObject");
64-
65-
assertSchema("type-aliases", "main.ts", "MyString");
66-
assertSchema("type-aliases-fixed-size-array", "main.ts", "MyFixedSizeArray");
67-
assertSchema("type-aliases-multitype-array", "main.ts", "MyArray");
6866
assertSchema("type-anonymous", "main.ts", "MyObject");
6967
assertSchema("type-primitives", "main.ts", "MyObject");
7068
assertSchema("type-nullable", "main.ts", "MyObject");
@@ -74,6 +72,49 @@ describe("schema", function () {
7472
assertSchema("comments", "main.ts", "MyObject");
7573
assertSchema("comments-override", "main.ts", "MyObject");
7674

75+
/**
76+
* Type aliases
77+
*/
78+
79+
assertSchema("type-alias-single", "main.ts", "MyString");
80+
assertSchema("type-aliases", "main.ts", "MyObject", {
81+
useTypeAliasRef: true
82+
});
83+
assertSchema("type-aliases-fixed-size-array", "main.ts", "MyFixedSizeArray");
84+
assertSchema("type-aliases-multitype-array", "main.ts", "MyArray");
85+
assertSchema("type-aliases-local-namsepace", "main.ts", "MyObject", {
86+
useTypeAliasRef: true
87+
});
88+
89+
assertSchema("type-aliases-alias-ref", "main.ts", "MyAlias", {
90+
useTypeAliasRef: true,
91+
useRootRef: false
92+
});
93+
// disabled beacuse of #80
94+
// assertSchema("type-aliases-alias-ref-topref", "main.ts", "MyAlias", {
95+
// useTypeAliasRef: true,
96+
// useRootRef: true
97+
// });
98+
assertSchema("type-aliases-recursive-object-topref", "main.ts", "MyObject", {
99+
useTypeAliasRef: true,
100+
useRootRef: true
101+
});
102+
// disabled beacuse of #80
103+
// assertSchema("type-aliases-recursive-alias-topref", "main.ts", "MyAlias", {
104+
// useTypeAliasRef: true,
105+
// useRootRef: true
106+
// });
107+
assertSchema("type-no-aliases-recursive-topref", "main.ts", "MyAlias", {
108+
useTypeAliasRef: false,
109+
useRootRef: true
110+
});
111+
112+
/**
113+
* unions and intersections
114+
*/
115+
116+
assertSchema("type-union", "main.ts", "MyObject");
117+
assertSchema("type-intersection", "main.ts", "MyObject");
77118
assertSchema("type-union-tagged", "main.ts", "Shape");
78119
assertSchema("type-aliases-union-namespace", "main.ts", "MyModel");
79120

0 commit comments

Comments
 (0)