testcafe
Version:
Automated browser testing for the modern web development stack.
86 lines • 12.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const globby_1 = __importDefault(require("globby"));
const is_glob_1 = __importDefault(require("is-glob"));
const compiler_1 = __importDefault(require("../compiler"));
const os_family_1 = __importDefault(require("os-family"));
const lodash_1 = require("lodash");
const promisified_functions_1 = require("../utils/promisified-functions");
const DEFAULT_TEST_LOOKUP_DIRS = ['test', 'tests'];
const TEST_FILE_GLOB_PATTERN = `./**/*@(${compiler_1.default.getSupportedTestFileExtensions().join('|')})`;
const GLOB_POSIX_SLASH_ENDING = '*' + path_1.default.posix.sep;
function modifyFileRoot(baseDir, file) {
const absPath = path_1.default.resolve(baseDir, file);
const fileIsOnOtherDrive = path_1.default.isAbsolute(path_1.default.relative(baseDir, file));
if (!path_1.default.isAbsolute(file) || fileIsOnOtherDrive)
return file;
const { root, dir, base } = path_1.default.parse(absPath);
return path_1.default.join(path_1.default.parse(baseDir).root, path_1.default.relative(root, dir), base);
}
async function getDefaultDirs(baseDir) {
return await (0, globby_1.default)(DEFAULT_TEST_LOOKUP_DIRS, {
cwd: baseDir,
absolute: true,
caseSensitiveMatch: false,
expandDirectories: false,
onlyDirectories: true,
suppressErrors: true,
});
}
// NOTE: glob patterns can only contain forward-slashes (https://github.com/sindresorhus/globby#api)
function ensurePosix(fileString) {
return fileString.split(path_1.default.win32.sep).join(path_1.default.posix.sep);
}
async function convertDirsToGlobs(fileList, baseDir) {
fileList = await Promise.all(fileList.map(async (file) => {
if (!(0, is_glob_1.default)(file)) {
const absPath = path_1.default.resolve(baseDir, file);
let fileStat = null;
try {
fileStat = await (0, promisified_functions_1.stat)(absPath);
}
catch (err) {
return null;
}
if (fileStat.isDirectory()) {
file = path_1.default.join(file, TEST_FILE_GLOB_PATTERN);
return ensurePosix(file);
}
if (os_family_1.default.win)
file = modifyFileRoot(baseDir, file);
}
// TODO: remove this workaround after resolving https://github.com/mrmlnc/fast-glob/issues/290
else {
file = ensurePosix(file);
if (file.endsWith(GLOB_POSIX_SLASH_ENDING))
return file.slice(0, -1);
}
return ensurePosix(file);
}));
return fileList.filter(file => !!file);
}
async function getFiles(globTask) {
const files = await (0, globby_1.default)(globTask.pattern, globTask.options);
return files.sort((fileA, fileB) => fileA.localeCompare(fileB));
}
async function execFileGlobs(globs, baseDir) {
// NOTE: We have to create glob tasks, execute them and sort their results separately to preserve the same item order
// as in the older globby versions (<7.1.1)
const tasks = globby_1.default.generateGlobTasks(globs, { cwd: baseDir, expandDirectories: false, onlyFiles: true });
const files = await Promise.all(tasks.map(getFiles));
return (0, lodash_1.flatten)(files);
}
async function parseFileList(fileList, baseDir) {
if ((0, lodash_1.isEmpty)(fileList))
fileList = await getDefaultDirs(baseDir);
fileList = await convertDirsToGlobs(fileList, baseDir);
fileList = await execFileGlobs(fileList, baseDir);
return fileList.map(file => path_1.default.resolve(baseDir, file));
}
exports.default = parseFileList;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZmlsZS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcnNlLWZpbGUtbGlzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4QixvREFBNEI7QUFDNUIsc0RBQTZCO0FBQzdCLDJEQUFtQztBQUNuQywwREFBMkI7QUFDM0IsbUNBQTBDO0FBQzFDLDBFQUFzRDtBQUd0RCxNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25ELE1BQU0sc0JBQXNCLEdBQUssV0FBVyxrQkFBUSxDQUFDLDhCQUE4QixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDbkcsTUFBTSx1QkFBdUIsR0FBSSxHQUFHLEdBQUcsY0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFFdEQsU0FBUyxjQUFjLENBQUUsT0FBTyxFQUFFLElBQUk7SUFDbEMsTUFBTSxPQUFPLEdBQWMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxrQkFBa0IsR0FBRyxjQUFJLENBQUMsVUFBVSxDQUFDLGNBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFekUsSUFBSSxDQUFDLGNBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBRWhCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEQsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FB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QUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVyRCxPQUFPLElBQUEsZ0JBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRWMsS0FBSyxVQUFVLGFBQWEsQ0FBRSxRQUFRLEVBQUUsT0FBTztJQUMxRCxJQUFJLElBQUEsZ0JBQU8sRUFBQyxRQUFRLENBQUM7UUFDakIsUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTdDLFFBQVEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWxELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQVJELGdDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSc7XG5pbXBvcnQgaXNHbG9iIGZyb20gJ2lzLWdsb2InO1xuaW1wb3J0IENvbXBpbGVyIGZyb20gJy4uL2NvbXBpbGVyJztcbmltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IHsgaXNFbXB0eSwgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzdGF0IH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzaWZpZWQtZnVuY3Rpb25zJztcblxuXG5jb25zdCBERUZBVUxUX1RFU1RfTE9PS1VQX0RJUlMgPSBbJ3Rlc3QnLCAndGVzdHMnXTtcbmNvbnN0IFRFU1RfRklMRV9HTE9CX1BBVFRFUk4gICA9IGAuLyoqLypAKCR7Q29tcGlsZXIuZ2V0U3VwcG9ydGVkVGVzdEZpbGVFeHRlbnNpb25zKCkuam9pbignfCcpfSlgO1xuY29uc3QgR0xPQl9QT1NJWF9TTEFTSF9FTkRJTkcgID0gJyonICsgcGF0aC5wb3NpeC5zZXA7XG5cbmZ1bmN0aW9uIG1vZGlmeUZpbGVSb290IChiYXNlRGlyLCBmaWxlKSB7XG4gICAgY29uc3QgYWJzUGF0aCAgICAgICAgICAgID0gcGF0aC5yZXNvbHZlKGJhc2VEaXIsIGZpbGUpO1xuICAgIGNvbnN0IGZpbGVJc09uT3RoZXJEcml2ZSA9IHBhdGguaXNBYnNvbHV0ZShwYXRoLnJlbGF0aXZlKGJhc2VEaXIsIGZpbGUpKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGZpbGUpIHx8IGZpbGVJc09uT3RoZXJEcml2ZSlcbiAgICAgICAgcmV0dXJuIGZpbGU7XG5cbiAgICBjb25zdCB7IHJvb3QsIGRpciwgYmFzZSB9ID0gcGF0aC5wYXJzZShhYnNQYXRoKTtcblxuICAgIHJldHVybiBwYXRoLmpvaW4ocGF0aC5wYXJzZShiYXNlRGlyKS5yb290LCBwYXRoLnJlbGF0aXZlKHJvb3QsIGRpciksIGJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0RGlycyAoYmFzZURpcikge1xuICAgIHJldHVybiBhd2FpdCBnbG9iYnkoREVGQVVMVF9URVNUX0xPT0tVUF9ESVJTLCB7XG4gICAgICAgIGN3ZDogICAgICAgICAgICAgICAgYmFzZURpcixcbiAgICAgICAgYWJzb2x1dGU6ICAgICAgICAgICB0cnVlLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlTWF0Y2g6IGZhbHNlLFxuICAgICAgICBleHBhbmREaXJlY3RvcmllczogIGZhbHNlLFxuICAgICAgICBvbmx5RGlyZWN0b3JpZXM6ICAgIHRydWUsXG4gICAgICAgIHN1cHByZXNzRXJyb3JzOiAgICAgdHJ1ZSxcbiAgICB9KTtcbn1cblxuLy8gTk9URTogZ2xvYiBwYXR0ZXJucyBjYW4gb25seSBjb250YWluIGZvcndhcmQtc2xhc2hlcyAoaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nbG9iYnkjYXBpKVxuZnVuY3Rpb24gZW5zdXJlUG9zaXggKGZpbGVTdHJpbmcpIHtcbiAgICByZXR1cm4gZmlsZVN0cmluZy5zcGxpdChwYXRoLndpbjMyLnNlcCkuam9pbihwYXRoLnBvc2l4LnNlcCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnREaXJzVG9HbG9icyAoZmlsZUxpc3QsIGJhc2VEaXIpIHtcbiAgICBmaWxlTGlzdCA9IGF3YWl0IFByb21pc2UuYWxsKGZpbGVMaXN0Lm1hcChhc3luYyBmaWxlID0+IHtcbiAgICAgICAgaWYgKCFpc0dsb2IoZmlsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoYmFzZURpciwgZmlsZSk7XG4gICAgICAgICAgICBsZXQgZmlsZVN0YXQgID0gbnVsbDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoYWJzUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHBhdGguam9pbihmaWxlLCBURVNUX0ZJTEVfR0xPQl9QQVRURVJOKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlbnN1cmVQb3NpeChmaWxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9TLndpbilcbiAgICAgICAgICAgICAgICBmaWxlID0gbW9kaWZ5RmlsZVJvb3QoYmFzZURpciwgZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBhZnRlciByZXNvbHZpbmcgaHR0cHM6Ly9naXRodWIuY29tL21ybWxuYy9mYXN0LWdsb2IvaXNzdWVzLzI5MFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbGUgPSBlbnN1cmVQb3NpeChmaWxlKTtcblxuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoR0xPQl9QT1NJWF9TTEFTSF9FTkRJTkcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbnN1cmVQb3NpeChmaWxlKTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZmlsZUxpc3QuZmlsdGVyKGZpbGUgPT4gISFmaWxlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXMgKGdsb2JUYXNrKSB7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iYnkoZ2xvYlRhc2sucGF0dGVybiwgZ2xvYlRhc2sub3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZmlsZXMuc29ydCgoZmlsZUEsIGZpbGVCKSA9PiBmaWxlQS5sb2NhbGVDb21wYXJlKGZpbGVCKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNGaWxlR2xvYnMgKGdsb2JzLCBiYXNlRGlyKSB7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBjcmVhdGUgZ2xvYiB0YXNrcywgZXhlY3V0ZSB0aGVtIGFuZCBzb3J0IHRoZWlyIHJlc3VsdHMgc2VwYXJhdGVseSB0byBwcmVzZXJ2ZSB0aGUgc2FtZSBpdGVtIG9yZGVyXG4gICAgLy8gYXMgaW4gdGhlIG9sZGVyIGdsb2JieSB2ZXJzaW9ucyAoPDcuMS4xKVxuICAgIGNvbnN0IHRhc2tzID0gZ2xvYmJ5LmdlbmVyYXRlR2xvYlRhc2tzKGdsb2JzLCB7IGN3ZDogYmFzZURpciwgZXhwYW5kRGlyZWN0b3JpZXM6IGZhbHNlLCBvbmx5RmlsZXM6IHRydWUgfSk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBQcm9taXNlLmFsbCh0YXNrcy5tYXAoZ2V0RmlsZXMpKTtcblxuICAgIHJldHVybiBmbGF0dGVuKGZpbGVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGFyc2VGaWxlTGlzdCAoZmlsZUxpc3QsIGJhc2VEaXIpIHtcbiAgICBpZiAoaXNFbXB0eShmaWxlTGlzdCkpXG4gICAgICAgIGZpbGVMaXN0ID0gYXdhaXQgZ2V0RGVmYXVsdERpcnMoYmFzZURpcik7XG5cbiAgICBmaWxlTGlzdCA9IGF3YWl0IGNvbnZlcnREaXJzVG9HbG9icyhmaWxlTGlzdCwgYmFzZURpcik7XG4gICAgZmlsZUxpc3QgPSBhd2FpdCBleGVjRmlsZUdsb2JzKGZpbGVMaXN0LCBiYXNlRGlyKTtcblxuICAgIHJldHVybiBmaWxlTGlzdC5tYXAoZmlsZSA9PiBwYXRoLnJlc29sdmUoYmFzZURpciwgZmlsZSkpO1xufVxuIl19