Skip to content

Commit

Permalink
test($browser): update MockWindow to normalize URLs similar to real w…
Browse files Browse the repository at this point in the history
…indow.location
  • Loading branch information
jbedard committed Oct 25, 2018
1 parent b4e409b commit 33492fe
Showing 1 changed file with 22 additions and 21 deletions.
43 changes: 22 additions & 21 deletions test/ng/browserSpecs.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ function MockWindow(options) {
}
var events = {};
var timeouts = this.timeouts = [];
var locationHref = 'http://server/';
var committedHref = 'http://server/';
var locationHref = window.document.createElement('a');
var committedHref = window.document.createElement('a');
locationHref.href = committedHref.href = 'http://server/';
var mockWindow = this;
var msie = options.msie;
var ieState;
Expand Down Expand Up @@ -60,28 +61,28 @@ function MockWindow(options) {

this.location = {
get href() {
return committedHref;
return committedHref.href;
},
set href(value) {
locationHref = value;
locationHref.href = value;
mockWindow.history.state = null;
historyEntriesLength++;
if (!options.updateAsync) this.flushHref();
},
get hash() {
return getHash(committedHref);
return getHash(committedHref.href);
},
set hash(value) {
locationHref = replaceHash(locationHref, value);
locationHref.href = replaceHash(locationHref.href, value);
if (!options.updateAsync) this.flushHref();
},
replace: function(url) {
locationHref = url;
locationHref.href = url;
mockWindow.history.state = null;
if (!options.updateAsync) this.flushHref();
},
flushHref: function() {
committedHref = locationHref;
committedHref.href = locationHref.href;
}
};

Expand All @@ -91,13 +92,13 @@ function MockWindow(options) {
historyEntriesLength++;
},
replaceState: function(state, title, url) {
locationHref = url;
if (!options.updateAsync) committedHref = locationHref;
locationHref.href = url;
if (!options.updateAsync) committedHref.href = locationHref.href;
mockWindow.history.state = copy(state);
if (!options.updateAsync) this.flushHref();
},
flushHref: function() {
committedHref = locationHref;
committedHref.href = locationHref.href;
}
};
// IE 10-11 deserialize history.state on each read making subsequent reads
Expand Down Expand Up @@ -398,18 +399,18 @@ describe('browser', function() {

it('should return current location.href', function() {
fakeWindow.location.href = 'http://test.com';
expect(browser.url()).toEqual('http://test.com');
expect(browser.url()).toEqual('http://test.com/');

fakeWindow.location.href = 'https://another.com';
expect(browser.url()).toEqual('https://another.com');
expect(browser.url()).toEqual('https://another.com/');
});

it('should strip an empty hash fragment', function() {
fakeWindow.location.href = 'http://test.com#';
expect(browser.url()).toEqual('http://test.com');
fakeWindow.location.href = 'http://test.com/#';
expect(browser.url()).toEqual('http://test.com/');

fakeWindow.location.href = 'https://another.com#foo';
expect(browser.url()).toEqual('https://another.com#foo');
fakeWindow.location.href = 'https://another.com/#foo';
expect(browser.url()).toEqual('https://another.com/#foo');
});

it('should use history.pushState when available', function() {
Expand Down Expand Up @@ -440,7 +441,7 @@ describe('browser', function() {
sniffer.history = false;
browser.url('http://new.org');

expect(fakeWindow.location.href).toEqual('http://new.org');
expect(fakeWindow.location.href).toEqual('http://new.org/');

expect(pushState).not.toHaveBeenCalled();
expect(replaceState).not.toHaveBeenCalled();
Expand Down Expand Up @@ -507,9 +508,9 @@ describe('browser', function() {
it('should not set URL when the URL is already set', function() {
var current = fakeWindow.location.href;
sniffer.history = false;
fakeWindow.location.href = 'dontchange';
fakeWindow.location.href = 'http://dontchange/';
browser.url(current);
expect(fakeWindow.location.href).toBe('dontchange');
expect(fakeWindow.location.href).toBe('http://dontchange/');
});

it('should not read out location.href if a reload was triggered but still allow to change the url', function() {
Expand Down Expand Up @@ -812,7 +813,7 @@ describe('browser', function() {
it('should not fire urlChange if changed by browser.url method', function() {
sniffer.history = false;
browser.onUrlChange(callback);
browser.url('http://new.com');
browser.url('http://new.com/');

fakeWindow.fire('hashchange');
expect(callback).not.toHaveBeenCalled();
Expand Down

0 comments on commit 33492fe

Please sign in to comment.