aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/AngularPublic.js6
-rw-r--r--src/Browser.js9
-rw-r--r--test/BrowserSpecs.js23
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 = [];