Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

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 Jun 24, 2018
1 parent 2de162e commit 21263c9
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions test/ng/browserSpecs.js
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 = document.createElement('a');
var committedHref = 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 @@ -285,10 +286,10 @@ 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 use history.pushState when available', function() {
Expand Down Expand Up @@ -319,7 +320,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 @@ -386,9 +387,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 @@ -691,7 +692,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 21263c9

Please sign in to comment.