| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | import Vue from 'vue' | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  | import injectStyles from './inject-styles' | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | import { isIE9 } from 'web/util/index' | 
					
						
							|  |  |  | import { nextFrame } from 'web/runtime/modules/transition' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!isIE9) { | 
					
						
							|  |  |  |   describe('Transition system', () => { | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |     const duration = injectStyles() | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let el | 
					
						
							|  |  |  |     beforeEach(() => { | 
					
						
							|  |  |  |       el = document.createElement('div') | 
					
						
							|  |  |  |       document.body.appendChild(el) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |     it('basic transition', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition>foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test v-leave v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test v-enter v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('named transition', done => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('custom transition classes', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             enterClass: 'hello', | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |             enterActiveClass: 'hello-active', | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |             leaveClass: 'bye', | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |             leaveActiveClass: 'byebye active' // testing multi classes
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test bye byebye active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test byebye active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test hello hello-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test hello-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('dynamic transition', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" :transition="trans">foo</div></div>', | 
					
						
							|  |  |  |         data: { | 
					
						
							|  |  |  |           ok: true, | 
					
						
							|  |  |  |           trans: 'test' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |         vm.trans = 'changed' | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test changed-enter changed-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test changed-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('inline transition object', done => { | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |       const enter = jasmine.createSpy('enter') | 
					
						
							|  |  |  |       const leave = jasmine.createSpy('leave') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: `<div><div v-if="ok" class="test" :transition="{
 | 
					
						
							| 
									
										
										
										
											2016-06-04 03:18:23 +08:00
										 |  |  |           name: 'inline', | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |           enterClass: 'hello', | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |           enterActiveClass: 'hello-active', | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |           leaveClass: 'bye', | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |           leaveActiveClass: 'byebye active' | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         }">foo</div></div>`, | 
					
						
							| 
									
										
										
										
											2016-06-04 03:18:23 +08:00
										 |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           inline: { | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             enter, | 
					
						
							|  |  |  |             leave | 
					
						
							| 
									
										
										
										
											2016-06-04 03:18:23 +08:00
										 |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test bye byebye active') | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |         expect(leave).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test byebye active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test hello hello-active') | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |         expect(enter).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test hello-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('transition with JavaScript hooks', done => { | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |       const onLeaveSpy = jasmine.createSpy('leave') | 
					
						
							|  |  |  |       const onEnterSpy = jasmine.createSpy('enter') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       const beforeLeaveSpy = jasmine.createSpy('beforeLeave') | 
					
						
							|  |  |  |       const beforeEnterSpy = jasmine.createSpy('beforeEnter') | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |       const afterLeaveSpy = jasmine.createSpy('afterLeave') | 
					
						
							|  |  |  |       const afterEnterSpy = jasmine.createSpy('afterEnter') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |           test: { | 
					
						
							|  |  |  |             beforeLeave: (el, vm) => { | 
					
						
							|  |  |  |               expect(el).toBe(vm.$el.children[0]) | 
					
						
							|  |  |  |               expect(el.className).toBe('test') | 
					
						
							|  |  |  |               beforeLeaveSpy(el, vm) | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             leave: (el, vm) => onLeaveSpy(el, vm), | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |             afterLeave: (el, vm) => afterLeaveSpy(el, vm), | 
					
						
							|  |  |  |             beforeEnter: (el, vm) => { | 
					
						
							|  |  |  |               expect(vm.$el.contains(el)).toBe(false) | 
					
						
							|  |  |  |               expect(el.className).toBe('test') | 
					
						
							|  |  |  |               beforeEnterSpy(el, vm) | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             enter: (el, vm) => onEnterSpy(el, vm), | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |             afterEnter: (el, vm) => afterEnterSpy(el, vm) | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       let _el = vm.$el.children[0] | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         expect(beforeLeaveSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							|  |  |  |         expect(onLeaveSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         expect(afterLeaveSpy).not.toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         expect(afterLeaveSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         _el = vm.$el.children[0] | 
					
						
							|  |  |  |         expect(beforeEnterSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							|  |  |  |         expect(onEnterSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         expect(afterEnterSpy).not.toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-28 03:11:40 +08:00
										 |  |  |         expect(afterEnterSpy).toHaveBeenCalledWith(_el, vm) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |     it('explicit user callback in JavaScript hooks', done => { | 
					
						
							|  |  |  |       let next | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             enter: (el, vm, cb) => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |               next = cb | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             leave: (el, vm, cb) => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |               next = cb | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							|  |  |  |         expect(next).toBeTruthy() | 
					
						
							|  |  |  |         next() | 
					
						
							|  |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							|  |  |  |         expect(next).toBeTruthy() | 
					
						
							|  |  |  |         next() | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('css: false', done => { | 
					
						
							|  |  |  |       const enterSpy = jasmine.createSpy('enter') | 
					
						
							|  |  |  |       const leaveSpy = jasmine.createSpy('leave') | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             css: false, | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             enter: enterSpy, | 
					
						
							|  |  |  |             leave: leaveSpy | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							|  |  |  |         expect(leaveSpy).toHaveBeenCalled() | 
					
						
							|  |  |  |         expect(vm.$el.innerHTML).toBe('') | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         expect(enterSpy).toHaveBeenCalled() | 
					
						
							|  |  |  |         expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |     it('no transition detected', done => { | 
					
						
							|  |  |  |       const enterSpy = jasmine.createSpy('enter') | 
					
						
							|  |  |  |       const leaveSpy = jasmine.createSpy('leave') | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" transition="nope">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           nope: { | 
					
						
							| 
									
										
										
										
											2016-06-30 09:37:31 +08:00
										 |  |  |             enter: enterSpy, | 
					
						
							|  |  |  |             leave: leaveSpy | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							|  |  |  |         expect(leaveSpy).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.innerHTML).toBe('<div class="nope-leave nope-leave-active">foo</div>') | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.innerHTML).toBe('') | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         expect(enterSpy).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.innerHTML).toBe('<div class="nope-enter nope-enter-active">foo</div>') | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.innerHTML).toMatch(/<div( class="")?>foo<\/div>/) | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |     it('enterCancelled', done => { | 
					
						
							|  |  |  |       const spy = jasmine.createSpy('enterCancelled') | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: false }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             enterCancelled: spy | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('') | 
					
						
							|  |  |  |       vm.ok = true | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration / 2).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         vm.ok = false | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         expect(spy).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |     it('transition with v-show', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-show="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.textContent).toBe('foo') | 
					
						
							|  |  |  |       expect(vm.$el.children[0].style.display).toBe('') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         expect(vm.$el.children[0].style.display).toBe('none') | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].style.display).toBe('') | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |     it('leaveCancelled (v-show only)', done => { | 
					
						
							|  |  |  |       const spy = jasmine.createSpy('leaveCancelled') | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-show="ok" class="test" transition="test">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             leaveCancelled: spy | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       expect(vm.$el.children[0].style.display).toBe('') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-14 05:51:22 +08:00
										 |  |  |       }).thenWaitFor(10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							|  |  |  |         expect(spy).toHaveBeenCalled() | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |         expect(vm.$el.children[0].style.display).toBe('') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('animations', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><div v-if="ok" class="test" transition="test-anim">foo</div></div>', | 
					
						
							|  |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-anim-leave test-anim-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-anim-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-anim-enter test-anim-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-anim-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-27 08:03:39 +08:00
										 |  |  |     it('transition on appear (inline)', done => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       const vm = new Vue({ | 
					
						
							| 
									
										
										
										
											2016-06-03 10:29:54 +08:00
										 |  |  |         template: `
 | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <div v-if="ok" | 
					
						
							|  |  |  |               class="test" | 
					
						
							|  |  |  |               :transition="{ | 
					
						
							|  |  |  |                 name:'test', | 
					
						
							|  |  |  |                 appear:true, | 
					
						
							|  |  |  |                 appearClass: 'test-appear', | 
					
						
							|  |  |  |                 appearActiveClass: 'test-appear-active' | 
					
						
							|  |  |  |               }">foo</div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         `,
 | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-27 08:03:39 +08:00
										 |  |  |       waitForUpdate(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-appear test-appear-active') | 
					
						
							|  |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test test-appear-active') | 
					
						
							|  |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('transition on appear (resolved)', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: `
 | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <div v-if="ok" | 
					
						
							|  |  |  |               class="test" | 
					
						
							|  |  |  |               transition="test">foo</div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         `,
 | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         transitions: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             appear: true, | 
					
						
							|  |  |  |             appearClass: 'test-appear', | 
					
						
							|  |  |  |             appearActiveClass: 'test-appear-active' | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-appear test-appear-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-03 06:18:45 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-appear-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 23:17:37 +08:00
										 |  |  |     it('transition on appear with v-show', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							| 
									
										
										
										
											2016-06-03 10:29:54 +08:00
										 |  |  |         template: `
 | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <div v-show="ok" | 
					
						
							|  |  |  |               class="test" | 
					
						
							|  |  |  |               :transition="{name:'test',appear:true}">foo</div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         `,
 | 
					
						
							| 
									
										
										
										
											2016-06-01 23:17:37 +08:00
										 |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 23:17:37 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-03 10:29:54 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test test-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 23:17:37 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |     it('transition on SVG elements', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<svg><circle cx="0" cy="0" r="10" v-if="ok" class="test" transition></circle></svg>', | 
					
						
							|  |  |  |         data: { ok: true } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test v-leave v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.childNodes.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test v-enter v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-01 09:42:33 +08:00
										 |  |  |         expect(vm.$el.childNodes[0].getAttribute('class')).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:55:13 +08:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it('transition on child components', done => { | 
					
						
							|  |  |  |       const vm = new Vue({ | 
					
						
							|  |  |  |         template: '<div><test v-if="ok" class="test" transition></test></div>', | 
					
						
							|  |  |  |         data: { ok: true }, | 
					
						
							|  |  |  |         components: { | 
					
						
							|  |  |  |           test: { | 
					
						
							|  |  |  |             template: '<div transition="test">foo</div>' // test transition override from parent
 | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }).$mount(el) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // should not apply transition on initial render by default
 | 
					
						
							|  |  |  |       expect(vm.$el.innerHTML).toBe('<div class="test">foo</div>') | 
					
						
							|  |  |  |       vm.ok = false | 
					
						
							|  |  |  |       waitForUpdate(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test v-leave v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test v-leave-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |         expect(vm.$el.children.length).toBe(0) | 
					
						
							|  |  |  |         vm.ok = true | 
					
						
							|  |  |  |       }).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-23 10:01:11 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test v-enter v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |       }).thenWaitFor(nextFrame).then(() => { | 
					
						
							|  |  |  |         expect(vm.$el.children[0].className).toBe('test v-enter-active') | 
					
						
							| 
									
										
										
										
											2016-06-06 03:26:45 +08:00
										 |  |  |       }).thenWaitFor(duration + 10).then(() => { | 
					
						
							| 
									
										
										
										
											2016-06-02 05:15:25 +08:00
										 |  |  |         expect(vm.$el.children[0].className).toBe('test') | 
					
						
							|  |  |  |       }).then(done) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2016-06-01 08:36:06 +08:00
										 |  |  |   }) | 
					
						
							|  |  |  | } |