Blame view

bower_components/prism/tests/helper/test-discovery.js 2.65 KB
eb240478   Luigi Serra   public room cards...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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);
  			}
  		);
  	}
  };