mirror of
				https://github.com/NativeScript/NativeScript.git
				synced 2025-11-04 12:58:38 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { GestureTypes } from '../gestures';
 | 
						|
import { SharedTransition, SharedTransitionAnimationType } from './shared-transition';
 | 
						|
 | 
						|
describe('SharedTransition', () => {
 | 
						|
	it('custom should create a Transition instance', () => {
 | 
						|
		const transition = SharedTransition.custom(new CustomTransition());
 | 
						|
		expect(transition.instance.id).toBe(1);
 | 
						|
	});
 | 
						|
	it('custom should create a Transition with default state and options', () => {
 | 
						|
		const transition = SharedTransition.custom(new CustomTransition());
 | 
						|
		const state = SharedTransition.getState(transition.instance.id);
 | 
						|
		expect(state.activeType).toBe(SharedTransitionAnimationType.present);
 | 
						|
		expect(state.pageStart).toBeUndefined();
 | 
						|
		expect(state.pageEnd).toBeUndefined();
 | 
						|
		expect(state.pageReturn).toBeUndefined();
 | 
						|
		expect(state.interactive).toBeUndefined();
 | 
						|
	});
 | 
						|
	it('custom should create a Transition with custom options', () => {
 | 
						|
		const transition = SharedTransition.custom(new CustomTransition(), {
 | 
						|
			interactive: {
 | 
						|
				dismiss: {
 | 
						|
					finishThreshold: 0.6,
 | 
						|
					percentFormula: (args) => {
 | 
						|
						return args.deltaX - 0.2;
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			pageStart: {
 | 
						|
				x: 200,
 | 
						|
				y: 100,
 | 
						|
				spring: {
 | 
						|
					friction: 40,
 | 
						|
				},
 | 
						|
			},
 | 
						|
			pageEnd: {
 | 
						|
				x: 0,
 | 
						|
				y: 0,
 | 
						|
			},
 | 
						|
			pageReturn: {
 | 
						|
				x: -200,
 | 
						|
				y: -100,
 | 
						|
				width: 25,
 | 
						|
			},
 | 
						|
		});
 | 
						|
		const state = SharedTransition.getState(transition.instance.id);
 | 
						|
		expect(state.activeType).toBe(SharedTransitionAnimationType.present);
 | 
						|
		expect(state.interactive.dismiss.finishThreshold).toBe(0.6);
 | 
						|
		expect(state.interactive.dismiss.percentFormula({ deltaX: 0.9, deltaY: 0, state: 0, android: null, eventName: 'pan', ios: null, object: null, type: GestureTypes.pan, view: null })).toBe(0.7);
 | 
						|
		expect(state.pageStart.x).toBe(200);
 | 
						|
		expect(state.pageStart.y).toBe(100);
 | 
						|
		expect(state.pageStart.spring.friction).toBe(40);
 | 
						|
		expect(state.pageEnd.x).toBe(0);
 | 
						|
		expect(state.pageEnd.y).toBe(0);
 | 
						|
		expect(state.pageReturn.x).toBe(-200);
 | 
						|
		expect(state.pageReturn.y).toBe(-100);
 | 
						|
		expect(state.pageReturn.width).toBe(25);
 | 
						|
	});
 | 
						|
});
 | 
						|
 | 
						|
class CustomTransition {
 | 
						|
	id: number;
 | 
						|
	constructor() {
 | 
						|
		this.id = 1;
 | 
						|
	}
 | 
						|
 | 
						|
	getDuration() {
 | 
						|
		return 0.35;
 | 
						|
	}
 | 
						|
 | 
						|
	setDuration(value: number) {}
 | 
						|
	getCurve() {}
 | 
						|
	animateIOSTransition() {}
 | 
						|
	createAndroidAnimator() {}
 | 
						|
}
 |