rooibos-roku
Version:
simple, flexible, fun brightscript test framework for roku scenegraph apps - roku brighterscript plugin
171 lines • 7.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSessionInfo = exports.SessionInfo = void 0;
class SessionInfo {
constructor(config) {
var _a;
this.config = config;
this.ignoredCount = 0;
this.ignoredTestNames = [];
this.allTestSuites = new Set();
this.testSuites = new Map();
this.testSuitesByPath = new Map();
this.testSuitesToRun = [];
this.shouldRunSolo = false;
this.testsCount = 0;
this.suitesCount = 0;
this.groupsCount = 0;
this.includeTags = [];
this.excludeTags = [];
for (let tag of (_a = config.tags) !== null && _a !== void 0 ? _a : []) {
if (tag.startsWith('!')) {
this.excludeTags.push(tag.substr(1));
}
else {
this.includeTags.push(tag);
}
}
}
updateTestSuites(testSuites) {
//we can assume at this point that all suites coming in belong to same file
//incase that is useful in future
for (let testSuite of testSuites) {
if (testSuite.isValid && !this.isExcludedByTag(testSuite, false)) {
this.testSuites.set(testSuite.name, testSuite);
this.addTestSuiteToPath(testSuite);
this.shouldRunSolo || (this.shouldRunSolo = testSuite.isSolo || testSuite.hasSoloGroups || testSuite.hasSoloTests);
}
else {
this.allTestSuites.add(testSuite);
}
}
this.suitesCount = this.testSuites.size;
}
addTestSuiteToPath(testSuite) {
var _a;
let suites = (_a = this.testSuitesByPath.get(testSuite.file.pkgPath)) !== null && _a !== void 0 ? _a : [];
//TODO - I think we could end up with duplicate suites in this case..
suites.push(testSuite);
this.testSuitesByPath.set(testSuite.file.pkgPath, suites);
}
/**
* Once we know what's ignored/solo/etc, we can ascertain if we're going
* to include it in the final json payload
*/
updateInfo() {
this.resetCounts();
for (let testSuite of [...this.testSuites.values()]) {
testSuite.isIncluded = false;
testSuite.isIgnored || (testSuite.isIgnored = this.isExcludedByTag(testSuite, false));
if (this.shouldRunSolo) {
if (!testSuite.isIgnored && (testSuite.isSolo || testSuite.hasSoloGroups || testSuite.hasSoloTests)) {
testSuite.isIncluded = true;
}
}
else {
testSuite.isIncluded = true;
if (testSuite.isIgnored) {
this.ignoredTestNames.push(testSuite.name + ' [WHOLE SUITE]');
this.ignoredCount++;
}
}
if (!testSuite.isIncluded) {
continue;
}
//'testSuite ' + testSuite.name);
for (let testGroup of testSuite.getTestGroups()) {
testGroup.isIgnored || (testGroup.isIgnored = testSuite.isIgnored || this.isExcludedByTag(testGroup, true));
testGroup.isIncluded = false;
if (this.shouldRunSolo) {
if (!testGroup.isIgnored) {
if (testGroup.hasSoloTests || testGroup.isSolo || (testSuite.isSolo && !testSuite.hasSoloGroups)) {
testGroup.isIncluded = true;
}
}
}
else {
testGroup.isIncluded = true;
if (testGroup.isIgnored) {
this.ignoredTestNames.push(testGroup.name + ' [WHOLE GROUP]');
this.ignoredCount += testGroup.testCases.length;
}
}
if (testGroup.isIncluded) {
if (testGroup.isIncluded) {
this.groupsCount++;
}
let testCases = [...testGroup.testCases];
for (let testCase of testCases) {
testCase.isIncluded = false;
testCase.isIgnored || (testCase.isIgnored = testGroup.isIgnored || this.isExcludedByTag(testCase, true));
if (this.shouldRunSolo) {
if (!testCase.isIgnored) {
if (testGroup.hasSoloTests) {
testCase.isIncluded = testCase.isSolo;
}
else if (testGroup.isSolo || testSuite.isSolo) {
testCase.isIncluded = true;
}
}
}
else {
testCase.isIncluded = true;
if (testCase.isIgnored) {
if (!testCase.isParamTest) {
this.ignoredTestNames.push(testCase.name);
}
else if (testCase.paramTestIndex === 0) {
let testCaseName = testCase.name;
if (testCaseName.length > 1 && testCaseName.substr(testCaseName.length - 1) === '0') {
testCaseName = testCaseName.substr(0, testCaseName.length - 1);
}
this.ignoredTestNames.push(testCaseName);
}
}
}
}
for (let testCase of testCases) {
if (testCase.isIncluded) {
this.testsCount++;
}
}
}
}
}
this.testSuitesToRun = [...this.testSuites.values()].filter((s) => s.isIncluded);
this.testSuitesToRun.sort((a, b) => a.name.localeCompare(b.name));
}
isExcludedByTag(item, isParentIncluded) {
if (this.excludeTags.length > 0) {
for (let tag of this.excludeTags) {
if (item.annotation.tags.has(tag)) {
return true;
}
}
}
if (this.includeTags.length > 0 && (item.annotation.tags.size > 0 || !isParentIncluded)) {
for (let tag of this.includeTags) {
if (!item.annotation.tags.has(tag)) {
return true;
}
}
}
return false;
}
resetCounts() {
this.shouldRunSolo = false;
for (let testSuite of [...this.testSuites.values()]) {
if (testSuite.isValid && !this.isExcludedByTag(testSuite, false)) {
this.shouldRunSolo = this.shouldRunSolo || testSuite.isSolo || testSuite.hasSoloGroups || testSuite.hasSoloTests;
}
}
this.suitesCount = this.testSuites.size;
}
}
exports.SessionInfo = SessionInfo;
let _sessionInfo;
function getSessionInfo() {
return _sessionInfo;
}
exports.getSessionInfo = getSessionInfo;
//# sourceMappingURL=RooibosSessionInfo.js.map