This repository has been archived by the owner on Feb 6, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
generator.test.ts
130 lines (105 loc) · 5.99 KB
/
generator.test.ts
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import { assert } from 'chai';
import * as fs from 'fs';
import { getCorrectFileNameFromTemplate, getFileNameFromTemplate, generateEverything, getTemplateFilesPath, ReferenceCode, removeCodeFormatting, testConfig } from '../testUtils';
import getGenerators from '../../source/lib/generators';
import { Logger } from '../../source/lib/utils/logger';
describe('Generator', function() {
let paths: { templateFilePaths: string[]; toTestPaths: string[]} = { templateFilePaths: [], toTestPaths: [] };
before(function() {
paths = getTemplateFilesPath();
});
after(function() {
for (const templateFilePath of paths.templateFilePaths) {
fs.unlinkSync(getFileNameFromTemplate(templateFilePath));
}
});
const originalLogFunction = console.log;
let output = '';
beforeEach(function() {
output = '';
console.log = (msg: string) => {
output += msg + '\n';
};
});
afterEach(function() {
console.log = originalLogFunction;
if (this.currentTest?.state === 'failed') {
console.log(output);
}
});
describe('#constructor(structure: StructureModel, config: ConfigModel)', function() {
let referenceCode: ReferenceCode = { almostempty: {}, tests: {} };
before(function() {
referenceCode = JSON.parse(fs.readFileSync(`${testConfig.assetsPath}/codereference.json`, 'utf-8'));
});
it(`should get generators`, function(done) {
let generators = getGenerators(new Logger({}));
assert(generators.length > 0, '0 generator created');
done();
});
it(`should generate identical formatting and code for almost empty structure and config`, function() {
let generators = getGenerators(new Logger({}));
for (let generator of generators) {
let gen = new generator({id: 'int', sessionName: 'char*', timestamp: 'long'} as any, {}).generated;
assert(gen.comment ? true : false, `No comment for generator ${generator.name}`);
if (referenceCode.almostempty[gen.comment] === undefined) {
assert(false, `No reference code for ${gen.comment}`);
}
else {
assert(removeCodeFormatting(referenceCode.almostempty[gen.comment]) === removeCodeFormatting(gen.code)), `${gen.comment} different from reference (Not considering formatting)`;
assert(referenceCode.almostempty[gen.comment] === gen.code), `${gen.comment} different from reference formatting`;
}
}
});
it(`should generate identical formatting and code for test folder structures and configs`, function() {
let generators = getGenerators(new Logger({}));
for (const toTestPath of paths.toTestPaths) {
if (referenceCode.tests[toTestPath] === undefined) {
assert(false, `No reference code for ${toTestPath}`);
}
else {
for (let generator of generators) {
let gen = new generator(JSON.parse(fs.readFileSync(toTestPath + '/structure.model.json', 'utf-8')), JSON.parse(fs.readFileSync(toTestPath + '/config.model.json', 'utf-8'))).generated;
assert(gen.comment ? true : false, `No comment for generator ${generator.name}`);
if (referenceCode.tests[toTestPath][gen.comment] === undefined) {
assert(false, `No reference code for ${gen.comment} in ${toTestPath}`);
}
else {
assert(removeCodeFormatting(referenceCode.tests[toTestPath][gen.comment]) === removeCodeFormatting(gen.code), `${gen.comment} in ${toTestPath} different from reference (Not considering formatting)`);
assert(referenceCode.tests[toTestPath][gen.comment] === gen.code), `${gen.comment} in ${toTestPath} different from reference formatting`;
}
}
}
}
});
});
describe('#generate(src?: string, structureModel?: string, configModel?: string, options?: Options): void', function() {
it('should generate files', function() {
generateEverything(paths.toTestPaths);
//CHECK
for (const templateFilePath of paths.templateFilePaths) {
const toCheck = getFileNameFromTemplate(templateFilePath);
assert(fs.existsSync(toCheck), `File ${toCheck} not generated`);
}
});
it('content should be identical', function() {
for (const templateFilePath of paths.templateFilePaths) {
const toCompare = getFileNameFromTemplate(templateFilePath);
const asReference = getCorrectFileNameFromTemplate(templateFilePath);
assert(fs.existsSync(toCompare), `File ${toCompare} not generated`);
assert(fs.existsSync(asReference), `File ${asReference} not found`);
let formatFile = (fileName: string) => removeCodeFormatting(fs.readFileSync(fileName, 'utf8'));
assert(formatFile(toCompare) === formatFile(asReference), `Content of ${toCompare} different from ${asReference}`);
}
});
it('content and formatting should be identical', function() {
for (const templateFilePath of paths.templateFilePaths) {
const toCompare = getFileNameFromTemplate(templateFilePath);
const asReference = getCorrectFileNameFromTemplate(templateFilePath);
assert(fs.existsSync(toCompare), `File ${toCompare} not generated`);
assert(fs.existsSync(asReference), `File ${asReference} not found`);
assert(fs.readFileSync(toCompare, 'utf8') === fs.readFileSync(asReference, 'utf8'), `Content or formatting of ${toCompare} different from ${asReference}`);
}
});
});
});