aboutsummaryrefslogtreecommitdiffstats
path: root/test/ngScenario/ApplicationSpec.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/ngScenario/ApplicationSpec.js')
-rw-r--r--test/ngScenario/ApplicationSpec.js141
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);
+ }));
+});