testplane
Version:
Tests framework based on mocha and wdio
69 lines • 3.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTestDependenciesWriter = exports.TestDependenciesWriter = void 0;
const lodash_1 = require("lodash");
const proper_lockfile_1 = __importDefault(require("proper-lockfile"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const utils_1 = require("./utils");
const json_utils_1 = require("./json-utils");
const areDepsSame = (browserDepsA, browserDepsB) => {
const props = ["js", "css", "modules"];
if (!browserDepsA || !browserDepsB) {
return false;
}
for (const prop of props) {
if (!browserDepsA[prop] || !browserDepsB[prop] || browserDepsA[prop].length !== browserDepsB[prop].length) {
return false;
}
}
// Rely on the fact both are sorted arrays
for (const prop of props) {
for (let i = 0; i < browserDepsA[prop].length; i++) {
if (browserDepsA[prop][i] !== browserDepsB[prop][i]) {
return false;
}
}
}
return true;
};
class TestDependenciesWriter {
constructor(testDependenciesPath, compression) {
this._directoryCreated = false;
this._selectivityTestsPath = (0, utils_1.getSelectivityTestsPath)(testDependenciesPath);
this._compression = compression;
}
async saveFor(test, browserDeps, testplaneDeps) {
if (!this._directoryCreated) {
await fs_extra_1.default.ensureDir(this._selectivityTestsPath);
this._directoryCreated = true;
}
const testDepsPath = (0, utils_1.getTestDependenciesPath)(this._selectivityTestsPath, test);
const releaseLock = await proper_lockfile_1.default.lock(testDepsPath, {
stale: 5000,
update: 1000,
retries: { minTimeout: 100, maxTimeout: 1000, retries: 15 },
realpath: false,
});
try {
const testDeps = await (0, utils_1.readTestDependencies)(this._selectivityTestsPath, test, this._compression);
if (areDepsSame(testDeps[test.browserId]?.browser, browserDeps) &&
areDepsSame(testDeps[test.browserId]?.testplane, testplaneDeps)) {
return;
}
testDeps[test.browserId] = { browser: browserDeps, testplane: testplaneDeps };
(0, utils_1.shallowSortObject)(testDeps);
await (0, json_utils_1.writeJsonWithCompression)(testDepsPath, testDeps, this._compression);
}
finally {
await releaseLock();
}
}
}
exports.TestDependenciesWriter = TestDependenciesWriter;
exports.getTestDependenciesWriter = (0, lodash_1.memoize)((testDependenciesPath, compression) => {
return new TestDependenciesWriter(testDependenciesPath, compression);
}, (testDependenciesPath, compression) => `${testDependenciesPath}#${compression}`);
//# sourceMappingURL=test-dependencies-writer.js.map