hem
Version:
stitches CommonJS, and ties up other lose ends of web-app development.
225 lines (214 loc) • 6.6 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var err, jasmine_checkTestResults, jasmine_parseTestResults, log, phantom, reporters, run, waitFor;
log = require("./log");
try {
phantom = require('phantom');
} catch (error) {
err = error;
phantom = void 0;
}
reporters = {
errorsOnly: function(el, level, strong) {
var desc, indent, tick;
indent = function(level) {
var i, j, ref, ret;
ret = '';
for (i = j = 0, ref = level; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
ret = ret + ' ';
}
return ret;
};
desc = function(el) {
return $(el).find('> a.description')[0].text;
};
tick = function(el) {
if ($(el).is('.passed')) {
return '✓ ';
} else {
return '✖ ';
}
};
if (typeof el === 'number') {
return "Passed: " + el + ", Failed: " + level;
} else if (!$(el).is(".passed")) {
return indent(level) + tick(el) + desc(el);
}
},
silent: function() {
return "";
},
passOrFail: function(el, level, strong) {
if (typeof el === 'number') {
return "Passed: " + el + ", Failed: " + level;
}
},
formatColors: function(el, level, strong) {
var desc, indent, results, tick;
indent = function(level) {
var i, j, ref, ret;
ret = '';
for (i = j = 0, ref = level; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
ret = ret + ' ';
}
return ret;
};
tick = function(el) {
if ($(el).is('.passed')) {
return '\x1B[32m✓\x1B[0m';
} else {
return '\x1B[31m✖';
}
};
desc = function(el, strong) {
var ret;
if (strong == null) {
strong = false;
}
ret = $(el).find('> a.description');
return ret = strong && '\x1B[1m' + ret[0].text || ret[0].text;
};
if (typeof el === 'number') {
results = "-------------------------------------\n";
results += "\x1B[32m✓\x1B[0m\x1B[1m Passed: \x1B[0m" + el;
if (level > 0) {
results += "\n\x1B[31m✖ \x1B[0m\x1B[1mFailed: \x1B[0m" + level;
}
return results;
} else {
return '\x1B[1m' + indent(level) + tick(el) + ' ' + desc(el, strong);
}
}
};
waitFor = (function() {
var getTime;
getTime = function() {
return (new Date).getTime();
};
return function(test, doIt, duration) {
var finish, int, looop, start;
duration || (duration = 60000);
start = getTime();
finish = start + duration;
int = void 0;
looop = function() {
var testCallback, time, timeout;
time = getTime();
timeout = time >= finish;
testCallback = function(condition) {
if (condition) {
clearInterval(int);
doIt(time - start);
}
if (timeout && !condition) {
clearInterval(int);
return doIt(0, "Timeout for page condition.");
}
};
return test(testCallback);
};
return int = setInterval(looop, 1000);
};
})();
jasmine_parseTestResults = function(report) {
var failed, passed, printSpecs, printSuites;
eval("report = " + report);
printSuites = function(root, level) {
level || (level = 0);
return $(root).find('div.suite').each(function(i, el) {
var output;
output = report(el, level, true);
if ($(el).parents('div.suite').length === level) {
if (output) {
window.callPhantom(output);
}
printSpecs(el, level + 1);
}
return printSuites(el, level + 1);
});
};
printSpecs = function(root, level) {
level || (level = 0);
return $(root).find('> .specSummary').each(function(i, el) {
var output;
output = report(el, level);
if (output) {
return window.callPhantom(output);
}
});
};
printSuites($('div.jasmine_reporter'));
failed = document.body.querySelectorAll('div.jasmine_reporter div.specSummary.failed').length;
passed = document.body.querySelectorAll('div.jasmine_reporter div.specSummary.passed').length;
window.callPhantom(report(passed, failed));
return {
passed: passed,
failed: failed
};
};
jasmine_checkTestResults = function(page) {
return function(checkComplete) {
var isCheckComplete;
isCheckComplete = function() {
var ref;
return (ref = document.querySelector(".duration")) != null ? ref.innerText : void 0;
};
return page.evaluate(isCheckComplete, checkComplete);
};
};
run = function(filepath, options, callback, port) {
if (port == null) {
port = 12300;
}
log.info("Testing file <yellow>" + filepath + "</yellow> on port <blue>" + port + "</blue>");
return phantom.create(function(ph) {
return ph.createPage(function(page) {
page.set('onConsoleMessage', function(msg) {
return console.log(msg);
});
page.set('onCallback', function(msg) {
if (msg) {
return console.log(msg);
}
});
return page.open(filepath, function(status) {
var checkTestResults, complete, evalTestResults, parseTestResults, reporter;
if (status !== "success") {
ph.exit();
callback({
error: "Cannot open URL"
});
return;
}
checkTestResults = jasmine_checkTestResults(page);
parseTestResults = jasmine_parseTestResults;
complete = function(results) {
ph.exit();
return typeof callback === "function" ? callback(results) : void 0;
};
reporter = reporters[options.output];
evalTestResults = function(time, err) {
if (err) {
return complete({
error: err
});
} else {
return page.evaluate(parseTestResults, complete, new String(reporter));
}
};
return waitFor(checkTestResults, evalTestResults);
});
});
}, {
port: port
});
};
if (phantom) {
module.exports.run = run;
} else {
module.exports.run = function() {
return log.error("Unable to require('phantom') npm module...");
};
}
module.exports.reporters = reporters;
}).call(this);