forked from wcandillon/swagger-js-codegen
-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathgeneration.js
109 lines (101 loc) · 2.75 KB
/
generation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"use strict";
var assert = require("assert");
var vows = require("vows");
var fs = require("fs");
var ffs = require("final-fs");
var ts = require("typescript");
var tmp = require("tmp");
var CodeGen = require("../lib/codegen").CodeGen;
function compileString(testName, input) {
var tmpDir = tmp.dirSync({
dir: "./",
unsafeCleanup: true,
keep: true
});
var tmpFile = tmp.fileSync({
postfix: ".ts",
dir: tmpDir.name,
keep: true
});
fs.writeFileSync(tmpFile.fd, input);
var program = ts.createProgram([tmpFile.name], {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2016, // Makes promises resolve
moduleResolution: ts.ModuleResolutionKind.NodeJs // ensure we can use node_modules
});
var emitResult = program.emit();
var allDiagnostics = ts
.getPreEmitDiagnostics(program)
.concat(emitResult.diagnostics);
allDiagnostics.forEach(function(diagnostic) {
var lineAndCharacter = diagnostic.file.getLineAndCharacterOfPosition(
diagnostic.start
);
var line = lineAndCharacter.line;
var character = lineAndCharacter.character;
var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
var outputLine = diagnostic.file.text.split("\n")[line];
console.log(
"\n" +
testName +
": (" +
(line + 1) +
"," +
(character + 1) +
"): " +
message
);
console.log(" ERROR line: " + outputLine.trim());
});
var errorsSeen = allDiagnostics.length !== 0;
if (errorsSeen) {
console.log(
" ERRORS seen, generated code preserved in: " + tmpFile.name
);
} else {
tmpFile.removeCallback();
tmpDir.removeCallback();
}
return !errorsSeen;
}
var batch = {};
var list = ffs.readdirSync("tests/apis");
list.forEach(function(file) {
file = "tests/apis/" + file;
batch[file] = function() {
var swagger = JSON.parse(fs.readFileSync(file, "UTF-8"));
var result;
if (swagger.swagger === "2.0") {
result = CodeGen.getTypescriptCode({
moduleName: "Test",
className: "Test",
swagger: swagger
});
assert(
compileString("typescript generation: " + file, result),
"typescript compilation failed"
);
assert(typeof result, "string");
}
result = CodeGen.getCustomCode({
moduleName: "Test",
className: "Test",
swagger: swagger,
template: {
class: fs.readFileSync(
__dirname + "/../templates/class.mustache",
"utf-8"
),
method: fs.readFileSync(
__dirname + "/../templates/method.mustache",
"utf-8"
)
}
});
assert(typeof result, "string");
};
});
vows
.describe("Test Generation")
.addBatch(batch)
.export(module);