UNPKG

deadunit

Version:

A dead-simple nestable unit testing library for javascript and node.js.

154 lines (127 loc) 5.02 kB
var Future = require('async-future') // built in test formatting helper module.exports = function(unitTest, printOnTheFly/*, [consoleColors,] format*/) { if(arguments.length === 3) { var format = arguments[2] } else /* if(arguments.length > 3) */{ var color = arguments[2] var format = arguments[3] } var dotText = '.' if(color !== undefined) { dotText = color.green('.') } var result = new Future var lastPrintWasDot = false var printDot = function(dot) { if(dot) { process.stdout.write(dotText) } else if(lastPrintWasDot) { process.stdout.write('\n') } lastPrintWasDot = dot } var ended = false var events = { end: function(e) { ended = true if(printOnTheFly) printDot(false) var results = unitTest.results() result.return(formatGroup(results, format, 0).result) if(format.end !== undefined) format.end() } } if(printOnTheFly) { var groups = {} events.assert = function(e) { printDot(e.success && !ended) if(e.success) { groups[e.parent].testSuccesses++ groups[e.parent].assertSuccesses++ } else { groups[e.parent].testFailures++ groups[e.parent].assertFailures++ } if(!e.success || ended) { console.log(format.assert(e, undefined, true)) } } events.exception = function(e) { printDot(false) groups[e.parent].exceptions++ console.log(format.exception(e.error, true)) } events.log = function(e) { printDot(false) console.log(format.log(e.values, true)) } events.group = function(g) { groups[g.id] = {parent: g.parent, name: g.name, testSuccesses: 0, testFailures: 0, assertSuccesses: 0, assertFailures: 0, exceptions: 0} } events.groupEnd = function(g) { var parent = groups[g.id].parent if(parent !== undefined) { printDot(false) if(groups[g.id].testFailures === 0 && groups[g.id].assertFailures === 0 && groups[g.id].exceptions === 0) { groups[parent].testSuccesses++ } else { groups[parent].testFailures++ } console.log(format.group(groups[g.id].name, undefined, groups[g.id].testSuccesses,groups[g.id].testFailures,groups[g.id].assertSuccesses,groups[g.id].assertFailures, groups[g.id].exceptions, [], [], 1, false, true)) } } } unitTest.events(events) return result } function formatGroup(testResults, format, nestingLevel) { var assertSuccesses = 0 var assertFailures = 0 var exceptions = 0 var testCaseSuccesses= 0, testCaseFailures=0; var results = [] testResults.results.forEach(function(result) { if(result.type === 'assert') { if(result.success) { testCaseSuccesses++ assertSuccesses ++ } else { testCaseFailures++ assertFailures++ } results.push(format.assert(result, testResults.name, false)) } else if(result.type === 'group') { var group = formatGroup(result, format, nestingLevel+1) exceptions+= group.exceptions if(group.failures === 0 && group.exceptions === 0) testCaseSuccesses++ else testCaseFailures++ results.push(group.result) assertSuccesses+= group.assertSuccesses assertFailures+= group.assertFailures } else if(result.type === 'log') { results.push(format.log(result.values, false)) } else { throw new Error("Unknown result type: "+result.type) } }) var exceptionResults = [] testResults.exceptions.forEach(function(e) { exceptionResults.push(format.exception(e, false)) }) exceptions+= testResults.exceptions.length var formattedGroup = format.group(testResults.name, testResults.duration, testCaseSuccesses, testCaseFailures, assertSuccesses, assertFailures, exceptions, results, exceptionResults, nestingLevel, testResults.timeout, false) return {result: formattedGroup, successes: testCaseSuccesses, failures: testCaseFailures, assertSuccesses: assertSuccesses, assertFailures: assertFailures, exceptions: exceptions } }