aboutsummaryrefslogtreecommitdiffstats
path: root/test/BrowserSpecs.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/BrowserSpecs.js')
-rw-r--r--test/BrowserSpecs.js106
1 files changed, 84 insertions, 22 deletions
diff --git a/test/BrowserSpecs.js b/test/BrowserSpecs.js
index eb43e3c5..89fc14ed 100644
--- a/test/BrowserSpecs.js
+++ b/test/BrowserSpecs.js
@@ -1,6 +1,6 @@
describe('browser', function(){
- var browser, location, head, xhr, setTimeoutQueue;
+ var browser, fakeWindow, xhr, logs, scripts, setTimeoutQueue;
function fakeSetTimeout(fn) {
setTimeoutQueue.push(fn);
@@ -15,19 +15,31 @@ describe('browser', function(){
beforeEach(function(){
setTimeoutQueue = [];
-
- location = {href:"http://server", hash:""};
- head = {
- scripts: [],
- append: function(node){head.scripts.push(node);}
- };
+ scripts = [];
xhr = null;
- browser = new Browser(location, jqLite(window.document), head, function(){
+ fakeWindow = {
+ location: {href:"http://server"},
+ setTimeout: fakeSetTimeout
+ }
+
+ var fakeBody = {append: function(node){scripts.push(node)}};
+
+ var fakeXhr = function(){
xhr = this;
this.open = noop;
this.setRequestHeader = noop;
this.send = noop;
- }, undefined, fakeSetTimeout);
+ }
+
+ logs = {log:[], warn:[], info:[], error:[]};
+
+ var fakeLog = {log: function() { logs.log.push(slice.call(arguments)); },
+ warn: function() { logs.warn.push(slice.call(arguments)); },
+ info: function() { logs.info.push(slice.call(arguments)); },
+ error: function() { logs.error.push(slice.call(arguments)); }};
+
+ browser = new Browser(fakeWindow, jqLite(window.document), fakeBody, fakeXhr,
+ fakeLog);
});
it('should contain cookie cruncher', function() {
@@ -60,13 +72,13 @@ describe('browser', function(){
browser.xhr('JSON', 'http://example.org/path?cb=JSON_CALLBACK', function(code, data){
log += code + ':' + data + ';';
});
- expect(head.scripts.length).toEqual(1);
- var url = head.scripts[0].src.split('?cb=');
+ expect(scripts.length).toEqual(1);
+ var url = scripts[0].src.split('?cb=');
expect(url[0]).toEqual('http://example.org/path');
- expect(typeof window[url[1]]).toEqual($function);
- window[url[1]]('data');
+ expect(typeof fakeWindow[url[1]]).toEqual($function);
+ fakeWindow[url[1]]('data');
expect(log).toEqual('200:data;');
- expect(typeof window[url[1]]).toEqual('undefined');
+ expect(typeof fakeWindow[url[1]]).toEqual('undefined');
});
});
});
@@ -107,16 +119,8 @@ describe('browser', function(){
}
}
- var browser, log, logs;
-
beforeEach(function() {
deleteAllCookies();
- logs = {log:[], warn:[], info:[], error:[]};
- log = {log: function() { logs.log.push(slice.call(arguments)); },
- warn: function() { logs.warn.push(slice.call(arguments)); },
- info: function() { logs.info.push(slice.call(arguments)); },
- error: function() { logs.error.push(slice.call(arguments)); }};
- browser = new Browser({}, jqLite(document), undefined, XHR, log);
expect(document.cookie).toEqual('');
});
@@ -334,4 +338,62 @@ describe('browser', function(){
expect(returnedFn).toBe(fn);
});
});
+
+
+ describe('url api', function() {
+ it('should use $browser poller to detect url changes when onhashchange event is unsupported',
+ function() {
+
+ fakeWindow = {location: {href:"http://server"}};
+
+ browser = new Browser(fakeWindow, {}, {});
+
+ var events = [];
+
+ browser.onHashChange(function() {
+ events.push('x');
+ });
+
+ fakeWindow.location.href = "http://server/#newHash";
+ expect(events).toEqual([]);
+ browser.poll();
+ expect(events).toEqual(['x']);
+ });
+
+
+ it('should use onhashchange events to detect url changes when supported by browser',
+ function() {
+
+ var onHashChngListener;
+
+ fakeWindow = {location: {href:"http://server"},
+ addEventListener: function(type, listener) {
+ expect(type).toEqual('hashchange');
+ onHashChngListener = listener;
+ },
+ removeEventListener: angular.noop
+ };
+ fakeWindow.onhashchange = true;
+
+ browser = new Browser(fakeWindow, {}, {});
+
+ var events = [],
+ event = {type: "hashchange"}
+
+ browser.onHashChange(function(e) {
+ events.push(e);
+ });
+
+ expect(events).toEqual([]);
+ onHashChngListener(event);
+
+ expect(events.length).toBe(1);
+ expect(events[0].originalEvent || events[0]).toBe(event); // please jQuery and jqLite
+
+ // clean up the jqLite cache so that the global afterEach doesn't complain
+ if (!jQuery) {
+ jqLite(fakeWindow).dealoc();
+ }
+ });
+ });
});