diff options
| -rw-r--r-- | src/AngularPublic.js | 6 | ||||
| -rw-r--r-- | src/Browser.js | 9 | ||||
| -rw-r--r-- | test/BrowserSpecs.js | 23 |
3 files changed, 29 insertions, 9 deletions
diff --git a/src/AngularPublic.js b/src/AngularPublic.js index b62483f8..cc901d6d 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -12,12 +12,6 @@ angularService('$browser', function($log){ if (!browserSingleton) { browserSingleton = new Browser(window, jqLite(window.document), jqLite(window.document.body), XHR, $log); - var addPollFn = browserSingleton.addPollFn; - browserSingleton.addPollFn = function(){ - browserSingleton.addPollFn = addPollFn; - browserSingleton.startPoller(100, function(delay, fn){setTimeout(delay,fn);}); - return addPollFn.apply(browserSingleton, arguments); - }; browserSingleton.bind(); } return browserSingleton; diff --git a/src/Browser.js b/src/Browser.js index 80cabe02..052ea59f 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -141,7 +141,8 @@ function Browser(window, document, body, XHR, $log) { ////////////////////////////////////////////////////////////// // Poll Watcher API ////////////////////////////////////////////////////////////// - var pollFns = []; + var pollFns = [], + pollTimeout; /** * @workInProgress @@ -162,11 +163,13 @@ function Browser(window, document, body, XHR, $log) { * @param {function()} fn Poll function to add * * @description - * Adds a function to the list of functions that poller periodically executes + * Adds a function to the list of functions that poller periodically executes, + * and starts polling if not started yet. * * @returns {function()} the added function */ self.addPollFn = function(fn) { + if (!pollTimeout) self.startPoller(100, setTimeout); pollFns.push(fn); return fn; }; @@ -187,7 +190,7 @@ function Browser(window, document, body, XHR, $log) { self.startPoller = function(interval, setTimeout) { (function check(){ self.poll(); - setTimeout(check, interval); + pollTimeout = setTimeout(check, interval); })(); }; diff --git a/test/BrowserSpecs.js b/test/BrowserSpecs.js index e01506dc..08756904 100644 --- a/test/BrowserSpecs.js +++ b/test/BrowserSpecs.js @@ -4,6 +4,7 @@ describe('browser', function(){ function fakeSetTimeout(fn) { setTimeoutQueue.push(fn); + return Math.random(); } fakeSetTimeout.flush = function() { @@ -384,6 +385,10 @@ describe('browser', function(){ }); describe('poller', function(){ + beforeEach(function() { + spyOn(browser, 'startPoller'); + }); + it('should call all fns on poll', function(){ var log = ''; browser.addPollFn(function(){log+='a';}); @@ -399,6 +404,7 @@ describe('browser', function(){ var log = ''; var setTimeoutSpy = jasmine.createSpy('setTimeout'); browser.addPollFn(function(){log+='.';}); + browser.startPoller.andCallThrough(); browser.startPoller(50, setTimeoutSpy); expect(log).toEqual('.'); expect(setTimeoutSpy.mostRecentCall.args[1]).toEqual(50); @@ -411,6 +417,22 @@ describe('browser', function(){ var returnedFn = browser.addPollFn(fn); expect(returnedFn).toBe(fn); }); + + it('should auto start poller when first fn registered', function() { + browser.addPollFn(function() {}); + + expect(browser.startPoller).toHaveBeenCalled(); + expect(browser.startPoller.callCount).toBe(1); + }); + + it('should auto start poller only when first fn registered', function() { + browser.startPoller.andCallThrough(); + browser.addPollFn(function() {}); + browser.addPollFn(function() {}); + browser.addPollFn(function() {}); + + expect(browser.startPoller.callCount).toBe(1); + }); }); @@ -424,6 +446,7 @@ describe('browser', function(){ }; browser = new Browser(fakeWindow, {}, {}); + browser.startPoller = function() {}; var events = []; |
