109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| import {AnimationBuilder, animate, style} from '@angular/animations';
 | |
| import {AnimationDriver} from '@angular/animations/browser';
 | |
| import {MockAnimationDriver} from '@angular/animations/browser/testing';
 | |
| import {Component, ViewChild} from '@angular/core';
 | |
| import {TestBed, fakeAsync, flushMicrotasks} from '@angular/core/testing';
 | |
| import {NoopAnimationsModule} from '@angular/platform-browser/animations';
 | |
| 
 | |
| import {BrowserAnimationBuilder} from '../../animations/src/animation_builder';
 | |
| import {el} from '../../testing/src/browser_util';
 | |
| 
 | |
| export function main() {
 | |
|   describe('BrowserAnimationBuilder', () => {
 | |
|     let element: any;
 | |
|     beforeEach(() => {
 | |
|       element = el('<div></div>');
 | |
| 
 | |
|       TestBed.configureTestingModule({
 | |
|         imports: [NoopAnimationsModule],
 | |
|         providers: [{provide: AnimationDriver, useClass: MockAnimationDriver}]
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('should inject AnimationBuilder into a component', () => {
 | |
|       @Component({
 | |
|         selector: 'ani-cmp',
 | |
|         template: '...',
 | |
|       })
 | |
|       class Cmp {
 | |
|         constructor(public builder: AnimationBuilder) {}
 | |
|       }
 | |
| 
 | |
|       TestBed.configureTestingModule({declarations: [Cmp]});
 | |
| 
 | |
|       const fixture = TestBed.createComponent(Cmp);
 | |
|       const cmp = fixture.componentInstance;
 | |
| 
 | |
|       fixture.detectChanges();
 | |
|       expect(cmp.builder instanceof BrowserAnimationBuilder).toBeTruthy();
 | |
|     });
 | |
| 
 | |
|     it('should listen on start and done on the animation builder\'s player', fakeAsync(() => {
 | |
|          @Component({
 | |
|            selector: 'ani-cmp',
 | |
|            template: '...',
 | |
|          })
 | |
|          class Cmp {
 | |
|            @ViewChild('target') public target: any;
 | |
| 
 | |
|            constructor(public builder: AnimationBuilder) {}
 | |
| 
 | |
|            build() {
 | |
|              const definition =
 | |
|                  this.builder.build([style({opacity: 0}), animate(1000, style({opacity: 1}))]);
 | |
| 
 | |
|              return definition.create(this.target);
 | |
|            }
 | |
|          }
 | |
| 
 | |
|          TestBed.configureTestingModule({declarations: [Cmp]});
 | |
| 
 | |
|          const fixture = TestBed.createComponent(Cmp);
 | |
|          const cmp = fixture.componentInstance;
 | |
|          fixture.detectChanges();
 | |
| 
 | |
|          const player = cmp.build();
 | |
| 
 | |
|          let started = false;
 | |
|          player.onStart(() => started = true);
 | |
| 
 | |
|          let finished = false;
 | |
|          player.onDone(() => finished = true);
 | |
| 
 | |
|          let destroyed = false;
 | |
|          player.onDestroy(() => destroyed = true);
 | |
| 
 | |
|          player.init();
 | |
|          flushMicrotasks();
 | |
|          expect(started).toBeFalsy();
 | |
|          expect(finished).toBeFalsy();
 | |
|          expect(destroyed).toBeFalsy();
 | |
| 
 | |
|          player.play();
 | |
|          flushMicrotasks();
 | |
|          expect(started).toBeTruthy();
 | |
|          expect(finished).toBeFalsy();
 | |
|          expect(destroyed).toBeFalsy();
 | |
| 
 | |
|          player.finish();
 | |
|          flushMicrotasks();
 | |
|          expect(started).toBeTruthy();
 | |
|          expect(finished).toBeTruthy();
 | |
|          expect(destroyed).toBeFalsy();
 | |
| 
 | |
|          player.destroy();
 | |
|          flushMicrotasks();
 | |
|          expect(started).toBeTruthy();
 | |
|          expect(finished).toBeTruthy();
 | |
|          expect(destroyed).toBeTruthy();
 | |
|        }));
 | |
|   });
 | |
| }
 |