From 0d950d41b5d54251aca1fd3b2f0c68a26b07d9fd Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 6 Mar 2025 22:09:56 +0800 Subject: [PATCH] wip: save --- .../__tests__/transition.spec.ts | 83 +++++++++++++++---- .../vapor-e2e-test/transition/App.vue | 10 ++- .../src/transforms/transformElement.ts | 4 +- .../src/components/Transition.ts | 1 + 4 files changed, 78 insertions(+), 20 deletions(-) diff --git a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts index 44065e6c4b..d7d35f836f 100644 --- a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts +++ b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts @@ -49,7 +49,11 @@ describe('vapor transition', () => { ([btnSel, containerSel]) => { ;(document.querySelector(btnSel) as HTMLElement)!.click() return Promise.resolve().then(() => { - return document.querySelector(containerSel)!.className.split(/\s+/g) + const container = document.querySelector(containerSel)! + return { + classNames: container.className.split(/\s+/g), + innerHTML: container.innerHTML, + } }) }, [btnSelector, containerSelector], @@ -66,7 +70,8 @@ describe('vapor transition', () => { // leave expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -80,7 +85,8 @@ describe('vapor transition', () => { // enter expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-enter-from', 'v-enter-active']) await nextFrame() @@ -102,16 +108,14 @@ describe('vapor transition', () => { const containerSelector = '.vif > h1' // appear - expect(await classList(containerSelector)).toStrictEqual([ - 'v-enter-from', - 'v-enter-active', - ]) + expect(await classList(containerSelector)).contains('v-enter-active') expect(await text(containerSelector)).toContain('vIf') await transitionFinish() // leave expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -125,7 +129,8 @@ describe('vapor transition', () => { // enter expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-enter-from', 'v-enter-active']) await nextFrame() @@ -150,7 +155,8 @@ describe('vapor transition', () => { // change key expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -164,7 +170,8 @@ describe('vapor transition', () => { // change key again expect( - await classWhenTransitionStart(btnSelector, containerSelector), + (await classWhenTransitionStart(btnSelector, containerSelector)) + .classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -188,10 +195,10 @@ describe('vapor transition', () => { expect(await html(containerSelector)).toBe(`
vapor compB
`) // compB -> compA - await click(btnSelector) - expect(await html(containerSelector)).toBe( - `
vapor compB
`, - ) + expect( + (await classWhenTransitionStart(btnSelector, containerSelector)) + .innerHTML, + ).toBe(`
vapor compB
`) await nextFrame() expect(await html(containerSelector)).toBe( @@ -241,7 +248,51 @@ describe('vapor transition', () => { E2E_TIMEOUT, ) - test.todo('should work with in-out mode', async () => {}, E2E_TIMEOUT) + test.todo( + 'should work with in-out mode', + async () => { + const btnSelector = '.in-out > button' + const containerSelector = '.in-out > div' + + expect(await html(containerSelector)).toBe(`
vapor compB
`) + + // compA enter + const { innerHTML } = await classWhenTransitionStart( + btnSelector, + containerSelector, + ) + expect(innerHTML).toBe( + `
vapor compB
vapor compA
`, + ) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compB
vapor compA
`, + ) + + await transitionFinish() + expect(await html(containerSelector)).toBe( + `
vapor compB
vapor compA
`, + ) + + // compB leave + expect(await html(containerSelector)).toBe( + `
vapor compB
vapor compA
`, + ) + + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compB
vapor compA
`, + ) + + await transitionFinish() + await nextFrame() + expect(await html(containerSelector)).toBe( + `
vapor compA
`, + ) + }, + E2E_TIMEOUT, + ) test.todo('transition hooks', async () => {}, E2E_TIMEOUT) diff --git a/packages-private/vapor-e2e-test/transition/App.vue b/packages-private/vapor-e2e-test/transition/App.vue index 008506800e..3166f274d1 100644 --- a/packages-private/vapor-e2e-test/transition/App.vue +++ b/packages-private/vapor-e2e-test/transition/App.vue @@ -33,13 +33,21 @@ function toggleComponent() {
- +
+
+ +
+ + + +
+