72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {verifyNoBrowserErrors} from 'angular2/src/test_lib/e2e_util';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function whenStable(rootSelector) {
							 | 
						||
| 
								 | 
							
								  // TODO(hankduan): remove this call once Protractor implements it
							 | 
						||
| 
								 | 
							
								  return browser.executeAsyncScript('var el = document.querySelector("' + rootSelector + '");' +
							 | 
						||
| 
								 | 
							
								                                    'window.getAngularTestability(el).whenStable(arguments[0]);');
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('async', () => {
							 | 
						||
| 
								 | 
							
								  var URL = 'examples/src/async/index.html';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(() => browser.get(URL));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should work with synchronous actions', () => {
							 | 
						||
| 
								 | 
							
								    var increment = $('#increment');
							 | 
						||
| 
								 | 
							
								    increment.$('.action').click();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    expect(increment.$('.val').getText()).toEqual('1');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should wait for asynchronous actions', () => {
							 | 
						||
| 
								 | 
							
								    var timeout = $('#delayedIncrement');
							 | 
						||
| 
								 | 
							
								    timeout.$('.action').click();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // At this point, the async action is still pending, so the count should
							 | 
						||
| 
								 | 
							
								    // still be 0.
							 | 
						||
| 
								 | 
							
								    expect(timeout.$('.val').getText()).toEqual('0');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    whenStable('async-app')
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          // whenStable should only be called when the async action finished,
							 | 
						||
| 
								 | 
							
								          // so the count should be 1 at this point.
							 | 
						||
| 
								 | 
							
								          expect(timeout.$('.val').getText()).toEqual('1');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should notice when asynchronous actions are cancelled', () => {
							 | 
						||
| 
								 | 
							
								    var timeout = $('#delayedIncrement');
							 | 
						||
| 
								 | 
							
								    timeout.$('.action').click();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // At this point, the async action is still pending, so the count should
							 | 
						||
| 
								 | 
							
								    // still be 0.
							 | 
						||
| 
								 | 
							
								    expect(timeout.$('.val').getText()).toEqual('0');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    timeout.$('.cancel').click();
							 | 
						||
| 
								 | 
							
								    whenStable('async-app')
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          // whenStable should be called since the async action is cancelled. The
							 | 
						||
| 
								 | 
							
								          // count should still be 0;
							 | 
						||
| 
								 | 
							
								          expect(timeout.$('.val').getText()).toEqual('0');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should wait for a series of asynchronous actions', () => {
							 | 
						||
| 
								 | 
							
								    var timeout = $('#multiDelayedIncrements');
							 | 
						||
| 
								 | 
							
								    timeout.$('.action').click();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // At this point, the async action is still pending, so the count should
							 | 
						||
| 
								 | 
							
								    // still be 0.
							 | 
						||
| 
								 | 
							
								    expect(timeout.$('.val').getText()).toEqual('0');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    whenStable('async-app')
							 | 
						||
| 
								 | 
							
								        .then(() => {
							 | 
						||
| 
								 | 
							
								          // whenStable should only be called when all the async actions
							 | 
						||
| 
								 | 
							
								          // finished, so the count should be 10 at this point.
							 | 
						||
| 
								 | 
							
								          expect(timeout.$('.val').getText()).toEqual('10');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  afterEach(verifyNoBrowserErrors);
							 | 
						||
| 
								 | 
							
								});
							 |