mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
animations cause the dom to contain elements that have been removed from the model but are being animated out. we could teach the e2e runner to wait for animations but that would make all tests slower. it should be quite safe to just disable animations automatically when the app is running via the e2e test runner. this change disables only css animations. we should make additional change that disables js animations as well, but since we don't need this right now I'm punting on it.
147 lines
4.2 KiB
JavaScript
147 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
describe('angular.scenario.Application', function() {
|
|
var $window;
|
|
var app, frames;
|
|
|
|
function callLoadHandlers(app) {
|
|
var handler = app.getFrame_().triggerHandler('load')
|
|
}
|
|
|
|
beforeEach(function() {
|
|
document.body.innerHTML = '';
|
|
frames = _jQuery("<div></div>");
|
|
_jQuery(document.body).append(frames);
|
|
app = new angular.scenario.Application(frames);
|
|
});
|
|
|
|
|
|
afterEach(function() {
|
|
_jQuery('iframe').unbind(); // cleanup any leftover onload handlers
|
|
document.body.innerHTML = '';
|
|
});
|
|
|
|
|
|
it('should return new $window and $document after navigateTo', 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);
|
|
}));
|
|
});
|