From b1b11c7de21f4c1fa452d0c313468f3b77a9e5df Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 13 Mar 2025 14:51:52 +0800 Subject: [PATCH] wip: port tests and fix bugs --- .../__tests__/transition.spec.ts | 51 ++++++- .../vapor-e2e-test/transition/App.vue | 139 +++++++++++++----- .../src/components/Transition.ts | 46 +++--- 3 files changed, 182 insertions(+), 54 deletions(-) diff --git a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts index e7590ef4cd..52b3bb9504 100644 --- a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts +++ b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts @@ -349,8 +349,55 @@ describe('vapor transition', () => { E2E_TIMEOUT, ) - test.todo('onEnterCancelled', async () => {}, E2E_TIMEOUT) - test.todo('transition on appear', async () => {}, E2E_TIMEOUT) + test( + 'onEnterCancelled', + async () => { + const btnSelector = '.if-enter-cancelled > button' + const containerSelector = '.if-enter-cancelled > div' + const childSelector = `${containerSelector} > div` + + expect(await html(containerSelector)).toBe('') + + // enter + expect( + (await transitionStart(btnSelector, childSelector)).classNames, + ).toStrictEqual(['test', 'test-enter-from', 'test-enter-active']) + await nextFrame() + expect(await classList(childSelector)).toStrictEqual([ + 'test', + 'test-enter-active', + 'test-enter-to', + ]) + + // cancel (leave) + expect( + (await transitionStart(btnSelector, childSelector)).classNames, + ).toStrictEqual(['test', 'test-leave-from', 'test-leave-active']) + let calls = await page().evaluate(() => { + return (window as any).getCalls('enterCancel') + }) + expect(calls).toStrictEqual(['enterCancelled']) + await nextFrame() + expect(await classList(childSelector)).toStrictEqual([ + 'test', + 'test-leave-active', + 'test-leave-to', + ]) + await transitionFinish() + expect(await html(containerSelector)).toBe('') + }, + E2E_TIMEOUT, + ) + + test.todo( + 'transition on appear', + async () => { + const btnSelector = '.if-appear > button' + const containerSelector = '.if-appear > div' + const childSelector = `${containerSelector} > div` + }, + E2E_TIMEOUT, + ) test.todo('transition events with appear', async () => {}, E2E_TIMEOUT) test.todo('no transition detected', async () => {}, E2E_TIMEOUT) test.todo('animations', async () => {}, E2E_TIMEOUT) diff --git a/packages-private/vapor-e2e-test/transition/App.vue b/packages-private/vapor-e2e-test/transition/App.vue index 19b2c97a21..1ccc6a452b 100644 --- a/packages-private/vapor-e2e-test/transition/App.vue +++ b/packages-private/vapor-e2e-test/transition/App.vue @@ -4,13 +4,16 @@ const show = ref(true) const toggle = ref(true) const count = ref(0) +const timeout = (fn, time) => setTimeout(fn, time) + let calls = { basic: [], withOutAppear: [], - withArgs: [] + withArgs: [], + enterCancel: [], } -window.getCalls = (key) => calls[key] -window.resetCalls = (key) => calls[key] = [] +window.getCalls = key => calls[key] +window.resetCalls = key => (calls[key] = []) import VaporCompA from './components/VaporCompA.vue' import VaporCompB from './components/VaporCompB.vue' @@ -52,8 +55,14 @@ const name = ref('test')
- +
content
@@ -70,10 +79,15 @@ const name = ref('test')
- + @leave="() => calls.withOutAppear.push('onLeave')" + @afterLeave="() => calls.withOutAppear.push('afterLeave')" + >
content
@@ -81,31 +95,81 @@ const name = ref('test')
- +
content
+
+
+ +
content
+
+
+ +
+
+
+ +
content
+
+
+ +
@@ -115,11 +179,18 @@ const name = ref('test')
- +

vIf

@@ -182,7 +253,7 @@ const name = ref('test') }