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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/lib/framework/BaseTestReporter.bs +27 -0
  4. package/dist/lib/framework/BaseTestSuite.bs +2131 -0
  5. package/dist/lib/framework/CommonUtils.bs +732 -0
  6. package/dist/lib/framework/ConsoleTestReporter.bs +200 -0
  7. package/dist/lib/framework/Coverage.bs +51 -0
  8. package/dist/lib/framework/Matchers.bs +28 -0
  9. package/dist/lib/framework/Rooibos.bs +83 -0
  10. package/dist/lib/framework/RooibosScene.xml +50 -0
  11. package/dist/lib/framework/RuntimeConfig.bs +20 -0
  12. package/dist/lib/framework/Stats.bs +46 -0
  13. package/dist/lib/framework/Test.bs +109 -0
  14. package/dist/lib/framework/TestGroup.bs +109 -0
  15. package/dist/lib/framework/TestResult.bs +74 -0
  16. package/dist/lib/framework/TestRunner.bs +187 -0
  17. package/dist/lib/framework/Utils.bs +63 -0
  18. package/dist/lib/framework/unused/CodeCoverage.brs +35 -0
  19. package/dist/lib/framework/unused/CodeCoverage.xml +13 -0
  20. package/dist/lib/framework/unused/CodeCoverageSupport.brs +56 -0
  21. package/dist/lib/rooibos/Annotation.js +187 -0
  22. package/dist/lib/rooibos/Annotation.js.map +1 -0
  23. package/dist/lib/rooibos/CodeCoverageProcessor.js +114 -0
  24. package/dist/lib/rooibos/CodeCoverageProcessor.js.map +1 -0
  25. package/dist/lib/rooibos/CodeCoverageProcessor.spec.js +62 -0
  26. package/dist/lib/rooibos/CodeCoverageProcessor.spec.js.map +1 -0
  27. package/dist/lib/rooibos/CodeCoverageType.js +11 -0
  28. package/dist/lib/rooibos/CodeCoverageType.js.map +1 -0
  29. package/dist/lib/rooibos/FileFactory.js +92 -0
  30. package/dist/lib/rooibos/FileFactory.js.map +1 -0
  31. package/dist/lib/rooibos/RawCodeStatement.js +21 -0
  32. package/dist/lib/rooibos/RawCodeStatement.js.map +1 -0
  33. package/dist/lib/rooibos/RooibosConfig.js +11 -0
  34. package/dist/lib/rooibos/RooibosConfig.js.map +1 -0
  35. package/dist/lib/rooibos/RooibosSession.js +151 -0
  36. package/dist/lib/rooibos/RooibosSession.js.map +1 -0
  37. package/dist/lib/rooibos/RooibosSessionInfo.js +181 -0
  38. package/dist/lib/rooibos/RooibosSessionInfo.js.map +1 -0
  39. package/dist/lib/rooibos/TestCase.js +65 -0
  40. package/dist/lib/rooibos/TestCase.js.map +1 -0
  41. package/dist/lib/rooibos/TestGroup.js +86 -0
  42. package/dist/lib/rooibos/TestGroup.js.map +1 -0
  43. package/dist/lib/rooibos/TestSuite.js +118 -0
  44. package/dist/lib/rooibos/TestSuite.js.map +1 -0
  45. package/dist/lib/rooibos/TestSuiteBuilder.js +192 -0
  46. package/dist/lib/rooibos/TestSuiteBuilder.js.map +1 -0
  47. package/dist/lib/rooibos/TestSuiteBuilder.spec.js +1126 -0
  48. package/dist/lib/rooibos/TestSuiteBuilder.spec.js.map +1 -0
  49. package/dist/lib/rooibos/Utils.js +173 -0
  50. package/dist/lib/rooibos/Utils.js.map +1 -0
  51. package/dist/lib/utils/Diagnostics.js +116 -0
  52. package/dist/lib/utils/Diagnostics.js.map +1 -0
  53. package/dist/lib/utils/testHelpers.spec.js +24 -0
  54. package/dist/lib/utils/testHelpers.spec.js.map +1 -0
  55. package/dist/plugin.js +116 -0
  56. package/dist/plugin.js.map +1 -0
  57. 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