var TRACE_LEVEL_NONE = new JsUnitTraceLevel(0, null); var TRACE_LEVEL_WARNING = new JsUnitTraceLevel(1, "#FF0000"); var TRACE_LEVEL_INFO = new JsUnitTraceLevel(2, "#009966"); var TRACE_LEVEL_DEBUG = new JsUnitTraceLevel(3, "#0000FF"); function JsUnitTracer(testManager) { this._testManager = testManager; this._traceWindow = null; this.popupWindowsBlocked = false; } JsUnitTracer.prototype.initialize = function() { if (this._traceWindow != null && top.testManager.closeTraceWindowOnNewRun.checked) this._traceWindow.close(); this._traceWindow = null; } JsUnitTracer.prototype.finalize = function() { if (this._traceWindow != null) { this._traceWindow.document.write('<\/body>\n<\/html>'); this._traceWindow.document.close(); } } JsUnitTracer.prototype.warn = function() { this._trace(arguments[0], arguments[1], TRACE_LEVEL_WARNING); } JsUnitTracer.prototype.inform = function() { this._trace(arguments[0], arguments[1], TRACE_LEVEL_INFO); } JsUnitTracer.prototype.debug = function() { this._trace(arguments[0], arguments[1], TRACE_LEVEL_DEBUG); } JsUnitTracer.prototype._trace = function(message, value, traceLevel) { if (!top.shouldSubmitResults() && this._getChosenTraceLevel().matches(traceLevel)) { var traceString = message; if (value) traceString += ': ' + value; var prefix = this._testManager.getTestFileName() + ":" + this._testManager.getTestFunctionName() + " - "; this._writeToTraceWindow(prefix, traceString, traceLevel); } } JsUnitTracer.prototype._getChosenTraceLevel = function() { var levelNumber = eval(top.testManager.traceLevel.value); return traceLevelByLevelNumber(levelNumber); } JsUnitTracer.prototype._writeToTraceWindow = function(prefix, traceString, traceLevel) { var htmlToAppend = '

' + prefix + '' + traceString + '<\/p>\n'; this._getTraceWindow().document.write(htmlToAppend); } JsUnitTracer.prototype._getTraceWindow = function() { if (this._traceWindow == null && !top.shouldSubmitResults() && !this.popupWindowsBlocked) { this._traceWindow = window.open('', '', 'width=600, height=350,status=no,resizable=yes,scrollbars=yes'); if (!this._traceWindow) this.popupWindowsBlocked = true; else { var resDoc = this._traceWindow.document; resDoc.write('\n\n\nTracing - JsUnit<\/title>\n<head>\n<body>'); resDoc.write('<h2>Tracing - JsUnit<\/h2>\n'); resDoc.write('<p class="jsUnitDefault"><i>(Traces are color coded: '); resDoc.write('<font color="' + TRACE_LEVEL_WARNING.getColor() + '">Warning</font> - '); resDoc.write('<font color="' + TRACE_LEVEL_INFO.getColor() + '">Information</font> - '); resDoc.write('<font color="' + TRACE_LEVEL_DEBUG.getColor() + '">Debug</font>'); resDoc.write(')</i></p>'); } } return this._traceWindow; } if (xbDEBUG.on) { xbDebugTraceObject('window', 'JsUnitTracer'); } function JsUnitTraceLevel(levelNumber, color) { this._levelNumber = levelNumber; this._color = color; } JsUnitTraceLevel.prototype.matches = function(anotherTraceLevel) { return this._levelNumber >= anotherTraceLevel._levelNumber; } JsUnitTraceLevel.prototype.getColor = function() { return this._color; } function traceLevelByLevelNumber(levelNumber) { switch (levelNumber) { case 0: return TRACE_LEVEL_NONE; case 1: return TRACE_LEVEL_WARNING; case 2: return TRACE_LEVEL_INFO; case 3: return TRACE_LEVEL_DEBUG; } return null; }