@teambit/multi-tester
Version:
112 lines (108 loc) • 4.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MultiTester = void 0;
function _pMapSeries() {
const data = _interopRequireDefault(require("p-map-series"));
_pMapSeries = function () {
return data;
};
return data;
}
function _tester() {
const data = require("@teambit/tester");
_tester = function () {
return data;
};
return data;
}
function _testsResults() {
const data = require("@teambit/tests-results");
_testsResults = function () {
return data;
};
return data;
}
function _lodash() {
const data = require("lodash");
_lodash = function () {
return data;
};
return data;
}
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class MultiTester {
constructor(id, testers) {
this.id = id;
this.testers = testers;
_defineProperty(this, "displayName", 'Multi tester');
}
displayConfig() {
return this.testers.map(tester => {
return `${tester.displayName}\n${tester.displayConfig}\n`;
}).join('\n');
}
async test(context) {
const allResults = await (0, _pMapSeries().default)(this.testers, tester => {
return tester.test(context);
});
const merged = this.mergeTests(allResults);
return merged;
}
// TODO: not working properly yet
async watch(context) {
const allResults = await (0, _pMapSeries().default)(this.testers, tester => {
return tester.watch ? tester.watch(context) : tester.test(context);
});
const merged = this.mergeTests(allResults);
return merged;
}
/**
* returns the version of all testers instance (e.g. '4.0.1').
*/
version() {
return this.testers.map(tester => {
return `${tester.displayName}@${tester.version()}`;
}).join('\n');
}
mergeTests(tests) {
const componentResultsMap = new Map();
(0, _lodash().compact)(tests).forEach(currentTests => {
currentTests.components.forEach(currentComponentResults => {
const currIdStr = currentComponentResults.componentId.toString();
const foundComponent = componentResultsMap.get(currIdStr);
if (foundComponent) {
componentResultsMap.set(currIdStr, this.mergeComponentResults(foundComponent, currentComponentResults));
} else {
componentResultsMap.set(currIdStr, currentComponentResults);
}
});
});
return new (_tester().Tests)(Array.from(componentResultsMap.values()));
}
mergeComponentResults(results1, results2) {
const merged = {
componentId: results1.componentId
};
let start;
if (!results1.results?.start) {
start = results2.results?.start;
} else if (!results2.results?.start) {
start = results1.results?.start;
} else {
// Take sooner start
start = results1.results?.start < results2.results?.start ? results1.results?.start : results2.results?.start;
}
const mergedTestsResults = new (_testsResults().TestsResult)([...(results1.results?.testFiles || []), ...(results2.results?.testFiles || [])], results1.results?.success && results2.results?.success, start);
merged.results = mergedTestsResults;
merged.errors = [...(results1.errors || []), ...(results2.errors || [])];
merged.loading = results1.loading || results2.loading;
return merged;
}
}
exports.MultiTester = MultiTester;
//# sourceMappingURL=multi-tester.tester.js.map