diff options
| author | Vojta Jina | 2011-06-01 17:38:25 +0200 | 
|---|---|---|
| committer | Igor Minar | 2011-06-02 10:50:43 -0700 | 
| commit | dad26037521ff681f9a3c3d4a9bebf14fb8e38cc (patch) | |
| tree | 15b5a83a6fd7731a5c50259198591878915c86fd | |
| parent | 50076b571da522cf6d2cb92c28519694727e9c31 (diff) | |
| download | angular.js-dad26037521ff681f9a3c3d4a9bebf14fb8e38cc.tar.bz2 | |
Refactor $browser's lazy start polling
+ unit tests
| -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 = [];  | 
