diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js index 94c2b4ed..08df7bcb 100644 --- a/lib/jasmine-core/jasmine-html.js +++ b/lib/jasmine-core/jasmine-html.js @@ -30,11 +30,10 @@ jasmineRequire.HtmlReporter = function() { function HtmlReporter(options) { var env = options.env || {}, getContainer = options.getContainer, - now = options.now || function() { return new Date().getTime();}, createElement = options.createElement, createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick, results = [], - startTime, specsExecuted = 0, failureCount = 0, pendingSpecCount = 0, @@ -61,7 +60,6 @@ jasmineRequire.HtmlReporter = function() { var totalSpecsDefined; this.jasmineStarted = function(options) { totalSpecsDefined = options.totalSpecsDefined || 0; - startTime = now(); }; var summary = createDom("div", {className: "summary"}); @@ -122,11 +120,9 @@ jasmineRequire.HtmlReporter = function() { } }; - this.jasmineDone = function() { - var elapsed = now() - startTime; - + this.jasmineDone = function(options) { var banner = find(".banner"); - banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s")); + banner.appendChild(createDom("span", {className: "duration"}, "finished in " + options.executionTime / 1000 + "s")); var alert = find(".alert"); @@ -141,7 +137,7 @@ jasmineRequire.HtmlReporter = function() { var checkbox = find("input"); checkbox.checked = !env.catchingExceptions(); - checkbox.onclick = options.onRaiseExceptionsClick; + checkbox.onclick = onRaiseExceptionsClick; if (specsExecuted < totalSpecsDefined) { var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all"; diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index b20bccd1..c0667933 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -307,7 +307,8 @@ getJasmineRequireObj().Env = function(j$) { function Env(options) { options = options || {}; var self = this; - var global = options.global || j$.getGlobal(); + var global = options.global || j$.getGlobal(), + now = options.now || function() { return new Date().getTime(); }; var catchExceptions = true; @@ -497,10 +498,13 @@ getJasmineRequireObj().Env = function(j$) { }; this.execute = function() { + var startTime = now(); this.reporter.jasmineStarted({ totalSpecsDefined: totalSpecsDefined }); - this.topSuite.execute(this.reporter.jasmineDone); + this.topSuite.execute(function() { + self.reporter.jasmineDone({executionTime: now() - startTime}); + }); }; } @@ -655,8 +659,11 @@ getJasmineRequireObj().JsApiReporter = function() { status = 'started'; }; - this.jasmineDone = function() { + var executionTime; + + this.jasmineDone = function(options) { this.finished = true; + executionTime = options.executionTime; status = 'done'; }; @@ -697,6 +704,10 @@ getJasmineRequireObj().JsApiReporter = function() { return specs; }; + this.executionTime = function() { + return executionTime; + }; + } return JsApiReporter; diff --git a/spec/console/ConsoleReporterSpec.js b/spec/console/ConsoleReporterSpec.js index d3672f82..252c847b 100644 --- a/spec/console/ConsoleReporterSpec.js +++ b/spec/console/ConsoleReporterSpec.js @@ -69,20 +69,15 @@ describe("ConsoleReporter", function() { }); it("reports a summary when done (singluar spec and time)", function() { - var fakeNow = jasmine.createSpy('fake Date.now'), - reporter = new j$.ConsoleReporter({ + var reporter = new j$.ConsoleReporter({ print: out.print, - now: fakeNow }); - fakeNow.andReturn(500); - reporter.jasmineStarted(); reporter.specDone({status: "passed"}); - fakeNow.andReturn(1500); out.clear(); - reporter.jasmineDone(); + reporter.jasmineDone({executionTime: 1000}); expect(out.getOutput()).toMatch(/1 spec, 0 failures/); expect(out.getOutput()).not.toMatch(/0 pending specs/); @@ -90,13 +85,10 @@ describe("ConsoleReporter", function() { }); it("reports a summary when done (pluralized specs and seconds)", function() { - var fakeNow = jasmine.createSpy('fake Date.now'), - reporter = new j$.ConsoleReporter({ + var reporter = new j$.ConsoleReporter({ print: out.print, - now: fakeNow }); - fakeNow.andReturn(500); reporter.jasmineStarted(); reporter.specDone({status: "passed"}); reporter.specDone({status: "pending"}); @@ -117,8 +109,7 @@ describe("ConsoleReporter", function() { out.clear(); - fakeNow.andReturn(600); - reporter.jasmineDone(); + reporter.jasmineDone({executionTime: 100}); expect(out.getOutput()).toMatch(/3 specs, 1 failure, 1 pending spec/); expect(out.getOutput()).toMatch("Finished in 0.1 seconds\n"); @@ -148,7 +139,7 @@ describe("ConsoleReporter", function() { out.clear(); - reporter.jasmineDone(); + reporter.jasmineDone({}); expect(out.getOutput()).toMatch(/foo bar baz/); }); @@ -160,7 +151,7 @@ describe("ConsoleReporter", function() { onComplete: onComplete }); - reporter.jasmineDone(); + reporter.jasmineDone({}); expect(onComplete).toHaveBeenCalled(); }); diff --git a/spec/core/EnvSpec.js b/spec/core/EnvSpec.js index 8461fae8..d9d7f2ee 100644 --- a/spec/core/EnvSpec.js +++ b/spec/core/EnvSpec.js @@ -167,8 +167,9 @@ describe("Env (integration)", function() { // TODO: something is wrong with this spec it("should report as expected", function() { - var env = new j$.Env(), - reporter = jasmine.createSpyObj('fakeReproter', [ + var fakeNow = jasmine.createSpy('fake Date.now'), + env = new j$.Env({now: fakeNow}), + reporter = jasmine.createSpyObj('fakeReporter', [ "jasmineStarted", "jasmineDone", "suiteStarted", @@ -177,6 +178,9 @@ describe("Env (integration)", function() { "specDone" ]); + fakeNow.andReturn(500); + reporter.suiteDone.andCallFake(function() { fakeNow.andReturn(1500); }); + env.addReporter(reporter); env.describe("A Suite", function() { @@ -200,7 +204,9 @@ describe("Env (integration)", function() { }); var suiteResult = reporter.suiteStarted.calls[0].args[0]; expect(suiteResult.description).toEqual("A Suite"); - expect(reporter.jasmineDone).toHaveBeenCalled(); + expect(reporter.jasmineDone).toHaveBeenCalledWith({ + executionTime: 1000 + }); }); it("should be possible to get full name from a spec", function() { diff --git a/spec/core/JsApiReporterSpec.js b/spec/core/JsApiReporterSpec.js index 24d2f963..7acf948f 100644 --- a/spec/core/JsApiReporterSpec.js +++ b/spec/core/JsApiReporterSpec.js @@ -101,7 +101,7 @@ describe("JsApiReporter", function() { expect(reporter.finished).toBe(false); reporter.jasmineStarted(); - reporter.jasmineDone(); + reporter.jasmineDone({}); expect(reporter.finished).toBe(true); }); @@ -123,7 +123,7 @@ describe("JsApiReporter", function() { it("reports 'done' when Jasmine is done", function() { var reporter = new j$.JsApiReporter(); - reporter.jasmineDone(); + reporter.jasmineDone({}); expect(reporter.status()).toEqual('done'); }); @@ -178,4 +178,22 @@ describe("JsApiReporter", function() { }); }); }); + + describe("#executionTime", function() { + var reporter; + beforeEach(function() { + reporter = new j$.JsApiReporter(); + }); + + it("should return the time it took the specs to run, in ms", function() { + reporter.jasmineDone({executionTime: 1000}); + expect(reporter.executionTime()).toEqual(1000); + }); + + describe("when the specs haven't finished being run", function() { + it("should return undefined", function() { + expect(reporter.executionTime()).toBeUndefined(); + }); + }); + }); }); diff --git a/spec/html/HtmlReporterSpec.js b/spec/html/HtmlReporterSpec.js index 51f91c87..5f15cecb 100644 --- a/spec/html/HtmlReporterSpec.js +++ b/spec/html/HtmlReporterSpec.js @@ -118,23 +118,19 @@ describe("New HtmlReporter", function() { describe("when Jasmine is done", function() { it("reports the run time", function() { var env = new jasmine.Env(), - fakeNow = jasmine.createSpy('fake Date.now'), container = document.createElement("div"), getContainer = function() { return container; }, reporter = new jasmine.HtmlReporter({ env: env, getContainer: getContainer, - now: fakeNow, createElement: function() { return document.createElement.apply(document, arguments); }, createTextNode: function() { return document.createTextNode.apply(document, arguments); } }); reporter.initialize(); - fakeNow.andReturn(500); reporter.jasmineStarted({}); - fakeNow.andReturn(600); - reporter.jasmineDone(); + reporter.jasmineDone({executionTime: 100}); var duration = container.querySelector(".banner .duration"); expect(duration.innerHTML).toMatch(/finished in 0.1s/); @@ -197,7 +193,7 @@ describe("New HtmlReporter", function() { reporter.suiteDone({id: 1}); - reporter.jasmineDone(); + reporter.jasmineDone({}); var summary = container.querySelector(".summary"); expect(summary.childNodes.length).toEqual(1); @@ -247,7 +243,7 @@ describe("New HtmlReporter", function() { }); reporter.initialize(); - reporter.jasmineDone(); + reporter.jasmineDone({}); var raisingExceptionsUI = container.querySelector(".raise"); expect(raisingExceptionsUI.checked).toBe(false); @@ -272,7 +268,7 @@ describe("New HtmlReporter", function() { reporter.initialize(); env.catchExceptions(false); - reporter.jasmineDone(); + reporter.jasmineDone({}); var raisingExceptionsUI = container.querySelector(".raise"); expect(raisingExceptionsUI.checked).toBe(true); @@ -298,7 +294,7 @@ describe("New HtmlReporter", function() { }); reporter.initialize(); - reporter.jasmineDone(); + reporter.jasmineDone({}); var input = container.querySelector(".raise"); input.click(); @@ -333,7 +329,7 @@ describe("New HtmlReporter", function() { fullName: "A Suite inner suite with another spec", status: "passed" }); - reporter.jasmineDone(); + reporter.jasmineDone({}); }); it("reports the specs counts", function() { @@ -378,7 +374,7 @@ describe("New HtmlReporter", function() { fullName: "A Suite with a spec", status: "pending" }); - reporter.jasmineDone(); + reporter.jasmineDone({}); }); it("reports the pending specs count", function() { @@ -429,7 +425,7 @@ describe("New HtmlReporter", function() { }; reporter.specStarted(failingResult); reporter.specDone(failingResult); - reporter.jasmineDone(); + reporter.jasmineDone({}); }); it("reports the specs counts", function() { diff --git a/src/console/ConsoleReporter.js b/src/console/ConsoleReporter.js index a18ce372..2299c229 100644 --- a/src/console/ConsoleReporter.js +++ b/src/console/ConsoleReporter.js @@ -3,8 +3,6 @@ getJasmineRequireObj().ConsoleReporter = function() { var print = options.print, showColors = options.showColors || false, onComplete = options.onComplete || function() {}, - now = options.now || function() { return new Date().getTime();}, - startTime = 0, specCount, failureCount, failedSpecs = [], @@ -17,7 +15,6 @@ getJasmineRequireObj().ConsoleReporter = function() { }; this.jasmineStarted = function() { - startTime = now(); specCount = 0; failureCount = 0; pendingCount = 0; @@ -25,9 +22,7 @@ getJasmineRequireObj().ConsoleReporter = function() { printNewline(); }; - this.jasmineDone = function() { - var elapsed = now() - startTime; - + this.jasmineDone = function(options) { printNewline(); for (var i = 0; i < failedSpecs.length; i++) { specFailureDetails(failedSpecs[i]); @@ -44,7 +39,7 @@ getJasmineRequireObj().ConsoleReporter = function() { print(specCounts); printNewline(); - var seconds = elapsed / 1000; + var seconds = options.executionTime / 1000; print("Finished in " + seconds + " " + plural("second", seconds)); printNewline(); diff --git a/src/console/console.js b/src/console/console.js index 0fe81ccb..85f6166c 100644 --- a/src/console/console.js +++ b/src/console/console.js @@ -38,8 +38,6 @@ getJasmineRequireObj().ConsoleReporter = function() { var print = options.print, showColors = options.showColors || false, onComplete = options.onComplete || function() {}, - now = options.now || function() { return new Date().getTime();}, - startTime = 0, specCount, failureCount, failedSpecs = [], @@ -52,7 +50,6 @@ getJasmineRequireObj().ConsoleReporter = function() { }; this.jasmineStarted = function() { - startTime = now(); specCount = 0; failureCount = 0; pendingCount = 0; @@ -60,9 +57,7 @@ getJasmineRequireObj().ConsoleReporter = function() { printNewline(); }; - this.jasmineDone = function() { - var elapsed = now() - startTime; - + this.jasmineDone = function(options) { printNewline(); for (var i = 0; i < failedSpecs.length; i++) { specFailureDetails(failedSpecs[i]); @@ -79,7 +74,7 @@ getJasmineRequireObj().ConsoleReporter = function() { print(specCounts); printNewline(); - var seconds = elapsed / 1000; + var seconds = options.executionTime / 1000; print("Finished in " + seconds + " " + plural("second", seconds)); printNewline(); diff --git a/src/core/Env.js b/src/core/Env.js index 448b3792..b23c90fc 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -2,7 +2,8 @@ getJasmineRequireObj().Env = function(j$) { function Env(options) { options = options || {}; var self = this; - var global = options.global || j$.getGlobal(); + var global = options.global || j$.getGlobal(), + now = options.now || function() { return new Date().getTime(); }; var catchExceptions = true; @@ -192,10 +193,13 @@ getJasmineRequireObj().Env = function(j$) { }; this.execute = function() { + var startTime = now(); this.reporter.jasmineStarted({ totalSpecsDefined: totalSpecsDefined }); - this.topSuite.execute(this.reporter.jasmineDone); + this.topSuite.execute(function() { + self.reporter.jasmineDone({executionTime: now() - startTime}); + }); }; } diff --git a/src/core/JsApiReporter.js b/src/core/JsApiReporter.js index e482c068..13ec6488 100644 --- a/src/core/JsApiReporter.js +++ b/src/core/JsApiReporter.js @@ -11,8 +11,11 @@ getJasmineRequireObj().JsApiReporter = function() { status = 'started'; }; - this.jasmineDone = function() { + var executionTime; + + this.jasmineDone = function(options) { this.finished = true; + executionTime = options.executionTime; status = 'done'; }; @@ -53,6 +56,10 @@ getJasmineRequireObj().JsApiReporter = function() { return specs; }; + this.executionTime = function() { + return executionTime; + }; + } return JsApiReporter; diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js index edabafd9..4fc32614 100644 --- a/src/html/HtmlReporter.js +++ b/src/html/HtmlReporter.js @@ -2,11 +2,10 @@ jasmineRequire.HtmlReporter = function() { function HtmlReporter(options) { var env = options.env || {}, getContainer = options.getContainer, - now = options.now || function() { return new Date().getTime();}, createElement = options.createElement, createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick, results = [], - startTime, specsExecuted = 0, failureCount = 0, pendingSpecCount = 0, @@ -33,7 +32,6 @@ jasmineRequire.HtmlReporter = function() { var totalSpecsDefined; this.jasmineStarted = function(options) { totalSpecsDefined = options.totalSpecsDefined || 0; - startTime = now(); }; var summary = createDom("div", {className: "summary"}); @@ -94,11 +92,9 @@ jasmineRequire.HtmlReporter = function() { } }; - this.jasmineDone = function() { - var elapsed = now() - startTime; - + this.jasmineDone = function(options) { var banner = find(".banner"); - banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s")); + banner.appendChild(createDom("span", {className: "duration"}, "finished in " + options.executionTime / 1000 + "s")); var alert = find(".alert"); @@ -113,7 +109,7 @@ jasmineRequire.HtmlReporter = function() { var checkbox = find("input"); checkbox.checked = !env.catchingExceptions(); - checkbox.onclick = options.onRaiseExceptionsClick; + checkbox.onclick = onRaiseExceptionsClick; if (specsExecuted < totalSpecsDefined) { var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";