diff options
| -rw-r--r-- | css/angular-scenario.css | 15 | ||||
| -rw-r--r-- | src/scenario/Runner.js | 63 | ||||
| -rw-r--r-- | test/scenario/RunnerSpec.js | 3 |
3 files changed, 55 insertions, 26 deletions
diff --git a/css/angular-scenario.css b/css/angular-scenario.css index 70256a5a..3960c357 100644 --- a/css/angular-scenario.css +++ b/css/angular-scenario.css @@ -29,13 +29,24 @@ height: 100%; } +li.running > span { + background-color: yellow; +} -/////////////// +#runner span { + background-color: green; +} -.collapsed .log { +#runner .fail > span { + background-color: red; +} + +.collapsed > ul { display: none; } +////// + .run, .info, .error { display: block; padding: 0 1em; diff --git a/src/scenario/Runner.js b/src/scenario/Runner.js index eeb4330d..970d0c66 100644 --- a/src/scenario/Runner.js +++ b/src/scenario/Runner.js @@ -20,8 +20,8 @@ angular.scenario.Runner = function(scope){ body(); self.currentSpec = null; }; - this.beginSpec = function returnNoop(){ - return returnNoop; + this.logger = function returnNoop(){ + return angular.extend(returnNoop, {close:angular.noop, fail:angular.noop});; }; }; @@ -29,33 +29,45 @@ angular.scenario.Runner.prototype = { run: function(body){ body.append( '<div id="runner">' + - '<ul class="console"></ul>' + + '<div class="console"></div>' + '</div>' + '<div id="testView">' + '<iframe></iframe>' + '</div>'); var console = body.find('#runner .console'); + console.find('li').live('click', function(){ + jQuery(this).toggleClass('collapsed'); + }); this.testFrame = body.find('#testView iframe'); this.testWindow = this.testFrame[0].contentWindow; - this.beginSpec = function(name){ - var specElement = jQuery('<li class="spec"></li>'); - var stepContainer = jQuery('<ul class="step"></ul>'); - console.append(specElement); - specElement.text(name); - specElement.append(stepContainer); - return function(name){ - var stepElement = jQuery('<li class="step"></li>'); - var logContainer = jQuery('<ul class="log"></ul>'); - stepContainer.append(stepElement); - stepElement.text(name); - stepElement.append(logContainer); - return function(message) { - var logElement = jQuery('<li class="log"></li>'); - logContainer.append(logElement); - logElement.text(message); - }; + function logger(parent) { + var container; + return function(type, text) { + if (!container) { + container = jQuery('<ul></ul>'); + parent.append(container); + } + var element = jQuery('<li class="collapsed running '+type+'"><span></span></li>'); + element.find('span').text(text); + container.append(element); + return angular.extend(logger(element), { + close: function(){ + element.removeClass('running'); + }, + fail: function(){ + element.removeClass('running'); + var current = element; + while (current[0] != console[0]) { + if (current.is('li')) + current.addClass('fail'); + current.removeClass('collapsed'); + current = current.parent(); + } + } + });; }; - }; + } + this.logger = logger(console); this.execute("widgets: it should verify that basic widgets work"); }, @@ -73,7 +85,7 @@ angular.scenario.Runner.prototype = { result.passed = false; result.failed = true; result.error = error; - result.log(angular.isString(error) ? error : angular.toJson(error)); + result.log('fail', angular.isString(error) ? error : angular.toJson(error)).fail(); } }; specThis = { @@ -81,17 +93,20 @@ angular.scenario.Runner.prototype = { testWindow: this.testWindow, testFrame: this.testFrame }; - var beginStep = this.beginSpec(name); + var stepLogger = this.logger('spec', name); spec.nextStepIndex = 0; function done() { result.finished = true; + stepLogger.close(); (callback||angular.noop).call(specThis); } function next(){ var step = spec.steps[spec.nextStepIndex]; + (result.log || {close:angular.noop}).close(); + result.log = null; if (step) { spec.nextStepIndex ++; - result.log = beginStep(step.name); + result.log = stepLogger('step', step.name); try { step.fn.call(specThis, next); } catch (e) { diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js index bd7c0599..2883ab7c 100644 --- a/test/scenario/RunnerSpec.js +++ b/test/scenario/RunnerSpec.js @@ -31,6 +31,9 @@ describe('Runner', function(){ expect(spec.steps).toEqual([]); expect(spec.name).toEqual('describe name: it should text'); }); + + it('should camplain on duplicate it', angular.noop); + }); }); |
