(function(){ //we want this at global scope so outside callers can find it. In a more realistic implementation we //should probably put it in a namespace. window.getCoverageByLine = function(silent) { var key = null; var lines = null; var source = null; //look for code coverage data if (typeof window._$jscoverage === 'object') { for (key in _$jscoverage) {} lines = _$jscoverage[key]; } if (!lines && !silent) { console.log('code coverage data is NOT available'); } return { 'key': key, 'lines': lines }; }; QUnit.done = function(t) { var cvgInfo = getCoverageByLine(true); if (!!cvgInfo.key) { var testableLines = 0; var testedLines = 0; var untestableLines = 0; for (lineIdx in cvgInfo.lines) { var cvg = cvgInfo.lines[lineIdx]; if (typeof cvg === 'number') { testableLines += 1; if (cvg > 0) { testedLines += 1; } } else { untestableLines += 1; } } var coverage = '' + Math.floor(100 * testedLines / testableLines) + '%'; var result = document.getElementById('qunit-testresult'); if (result != null) { result.innerHTML = result.innerHTML + ' ' + coverage + ' test coverage of ' + cvgInfo.key; } else { console.log('can\'t find test-result element to update'); } } }; }());