Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 38 additions & 21 deletions lib/_patch/qunit-plugin.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,47 @@
// Here begins strider-qunit extension plugin
// For logging assertions on the console, here's what grunt-contrib-qunit uses:
// https://github.com/gruntjs/grunt-contrib-qunit/blob/784597023e7235337ca9c0651aa45124a2d72341/tasks/qunit.js#L45
(function(){

var striderErrors = []
, i = 0;
var failedAssertions = [];
var options, currentModule, currentTest, setTimeoutVariable;
var pendingTest = {};

QUnit.log = function(res){
i++;
if (!res || !res.result){
// Failure:
striderErrors.push(JSON.stringify(res));
}
if (i%50 == 0){
var data = {
tests_run: i
, tracebacks: striderErrors
, url : window.location.pathname
}
striderErrors = [];
BrowserStack.post('/_progress', data, function(){});
var testTimeout = function() {
var error = {
testName: currentTest, message: "Stuck on this test for 60 sec."
}

BrowserStack.post('/_progress', {tracebacks: [error]}, function(){});
}

QUnit.done = function(results){
results.tracebacks = striderErrors;
QUnit.testDone(function( details ) {
var ct = details.module + " - " + details.name;
clearTimeout(pendingTest[ct]);
});

QUnit.testStart(function( details ) {
currentTest = details.module + " - " + details.name;
pendingTest[currentTest] = setTimeout(function(){
testTimeout(currentTest);
}, 60000);
});

QUnit.log(function( details ) {
if ( details.result ) {
return;
}

var error = {
actual: details.actual, expected: encodeURIComponent(details.expected), message: encodeURIComponent(details.message), source: encodeURIComponent(details.source),
testName: (details.module + ": " + details.name)
}

BrowserStack.post('/_progress', {tracebacks: [error]}, function(){});
});

QUnit.done(function( results ) {
results.url = window.location.pathname;
BrowserStack.post("/_report", results, function(){});
}
});

})();
// End Strider
23 changes: 14 additions & 9 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ exports.Server = function Server(bsClient, workers) {
response.end();
return;
}

if (fs.lstatSync(filename).isDirectory()) {
filename = filename + (filename.lastIndexOf('/') == filename.length - 1 ? "" : "/") + "index.html";
}

fs.readFile(filename, "binary", function(err, file) {

Expand All @@ -47,7 +51,7 @@ exports.Server = function Server(bsClient, workers) {
}

var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
response.writeHead(200, mimeType);
response.writeHead(200, {"Content-Type": mimeType});

scripts = [
'json2.js',
Expand Down Expand Up @@ -95,7 +99,7 @@ exports.Server = function Server(bsClient, workers) {
}

function parseBody(body) {
return JSON.parse(qs.parse(body).data);
return JSON.parse(qs.parse(body).data.replace(/\n/g, "\\n"));
}

handlers = {
Expand All @@ -104,14 +108,15 @@ exports.Server = function Server(bsClient, workers) {

var uuid = request.headers['x-worker-uuid'];
var worker = workers[uuid];
// console.log("Tests run:", query.tests_run);
// if (query.tracebacks) {
// query.tracebacks.forEach(function (traceback) {
// console.log("Error:", traceback);
// });
// }
//console.log("Tests run:", query.tests_run);
if (query.tracebacks) {
query.tracebacks.forEach(function (traceback) {
console.log("[%s] Error:", worker.string, traceback);
});
}
response.end();
},

"_report": function reportHandler(uri, body, request, response) {
query = null;
try {query = parseBody(body); }catch(e){}
Expand All @@ -121,7 +126,7 @@ exports.Server = function Server(bsClient, workers) {
if (query == null) {
console.log("[%s] Null response from remote Browser", request.headers['x-browser-string']);
} else {
if (query.tracebacks.length > 0) {
if (query.tracebacks && query.tracebacks.length > 0) {
console.log("Tracebacks:");
query.tracebacks.forEach(function (traceback) {
console.log(traceback);
Expand Down