mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-21 06:52:46 +01:00
84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
var path = require("path")
|
|
, npm = require("npm")
|
|
, fs = require("fs")
|
|
, async = require("async");
|
|
|
|
exports.expressCreateServer = function (hook_name, args, cb) {
|
|
args.app.get('/tests/frontend/specs_list.js', function(req, res){
|
|
|
|
async.parallel({
|
|
coreSpecs: function(callback){
|
|
exports.getCoreTests(callback);
|
|
},
|
|
pluginSpecs: function(callback){
|
|
exports.getPluginTests(callback);
|
|
}
|
|
},
|
|
function(err, results){
|
|
var files = results.coreSpecs; // push the core specs to a file object
|
|
files = files.concat(results.pluginSpecs); // add the plugin Specs to the core specs
|
|
console.debug("Sent browser the following test specs:", files.sort());
|
|
res.send("var specs_list = " + JSON.stringify(files.sort()) + ";\n");
|
|
});
|
|
|
|
});
|
|
|
|
var url2FilePath = function(url){
|
|
var subPath = url.substr("/tests/frontend".length);
|
|
if (subPath == ""){
|
|
subPath = "index.html"
|
|
}
|
|
subPath = subPath.split("?")[0];
|
|
|
|
var filePath = path.normalize(npm.root + "/../tests/frontend/")
|
|
filePath += subPath.replace("..", "");
|
|
return filePath;
|
|
}
|
|
|
|
args.app.get('/tests/frontend/specs/*', function (req, res) {
|
|
var specFilePath = url2FilePath(req.url);
|
|
var specFileName = path.basename(specFilePath);
|
|
|
|
fs.readFile(specFilePath, function(err, content){
|
|
if(err){ return res.send(500); }
|
|
|
|
content = "describe(" + JSON.stringify(specFileName) + ", function(){ " + content + " });";
|
|
|
|
res.send(content);
|
|
});
|
|
});
|
|
|
|
args.app.get('/tests/frontend/*', function (req, res) {
|
|
var filePath = url2FilePath(req.url);
|
|
res.sendfile(filePath);
|
|
});
|
|
|
|
args.app.get('/tests/frontend', function (req, res) {
|
|
res.redirect('/tests/frontend/');
|
|
});
|
|
}
|
|
|
|
exports.getPluginTests = function(callback){
|
|
var pluginSpecs = [];
|
|
var plugins = fs.readdirSync('node_modules');
|
|
plugins.forEach(function(plugin){
|
|
if(fs.existsSync("node_modules/"+plugin+"/static/tests/frontend/specs")){ // if plugins exists
|
|
var specFiles = fs.readdirSync("node_modules/"+plugin+"/static/tests/frontend/specs/");
|
|
async.forEach(specFiles, function(spec){ // for each specFile push it to pluginSpecs
|
|
pluginSpecs.push("/static/plugins/"+plugin+"/static/tests/frontend/specs/" + spec);
|
|
},
|
|
function(err){
|
|
// blow up if something bad happens!
|
|
});
|
|
}
|
|
});
|
|
callback(null, pluginSpecs);
|
|
}
|
|
|
|
exports.getCoreTests = function(callback){
|
|
fs.readdir('tests/frontend/specs', function(err, coreSpecs){ // get the core test specs
|
|
if(err){ return res.send(500); }
|
|
callback(null, coreSpecs);
|
|
});
|
|
}
|
|
|