From c724cf83751514f4adb2a358631ec595e8ba95a3 Mon Sep 17 00:00:00 2001 From: Andrey Belym Date: Wed, 26 Jun 2019 14:47:40 +0300 Subject: [PATCH] Fix test file scanning for Windows (closes #3918) (#3927) * Fix test file scanning for Windows * Refactor after review * Fix --- package.json | 2 +- src/utils/parse-file-list.js | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 71f71ac748..3ee0555df5 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "emittery": "^0.4.1", "endpoint-utils": "^1.0.2", "error-stack-parser": "^1.3.6", - "globby": "^3.0.1", + "globby": "^9.2.0", "graceful-fs": "^4.1.11", "graphlib": "^2.1.5", "import-lazy": "^3.1.0", diff --git a/src/utils/parse-file-list.js b/src/utils/parse-file-list.js index e283148fb0..c6e4ccca29 100644 --- a/src/utils/parse-file-list.js +++ b/src/utils/parse-file-list.js @@ -4,7 +4,7 @@ import globby from 'globby'; import isGlob from 'is-glob'; import Compiler from '../compiler'; import OS from 'os-family'; -import { isEmpty } from 'lodash'; +import { isEmpty, flatten } from 'lodash'; import { stat } from '../utils/promisified-functions'; const DEFAULT_TEST_LOOKUP_DIRS = ['test/', 'tests/']; @@ -24,9 +24,12 @@ function modifyFileRoot (baseDir, file) { async function getDefaultDirs (baseDir) { return await globby(DEFAULT_TEST_LOOKUP_DIRS, { - cwd: baseDir, - nocase: true, - silent: true + cwd: baseDir, + absolute: true, + caseSensitiveMatch: false, + expandDirectories: false, + onlyDirectories: true, + suppressErrors: true }); } @@ -56,12 +59,27 @@ async function convertDirsToGlobs (fileList, baseDir) { return fileList.filter(file => !!file); } +async function getFiles (globTask) { + const files = await globby(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.generateGlobTasks(globs, { cwd: baseDir, expandDirectories: false, onlyFiles: true }); + const files = await Promise.all(tasks.map(getFiles)); + + return flatten(files); +} + export default async function parseFileList (fileList, baseDir) { if (isEmpty(fileList)) fileList = await getDefaultDirs(baseDir); fileList = await convertDirsToGlobs(fileList, baseDir); - fileList = await globby(fileList, { cwd: baseDir }); + fileList = await execFileGlobs(fileList, baseDir); return fileList.map(file => path.resolve(baseDir, file)); }