diff --git a/lib/jasmine-core/boot.js b/lib/jasmine-core/boot.js index e96a978d..86dfd74a 100644 --- a/lib/jasmine-core/boot.js +++ b/lib/jasmine-core/boot.js @@ -96,9 +96,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ var htmlReporter = new jasmine.HtmlReporter({ env: env, - onStopExecutionClick: function() { queryString.navigateWithNewParam("failFast", !env.stoppingOnSpecFailure()); }, - onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); }, - onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); }, + navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); }, addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, getContainer: function() { return document.body; }, createElement: function() { return document.createElement.apply(document, arguments); }, diff --git a/lib/jasmine-core/boot/boot.js b/lib/jasmine-core/boot/boot.js index 290dce53..57f52e5e 100644 --- a/lib/jasmine-core/boot/boot.js +++ b/lib/jasmine-core/boot/boot.js @@ -74,9 +74,7 @@ */ var htmlReporter = new jasmine.HtmlReporter({ env: env, - onStopExecutionClick: function() { queryString.navigateWithNewParam("failFast", !env.stoppingOnSpecFailure()); }, - onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); }, - onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); }, + navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); }, addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, getContainer: function() { return document.body; }, createElement: function() { return document.createElement.apply(document, arguments); }, diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js index b01d0a22..14cf7a0a 100644 --- a/lib/jasmine-core/jasmine-html.js +++ b/lib/jasmine-core/jasmine-html.js @@ -85,9 +85,7 @@ jasmineRequire.HtmlReporter = function(j$) { getContainer = options.getContainer, createElement = options.createElement, createTextNode = options.createTextNode, - onStopExecutionClick = options.onStopExecutionClick || function() {}, - onThrowExpectationsClick = options.onThrowExpectationsClick || function() {}, - onRandomClick = options.onRandomClick || function() {}, + navigateWithNewParam = options.navigateWithNewParam || function() {}, addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, filterSpecs = options.filterSpecs, timer = options.timer || noopTimer, @@ -348,15 +346,21 @@ jasmineRequire.HtmlReporter = function(j$) { var failFastCheckbox = optionsMenuDom.querySelector('#jasmine-fail-fast'); failFastCheckbox.checked = env.stoppingOnSpecFailure(); - failFastCheckbox.onclick = onStopExecutionClick; + failFastCheckbox.onclick = function() { + navigateWithNewParam('failFast', !env.stoppingOnSpecFailure()); + }; var throwCheckbox = optionsMenuDom.querySelector('#jasmine-throw-failures'); throwCheckbox.checked = env.throwingExpectationFailures(); - throwCheckbox.onclick = onThrowExpectationsClick; + throwCheckbox.onclick = function() { + navigateWithNewParam('throwFailures', !env.throwingExpectationFailures()); + }; var randomCheckbox = optionsMenuDom.querySelector('#jasmine-random-order'); randomCheckbox.checked = env.randomTests(); - randomCheckbox.onclick = onRandomClick; + randomCheckbox.onclick = function() { + navigateWithNewParam('random', !env.randomTests()); + }; var optionsTrigger = optionsMenuDom.querySelector('.jasmine-trigger'), optionsPayload = optionsMenuDom.querySelector('.jasmine-payload'), diff --git a/spec/html/HtmlReporterSpec.js b/spec/html/HtmlReporterSpec.js index 7614f6e1..0307d7f6 100644 --- a/spec/html/HtmlReporterSpec.js +++ b/spec/html/HtmlReporterSpec.js @@ -487,16 +487,44 @@ describe("HtmlReporter", function() { expect(stopOnFailureUI.checked).toBe(true); }); - it("should trigger the callback when changed", function() { + it("should navigate and turn the setting on", function() { var env = new jasmineUnderTest.Env(), container = document.createElement("div"), - failFastHandler = jasmine.createSpy('failFast'), + navigationHandler = jasmine.createSpy('navigate'), getContainer = function() { return container; }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - onStopExecutionClick: failFastHandler, + navigateWithNewParam: navigationHandler, + getContainer: getContainer, + createElement: function() { + return document.createElement.apply(document, arguments); + }, + createTextNode: function() { + return document.createTextNode.apply(document, arguments); + } + }); + + reporter.initialize(); + reporter.jasmineDone({}); + + var stopOnFailureUI = container.querySelector(".jasmine-fail-fast"); + stopOnFailureUI.click(); + + expect(navigationHandler).toHaveBeenCalledWith('failFast', true); + }); + + it("should navigate and turn the setting off", function() { + var env = new jasmineUnderTest.Env(), + container = document.createElement("div"), + navigationHandler = jasmine.createSpy('navigate'), + getContainer = function() { + return container; + }, + reporter = new jasmineUnderTest.HtmlReporter({ + env: env, + navigateWithNewParam: navigationHandler, getContainer: getContainer, createElement: function() { return document.createElement.apply(document, arguments); @@ -514,7 +542,7 @@ describe("HtmlReporter", function() { var stopOnFailureUI = container.querySelector(".jasmine-fail-fast"); stopOnFailureUI.click(); - expect(failFastHandler).toHaveBeenCalled(); + expect(navigationHandler).toHaveBeenCalledWith('failFast', false); }); }); @@ -569,17 +597,17 @@ describe("HtmlReporter", function() { expect(throwingExpectationsUI.checked).toBe(true); }); - it("should affect the query param for throw expectation failures", function() { + it("should navigate and change the setting to on", function() { var env = new jasmineUnderTest.Env(), container = document.createElement("div"), - throwingExceptionHandler = jasmine.createSpy('throwingExceptions'), + navigateHandler = jasmine.createSpy('navigate'), getContainer = function() { return container; }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - onThrowExpectationsClick: throwingExceptionHandler, + navigateWithNewParam: navigateHandler, createElement: function() { return document.createElement.apply(document, arguments); }, @@ -594,7 +622,37 @@ describe("HtmlReporter", function() { var throwingExpectationsUI = container.querySelector(".jasmine-throw"); throwingExpectationsUI.click(); - expect(throwingExceptionHandler).toHaveBeenCalled(); + expect(navigateHandler).toHaveBeenCalledWith('throwFailures', true); + }); + + it("should navigate and change the setting to off", function() { + var env = new jasmineUnderTest.Env(), + container = document.createElement("div"), + navigateHandler = jasmine.createSpy('navigate'), + getContainer = function() { + return container; + }, + reporter = new jasmineUnderTest.HtmlReporter({ + env: env, + getContainer: getContainer, + navigateWithNewParam: navigateHandler, + createElement: function() { + return document.createElement.apply(document, arguments); + }, + createTextNode: function() { + return document.createTextNode.apply(document, arguments); + } + }); + + env.throwOnExpectationFailure(true); + + reporter.initialize(); + reporter.jasmineDone({}); + + var throwingExpectationsUI = container.querySelector(".jasmine-throw"); + throwingExpectationsUI.click(); + + expect(navigateHandler).toHaveBeenCalledWith('throwFailures', false); }); }); @@ -649,17 +707,17 @@ describe("HtmlReporter", function() { expect(randomUI.checked).toBe(true); }); - it("should affect the query param for random tests", function() { + it("should navigate and change the setting to on", function() { var env = new jasmineUnderTest.Env(), container = document.createElement("div"), - randomHandler = jasmine.createSpy('randomHandler'), + navigateHandler = jasmine.createSpy('navigate'), getContainer = function() { return container; }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - onRandomClick: randomHandler, + navigateWithNewParam: navigateHandler, createElement: function() { return document.createElement.apply(document, arguments); }, @@ -668,13 +726,43 @@ describe("HtmlReporter", function() { } }); + env.randomizeTests(false); reporter.initialize(); reporter.jasmineDone({}); var randomUI = container.querySelector(".jasmine-random"); randomUI.click(); - expect(randomHandler).toHaveBeenCalled(); + expect(navigateHandler).toHaveBeenCalledWith('random', true); + }); + + it("should navigate and change the setting to off", function() { + var env = new jasmineUnderTest.Env(), + container = document.createElement("div"), + navigateHandler = jasmine.createSpy('navigate'), + getContainer = function() { + return container; + }, + reporter = new jasmineUnderTest.HtmlReporter({ + env: env, + getContainer: getContainer, + navigateWithNewParam: navigateHandler, + createElement: function() { + return document.createElement.apply(document, arguments); + }, + createTextNode: function() { + return document.createTextNode.apply(document, arguments); + } + }); + + env.randomizeTests(true); + reporter.initialize(); + reporter.jasmineDone({}); + + var randomUI = container.querySelector(".jasmine-random"); + randomUI.click(); + + expect(navigateHandler).toHaveBeenCalledWith('random', false); }); it("should show the seed bar if randomizing", function() { diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js index 9bb94ed2..bef88a20 100644 --- a/src/html/HtmlReporter.js +++ b/src/html/HtmlReporter.js @@ -55,9 +55,7 @@ jasmineRequire.HtmlReporter = function(j$) { getContainer = options.getContainer, createElement = options.createElement, createTextNode = options.createTextNode, - onStopExecutionClick = options.onStopExecutionClick || function() {}, - onThrowExpectationsClick = options.onThrowExpectationsClick || function() {}, - onRandomClick = options.onRandomClick || function() {}, + navigateWithNewParam = options.navigateWithNewParam || function() {}, addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, filterSpecs = options.filterSpecs, timer = options.timer || noopTimer, @@ -318,15 +316,21 @@ jasmineRequire.HtmlReporter = function(j$) { var failFastCheckbox = optionsMenuDom.querySelector('#jasmine-fail-fast'); failFastCheckbox.checked = env.stoppingOnSpecFailure(); - failFastCheckbox.onclick = onStopExecutionClick; + failFastCheckbox.onclick = function() { + navigateWithNewParam('failFast', !env.stoppingOnSpecFailure()); + }; var throwCheckbox = optionsMenuDom.querySelector('#jasmine-throw-failures'); throwCheckbox.checked = env.throwingExpectationFailures(); - throwCheckbox.onclick = onThrowExpectationsClick; + throwCheckbox.onclick = function() { + navigateWithNewParam('throwFailures', !env.throwingExpectationFailures()); + }; var randomCheckbox = optionsMenuDom.querySelector('#jasmine-random-order'); randomCheckbox.checked = env.randomTests(); - randomCheckbox.onclick = onRandomClick; + randomCheckbox.onclick = function() { + navigateWithNewParam('random', !env.randomTests()); + }; var optionsTrigger = optionsMenuDom.querySelector('.jasmine-trigger'), optionsPayload = optionsMenuDom.querySelector('.jasmine-payload'),