Skip to content

Commit

Permalink
Merge pull request #59 from rajitha1998/mochaGeneratorUnitTests
Browse files Browse the repository at this point in the history
Mocha unit tests for generators
  • Loading branch information
rajikaimal committed Aug 15, 2020
2 parents cdd4284 + ad54090 commit 56ec60e
Show file tree
Hide file tree
Showing 34 changed files with 3,279 additions and 581 deletions.
77 changes: 40 additions & 37 deletions generator/generators/aws/generator.js
@@ -1,6 +1,6 @@
"use strict";
exports.__esModule = true;
exports.generateAWSClass = void 0;
exports.generateAWSClass = exports.extractSDKData = void 0;
var fs = require("fs");
var typescript_1 = require("typescript");
var parser_1 = require("../../parsers/aws/parser");
Expand All @@ -13,49 +13,52 @@ var dummyAst = typescript_1.createSourceFile(
typescript_1.ScriptTarget.Latest,
true
);
var sdkClassAst;
var sdkFile;
function generateAWSClass(serviceClass) {
var functions = [];
function extractSDKData(sdkClassAst, serviceClass) {
var methods = [];
var functions = [];
Object.keys(serviceClass).map(function(key, index) {
functions.push(serviceClass[key].split(" ")[1]);
sdkFile = serviceClass[key].split(" ")[0];
});
parser_1.getAST(sdkFile).then(function(result) {
sdkClassAst = result;
try {
sdkClassAst.members.map(function(method) {
if (method.name && functions.includes(method.name.text)) {
var name_1;
Object.keys(serviceClass).map(function(key, index) {
if (serviceClass[key].split(" ")[1] === method.name.text) {
name_1 = key;
}
});
var parameters_1 = [];
method.parameters.map(function(param) {
if (param.name.text !== "callback") {
parameters_1.push({
name: param.name.text,
optional: param.questionToken ? true : false,
type: typescript_1.SyntaxKind[param.type.kind]
});
}
});
methods.push({
functionName: name_1.toString(),
SDKFunctionName: method.name.text.toString(),
params: parameters_1
sdkClassAst.members.map(function(method) {
if (method.name && functions.includes(method.name.text)) {
var name_1;
Object.keys(serviceClass).map(function(key, index) {
if (serviceClass[key].split(" ")[1] === method.name.text) {
name_1 = key;
}
});
var parameters_1 = [];
method.parameters.map(function(param) {
if (param.name.text !== "callback") {
parameters_1.push({
name: param.name.text,
optional: param.questionToken ? true : false,
type: typescript_1.SyntaxKind[param.type.kind]
});
}
});
var groupedMethods = helper_1.groupers.aws(methods);
methods = helper_1.filters.aws(groupedMethods);
var classData = {
className: sdkClassAst.name.text,
functions: methods
};
methods.push({
functionName: name_1.toString(),
SDKFunctionName: method.name.text.toString(),
params: parameters_1
});
}
});
var groupedMethods = helper_1.groupers.aws(methods);
methods = helper_1.filters.aws(groupedMethods);
var classData = {
className: sdkClassAst.name.text,
functions: methods
};
return classData;
}
exports.extractSDKData = extractSDKData;
function generateAWSClass(serviceClass) {
var sdkFile = serviceClass[Object.keys(serviceClass)[0]].split(" ")[0];
parser_1.getAST(sdkFile).then(function(result) {
var sdkClassAst = result;
try {
var classData = extractSDKData(sdkClassAst, serviceClass);
var output = transformer_1.transform(dummyAst, classData);
helper_1.printFile(
process.cwd() + "/generatedClasses/AWS/" + classData.className + ".js",
Expand Down
78 changes: 41 additions & 37 deletions generator/generators/aws/generator.ts
Expand Up @@ -26,56 +26,60 @@ const dummyAst = createSourceFile(
ScriptTarget.Latest,
true
);
let sdkClassAst;
let sdkFile;

export function generateAWSClass(serviceClass) {
const functions = [];
export function extractSDKData(sdkClassAst, serviceClass) {
let methods: FunctionData[] = [];
const functions = [];

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

getAST(sdkFile).then(result => {
sdkClassAst = result;
try {
sdkClassAst.members.map(method => {
if (method.name && functions.includes(method.name.text)) {
let name;
Object.keys(serviceClass).map((key, index) => {
if (serviceClass[key].split(" ")[1] === method.name.text) {
name = key;
}
});

const parameters = [];
method.parameters.map(param => {
if (param.name.text !== "callback") {
parameters.push({
name: param.name.text,
optional: param.questionToken ? true : false,
type: SyntaxKind[param.type.kind]
});
}
});
sdkClassAst.members.map(method => {
if (method.name && functions.includes(method.name.text)) {
let name;
Object.keys(serviceClass).map((key, index) => {
if (serviceClass[key].split(" ")[1] === method.name.text) {
name = key;
}
});

methods.push({
functionName: name.toString(),
SDKFunctionName: method.name.text.toString(),
params: parameters
const parameters = [];
method.parameters.map(param => {
if (param.name.text !== "callback") {
parameters.push({
name: param.name.text,
optional: param.questionToken ? true : false,
type: SyntaxKind[param.type.kind]
});
}
});

const groupedMethods = groupers.aws(methods);
methods = filters.aws(groupedMethods);
methods.push({
functionName: name.toString(),
SDKFunctionName: method.name.text.toString(),
params: parameters
});
}
});

const groupedMethods = groupers.aws(methods);
methods = filters.aws(groupedMethods);

const classData: ClassData = {
className: sdkClassAst.name.text,
functions: methods
};

const classData: ClassData = {
className: sdkClassAst.name.text,
functions: methods
};
return classData;
}

export function generateAWSClass(serviceClass) {
const sdkFile = serviceClass[Object.keys(serviceClass)[0]].split(" ")[0];
getAST(sdkFile).then(result => {
const sdkClassAst = result;
try {
const classData = extractSDKData(sdkClassAst, serviceClass);
const output = transform(dummyAst, classData);
printFile(
process.cwd() + "/generatedClasses/AWS/" + classData.className + ".js",
Expand Down
99 changes: 54 additions & 45 deletions generator/generators/azure/generator.js
Expand Up @@ -133,7 +133,7 @@ var __generator =
}
};
exports.__esModule = true;
exports.generateAzureClass = void 0;
exports.generateAzureClass = exports.extractSDKData = void 0;
var fs = require("fs");
var typescript_1 = require("typescript");
var parser_1 = require("../../parsers/azure/parser");
Expand All @@ -146,9 +146,60 @@ var dummyAst = typescript_1.createSourceFile(
typescript_1.ScriptTarget.Latest,
true
);
function extractSDKData(sdkFiles, methods) {
var specifiedMethods = JSON.parse(JSON.stringify(methods));
sdkFiles.map(function(sdkFile) {
sdkFile.ast.members.map(function(member) {
if (typescript_1.SyntaxKind[member.kind] === "Constructor") {
member.parameters.map(function(param) {
var tempStr = param.type.typeName.text.split(/(?=[A-Z])/);
tempStr.pop();
sdkFile.client = tempStr.join("");
});
}
if (
typescript_1.SyntaxKind[member.kind] === "MethodDeclaration" &&
sdkFile.sdkFunctionNames.includes(member.name.text)
) {
var method = methods.find(function(methd) {
return methd.SDKFunctionName === member.name.text;
});
var parameters = member.parameters.map(function(param) {
return {
name: param.name.text,
optional: param.questionToken ? true : false,
type: typescript_1.SyntaxKind[param.type.kind]
};
});
var returnType = typescript_1.SyntaxKind[member.type.kind];
if (!method.returnType) {
method.params = parameters;
method.returnType = returnType;
method.client = sdkFile.client;
} else {
var clone = JSON.parse(JSON.stringify(method));
clone.params = parameters;
clone.returnType = returnType;
clone.client = sdkFile.client;
methods.push(clone);
}
}
});
});
if (JSON.stringify(methods) === JSON.stringify(specifiedMethods)) {
throw new Error("Data extraction unsuccessful");
}
var groupedMethods = helper_1.groupers.azure(methods);
methods = helper_1.filters.azure(groupedMethods);
var classData = {
functions: methods
};
return classData;
}
exports.extractSDKData = extractSDKData;
function generateAzureClass(serviceClass) {
return __awaiter(this, void 0, void 0, function() {
var methods, files, sdkFiles, groupedMethods, classData, output;
var methods, files, sdkFiles, classData, output;
var _this = this;
return __generator(this, function(_a) {
switch (_a.label) {
Expand Down Expand Up @@ -209,49 +260,7 @@ function generateAzureClass(serviceClass) {
];
case 1:
_a.sent();
sdkFiles.map(function(sdkFile) {
sdkFile.ast.members.map(function(member) {
if (typescript_1.SyntaxKind[member.kind] === "Constructor") {
member.parameters.map(function(param) {
var tempStr = param.type.typeName.text.split(/(?=[A-Z])/);
tempStr.pop();
sdkFile.client = tempStr.join("");
});
}
if (
typescript_1.SyntaxKind[member.kind] === "MethodDeclaration" &&
sdkFile.sdkFunctionNames.includes(member.name.text)
) {
var method = methods.find(function(methd) {
return methd.SDKFunctionName === member.name.text;
});
var parameters = member.parameters.map(function(param) {
return {
name: param.name.text,
optional: param.questionToken ? true : false,
type: typescript_1.SyntaxKind[param.type.kind]
};
});
var returnType = typescript_1.SyntaxKind[member.type.kind];
if (!method.returnType) {
method.params = parameters;
method.returnType = returnType;
method.client = sdkFile.client;
} else {
var clone = JSON.parse(JSON.stringify(method));
clone.params = parameters;
clone.returnType = returnType;
clone.client = sdkFile.client;
methods.push(clone);
}
}
});
});
groupedMethods = helper_1.groupers.azure(methods);
methods = helper_1.filters.azure(groupedMethods);
classData = {
functions: methods
};
classData = extractSDKData(sdkFiles, methods);
output = transformer_1.transform(dummyAst, classData);
helper_1.printFile(
process.cwd() +
Expand Down

0 comments on commit 56ec60e

Please sign in to comment.