1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-16 14:54:51 +00:00
TiddlyWiki5/plugins/tiddlywiki/jasmine/jasmine-plugin.js
2019-01-04 20:07:37 +00:00

87 lines
2.7 KiB
JavaScript

/*\
title: $:/plugins/tiddlywiki/jasmine/jasmine-plugin.js
type: application/javascript
module-type: startup
The main module of the Jasmine test plugin for TiddlyWiki5
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
var TEST_TIDDLER_FILTER = "[type[application/javascript]tag[$:/tags/test-spec]]";
/*
Startup function for running tests
*/
exports.startup = function() {
// Get the Jasmine exports
var jasmine = $tw.modules.execute("$:/plugins/tiddlywiki/jasmine/jasmine.js");
// Add our other context variables
var context = $tw.utils.extend({},jasmine,{
console: console,
setInterval: setInterval,
clearInterval: clearInterval,
setTimeout: setTimeout,
clearTimeout: clearTimeout,
exports: {},
$tw: $tw
});
// Prepare the Jasmine environment
var jasmineEnv = jasmine.jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
// Execute the appropriate reporter
var reporterTitle = $tw.browser ? "$:/plugins/tiddlywiki/jasmine/jasmine-html.js" : "$:/plugins/tiddlywiki/jasmine/reporter.js";
context.require = function(moduleTitle) {
return $tw.modules.execute(moduleTitle,reporterTitle);
};
var code = $tw.wiki.getTiddlerText(reporterTitle,""),
reporterExports = $tw.utils.evalSandboxed(code,context,reporterTitle);
// Link the reporter into jasmine
if($tw.browser) {
var htmlReporter = new jasmine.jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function(spec) {
return htmlReporter.specFilter(spec);
};
} else {
// The HTMLReporter links itself into the jasmine object automatically, but we have to manually add the node reporter
jasmine.jasmine.TerminalVerboseReporter = reporterExports.jasmineNode.TerminalVerboseReporter;
jasmine.jasmine.TerminalReporter = reporterExports.jasmineNode.TerminalReporter;
jasmineEnv.addReporter(new jasmine.jasmine.TerminalVerboseReporter({
print: require("util").print,
color: true,
includeStackTrace: true
}));
}
// Add a reporter that exits with an error code if any tests failed
jasmineEnv.addReporter({
reportRunnerResults: function(runner) {
var c = runner.results().failedCount;
if(c > 0) {
console.log("Exitting with test failure count: ",c);
process.exit(1);
}
}
});
// Iterate through all the test modules
var tests = $tw.wiki.filterTiddlers(TEST_TIDDLER_FILTER);
$tw.utils.each(tests,function(title,index) {
// Get the test specification code
var code = $tw.wiki.getTiddlerText(title,"");
// Add a require handler
context.require = function(moduleTitle) {
return $tw.modules.execute(moduleTitle,title);
};
// Execute the test code with the context variables
$tw.utils.evalSandboxed(code,context,title);
});
// Execute the tests
jasmineEnv.execute();
};
})();