diff options
Diffstat (limited to 'src/ngMock/angular-mocks.js')
| -rw-r--r-- | src/ngMock/angular-mocks.js | 51 | 
1 files changed, 51 insertions, 0 deletions
| diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 8c5686ac..1f96c1e5 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -587,6 +587,57 @@ angular.mock.$LogProvider = function() {    angular.mock.TzDate.prototype = Date.prototype;  })(); +/** + * @ngdoc function + * @name angular.mock.createMockWindow + * @description + * + * This function creates a mock window object useful for controlling access ot setTimeout, but mocking out + * sufficient window's properties to allow Angular to execute. + * + * @example + * + * <pre> +    beforeEach(module(function($provide) { +      $provide.value('$window', window = angular.mock.createMockWindow()); +    })); + +    it('should do something', inject(function($window) { +      var val = null; +      $window.setTimeout(function() { val = 123; }, 10); +      expect(val).toEqual(null); +      window.setTimeout.expect(10).process(); +      expect(val).toEqual(123); +    }); + * </pre> + * + */ +angular.mock.createMockWindow = function() { +  var mockWindow = {}; +  var setTimeoutQueue = []; + +  mockWindow.document = window.document; +  mockWindow.getComputedStyle = angular.bind(window, window.getComputedStyle); +  mockWindow.scrollTo = angular.bind(window, window.scrollTo); +  mockWindow.navigator = window.navigator; +  mockWindow.setTimeout = function(fn, delay) { +    setTimeoutQueue.push({fn: fn, delay: delay}); +  }; +  mockWindow.setTimeout.queue = setTimeoutQueue; +  mockWindow.setTimeout.expect = function(delay) { +    if (setTimeoutQueue.length > 0) { +      return { +        process: function() { +          setTimeoutQueue.shift().fn(); +        } +      }; +    } else { +      expect('SetTimoutQueue empty. Expecting delay of ').toEqual(delay); +    } +  }; + +  return mockWindow; +};  /**   * @ngdoc function | 
