refactor app directory structure and add tests
This commit is contained in:
174
tests/node_modules/nightwatch/lib/runner/walk.js
generated
vendored
Normal file
174
tests/node_modules/nightwatch/lib/runner/walk.js
generated
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var minimatch = require('minimatch');
|
||||
var fileMatcher = require('./filematcher.js');
|
||||
var Matchers = {};
|
||||
|
||||
function isFolderExcluded(resource, opts) {
|
||||
if (!opts.exclude) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Matchers.exclude) {
|
||||
return Matchers.exclude.some(function(item) {
|
||||
if (item.indexOf(resource) === -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
return fs.statSync(item).isDirectory();
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function addMatcher(type, filePath, opts) {
|
||||
Matchers[type] = Matchers[type] || [];
|
||||
var matchers = fileMatcher[type].adaptFilePath(filePath, opts[type]);
|
||||
if (Array.isArray(matchers)) {
|
||||
Matchers[type].push.apply(Matchers[type], matchers);
|
||||
} else {
|
||||
Matchers[type].push(matchers);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function walk(dir, done, opts) {
|
||||
var results = [];
|
||||
fs.readdir(dir, function(err, list) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var pending = list.length;
|
||||
|
||||
if (pending === 0) {
|
||||
return done(null, results);
|
||||
}
|
||||
|
||||
list.forEach(function(resource) {
|
||||
resource = path.join(dir, resource);
|
||||
|
||||
fs.stat(resource, function(err, stat) {
|
||||
if (stat && stat.isDirectory()) {
|
||||
var dirName = resource.split(path.sep).slice(-1)[0];
|
||||
var isExcluded = isFolderExcluded(resource, opts); // prevent loading of files from an excluded folder
|
||||
var isSkipped = opts.skipgroup && opts.skipgroup.indexOf(dirName) > -1;
|
||||
|
||||
if (isExcluded || isSkipped) {
|
||||
pending = pending-1;
|
||||
} else {
|
||||
walk(resource, function(err, res) {
|
||||
results = results.concat(res);
|
||||
pending = pending-1;
|
||||
if (!pending) {
|
||||
done(null, results);
|
||||
}
|
||||
}, opts);
|
||||
}
|
||||
} else {
|
||||
results.push(resource);
|
||||
pending = pending-1;
|
||||
|
||||
if (!pending) {
|
||||
done(null, results);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
readPaths : function (paths, cb, opts) {
|
||||
Matchers.exclude = [];
|
||||
Matchers.filter = [];
|
||||
|
||||
var allmodules = [];
|
||||
var extensionPattern = /\.js$/;
|
||||
var modulePaths = paths.slice(0);
|
||||
|
||||
(function readSourcePaths() {
|
||||
var sourcePath = modulePaths.shift();
|
||||
fs.stat(sourcePath, function(err, stat) {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
if (stat.isFile() && extensionPattern.test(sourcePath)) {
|
||||
sourcePath = sourcePath.replace(extensionPattern, '');
|
||||
if (allmodules.indexOf(sourcePath) === -1) {
|
||||
allmodules.push(sourcePath);
|
||||
}
|
||||
|
||||
if (modulePaths.length) {
|
||||
readSourcePaths();
|
||||
} else {
|
||||
cb(null, allmodules);
|
||||
}
|
||||
} else if (stat.isDirectory()) {
|
||||
if (opts.exclude) {
|
||||
addMatcher('exclude', sourcePath, opts);
|
||||
}
|
||||
|
||||
if (opts.filter) {
|
||||
addMatcher('filter', sourcePath, opts);
|
||||
}
|
||||
|
||||
walk(sourcePath, function (err, list) {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
list.sort();
|
||||
|
||||
var modules = list.filter(function (filePath) {
|
||||
|
||||
if (!extensionPattern.test(filePath)) {
|
||||
return false;
|
||||
}
|
||||
if (opts.exclude && fileMatcher.exclude.match(filePath, Matchers.exclude)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (opts.filter && !fileMatcher.filter.match(filePath, Matchers.filter)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var filename = filePath.split(path.sep).slice(-1)[0];
|
||||
if (opts.filename_filter) {
|
||||
return minimatch(filename, opts.filename_filter);
|
||||
}
|
||||
|
||||
if (opts.tag_filter || opts.skiptags) {
|
||||
return fileMatcher.tags.match(filePath, opts);
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
modules.forEach(function(item) {
|
||||
var filename = item.replace(extensionPattern, '');
|
||||
if (allmodules.indexOf(filename) === -1) {
|
||||
allmodules.push(filename);
|
||||
}
|
||||
});
|
||||
|
||||
if (modulePaths.length) {
|
||||
readSourcePaths();
|
||||
} else {
|
||||
cb(null, allmodules);
|
||||
}
|
||||
}, opts);
|
||||
} else {
|
||||
if (modulePaths.length) {
|
||||
readSourcePaths();
|
||||
} else {
|
||||
cb(null, allmodules);
|
||||
}
|
||||
}
|
||||
});
|
||||
})();
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user