UNPKG

7.48 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var Ajv = require("ajv");
4var chai_1 = require("chai");
5var fs_1 = require("fs");
6var path_1 = require("path");
7var TJS = require("../typescript-json-schema");
8var ajv = new Ajv();
9var metaSchema = require("ajv/lib/refs/json-schema-draft-04.json");
10ajv.addMetaSchema(metaSchema, "http://json-schema.org/draft-04/schema#");
11var BASE = "test/programs/";
12function 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}
29exports.assertSchema = assertSchema;
30describe("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});
55describe("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//# sourceMappingURL=schema.test.js.map
\No newline at end of file