1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var Ajv = require("ajv");
|
4 | var chai_1 = require("chai");
|
5 | var fs_1 = require("fs");
|
6 | var path_1 = require("path");
|
7 | var TJS = require("../typescript-json-schema");
|
8 | var ajv = new Ajv();
|
9 | var metaSchema = require("ajv/lib/refs/json-schema-draft-04.json");
|
10 | ajv.addMetaSchema(metaSchema, "http://json-schema.org/draft-04/schema#");
|
11 | var BASE = "test/programs/";
|
12 | function assertSchema(group, type, settings, compilerOptions) {
|
13 | if (settings === void 0) { settings = {}; }
|
14 | it(group + " should create correct schema", function () {
|
15 | if (!("required" in settings)) {
|
16 | settings.required = true;
|
17 | }
|
18 | var actual = TJS.generateSchema(TJS.getProgramFromFiles([path_1.resolve(BASE + group + "/main.ts")], compilerOptions), type, settings);
|
19 | var file = fs_1.readFileSync(BASE + group + "/schema.json", "utf8");
|
20 | var expected = JSON.parse(file);
|
21 | chai_1.assert.isObject(actual);
|
22 | chai_1.assert.deepEqual(actual, expected, "The schema is not as expected");
|
23 | if (actual !== null) {
|
24 | ajv.validateSchema(actual);
|
25 | chai_1.assert.equal(ajv.errors, null, "The schema is not valid");
|
26 | }
|
27 | });
|
28 | }
|
29 | exports.assertSchema = assertSchema;
|
30 | describe("interfaces", function () {
|
31 | it("should return an instance of JsonSchemaGenerator", function () {
|
32 | var program = TJS.getProgramFromFiles([path_1.resolve(BASE + "comments/main.ts")]);
|
33 | var generator = TJS.buildGenerator(program);
|
34 | chai_1.assert.instanceOf(generator, TJS.JsonSchemaGenerator);
|
35 | if (generator !== null) {
|
36 | chai_1.assert.doesNotThrow(function () { return generator.getSchemaForSymbol("MyObject"); });
|
37 | chai_1.assert.doesNotThrow(function () { return generator.getSchemaForSymbol("Vector3D"); });
|
38 | var symbols = generator.getUserSymbols();
|
39 | chai_1.assert(symbols.indexOf("MyObject") > -1);
|
40 | chai_1.assert(symbols.indexOf("Vector3D") > -1);
|
41 | }
|
42 | });
|
43 | it("should output the schemas set by setSchemaOverride", function () {
|
44 | var program = TJS.getProgramFromFiles([path_1.resolve(BASE + "interface-multi/main.ts")]);
|
45 | var generator = TJS.buildGenerator(program);
|
46 | chai_1.assert(generator !== null);
|
47 | if (generator !== null) {
|
48 | var schemaOverride = { type: "string" };
|
49 | generator.setSchemaOverride("MySubObject", schemaOverride);
|
50 | var schema = generator.getSchemaForSymbol("MyObject");
|
51 | chai_1.assert.deepEqual(schema.definitions["MySubObject"], schemaOverride);
|
52 | }
|
53 | });
|
54 | });
|
55 | describe("schema", function () {
|
56 | describe("type aliases", function () {
|
57 | assertSchema("type-alias-single", "MyString");
|
58 | assertSchema("type-alias-single-annotated", "MyString");
|
59 | assertSchema("type-aliases", "MyObject", {
|
60 | aliasRef: true
|
61 | });
|
62 | assertSchema("type-aliases-fixed-size-array", "MyFixedSizeArray");
|
63 | assertSchema("type-aliases-multitype-array", "MyArray");
|
64 | assertSchema("type-aliases-local-namsepace", "MyObject", {
|
65 | aliasRef: true
|
66 | });
|
67 | assertSchema("type-aliases-alias-ref", "MyAlias", {
|
68 | aliasRef: true,
|
69 | topRef: false
|
70 | });
|
71 | assertSchema("type-aliases-recursive-object-topref", "MyObject", {
|
72 | aliasRef: true,
|
73 | topRef: true
|
74 | });
|
75 | assertSchema("type-no-aliases-recursive-topref", "MyAlias", {
|
76 | aliasRef: false,
|
77 | topRef: true
|
78 | });
|
79 | });
|
80 | describe("enums", function () {
|
81 | assertSchema("enums-string", "MyObject");
|
82 | assertSchema("enums-number", "MyObject");
|
83 | assertSchema("enums-number-initialized", "Enum");
|
84 | assertSchema("enums-compiled-compute", "Enum");
|
85 | assertSchema("enums-mixed", "MyObject");
|
86 | assertSchema("enums-value-in-interface", "MyObject");
|
87 | });
|
88 | describe("unions and intersections", function () {
|
89 | assertSchema("type-union", "MyObject");
|
90 | assertSchema("type-intersection", "MyObject", {
|
91 | noExtraProps: true
|
92 | });
|
93 | assertSchema("type-union-tagged", "Shape");
|
94 | assertSchema("type-aliases-union-namespace", "MyModel");
|
95 | });
|
96 | describe("annotations", function () {
|
97 | assertSchema("annotation-default", "MyObject");
|
98 | assertSchema("annotation-ref", "MyObject");
|
99 | assertSchema("annotation-tjs", "MyObject");
|
100 | assertSchema("annotation-id", "MyObject");
|
101 | assertSchema("typeof-keyword", "MyObject", { typeOfKeyword: true });
|
102 | assertSchema("user-validation-keywords", "MyObject", {
|
103 | validationKeywords: ["chance", "important"]
|
104 | });
|
105 | });
|
106 | describe("generics", function () {
|
107 | assertSchema("generic-simple", "MyObject");
|
108 | assertSchema("generic-arrays", "MyObject");
|
109 | assertSchema("generic-multiple", "MyObject");
|
110 | assertSchema("generic-multiargs", "MyObject");
|
111 | assertSchema("generic-anonymous", "MyObject");
|
112 | assertSchema("generic-recursive", "MyObject", {
|
113 | topRef: true
|
114 | });
|
115 | assertSchema("generic-hell", "MyObject");
|
116 | });
|
117 | describe("comments", function () {
|
118 | assertSchema("comments", "MyObject");
|
119 | assertSchema("comments-override", "MyObject");
|
120 | });
|
121 | describe("types", function () {
|
122 | assertSchema("force-type", "MyObject");
|
123 | assertSchema("force-type-imported", "MyObject");
|
124 | assertSchema("type-anonymous", "MyObject");
|
125 | assertSchema("type-primitives", "MyObject");
|
126 | assertSchema("type-nullable", "MyObject");
|
127 | assertSchema("type-function", "MyObject");
|
128 | });
|
129 | describe("class and interface", function () {
|
130 | assertSchema("class-single", "MyObject");
|
131 | assertSchema("class-extends", "MyObject");
|
132 | assertSchema("interface-single", "MyObject");
|
133 | assertSchema("interface-multi", "MyObject");
|
134 | assertSchema("interface-extends", "MyObject");
|
135 | assertSchema("interface-recursion", "MyObject", {
|
136 | topRef: true
|
137 | });
|
138 | assertSchema("module-interface-single", "MyObject");
|
139 | assertSchema("ignored-required", "MyObject");
|
140 | });
|
141 | describe("maps and arrays", function () {
|
142 | assertSchema("array-readonly", "MyReadOnlyArray");
|
143 | assertSchema("array-types", "MyArray");
|
144 | assertSchema("map-types", "MyObject");
|
145 | assertSchema("extra-properties", "MyObject");
|
146 | });
|
147 | describe("string literals", function () {
|
148 | assertSchema("string-literals", "MyObject");
|
149 | assertSchema("string-literals-inline", "MyObject");
|
150 | });
|
151 | describe("namespaces", function () {
|
152 | assertSchema("namespace", "Type");
|
153 | assertSchema("namespace-deep-1", "RootNamespace.Def");
|
154 | assertSchema("namespace-deep-2", "RootNamespace.SubNamespace.HelperA");
|
155 | });
|
156 | describe("other", function () {
|
157 | assertSchema("array-and-description", "MyObject");
|
158 | assertSchema("optionals", "MyObject");
|
159 | assertSchema("optionals-derived", "MyDerived");
|
160 | assertSchema("strict-null-checks", "MyObject", undefined, {
|
161 | strictNullChecks: true
|
162 | });
|
163 | assertSchema("imports", "MyObject");
|
164 | assertSchema("generate-all-types", "*");
|
165 | assertSchema("private-members", "MyObject", {
|
166 | excludePrivate: true
|
167 | });
|
168 | });
|
169 | });
|
170 |
|
\ | No newline at end of file |