82 lines
2.4 KiB
JavaScript
Executable File
82 lines
2.4 KiB
JavaScript
Executable File
|
|
var require = patchRequire(require);
|
|
var colorizer = require('colorizer').create('Colorizer');
|
|
var fs = require('fs');
|
|
var utils = require('utils');
|
|
var server = require('webserver').create();
|
|
var service;
|
|
var testServerPort = 54321;
|
|
|
|
var contentTypes = {
|
|
html: {type: 'text/html', binMode: false},
|
|
js: {type: 'application/javascript', binMode: false},
|
|
json: {type: 'application/json', binMode: false},
|
|
txt: {type: 'text/plain', binMode: false},
|
|
png: {type: 'image/png', binMode: true},
|
|
notype: {type: null, binMode: false},
|
|
_default: {type: 'application/octet-stream', binMode: true}
|
|
};
|
|
var extensionRE = /\.([a-zA-Z]*)$/;
|
|
|
|
function info(message) {
|
|
"use strict";
|
|
console.log(colorizer.colorize('INFO', 'INFO_BAR') + ' ' + message);
|
|
}
|
|
|
|
service = server.listen(testServerPort, function(request, response) {
|
|
"use strict";
|
|
/*eslint max-statements:0*/
|
|
var requestPath = request.url;
|
|
if (requestPath.indexOf('?') !== -1) {
|
|
requestPath = request.url.split('?')[0];
|
|
}
|
|
var pageFile = fs.pathJoin(phantom.casperPath, requestPath);
|
|
if (!fs.exists(pageFile) || !fs.isFile(pageFile)) {
|
|
response.statusCode = 404;
|
|
console.log(utils.format('Test server url not found: %s (file: %s)', request.url, pageFile), "warning");
|
|
response.write("404 - NOT FOUND");
|
|
} else {
|
|
var headers = {};
|
|
var binMode;
|
|
|
|
var extension = extensionRE.exec(pageFile);
|
|
extension = extension && extension[1];
|
|
var contentType = contentTypes[extension] ||
|
|
contentTypes._default;
|
|
|
|
if (contentType.type) {
|
|
headers['Content-Type'] = contentType.type;
|
|
}
|
|
binMode = contentType.binMode;
|
|
|
|
response.writeHead(200, headers);
|
|
|
|
if (binMode) {
|
|
response.setEncoding("binary");
|
|
response.write(fs.read(pageFile, 'b'));
|
|
}
|
|
else {
|
|
response.write(fs.read(pageFile));
|
|
}
|
|
}
|
|
response.close();
|
|
});
|
|
|
|
// overriding Casper.open to prefix all test urls
|
|
casper.setFilter('open.location', function(location) {
|
|
"use strict";
|
|
if (/^file/.test(location)) {
|
|
return location;
|
|
}
|
|
if (!/^http/.test(location)) {
|
|
return utils.format('http://localhost:%d/%s', testServerPort, location);
|
|
}
|
|
return location;
|
|
});
|
|
|
|
// test suites completion listener
|
|
casper.test.on('tests.complete', function() {
|
|
"use strict";
|
|
server.close();
|
|
});
|