79 lines
2.7 KiB
TypeScript
79 lines
2.7 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 {DOMAnimation} from '../../src/render/web_animations/dom_animation';
|
|
import {WebAnimationsPlayer} from '../../src/render/web_animations/web_animations_player';
|
|
|
|
export function main() {
|
|
describe('WebAnimationsPlayer', function() {
|
|
// these tests are only mean't to be run within the DOM
|
|
if (typeof Element == 'undefined') return;
|
|
|
|
let element: any;
|
|
beforeEach(() => {
|
|
element = document.createElement('div');
|
|
document.body.appendChild(element);
|
|
});
|
|
|
|
afterEach(() => { document.body.removeChild(element); });
|
|
|
|
it('should properly balance any previous player styles into the animation keyframes', () => {
|
|
element.style.height = '666px';
|
|
element.style.width = '333px';
|
|
|
|
const prevPlayer1 = new MockWebAnimationsPlayer(
|
|
element, [{width: '0px', offset: 0}, {width: '200px', offset: 1}], {});
|
|
prevPlayer1.play();
|
|
prevPlayer1.finish();
|
|
|
|
const prevPlayer2 = new MockWebAnimationsPlayer(
|
|
element, [{height: '0px', offset: 0}, {height: '200px', offset: 1}], {});
|
|
prevPlayer2.play();
|
|
prevPlayer2.finish();
|
|
|
|
// what needs to happen here is the player below should
|
|
// examine which styles are present in the provided previous
|
|
// players and use them as input data for the keyframes of
|
|
// the new player. Given that the players are in their finished
|
|
// state, the styles are copied over as the starting keyframe
|
|
// for the animation and if the styles are missing in later keyframes
|
|
// then the styling is resolved by computing the styles
|
|
const player = new MockWebAnimationsPlayer(
|
|
element, [{width: '100px', offset: 0}, {width: '500px', offset: 1}], {},
|
|
[prevPlayer1, prevPlayer2]);
|
|
|
|
player.init();
|
|
expect(player.capturedKeyframes).toEqual([
|
|
{height: '200px', width: '200px', offset: 0},
|
|
{height: '666px', width: '500px', offset: 1}
|
|
]);
|
|
});
|
|
});
|
|
}
|
|
|
|
class MockWebAnimationsPlayer extends WebAnimationsPlayer {
|
|
capturedKeyframes: any[];
|
|
|
|
_triggerWebAnimation(element: any, keyframes: any[], options: any): any {
|
|
this.capturedKeyframes = keyframes;
|
|
return new MockDOMAnimation();
|
|
}
|
|
}
|
|
|
|
class MockDOMAnimation implements DOMAnimation {
|
|
onfinish = (callback: (e: any) => any) => {};
|
|
position = 0;
|
|
currentTime = 0;
|
|
|
|
cancel(): void {}
|
|
play(): void {}
|
|
pause(): void {}
|
|
finish(): void {}
|
|
addEventListener(eventName: string, handler: (event: any) => any): any { return null; }
|
|
dispatchEvent(eventName: string): any { return null; }
|
|
}
|