| Index: lib/src/prism/tests/helper/test-discovery.js
|
| diff --git a/lib/src/prism/tests/helper/test-discovery.js b/lib/src/prism/tests/helper/test-discovery.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..622b6192711569d33bbbfeb69400ddd070132ee8
|
| --- /dev/null
|
| +++ b/lib/src/prism/tests/helper/test-discovery.js
|
| @@ -0,0 +1,117 @@
|
| +"use strict";
|
| +
|
| +var fs = require("fs");
|
| +var path = require("path");
|
| +
|
| +
|
| +module.exports = {
|
| +
|
| + /**
|
| + * Loads the list of all available tests
|
| + *
|
| + * @param {string} rootDir
|
| + * @returns {Object.<string, string[]>}
|
| + */
|
| + loadAllTests: function (rootDir) {
|
| + var testSuite = {};
|
| + var self = this;
|
| +
|
| + this.getAllDirectories(rootDir).forEach(
|
| + function (language) {
|
| + testSuite[language] = self.getAllFiles(path.join(rootDir, language));
|
| + }
|
| + );
|
| +
|
| + return testSuite;
|
| + },
|
| +
|
| + /**
|
| + * Loads the list of available tests that match the given languages
|
| + *
|
| + * @param {string} rootDir
|
| + * @param {string|string[]} languages
|
| + * @returns {Object.<string, string[]>}
|
| + */
|
| + loadSomeTests: function (rootDir, languages) {
|
| + var testSuite = {};
|
| + var self = this;
|
| +
|
| + this.getSomeDirectories(rootDir, languages).forEach(
|
| + function (language) {
|
| + testSuite[language] = self.getAllFiles(path.join(rootDir, language));
|
| + }
|
| + );
|
| +
|
| + return testSuite;
|
| + },
|
| +
|
| +
|
| + /**
|
| + * Returns a list of all (sub)directories (just the directory names, not full paths)
|
| + * in the given src directory
|
| + *
|
| + * @param {string} src
|
| + * @returns {Array.<string>}
|
| + */
|
| + getAllDirectories: function (src) {
|
| + return fs.readdirSync(src).filter(
|
| + function (file) {
|
| + return fs.statSync(path.join(src, file)).isDirectory();
|
| + }
|
| + );
|
| + },
|
| +
|
| + /**
|
| + * Returns a list of all (sub)directories (just the directory names, not full paths)
|
| + * in the given src directory, matching the given languages
|
| + *
|
| + * @param {string} src
|
| + * @param {string|string[]} languages
|
| + * @returns {Array.<string>}
|
| + */
|
| + getSomeDirectories: function (src, languages) {
|
| + var self = this;
|
| + return fs.readdirSync(src).filter(
|
| + function (file) {
|
| + return fs.statSync(path.join(src, file)).isDirectory() && self.directoryMatches(file, languages);
|
| + }
|
| + );
|
| + },
|
| +
|
| + /**
|
| + * Returns whether a directory matches one of the given languages.
|
| + * @param {string} directory
|
| + * @param {string|string[]} languages
|
| + */
|
| + directoryMatches: function (directory, languages) {
|
| + if (!Array.isArray(languages)) {
|
| + languages = [languages];
|
| + }
|
| + var dirLanguages = directory.split(/!?\+!?/);
|
| + return dirLanguages.some(function (lang) {
|
| + return languages.indexOf(lang) >= 0;
|
| + });
|
| + },
|
| +
|
| +
|
| + /**
|
| + * Returns a list of all full file paths to all files in the given src directory
|
| + *
|
| + * @private
|
| + * @param {string} src
|
| + * @returns {Array.<string>}
|
| + */
|
| + getAllFiles: function (src) {
|
| + return fs.readdirSync(src).filter(
|
| + function (fileName) {
|
| + // only find files that have the ".test" extension
|
| + return ".test" === path.extname(fileName) &&
|
| + fs.statSync(path.join(src, fileName)).isFile();
|
| + }
|
| + ).map(
|
| + function (fileName) {
|
| + return path.join(src, fileName);
|
| + }
|
| + );
|
| + }
|
| +};
|
|
|