Keep extra query params when focusing on a spec or suite

[finish #29578495]
This commit is contained in:
slackersoft
2014-12-15 18:30:32 -08:00
parent fbe38018c9
commit 503f4b7f49
7 changed files with 56 additions and 18 deletions

View File

@@ -84,7 +84,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
var htmlReporter = new jasmine.HtmlReporter({ var htmlReporter = new jasmine.HtmlReporter({
env: env, env: env,
onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); }, onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
getContainer: function() { return document.body; }, getContainer: function() { return document.body; },
createElement: function() { return document.createElement.apply(document, arguments); }, createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); }, createTextNode: function() { return document.createTextNode.apply(document, arguments); },

View File

@@ -62,7 +62,8 @@
*/ */
var htmlReporter = new jasmine.HtmlReporter({ var htmlReporter = new jasmine.HtmlReporter({
env: env, env: env,
onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); }, onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
getContainer: function() { return document.body; }, getContainer: function() { return document.body; },
createElement: function() { return document.createElement.apply(document, arguments); }, createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); }, createTextNode: function() { return document.createTextNode.apply(document, arguments); },

View File

@@ -40,6 +40,7 @@ jasmineRequire.HtmlReporter = function(j$) {
createElement = options.createElement, createElement = options.createElement,
createTextNode = options.createTextNode, createTextNode = options.createTextNode,
onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
timer = options.timer || noopTimer, timer = options.timer || noopTimer,
results = [], results = [],
specsExecuted = 0, specsExecuted = 0,
@@ -267,7 +268,7 @@ jasmineRequire.HtmlReporter = function(j$) {
function clearPrior() { function clearPrior() {
// return the reporter // return the reporter
var oldReporter = find(''); var oldReporter = find('');
if(oldReporter) { if(oldReporter) {
getContainer().removeChild(oldReporter); getContainer().removeChild(oldReporter);
} }
@@ -306,7 +307,11 @@ jasmineRequire.HtmlReporter = function(j$) {
} }
function specHref(result) { function specHref(result) {
return '?spec=' + encodeURIComponent(result.fullName); return addToExistingQueryString('spec', encodeURIComponent(result.fullName));
}
function defaultQueryString(key, value) {
return '?' + key + '=' + value;
} }
function setMenuModeTo(mode) { function setMenuModeTo(mode) {
@@ -358,10 +363,14 @@ jasmineRequire.ResultsNode = function() {
jasmineRequire.QueryString = function() { jasmineRequire.QueryString = function() {
function QueryString(options) { function QueryString(options) {
this.setParam = function(key, value) { this.navigateWithNewParam = function(key, value) {
options.getWindowLocation().search = this.fullStringWithNewParam(key, value);
};
this.fullStringWithNewParam = function(key, value) {
var paramMap = queryStringToParamMap(); var paramMap = queryStringToParamMap();
paramMap[key] = value; paramMap[key] = value;
options.getWindowLocation().search = toQueryString(paramMap); return toQueryString(paramMap);
}; };
this.getParam = function(key) { this.getParam = function(key) {

View File

@@ -278,7 +278,8 @@ describe("New HtmlReporter", function() {
env: env, env: env,
getContainer: getContainer, getContainer: getContainer,
createElement: function() { return document.createElement.apply(document, arguments); }, createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); } createTextNode: function() { return document.createTextNode.apply(document, arguments); },
addToExistingQueryString: function(key, value) { return "?foo=bar&" + key + "=" + value; }
}); });
reporter.initialize(); reporter.initialize();
@@ -350,7 +351,7 @@ describe("New HtmlReporter", function() {
var suiteDetail = outerSuite.childNodes[0]; var suiteDetail = outerSuite.childNodes[0];
var suiteLink = suiteDetail.childNodes[0]; var suiteLink = suiteDetail.childNodes[0];
expect(suiteLink.innerHTML).toEqual("A Suite"); expect(suiteLink.innerHTML).toEqual("A Suite");
expect(suiteLink.getAttribute('href')).toEqual("?spec=A%20Suite"); expect(suiteLink.getAttribute('href')).toEqual("?foo=bar&spec=A%20Suite");
var specs = outerSuite.childNodes[1]; var specs = outerSuite.childNodes[1];
var spec = specs.childNodes[0]; var spec = specs.childNodes[0];
@@ -359,7 +360,7 @@ describe("New HtmlReporter", function() {
var specLink = spec.childNodes[0]; var specLink = spec.childNodes[0];
expect(specLink.innerHTML).toEqual("with a spec"); expect(specLink.innerHTML).toEqual("with a spec");
expect(specLink.getAttribute("href")).toEqual("?spec=A%20Suite%20with%20a%20spec"); expect(specLink.getAttribute("href")).toEqual("?foo=bar&spec=A%20Suite%20with%20a%20spec");
// expect(specLink.getAttribute("title")).toEqual("A Suite with a spec"); // expect(specLink.getAttribute("title")).toEqual("A Suite with a spec");
}); });
@@ -567,7 +568,8 @@ describe("New HtmlReporter", function() {
env: env, env: env,
getContainer: getContainer, getContainer: getContainer,
createElement: function() { return document.createElement.apply(document, arguments); }, createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); } createTextNode: function() { return document.createTextNode.apply(document, arguments); },
addToExistingQueryString: function(key, value) { return "?foo=bar&" + key + "=" + value; }
}); });
reporter.initialize(); reporter.initialize();
@@ -614,7 +616,7 @@ describe("New HtmlReporter", function() {
var specLink = specDiv.childNodes[0]; var specLink = specDiv.childNodes[0];
expect(specLink.getAttribute("title")).toEqual("a suite with a failing spec"); expect(specLink.getAttribute("title")).toEqual("a suite with a failing spec");
expect(specLink.getAttribute("href")).toEqual("?spec=a%20suite%20with%20a%20failing%20spec"); expect(specLink.getAttribute("href")).toEqual("?foo=bar&spec=a%20suite%20with%20a%20failing%20spec");
var message = failure.childNodes[1].childNodes[0]; var message = failure.childNodes[1].childNodes[0];
expect(message.getAttribute("class")).toEqual("result-message"); expect(message.getAttribute("class")).toEqual("result-message");

View File

@@ -1,6 +1,6 @@
describe("QueryString", function() { describe("QueryString", function() {
describe("#setParam", function() { describe("#navigateWithNewParam", function() {
it("sets the query string to include the given key/value pair", function() { it("sets the query string to include the given key/value pair", function() {
var windowLocation = { var windowLocation = {
search: "" search: ""
@@ -9,7 +9,7 @@ describe("QueryString", function() {
getWindowLocation: function() { return windowLocation } getWindowLocation: function() { return windowLocation }
}); });
queryString.setParam("foo", "bar baz"); queryString.navigateWithNewParam("foo", "bar baz");
expect(windowLocation.search).toMatch(/foo=bar%20baz/); expect(windowLocation.search).toMatch(/foo=bar%20baz/);
}); });
@@ -22,13 +22,29 @@ describe("QueryString", function() {
getWindowLocation: function() { return windowLocation } getWindowLocation: function() { return windowLocation }
}); });
queryString.setParam("baz", "quux"); queryString.navigateWithNewParam("baz", "quux");
expect(windowLocation.search).toMatch(/foo=bar/); expect(windowLocation.search).toMatch(/foo=bar/);
expect(windowLocation.search).toMatch(/baz=quux/); expect(windowLocation.search).toMatch(/baz=quux/);
}); });
}); });
describe('#fullStringWithNewParam', function() {
it("gets the query string including the given key/value pair", function() {
var windowLocation = {
search: "?foo=bar"
},
queryString = new j$.QueryString({
getWindowLocation: function() { return windowLocation }
});
var result = queryString.fullStringWithNewParam("baz", "quux");
expect(result).toMatch(/foo=bar/);
expect(result).toMatch(/baz=quux/);
});
});
describe("#getParam", function() { describe("#getParam", function() {
it("returns the value of the requested key", function() { it("returns the value of the requested key", function() {

View File

@@ -11,6 +11,7 @@ jasmineRequire.HtmlReporter = function(j$) {
createElement = options.createElement, createElement = options.createElement,
createTextNode = options.createTextNode, createTextNode = options.createTextNode,
onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
timer = options.timer || noopTimer, timer = options.timer || noopTimer,
results = [], results = [],
specsExecuted = 0, specsExecuted = 0,
@@ -238,7 +239,7 @@ jasmineRequire.HtmlReporter = function(j$) {
function clearPrior() { function clearPrior() {
// return the reporter // return the reporter
var oldReporter = find(''); var oldReporter = find('');
if(oldReporter) { if(oldReporter) {
getContainer().removeChild(oldReporter); getContainer().removeChild(oldReporter);
} }
@@ -277,7 +278,11 @@ jasmineRequire.HtmlReporter = function(j$) {
} }
function specHref(result) { function specHref(result) {
return '?spec=' + encodeURIComponent(result.fullName); return addToExistingQueryString('spec', encodeURIComponent(result.fullName));
}
function defaultQueryString(key, value) {
return '?' + key + '=' + value;
} }
function setMenuModeTo(mode) { function setMenuModeTo(mode) {

View File

@@ -1,10 +1,14 @@
jasmineRequire.QueryString = function() { jasmineRequire.QueryString = function() {
function QueryString(options) { function QueryString(options) {
this.setParam = function(key, value) { this.navigateWithNewParam = function(key, value) {
options.getWindowLocation().search = this.fullStringWithNewParam(key, value);
};
this.fullStringWithNewParam = function(key, value) {
var paramMap = queryStringToParamMap(); var paramMap = queryStringToParamMap();
paramMap[key] = value; paramMap[key] = value;
options.getWindowLocation().search = toQueryString(paramMap); return toQueryString(paramMap);
}; };
this.getParam = function(key) { this.getParam = function(key) {