mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
124 lines
3.4 KiB
JavaScript
124 lines
3.4 KiB
JavaScript
var path = require('path'),
|
|
nodeunit = require('nodeunit'),
|
|
moment = require('../moment');
|
|
|
|
|
|
module.exports = function (grunt) {
|
|
// placeholder for an array of timezones
|
|
var ALL_ZONES,
|
|
INITIAL_ZONE,
|
|
|
|
failedZones = [],
|
|
failedTests = [],
|
|
|
|
logTableWidths = [4, 6, 46, 12, 12],
|
|
|
|
failedZoneCount = 0,
|
|
passedZoneCount = 0;
|
|
|
|
/******************************
|
|
Grunt task
|
|
******************************/
|
|
|
|
grunt.registerTask('zone', 'Run the unit tests in the current timezone.', function () {
|
|
var done = this.async();
|
|
getCurrentTimezone(function (zone) {
|
|
testZone(zone, function() {
|
|
logFinalOutput();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
/******************************
|
|
Timezones
|
|
******************************/
|
|
|
|
function getCurrentTimezone(cb) {
|
|
grunt.util.spawn({
|
|
cmd: "systemsetup",
|
|
args: ["gettimezone"]
|
|
}, function (err, result, code) {
|
|
cb(result.stdout.replace('Time Zone: ', ''));
|
|
});
|
|
}
|
|
|
|
/******************************
|
|
Tests
|
|
******************************/
|
|
|
|
function testZone(zone, cb) {
|
|
nodeunit.runFiles([path.join(process.cwd(), "test/moment"), path.join(process.cwd(), "test/lang")], {
|
|
testDone: function (name, assertions) {
|
|
if (assertions.failures()) {
|
|
failedTests.push([zone, name, assertions]);
|
|
}
|
|
},
|
|
done: function (assertions) {
|
|
logZone(zone, assertions);
|
|
cb();
|
|
}
|
|
});
|
|
}
|
|
|
|
/******************************
|
|
Logging
|
|
******************************/
|
|
|
|
function setupLoggingTable() {
|
|
var i,
|
|
longestZone = 0;
|
|
for (i = 0; i < ALL_ZONES.length; i++) {
|
|
longestZone = Math.max(longestZone, ALL_ZONES[i].length + 2);
|
|
}
|
|
logTableWidths[1] = longestZone;
|
|
grunt.log.writetableln(logTableWidths, ['', 'Zone', 'Offset', 'Pass', 'Fail']);
|
|
}
|
|
|
|
function logFailedTest(zone, name, assertions) {
|
|
grunt.log.writeln("");
|
|
grunt.log.error(zone + ' failed: ' + name);
|
|
assertions.forEach(function (a) {
|
|
var e = a.error;
|
|
if (a.failed()) {
|
|
if (a.message) {
|
|
grunt.log.error(a.message);
|
|
}
|
|
if (e && e.actual && e.expected && e.operator) {
|
|
grunt.log.error([e.actual, e.operator, e.expected].join(' '));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function logZone(zone, assertions) {
|
|
var failed = assertions.failures(),
|
|
passed = assertions.length - failed,
|
|
status = failed ? "XX".red : "OK".green,
|
|
passMsg = passed + ' passed',
|
|
failMsg = failed ? (failed + ' failed').red : failed + ' failed',
|
|
offset = "" + (-moment().zone() / 60);
|
|
|
|
grunt.log.writetableln(logTableWidths, [status, offset, zone, passMsg, failMsg]);
|
|
|
|
if (failed) {
|
|
failedZoneCount++;
|
|
} else {
|
|
passedZoneCount++;
|
|
}
|
|
}
|
|
|
|
function logFinalOutput() {
|
|
var i;
|
|
|
|
if (!failedZoneCount) {
|
|
return;
|
|
}
|
|
|
|
grunt.log.writeln(failedZoneCount + " failures");
|
|
for (i = 0; i < failedTests.length; i++) {
|
|
logFailedTest.apply(null, failedTests[i]);
|
|
}
|
|
}
|
|
};
|