rooibos-roku 4.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/lib/framework/BaseTestReporter.bs +27 -0
- package/dist/lib/framework/BaseTestSuite.bs +2131 -0
- package/dist/lib/framework/CommonUtils.bs +732 -0
- package/dist/lib/framework/ConsoleTestReporter.bs +200 -0
- package/dist/lib/framework/Coverage.bs +51 -0
- package/dist/lib/framework/Matchers.bs +28 -0
- package/dist/lib/framework/Rooibos.bs +83 -0
- package/dist/lib/framework/RooibosScene.xml +50 -0
- package/dist/lib/framework/RuntimeConfig.bs +20 -0
- package/dist/lib/framework/Stats.bs +46 -0
- package/dist/lib/framework/Test.bs +109 -0
- package/dist/lib/framework/TestGroup.bs +109 -0
- package/dist/lib/framework/TestResult.bs +74 -0
- package/dist/lib/framework/TestRunner.bs +187 -0
- package/dist/lib/framework/Utils.bs +63 -0
- package/dist/lib/framework/unused/CodeCoverage.brs +35 -0
- package/dist/lib/framework/unused/CodeCoverage.xml +13 -0
- package/dist/lib/framework/unused/CodeCoverageSupport.brs +56 -0
- package/dist/lib/rooibos/Annotation.js +187 -0
- package/dist/lib/rooibos/Annotation.js.map +1 -0
- package/dist/lib/rooibos/CodeCoverageProcessor.js +114 -0
- package/dist/lib/rooibos/CodeCoverageProcessor.js.map +1 -0
- package/dist/lib/rooibos/CodeCoverageProcessor.spec.js +62 -0
- package/dist/lib/rooibos/CodeCoverageProcessor.spec.js.map +1 -0
- package/dist/lib/rooibos/CodeCoverageType.js +11 -0
- package/dist/lib/rooibos/CodeCoverageType.js.map +1 -0
- package/dist/lib/rooibos/FileFactory.js +92 -0
- package/dist/lib/rooibos/FileFactory.js.map +1 -0
- package/dist/lib/rooibos/RawCodeStatement.js +21 -0
- package/dist/lib/rooibos/RawCodeStatement.js.map +1 -0
- package/dist/lib/rooibos/RooibosConfig.js +11 -0
- package/dist/lib/rooibos/RooibosConfig.js.map +1 -0
- package/dist/lib/rooibos/RooibosSession.js +151 -0
- package/dist/lib/rooibos/RooibosSession.js.map +1 -0
- package/dist/lib/rooibos/RooibosSessionInfo.js +181 -0
- package/dist/lib/rooibos/RooibosSessionInfo.js.map +1 -0
- package/dist/lib/rooibos/TestCase.js +65 -0
- package/dist/lib/rooibos/TestCase.js.map +1 -0
- package/dist/lib/rooibos/TestGroup.js +86 -0
- package/dist/lib/rooibos/TestGroup.js.map +1 -0
- package/dist/lib/rooibos/TestSuite.js +118 -0
- package/dist/lib/rooibos/TestSuite.js.map +1 -0
- package/dist/lib/rooibos/TestSuiteBuilder.js +192 -0
- package/dist/lib/rooibos/TestSuiteBuilder.js.map +1 -0
- package/dist/lib/rooibos/TestSuiteBuilder.spec.js +1126 -0
- package/dist/lib/rooibos/TestSuiteBuilder.spec.js.map +1 -0
- package/dist/lib/rooibos/Utils.js +173 -0
- package/dist/lib/rooibos/Utils.js.map +1 -0
- package/dist/lib/utils/Diagnostics.js +116 -0
- package/dist/lib/utils/Diagnostics.js.map +1 -0
- package/dist/lib/utils/testHelpers.spec.js +24 -0
- package/dist/lib/utils/testHelpers.spec.js.map +1 -0
- package/dist/plugin.js +116 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RooibosSessionInfo.js","sourceRoot":"","sources":["../../../src/lib/rooibos/RooibosSessionInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestCase = void 0;
|
|
4
|
+
const Utils_1 = require("./Utils");
|
|
5
|
+
class TestCase {
|
|
6
|
+
constructor(annotation, name, funcName, isSolo, isIgnored, lineNumber, params = null, paramTestIndex = 0, paramLineNumber = 0, expectedNumberOfParams = 0) {
|
|
7
|
+
this.annotation = annotation;
|
|
8
|
+
this.isSolo = isSolo;
|
|
9
|
+
this.funcName = funcName;
|
|
10
|
+
this.isIgnored = isIgnored;
|
|
11
|
+
this.name = name;
|
|
12
|
+
this.lineNumber = lineNumber;
|
|
13
|
+
this.paramLineNumber = paramLineNumber;
|
|
14
|
+
this.assertIndex = 0;
|
|
15
|
+
this.assertLineNumberMap = {};
|
|
16
|
+
this.rawParams = params;
|
|
17
|
+
this.expectedNumberOfParams = expectedNumberOfParams;
|
|
18
|
+
this.paramTestIndex = paramTestIndex;
|
|
19
|
+
this.isParamTest = this.expectedNumberOfParams > 0;
|
|
20
|
+
}
|
|
21
|
+
asText() {
|
|
22
|
+
let rawParamsText = this.fixBadJson(this.rawParams).replace(/null/g, 'invalid');
|
|
23
|
+
return `
|
|
24
|
+
{
|
|
25
|
+
isSolo: ${this.isSolo}
|
|
26
|
+
noCatch: ${this.annotation.noCatch}
|
|
27
|
+
funcName: "${this.funcName || ''}"
|
|
28
|
+
isIgnored: ${this.isIgnored}
|
|
29
|
+
isParamTest: ${this.isParamTest}
|
|
30
|
+
name: ${Utils_1.sanitizeBsJsonString(this.name)}
|
|
31
|
+
lineNumber: ${this.lineNumber + 2}
|
|
32
|
+
paramLineNumber: ${this.paramLineNumber}
|
|
33
|
+
assertIndex: ${this.assertIndex}
|
|
34
|
+
assertLineNumberMap: ${JSON.stringify(this.assertLineNumberMap)}
|
|
35
|
+
rawParams: ${rawParamsText}
|
|
36
|
+
paramTestIndex: ${this.paramTestIndex}
|
|
37
|
+
expectedNumberOfParams: ${this.expectedNumberOfParams}
|
|
38
|
+
isParamsValid: ${(this.rawParams || []).length === this.expectedNumberOfParams}
|
|
39
|
+
}`;
|
|
40
|
+
}
|
|
41
|
+
addAssertLine(lineNumber) {
|
|
42
|
+
this.assertLineNumberMap[this.assertIndex.toString().trim()] = lineNumber;
|
|
43
|
+
this.assertIndex++;
|
|
44
|
+
}
|
|
45
|
+
fixBadJson(o) {
|
|
46
|
+
// In case of an array we'll stringify all objects.
|
|
47
|
+
if (Array.isArray(o)) {
|
|
48
|
+
return `[${o
|
|
49
|
+
.map(obj => `${this.fixBadJson(obj)}`)
|
|
50
|
+
.join(',')}]`;
|
|
51
|
+
}
|
|
52
|
+
// not an object, stringify using native function
|
|
53
|
+
if (typeof o !== 'object' || o === null) {
|
|
54
|
+
return JSON.stringify(o);
|
|
55
|
+
}
|
|
56
|
+
return `{${Object
|
|
57
|
+
.keys(o)
|
|
58
|
+
.map(key => {
|
|
59
|
+
return `"${key.replace(/"/g, '')}":${this.fixBadJson(o[key])}`;
|
|
60
|
+
})
|
|
61
|
+
.join(',')}}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.TestCase = TestCase;
|
|
65
|
+
//# sourceMappingURL=TestCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestCase.js","sourceRoot":"","sources":["../../../src/lib/rooibos/TestCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestGroup = void 0;
|
|
4
|
+
const brighterscript_1 = require("brighterscript");
|
|
5
|
+
const BrsTranspileState_1 = require("brighterscript/dist/parser/BrsTranspileState");
|
|
6
|
+
const Diagnostics_1 = require("../utils/Diagnostics");
|
|
7
|
+
const RawCodeStatement_1 = require("./RawCodeStatement");
|
|
8
|
+
const TestSuite_1 = require("./TestSuite");
|
|
9
|
+
const Utils_1 = require("./Utils");
|
|
10
|
+
class TestGroup extends TestSuite_1.TestBlock {
|
|
11
|
+
constructor(testSuite, annotation) {
|
|
12
|
+
super(annotation);
|
|
13
|
+
this.testCases = new Map();
|
|
14
|
+
this.ignoredTestCases = [];
|
|
15
|
+
this.soloTestCases = [];
|
|
16
|
+
this.testSuite = testSuite;
|
|
17
|
+
this.setupFunctionName = this.setupFunctionName || this.testSuite.setupFunctionName;
|
|
18
|
+
this.tearDownFunctionName = this.tearDownFunctionName || this.testSuite.tearDownFunctionName;
|
|
19
|
+
this.beforeEachFunctionName = this.beforeEachFunctionName || this.testSuite.beforeEachFunctionName;
|
|
20
|
+
this.afterEachFunctionName = this.afterEachFunctionName || this.testSuite.afterEachFunctionName;
|
|
21
|
+
}
|
|
22
|
+
addTestCase(testCase) {
|
|
23
|
+
this.testCases.set(testCase.name + (testCase.isParamTest ? testCase.paramTestIndex.toString() : ''), testCase);
|
|
24
|
+
if (testCase.isIgnored) {
|
|
25
|
+
this.ignoredTestCases.push(testCase);
|
|
26
|
+
this.hasIgnoredTests = true;
|
|
27
|
+
}
|
|
28
|
+
else if (testCase.isSolo) {
|
|
29
|
+
this.hasSoloTests = true;
|
|
30
|
+
this.soloTestCases.push(testCase);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getTestCases() {
|
|
34
|
+
return [...this.testCases.values()];
|
|
35
|
+
}
|
|
36
|
+
modifyAssertions(testCase, noEarlyExit) {
|
|
37
|
+
//for each method
|
|
38
|
+
//if assertion
|
|
39
|
+
//wrap with if is not fail
|
|
40
|
+
//add line number as last param
|
|
41
|
+
const transpileState = new BrsTranspileState_1.BrsTranspileState(this.file);
|
|
42
|
+
try {
|
|
43
|
+
let func = this.testSuite.classStatement.methods.find((m) => m.name.text.toLowerCase() === testCase.funcName.toLowerCase());
|
|
44
|
+
func.walk(brighterscript_1.createVisitor({
|
|
45
|
+
ExpressionStatement: (es) => {
|
|
46
|
+
let ce = es.expression;
|
|
47
|
+
if (brighterscript_1.isCallExpression(ce) && brighterscript_1.isDottedGetExpression(ce.callee)) {
|
|
48
|
+
let dge = ce.callee;
|
|
49
|
+
let assertRegex = /(?:fail|assert(?:[a-z0-9]*)|expect(?:[a-z0-9]*))/i;
|
|
50
|
+
if (dge && assertRegex.test(dge.name.text)) {
|
|
51
|
+
return new RawCodeStatement_1.RawCodeStatement(`
|
|
52
|
+
m.currentAssertLineNumber = ${ce.range.start.line}
|
|
53
|
+
${ce.transpile(transpileState).join('')}
|
|
54
|
+
${noEarlyExit ? '' : 'if m.currentResult.isFail then return invalid'}
|
|
55
|
+
`, this.file, ce.range);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}), {
|
|
60
|
+
walkMode: brighterscript_1.WalkMode.visitStatementsRecursive
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
// console.log(e);
|
|
65
|
+
Diagnostics_1.diagnosticErrorProcessingFile(this.testSuite.file, e.message);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
asText() {
|
|
69
|
+
let testCaseText = [...this.testCases.values()].filter((tc) => tc.isIncluded).map((tc) => tc.asText());
|
|
70
|
+
return `
|
|
71
|
+
{
|
|
72
|
+
name: ${Utils_1.sanitizeBsJsonString(this.name)}
|
|
73
|
+
isSolo: ${this.isSolo}
|
|
74
|
+
isIgnored: ${this.isIgnored}
|
|
75
|
+
filename: "${this.pkgPath}"
|
|
76
|
+
lineNumber: "${this.annotation.annotation.range.start.line}"
|
|
77
|
+
setupFunctionName: "${this.setupFunctionName || ''}"
|
|
78
|
+
tearDownFunctionName: "${this.tearDownFunctionName || ''}"
|
|
79
|
+
beforeEachFunctionName: "${this.beforeEachFunctionName || ''}"
|
|
80
|
+
afterEachFunctionName: "${this.afterEachFunctionName || ''}"
|
|
81
|
+
testCases: [${testCaseText.join(',\n')}]
|
|
82
|
+
}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.TestGroup = TestGroup;
|
|
86
|
+
//# sourceMappingURL=TestGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestGroup.js","sourceRoot":"","sources":["../../../src/lib/rooibos/TestGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestSuite = exports.TestBlock = void 0;
|
|
4
|
+
const Diagnostics_1 = require("../utils/Diagnostics");
|
|
5
|
+
const Utils_1 = require("./Utils");
|
|
6
|
+
/**
|
|
7
|
+
* base of test suites and blocks..
|
|
8
|
+
*/
|
|
9
|
+
class TestBlock {
|
|
10
|
+
constructor(annotation) {
|
|
11
|
+
this.annotation = annotation;
|
|
12
|
+
this.isValid = false;
|
|
13
|
+
this.isIncluded = false;
|
|
14
|
+
this.hasFailures = false;
|
|
15
|
+
this.hasSoloTests = false;
|
|
16
|
+
this.hasIgnoredTests = false;
|
|
17
|
+
}
|
|
18
|
+
get file() {
|
|
19
|
+
return this.annotation.file;
|
|
20
|
+
}
|
|
21
|
+
get pkgPath() {
|
|
22
|
+
return this.file.pkgPath;
|
|
23
|
+
}
|
|
24
|
+
get filePath() {
|
|
25
|
+
return this.file.pathAbsolute;
|
|
26
|
+
}
|
|
27
|
+
get name() {
|
|
28
|
+
return this.annotation.name;
|
|
29
|
+
}
|
|
30
|
+
get isSolo() {
|
|
31
|
+
return this.annotation.isSolo;
|
|
32
|
+
}
|
|
33
|
+
get isIgnored() {
|
|
34
|
+
return this.annotation.isIgnore;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.TestBlock = TestBlock;
|
|
38
|
+
class TestSuite extends TestBlock {
|
|
39
|
+
constructor(annotation, classStatement) {
|
|
40
|
+
var _a;
|
|
41
|
+
super(annotation);
|
|
42
|
+
this.testGroups = new Map();
|
|
43
|
+
this.hasSoloGroups = false;
|
|
44
|
+
this.isNodeTest = false;
|
|
45
|
+
this.classStatement = classStatement;
|
|
46
|
+
this.isNodeTest = annotation.nodeName && annotation.nodeName.trim() !== '';
|
|
47
|
+
this.nodeName = (_a = annotation.nodeName) === null || _a === void 0 ? void 0 : _a.trim();
|
|
48
|
+
if (!this.name) {
|
|
49
|
+
this.annotation.name = classStatement.name.text;
|
|
50
|
+
}
|
|
51
|
+
this.generatedNodeName = (this.name || 'ERROR').replace(/[^a-zA-Z0-9]/g, '_');
|
|
52
|
+
}
|
|
53
|
+
addGroup(group) {
|
|
54
|
+
this.testGroups.set(group.name, group);
|
|
55
|
+
if (group.ignoredTestCases.length > 0) {
|
|
56
|
+
this.hasIgnoredTests = true;
|
|
57
|
+
}
|
|
58
|
+
if (group.hasSoloTests) {
|
|
59
|
+
this.hasSoloTests = true;
|
|
60
|
+
}
|
|
61
|
+
if (group.isSolo) {
|
|
62
|
+
this.hasSoloGroups = true;
|
|
63
|
+
}
|
|
64
|
+
this.isValid = true;
|
|
65
|
+
}
|
|
66
|
+
addDataFunctions() {
|
|
67
|
+
if (this.isIncluded) {
|
|
68
|
+
Utils_1.addOverriddenMethod(this.file, this.annotation.annotation, this.classStatement, 'getTestSuiteData', `return ${this.asText()}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
removeCode() {
|
|
72
|
+
this.classStatement.fields = [];
|
|
73
|
+
this.classStatement.methods = [];
|
|
74
|
+
this.classStatement.body = [];
|
|
75
|
+
this.classStatement.memberMap = {};
|
|
76
|
+
}
|
|
77
|
+
getTestGroups() {
|
|
78
|
+
return [...this.testGroups.values()];
|
|
79
|
+
}
|
|
80
|
+
validate() {
|
|
81
|
+
if (this.isNodeTest) {
|
|
82
|
+
if (!this.nodeName) {
|
|
83
|
+
Diagnostics_1.diagnosticNodeTestRequiresNode(this.file, this.annotation.annotation);
|
|
84
|
+
}
|
|
85
|
+
else if (!this.file.program.getComponent(this.nodeName)) {
|
|
86
|
+
Diagnostics_1.diagnosticNodeTestIllegalNode(this.file, this.annotation.annotation, this.nodeName);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
asText() {
|
|
91
|
+
let testGroups = this.isIncluded ? [...this.testGroups.values()].filter((testGroup) => testGroup.isIncluded)
|
|
92
|
+
.map((testGroup) => testGroup.asText()) : '';
|
|
93
|
+
return `{
|
|
94
|
+
name: ${Utils_1.sanitizeBsJsonString(this.name)}
|
|
95
|
+
isSolo: ${this.isSolo}
|
|
96
|
+
noCatch: ${this.annotation.noCatch}
|
|
97
|
+
isIgnored: ${this.isIgnored}
|
|
98
|
+
pkgPath: "${this.pkgPath}"
|
|
99
|
+
filePath: "${this.filePath}"
|
|
100
|
+
lineNumber: ${this.classStatement.range.start.line + 1}
|
|
101
|
+
valid: ${this.isValid}
|
|
102
|
+
hasFailures: ${this.hasFailures}
|
|
103
|
+
hasSoloTests: ${this.hasSoloTests}
|
|
104
|
+
hasIgnoredTests: ${this.hasIgnoredTests}
|
|
105
|
+
hasSoloGroups: ${this.hasSoloGroups}
|
|
106
|
+
setupFunctionName: "${this.setupFunctionName || ''}"
|
|
107
|
+
tearDownFunctionName: "${this.tearDownFunctionName || ''}"
|
|
108
|
+
beforeEachFunctionName: "${this.beforeEachFunctionName || ''}"
|
|
109
|
+
afterEachFunctionName: "${this.afterEachFunctionName || ''}"
|
|
110
|
+
isNodeTest: ${this.isNodeTest || false}
|
|
111
|
+
nodeName: "${this.nodeName || ''}"
|
|
112
|
+
generatedNodeName: "${this.generatedNodeName || ''}"
|
|
113
|
+
testGroups: [${testGroups}]
|
|
114
|
+
}`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.TestSuite = TestSuite;
|
|
118
|
+
//# sourceMappingURL=TestSuite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestSuite.js","sourceRoot":"","sources":["../../../src/lib/rooibos/TestSuite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestSuiteBuilder = void 0;
|
|
4
|
+
const brighterscript_1 = require("brighterscript");
|
|
5
|
+
const TestGroup_1 = require("./TestGroup");
|
|
6
|
+
const Annotation_1 = require("./Annotation");
|
|
7
|
+
const TestCase_1 = require("./TestCase");
|
|
8
|
+
const TestSuite_1 = require("./TestSuite");
|
|
9
|
+
const Diagnostics_1 = require("../utils/Diagnostics");
|
|
10
|
+
class TestSuiteBuilder {
|
|
11
|
+
constructor(session) {
|
|
12
|
+
this.session = session;
|
|
13
|
+
}
|
|
14
|
+
processFile(file) {
|
|
15
|
+
var _a;
|
|
16
|
+
this.file = file;
|
|
17
|
+
let suites = [];
|
|
18
|
+
try {
|
|
19
|
+
for (let cs of file.parser.references.classStatements) {
|
|
20
|
+
//a test is comprised of a comment block; followed by a class
|
|
21
|
+
let annotation = (_a = Annotation_1.RooibosAnnotation.getAnnotation(file, cs)) === null || _a === void 0 ? void 0 : _a.blockAnnotation;
|
|
22
|
+
if (annotation) {
|
|
23
|
+
if (annotation.annotationType === Annotation_1.AnnotationType.TestSuite) {
|
|
24
|
+
this.addSuiteIfValid(file, annotation, cs, suites);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
Diagnostics_1.diagnosticWrongAnnotation(file, cs, 'Expected a TestSuite annotation, got: ' + annotation.annotationType);
|
|
28
|
+
throw new Error('bad test suite');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
// console.log(e);
|
|
35
|
+
Diagnostics_1.diagnosticErrorProcessingFile(file, e.message);
|
|
36
|
+
}
|
|
37
|
+
this.session.sessionInfo.updateTestSuites(suites);
|
|
38
|
+
return suites;
|
|
39
|
+
}
|
|
40
|
+
addSuiteIfValid(file, annotation, s, suites) {
|
|
41
|
+
let oldSuite = this.session.sessionInfo.testSuites.get(annotation.name);
|
|
42
|
+
let suite = this.processClass(annotation, s);
|
|
43
|
+
let isDuplicate = false;
|
|
44
|
+
if ((oldSuite && oldSuite.file.pathAbsolute !==
|
|
45
|
+
file.pathAbsolute)) {
|
|
46
|
+
oldSuite.isValid = false;
|
|
47
|
+
suite.isValid = false;
|
|
48
|
+
Diagnostics_1.diagnosticDuplicateSuite(file, oldSuite.classStatement, oldSuite.annotation);
|
|
49
|
+
isDuplicate = true;
|
|
50
|
+
}
|
|
51
|
+
let duplicateSuites = suites.filter((s) => s.name === suite.name);
|
|
52
|
+
if (duplicateSuites.length > 0) {
|
|
53
|
+
for (let duplicateSuite of duplicateSuites) {
|
|
54
|
+
duplicateSuite.isValid = false;
|
|
55
|
+
Diagnostics_1.diagnosticDuplicateSuite(file, duplicateSuite.classStatement, duplicateSuite.annotation);
|
|
56
|
+
}
|
|
57
|
+
suite.isValid = false;
|
|
58
|
+
isDuplicate = true;
|
|
59
|
+
}
|
|
60
|
+
suites.push(suite);
|
|
61
|
+
if (isDuplicate) {
|
|
62
|
+
Diagnostics_1.diagnosticDuplicateSuite(file, suite.classStatement, suite.annotation);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
processClass(annotation, classStatement) {
|
|
66
|
+
this.testSuite = new TestSuite_1.TestSuite(annotation, classStatement);
|
|
67
|
+
this.currentGroup = null;
|
|
68
|
+
this.annotation = null;
|
|
69
|
+
for (let s of classStatement.body) {
|
|
70
|
+
let { blockAnnotation, testAnnotation } = Annotation_1.RooibosAnnotation.getAnnotation(this.file, s);
|
|
71
|
+
if (blockAnnotation) {
|
|
72
|
+
if (this.annotation) {
|
|
73
|
+
Diagnostics_1.diagnosticNoGroup(this.file, s, this.annotation.annotationType);
|
|
74
|
+
}
|
|
75
|
+
if (this.currentGroup) {
|
|
76
|
+
this.testSuite.addGroup(this.currentGroup);
|
|
77
|
+
if (this.currentGroup.testCases.size === 0) {
|
|
78
|
+
Diagnostics_1.diagnosticEmptyGroup(this.file, this.currentGroup.annotation);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!this.createGroup(blockAnnotation)) {
|
|
82
|
+
this.currentGroup = null;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.annotation = testAnnotation;
|
|
87
|
+
if (brighterscript_1.isClassMethodStatement(s)) {
|
|
88
|
+
this.processClassMethod(s);
|
|
89
|
+
}
|
|
90
|
+
this.annotation = null;
|
|
91
|
+
}
|
|
92
|
+
if (this.currentGroup) {
|
|
93
|
+
this.testSuite.addGroup(this.currentGroup);
|
|
94
|
+
}
|
|
95
|
+
this.testSuite.isValid = this.testSuite.file.getDiagnostics().length === 0;
|
|
96
|
+
return this.testSuite;
|
|
97
|
+
}
|
|
98
|
+
createGroup(blockAnnotation) {
|
|
99
|
+
if (!this.testSuite.testGroups.has(blockAnnotation.name)) {
|
|
100
|
+
this.currentGroup = new TestGroup_1.TestGroup(this.testSuite, blockAnnotation);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
Diagnostics_1.diagnosticGroupWithNameAlreadyDefined(this.file, blockAnnotation);
|
|
105
|
+
Diagnostics_1.diagnosticGroupWithNameAlreadyDefined(this.file, this.testSuite.testGroups.get(blockAnnotation.name).annotation);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
processClassMethod(statement) {
|
|
110
|
+
if (this.annotation) {
|
|
111
|
+
if (!this.currentGroup) {
|
|
112
|
+
Diagnostics_1.diagnosticNoGroup(this.file, statement, this.annotation.annotationType);
|
|
113
|
+
}
|
|
114
|
+
switch (this.annotation.annotationType) {
|
|
115
|
+
case Annotation_1.AnnotationType.It:
|
|
116
|
+
this.createTestCases(statement, this.annotation);
|
|
117
|
+
break;
|
|
118
|
+
case Annotation_1.AnnotationType.Setup:
|
|
119
|
+
this.currentGroup.setupFunctionName = statement.name.text;
|
|
120
|
+
if (statement.func.parameters.length > 0) {
|
|
121
|
+
Diagnostics_1.diagnosticWrongParameterCount(this.file, statement, 0);
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case Annotation_1.AnnotationType.TearDown:
|
|
125
|
+
this.currentGroup.tearDownFunctionName = statement.name.text;
|
|
126
|
+
if (statement.func.parameters.length > 0) {
|
|
127
|
+
Diagnostics_1.diagnosticWrongParameterCount(this.file, statement, 0);
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
case Annotation_1.AnnotationType.BeforeEach:
|
|
131
|
+
this.currentGroup.beforeEachFunctionName = statement.name.text;
|
|
132
|
+
if (statement.func.parameters.length > 0) {
|
|
133
|
+
Diagnostics_1.diagnosticWrongParameterCount(this.file, statement, 0);
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case Annotation_1.AnnotationType.AfterEach:
|
|
137
|
+
this.currentGroup.afterEachFunctionName = statement.name.text;
|
|
138
|
+
if (statement.func.parameters.length > 0) {
|
|
139
|
+
Diagnostics_1.diagnosticWrongParameterCount(this.file, statement, 0);
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
sanitizeFunctionName(name) {
|
|
148
|
+
return name.replace(/[^0-9_a-z]/ig, '_');
|
|
149
|
+
}
|
|
150
|
+
createTestCases(statement, annotation) {
|
|
151
|
+
var _a;
|
|
152
|
+
const lineNumber = statement.func.range.start.line;
|
|
153
|
+
const numberOfArgs = statement.func.parameters.length;
|
|
154
|
+
const numberOfParams = annotation.params.length;
|
|
155
|
+
if (this.currentGroup.testCases.has(annotation.name) || ((_a = this.currentGroup.testCases.get(annotation.name + '0')) === null || _a === void 0 ? void 0 : _a.paramLineNumber)) {
|
|
156
|
+
Diagnostics_1.diagnosticTestWithNameAlreadyDefined(annotation);
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
let sanitizedTestName = this.sanitizeFunctionName(this.currentGroup.name) + '_' + this.sanitizeFunctionName(annotation.name);
|
|
160
|
+
statement.name.text = sanitizedTestName;
|
|
161
|
+
statement.func.functionStatement.name.text = sanitizedTestName;
|
|
162
|
+
if (numberOfParams > 0) {
|
|
163
|
+
let index = 0;
|
|
164
|
+
for (const param of annotation.params) {
|
|
165
|
+
if (param.params.length === numberOfArgs) {
|
|
166
|
+
let isSolo = annotation.hasSoloParams ? param.isSolo : annotation.isSolo;
|
|
167
|
+
let isIgnore = annotation.isIgnore ? true : param.isIgnore;
|
|
168
|
+
this.currentGroup.addTestCase(new TestCase_1.TestCase(annotation, annotation.name, statement.name.text, isSolo, isIgnore, lineNumber, param.params, index, param.lineNumber, numberOfArgs));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
Diagnostics_1.diagnosticWrongTestParameterCount(this.file, param.annotation, param.params.length, numberOfArgs);
|
|
172
|
+
}
|
|
173
|
+
index++;
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
else if (numberOfParams === 0) {
|
|
178
|
+
if (numberOfArgs === 0) {
|
|
179
|
+
this.currentGroup.addTestCase(new TestCase_1.TestCase(annotation, annotation.name, statement.name.text, annotation.isSolo, annotation.isIgnore, lineNumber));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
Diagnostics_1.diagnosticTestWithArgsButNoParams(this.file, annotation.annotation, numberOfArgs);
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
Diagnostics_1.diagnosticWrongParameterCount(this.file, statement, 0);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.TestSuiteBuilder = TestSuiteBuilder;
|
|
192
|
+
//# sourceMappingURL=TestSuiteBuilder.js.map
|