diff --git a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts index e532e5eed..6afc39a36 100644 --- a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts +++ b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts @@ -55,11 +55,11 @@ describe('vapor transition', () => { ) => page().waitForFunction( (sel, expectedText, expectedClasses) => { - const el = document.querySelector(sel)! + const el = document.querySelector(sel) const hasClasses = expectedClasses.length === 0 - ? el.classList.length === 0 - : expectedClasses.every(c => el.classList.contains(c)) + ? el?.classList.length === 0 + : expectedClasses.every(c => el?.classList.contains(c)) const hasText = el?.textContent?.includes(expectedText) return !!el && hasClasses && hasText }, @@ -120,9 +120,9 @@ describe('vapor transition', () => { expect(await classList(containerSelector)).contains('v-enter-active') expect(await text(containerSelector)).toContain('vIf') await transitionFinish() - await nextFrame() // leave + await nextFrame() expect( (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) @@ -134,7 +134,6 @@ describe('vapor transition', () => { ]) await transitionFinish() - await nextFrame() expect(await count(containerSelector)).toBe(0) // enter @@ -151,6 +150,22 @@ describe('vapor transition', () => { await transitionFinish() await nextFrame() expect(await isVisible(containerSelector)).toBe(true) + + const calls = await page().evaluate(() => { + return (window as any).calls + }) + + expect(calls).toStrictEqual([ + 'beforeAppear', + 'onEnter', + 'afterAppear', + 'beforeLeave', + 'onLeave', + 'afterLeave', + 'beforeEnter', + 'onEnter', + 'afterEnter', + ]) }, E2E_TIMEOUT, ) @@ -303,14 +318,182 @@ describe('vapor transition', () => { E2E_TIMEOUT, ) - test.todo('transition hooks', async () => {}, E2E_TIMEOUT) - + // tests for using vdom component in createVaporApp + vaporInteropPlugin describe('interop', () => { - test.todo('interop: render vdom component', async () => {}, E2E_TIMEOUT) + test( + 'render vdom component', + async () => { + const btnSelector = '.vdom > button' + const containerSelector = '.vdom > div' - test.todo( - 'interop: switch between vdom/vapor component', - async () => {}, + expect(await html(containerSelector)).toBe(`
vdom comp
`) + + // comp leave + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe(`
vdom comp
`) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe(``) + + // comp enter + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe(`
vdom comp
`) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + }, + E2E_TIMEOUT, + ) + + test( + 'switch between vdom/vapor component (out-in mode)', + async () => { + const btnSelector = '.vdom-vapor-out-in > button' + const containerSelector = '.vdom-vapor-out-in > div' + const childSelector = `${containerSelector} > div` + + expect(await html(containerSelector)).toBe(`
vdom comp
`) + + // switch to vapor comp + // vdom comp leave + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe(`
vdom comp
`) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + + // vapor comp enter + await waitForElement(childSelector, 'vapor compA', [ + 'fade-enter-from', + 'fade-enter-active', + ]) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compA
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vapor compA
`, + ) + + // switch to vdom comp + // vapor comp leave + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe( + `
vapor compA
`, + ) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compA
`, + ) + + // vdom comp enter + await waitForElement(childSelector, 'vdom comp', [ + 'fade-enter-from', + 'fade-enter-active', + ]) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + }, + E2E_TIMEOUT, + ) + + test( + 'switch between vdom/vapor component (in-out mode)', + async () => { + const btnSelector = '.vdom-vapor-in-out > button' + const containerSelector = '.vdom-vapor-in-out > div' + const childSelector = `${containerSelector} > div` + + expect(await html(containerSelector)).toBe(`
vapor compA
`) + + // switch to vdom comp + // vdom comp enter + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe( + `
vapor compA
vdom comp
`, + ) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compA
vdom comp
`, + ) + + // vapor comp leave + await waitForElement(childSelector, 'vapor compA', [ + 'fade-leave-from', + 'fade-leave-active', + ]) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compA
vdom comp
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vdom comp
`, + ) + + // switch to vapor comp + // vapor comp enter + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe( + `
vdom comp
vapor compA
`, + ) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
vapor compA
`, + ) + + // vdom comp leave + await waitForElement(childSelector, 'vdom comp', [ + 'fade-leave-from', + 'fade-leave-active', + ]) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vdom comp
vapor compA
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vapor compA
`, + ) + }, E2E_TIMEOUT, ) }) diff --git a/packages-private/vapor-e2e-test/transition/App.vue b/packages-private/vapor-e2e-test/transition/App.vue index 8d4d31f7b..83061a603 100644 --- a/packages-private/vapor-e2e-test/transition/App.vue +++ b/packages-private/vapor-e2e-test/transition/App.vue @@ -4,6 +4,9 @@ const show = ref(true) const toggle = ref(true) const count = ref(0) +const calls = [] +window.calls = calls + import VaporCompA from './components/VaporCompA.vue' import VaporCompB from './components/VaporCompB.vue' const activeComponent = shallowRef(VaporCompB) @@ -11,6 +14,15 @@ function toggleComponent() { activeComponent.value = activeComponent.value === VaporCompA ? VaporCompB : VaporCompA } + +const toggleVdom = ref(true) +import VDomComp from './components/VdomComp.vue' + +const interopComponent = shallowRef(VDomComp) +function toggleInteropComponent() { + interopComponent.value = + interopComponent.value === VaporCompA ? VDomComp : VaporCompA +}