diff options
| author | Misko Hevery | 2012-03-23 14:03:24 -0700 |
|---|---|---|
| committer | Misko Hevery | 2012-03-28 11:16:35 -0700 |
| commit | 2430f52bb97fa9d682e5f028c977c5bf94c5ec38 (patch) | |
| tree | e7529b741d70199f36d52090b430510bad07f233 /test/ngScenario/ApplicationSpec.js | |
| parent | 944098a4e0f753f06b40c73ca3e79991cec6c2e2 (diff) | |
| download | angular.js-2430f52bb97fa9d682e5f028c977c5bf94c5ec38.tar.bz2 | |
chore(module): move files around in preparation for more modules
Diffstat (limited to 'test/ngScenario/ApplicationSpec.js')
| -rw-r--r-- | test/ngScenario/ApplicationSpec.js | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/test/ngScenario/ApplicationSpec.js b/test/ngScenario/ApplicationSpec.js new file mode 100644 index 00000000..7384ecaa --- /dev/null +++ b/test/ngScenario/ApplicationSpec.js @@ -0,0 +1,141 @@ +'use strict'; + +describe('angular.scenario.Application', function() { + var $window; + var app, frames; + + function callLoadHandlers(app) { + var handlers = app.getFrame_().data('events').load; + expect(handlers).toBeDefined(); + expect(handlers.length).toEqual(1); + handlers[0].handler(); + } + + beforeEach(function() { + frames = _jQuery("<div></div>"); + app = new angular.scenario.Application(frames); + }); + + it('should return new $window and $document after navigate', function() { + var called; + var testWindow, testDocument, counter = 0; + app.getWindow_ = function() { + return {x:counter++, document:{x:counter++}}; + }; + app.navigateTo('http://www.google.com/'); + app.executeAction(function($document, $window) { + testWindow = $window; + testDocument = $document; + }); + app.navigateTo('http://www.google.com/'); + app.executeAction(function($window, $document) { + expect($window).not.toEqual(testWindow); + expect($document).not.toEqual(testDocument); + called = true; + }); + expect(called).toBeTruthy(); + }); + + it('should execute callback with correct arguments', function() { + var called; + var testWindow = {document: {}}; + app.getWindow_ = function() { + return testWindow; + }; + app.executeAction(function($window, $document) { + expect(this).toEqual(app); + expect($document).toEqual(_jQuery($window.document)); + expect($window).toEqual(testWindow); + called = true; + }); + expect(called).toBeTruthy(); + }); + + it('should use a new iframe each time', function() { + app.navigateTo('http://localhost/'); + var frame = app.getFrame_(); + frame.attr('test', true); + app.navigateTo('http://localhost/'); + expect(app.getFrame_().attr('test')).toBeFalsy(); + }); + + it('should call error handler if document not accessible', function() { + var called; + app.getWindow_ = function() { + return {}; + }; + app.navigateTo('http://localhost/', angular.noop, function(error) { + expect(error).toMatch(/Sandbox Error/); + called = true; + }); + callLoadHandlers(app); + expect(called).toBeTruthy(); + }); + + it('should call error handler if navigating to about:blank', function() { + var called; + app.navigateTo('about:blank', angular.noop, function(error) { + expect(error).toMatch(/Sandbox Error/); + called = true; + }); + expect(called).toBeTruthy(); + }); + + it('should remove old iframes', function() { + app.navigateTo('http://localhost/#foo'); + frames.find('iframe')[0].id = 'test'; + + app.navigateTo('http://localhost/#bar'); + var iframes = frames.find('iframe'); + + expect(iframes.length).toEqual(1); + expect(iframes[0].src).toEqual('http://localhost/#bar'); + expect(iframes[0].id).toBeFalsy(); + }); + + it('should URL update description bar', function() { + app.navigateTo('http://localhost/'); + var anchor = frames.find('> h2 a'); + expect(anchor.attr('href')).toEqual('http://localhost/'); + expect(anchor.text()).toEqual('http://localhost/'); + }); + + it('should call onload handler when frame loads', function() { + var called; + app.getWindow_ = function() { + return {document: {}}; + }; + app.navigateTo('http://localhost/', function($window, $document) { + called = true; + }); + callLoadHandlers(app); + expect(called).toBeTruthy(); + }); + + it('should wait for pending requests in executeAction', inject(function($injector, $browser) { + var called, polled; + var handlers = []; + var testWindow = { + document: jqLite('<div class="test-foo" ng-app></div>')[0], + angular: { + element: jqLite, + service: {} + } + }; + $browser.notifyWhenNoOutstandingRequests = function(fn) { + handlers.push(fn); + }; + jqLite(testWindow.document).data('$injector', $injector); + app.getWindow_ = function() { + return testWindow; + }; + app.executeAction(function($window, $document) { + expect($window).toEqual(testWindow); + expect($document).toBeDefined(); + expect($document[0].className).toEqual('test-foo'); + }); + expect(handlers.length).toEqual(1); + handlers[0](); + dealoc(testWindow.document); + })); +}); |
