Skip to content

Commit 56ec60e

Browse files
authored
Merge pull request #59 from rajitha1998/mochaGeneratorUnitTests
Mocha unit tests for generators
2 parents cdd4284 + ad54090 commit 56ec60e

File tree

34 files changed

+3279
-581
lines changed

34 files changed

+3279
-581
lines changed

generator/generators/aws/generator.js

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
exports.__esModule = true;
3-
exports.generateAWSClass = void 0;
3+
exports.generateAWSClass = exports.extractSDKData = void 0;
44
var fs = require("fs");
55
var typescript_1 = require("typescript");
66
var parser_1 = require("../../parsers/aws/parser");
@@ -13,49 +13,52 @@ var dummyAst = typescript_1.createSourceFile(
1313
typescript_1.ScriptTarget.Latest,
1414
true
1515
);
16-
var sdkClassAst;
17-
var sdkFile;
18-
function generateAWSClass(serviceClass) {
19-
var functions = [];
16+
function extractSDKData(sdkClassAst, serviceClass) {
2017
var methods = [];
18+
var functions = [];
2119
Object.keys(serviceClass).map(function(key, index) {
2220
functions.push(serviceClass[key].split(" ")[1]);
23-
sdkFile = serviceClass[key].split(" ")[0];
2421
});
25-
parser_1.getAST(sdkFile).then(function(result) {
26-
sdkClassAst = result;
27-
try {
28-
sdkClassAst.members.map(function(method) {
29-
if (method.name && functions.includes(method.name.text)) {
30-
var name_1;
31-
Object.keys(serviceClass).map(function(key, index) {
32-
if (serviceClass[key].split(" ")[1] === method.name.text) {
33-
name_1 = key;
34-
}
35-
});
36-
var parameters_1 = [];
37-
method.parameters.map(function(param) {
38-
if (param.name.text !== "callback") {
39-
parameters_1.push({
40-
name: param.name.text,
41-
optional: param.questionToken ? true : false,
42-
type: typescript_1.SyntaxKind[param.type.kind]
43-
});
44-
}
45-
});
46-
methods.push({
47-
functionName: name_1.toString(),
48-
SDKFunctionName: method.name.text.toString(),
49-
params: parameters_1
22+
sdkClassAst.members.map(function(method) {
23+
if (method.name && functions.includes(method.name.text)) {
24+
var name_1;
25+
Object.keys(serviceClass).map(function(key, index) {
26+
if (serviceClass[key].split(" ")[1] === method.name.text) {
27+
name_1 = key;
28+
}
29+
});
30+
var parameters_1 = [];
31+
method.parameters.map(function(param) {
32+
if (param.name.text !== "callback") {
33+
parameters_1.push({
34+
name: param.name.text,
35+
optional: param.questionToken ? true : false,
36+
type: typescript_1.SyntaxKind[param.type.kind]
5037
});
5138
}
5239
});
53-
var groupedMethods = helper_1.groupers.aws(methods);
54-
methods = helper_1.filters.aws(groupedMethods);
55-
var classData = {
56-
className: sdkClassAst.name.text,
57-
functions: methods
58-
};
40+
methods.push({
41+
functionName: name_1.toString(),
42+
SDKFunctionName: method.name.text.toString(),
43+
params: parameters_1
44+
});
45+
}
46+
});
47+
var groupedMethods = helper_1.groupers.aws(methods);
48+
methods = helper_1.filters.aws(groupedMethods);
49+
var classData = {
50+
className: sdkClassAst.name.text,
51+
functions: methods
52+
};
53+
return classData;
54+
}
55+
exports.extractSDKData = extractSDKData;
56+
function generateAWSClass(serviceClass) {
57+
var sdkFile = serviceClass[Object.keys(serviceClass)[0]].split(" ")[0];
58+
parser_1.getAST(sdkFile).then(function(result) {
59+
var sdkClassAst = result;
60+
try {
61+
var classData = extractSDKData(sdkClassAst, serviceClass);
5962
var output = transformer_1.transform(dummyAst, classData);
6063
helper_1.printFile(
6164
process.cwd() + "/generatedClasses/AWS/" + classData.className + ".js",

generator/generators/aws/generator.ts

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -26,56 +26,60 @@ const dummyAst = createSourceFile(
2626
ScriptTarget.Latest,
2727
true
2828
);
29-
let sdkClassAst;
30-
let sdkFile;
3129

32-
export function generateAWSClass(serviceClass) {
33-
const functions = [];
30+
export function extractSDKData(sdkClassAst, serviceClass) {
3431
let methods: FunctionData[] = [];
32+
const functions = [];
3533

3634
Object.keys(serviceClass).map((key, index) => {
3735
functions.push(serviceClass[key].split(" ")[1]);
38-
sdkFile = serviceClass[key].split(" ")[0];
3936
});
4037

41-
getAST(sdkFile).then(result => {
42-
sdkClassAst = result;
43-
try {
44-
sdkClassAst.members.map(method => {
45-
if (method.name && functions.includes(method.name.text)) {
46-
let name;
47-
Object.keys(serviceClass).map((key, index) => {
48-
if (serviceClass[key].split(" ")[1] === method.name.text) {
49-
name = key;
50-
}
51-
});
52-
53-
const parameters = [];
54-
method.parameters.map(param => {
55-
if (param.name.text !== "callback") {
56-
parameters.push({
57-
name: param.name.text,
58-
optional: param.questionToken ? true : false,
59-
type: SyntaxKind[param.type.kind]
60-
});
61-
}
62-
});
38+
sdkClassAst.members.map(method => {
39+
if (method.name && functions.includes(method.name.text)) {
40+
let name;
41+
Object.keys(serviceClass).map((key, index) => {
42+
if (serviceClass[key].split(" ")[1] === method.name.text) {
43+
name = key;
44+
}
45+
});
6346

64-
methods.push({
65-
functionName: name.toString(),
66-
SDKFunctionName: method.name.text.toString(),
67-
params: parameters
47+
const parameters = [];
48+
method.parameters.map(param => {
49+
if (param.name.text !== "callback") {
50+
parameters.push({
51+
name: param.name.text,
52+
optional: param.questionToken ? true : false,
53+
type: SyntaxKind[param.type.kind]
6854
});
6955
}
7056
});
7157

72-
const groupedMethods = groupers.aws(methods);
73-
methods = filters.aws(groupedMethods);
58+
methods.push({
59+
functionName: name.toString(),
60+
SDKFunctionName: method.name.text.toString(),
61+
params: parameters
62+
});
63+
}
64+
});
65+
66+
const groupedMethods = groupers.aws(methods);
67+
methods = filters.aws(groupedMethods);
68+
69+
const classData: ClassData = {
70+
className: sdkClassAst.name.text,
71+
functions: methods
72+
};
7473

75-
const classData: ClassData = {
76-
className: sdkClassAst.name.text,
77-
functions: methods
78-
};
74+
return classData;
75+
}
76+
77+
export function generateAWSClass(serviceClass) {
78+
const sdkFile = serviceClass[Object.keys(serviceClass)[0]].split(" ")[0];
79+
getAST(sdkFile).then(result => {
80+
const sdkClassAst = result;
81+
try {
82+
const classData = extractSDKData(sdkClassAst, serviceClass);
7983
const output = transform(dummyAst, classData);
8084
printFile(
8185
process.cwd() + "/generatedClasses/AWS/" + classData.className + ".js",

generator/generators/azure/generator.js

Lines changed: 54 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ var __generator =
133133
}
134134
};
135135
exports.__esModule = true;
136-
exports.generateAzureClass = void 0;
136+
exports.generateAzureClass = exports.extractSDKData = void 0;
137137
var fs = require("fs");
138138
var typescript_1 = require("typescript");
139139
var parser_1 = require("../../parsers/azure/parser");
@@ -146,9 +146,60 @@ var dummyAst = typescript_1.createSourceFile(
146146
typescript_1.ScriptTarget.Latest,
147147
true
148148
);
149+
function extractSDKData(sdkFiles, methods) {
150+
var specifiedMethods = JSON.parse(JSON.stringify(methods));
151+
sdkFiles.map(function(sdkFile) {
152+
sdkFile.ast.members.map(function(member) {
153+
if (typescript_1.SyntaxKind[member.kind] === "Constructor") {
154+
member.parameters.map(function(param) {
155+
var tempStr = param.type.typeName.text.split(/(?=[A-Z])/);
156+
tempStr.pop();
157+
sdkFile.client = tempStr.join("");
158+
});
159+
}
160+
if (
161+
typescript_1.SyntaxKind[member.kind] === "MethodDeclaration" &&
162+
sdkFile.sdkFunctionNames.includes(member.name.text)
163+
) {
164+
var method = methods.find(function(methd) {
165+
return methd.SDKFunctionName === member.name.text;
166+
});
167+
var parameters = member.parameters.map(function(param) {
168+
return {
169+
name: param.name.text,
170+
optional: param.questionToken ? true : false,
171+
type: typescript_1.SyntaxKind[param.type.kind]
172+
};
173+
});
174+
var returnType = typescript_1.SyntaxKind[member.type.kind];
175+
if (!method.returnType) {
176+
method.params = parameters;
177+
method.returnType = returnType;
178+
method.client = sdkFile.client;
179+
} else {
180+
var clone = JSON.parse(JSON.stringify(method));
181+
clone.params = parameters;
182+
clone.returnType = returnType;
183+
clone.client = sdkFile.client;
184+
methods.push(clone);
185+
}
186+
}
187+
});
188+
});
189+
if (JSON.stringify(methods) === JSON.stringify(specifiedMethods)) {
190+
throw new Error("Data extraction unsuccessful");
191+
}
192+
var groupedMethods = helper_1.groupers.azure(methods);
193+
methods = helper_1.filters.azure(groupedMethods);
194+
var classData = {
195+
functions: methods
196+
};
197+
return classData;
198+
}
199+
exports.extractSDKData = extractSDKData;
149200
function generateAzureClass(serviceClass) {
150201
return __awaiter(this, void 0, void 0, function() {
151-
var methods, files, sdkFiles, groupedMethods, classData, output;
202+
var methods, files, sdkFiles, classData, output;
152203
var _this = this;
153204
return __generator(this, function(_a) {
154205
switch (_a.label) {
@@ -209,49 +260,7 @@ function generateAzureClass(serviceClass) {
209260
];
210261
case 1:
211262
_a.sent();
212-
sdkFiles.map(function(sdkFile) {
213-
sdkFile.ast.members.map(function(member) {
214-
if (typescript_1.SyntaxKind[member.kind] === "Constructor") {
215-
member.parameters.map(function(param) {
216-
var tempStr = param.type.typeName.text.split(/(?=[A-Z])/);
217-
tempStr.pop();
218-
sdkFile.client = tempStr.join("");
219-
});
220-
}
221-
if (
222-
typescript_1.SyntaxKind[member.kind] === "MethodDeclaration" &&
223-
sdkFile.sdkFunctionNames.includes(member.name.text)
224-
) {
225-
var method = methods.find(function(methd) {
226-
return methd.SDKFunctionName === member.name.text;
227-
});
228-
var parameters = member.parameters.map(function(param) {
229-
return {
230-
name: param.name.text,
231-
optional: param.questionToken ? true : false,
232-
type: typescript_1.SyntaxKind[param.type.kind]
233-
};
234-
});
235-
var returnType = typescript_1.SyntaxKind[member.type.kind];
236-
if (!method.returnType) {
237-
method.params = parameters;
238-
method.returnType = returnType;
239-
method.client = sdkFile.client;
240-
} else {
241-
var clone = JSON.parse(JSON.stringify(method));
242-
clone.params = parameters;
243-
clone.returnType = returnType;
244-
clone.client = sdkFile.client;
245-
methods.push(clone);
246-
}
247-
}
248-
});
249-
});
250-
groupedMethods = helper_1.groupers.azure(methods);
251-
methods = helper_1.filters.azure(groupedMethods);
252-
classData = {
253-
functions: methods
254-
};
263+
classData = extractSDKData(sdkFiles, methods);
255264
output = transformer_1.transform(dummyAst, classData);
256265
helper_1.printFile(
257266
process.cwd() +

0 commit comments

Comments
 (0)