Skip to content

test vapor(DO NOT MERGE) #13383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 131 commits into
base: vapor
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
41822e3
feat(vapor): vapor transition
edison1105 Feb 27, 2025
7cee024
wip: handle mode
edison1105 Feb 27, 2025
a8140ac
refactor: reuse code from BaseTransition
edison1105 Feb 28, 2025
8957eaa
wip: handle in-out mode
edison1105 Feb 28, 2025
413651d
wip: save
edison1105 Mar 3, 2025
1e79054
wip: save
edison1105 Mar 3, 2025
75de3bb
wip: save
edison1105 Mar 4, 2025
3a31f08
wip: auto generate key for vif branch if it wraps in transition
edison1105 Mar 4, 2025
7e593c2
wip: handle built-in components
edison1105 Mar 4, 2025
11bcb21
wip: handle keyed element transition
edison1105 Mar 4, 2025
90dc4e2
wip: refactor
edison1105 Mar 5, 2025
3fcba1d
wip: improve types
edison1105 Mar 5, 2025
5dce316
wip: inject useVaporTransition call for treeshaking
edison1105 Mar 5, 2025
b92ea0a
wip: save
edison1105 Mar 5, 2025
e3f8ba4
wip: save
edison1105 Mar 5, 2025
14f102a
Merge branch 'vapor' into edison/feat/vaporTransition
edison1105 Mar 5, 2025
7c68b48
wip: vdom interop
edison1105 Mar 5, 2025
2e45f06
wip: refactor
edison1105 Mar 5, 2025
6b9e9ce
wip: refactor
edison1105 Mar 5, 2025
d0faf6c
wip: vdom interop
edison1105 Mar 5, 2025
31d9247
wip: vapor interop
edison1105 Mar 6, 2025
3cb3e1a
wip: revert some changes
edison1105 Mar 6, 2025
41c2589
wip: add tests
edison1105 Mar 6, 2025
b65db59
wip: add vapor transition e2e tests
edison1105 Mar 6, 2025
0f3dffc
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 6, 2025
205858e
wip: test
edison1105 Mar 6, 2025
0d950d4
wip: save
edison1105 Mar 6, 2025
299624d
wip: fix tests
edison1105 Mar 6, 2025
8879875
wip: fix tests
edison1105 Mar 6, 2025
6e7c5e3
wip: fix tests
edison1105 Mar 7, 2025
26d1d21
wip: add tests
edison1105 Mar 7, 2025
d5d8ada
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 7, 2025
d184928
wip: add interop tests
edison1105 Mar 7, 2025
915e205
wip: refactor
edison1105 Mar 7, 2025
9ffa5ac
wip: fix build-dts error
edison1105 Mar 7, 2025
05d9f53
wip: rename key to $key
edison1105 Mar 7, 2025
1511d6c
wip: add TransformTransition
edison1105 Mar 7, 2025
d9d0112
fix: vapor transition multiple chilren check
edison1105 Mar 8, 2025
7c9bd7c
Merge branch 'vapor' into edison/feat/vaporTransition
edison1105 Mar 8, 2025
5392c7a
chore: improve
edison1105 Mar 9, 2025
2e71c9e
feat(vapor): vapor TransitionGroup (#13019)
edison1105 Mar 11, 2025
dbecdf9
wip: save
edison1105 Mar 12, 2025
957aa09
chore: update
edison1105 Mar 12, 2025
4ad3ee9
chore: rename
edison1105 Mar 12, 2025
e7300a0
chore: update
edison1105 Mar 12, 2025
af2eb2d
wip: port tests and fix bugs
edison1105 Mar 12, 2025
1540002
wip: handle props update
edison1105 Mar 13, 2025
055ca98
test: add more tests
edison1105 Mar 13, 2025
b1b11c7
wip: port tests and fix bugs
edison1105 Mar 13, 2025
d147b1c
test: add more tests
edison1105 Mar 13, 2025
d5bd63a
test: add more tests
edison1105 Mar 13, 2025
c9ee8d1
wip: handle fallthrough attrs
edison1105 Mar 13, 2025
ecef92b
wip: handle fallthrough attrs
edison1105 Mar 13, 2025
bbe4452
wip: add more tests
edison1105 Mar 14, 2025
9ee219a
test: add more tests
edison1105 Mar 14, 2025
2caeecd
wip: work with v-show appear
edison1105 Mar 14, 2025
acd2af2
wip: refactor
edison1105 Mar 16, 2025
f0ebb0b
chore: update export
edison1105 Mar 17, 2025
c7bd982
refactor: add createElement helper
edison1105 Mar 17, 2025
7a4a4c0
wip: update
edison1105 Mar 17, 2025
e42ff1b
chore: update
edison1105 Mar 17, 2025
d8ccabe
chore: update
edison1105 Mar 19, 2025
9ab8e4c
chore: update lockfile
edison1105 Apr 1, 2025
53564e0
fix(runtime-vapor): use slot fallback on initial render
edison1105 Apr 2, 2025
cb8830f
chore: reset prevChildren after updated
edison1105 Apr 10, 2025
684e47c
fix(runtime-vapor): reset insertion state to avoid duplicate block in…
edison1105 Apr 18, 2025
619420c
chore: update
edison1105 Apr 21, 2025
e5dd701
feat(vapor/hydration): handle component with anchor insertion
edison1105 Apr 21, 2025
9c30fd4
wip: save
edison1105 Apr 22, 2025
d8443d3
wip: refactor
edison1105 Apr 22, 2025
3108d91
refactor: skip dynamic anchors and empty text nodes
edison1105 Apr 23, 2025
1248172
wip: save
edison1105 Apr 23, 2025
25b8fbe
refactor: add enableHydrationNodeLookup and disableHydrationNodeLooku…
edison1105 Apr 23, 2025
3e7f093
chore: dont process text/comment node as dynamic
edison1105 Apr 23, 2025
04eadd8
wip: refactor
edison1105 Apr 23, 2025
b5762b5
wip: add tests + skip fragment end anchor
edison1105 Apr 24, 2025
38d4889
wip: hydrate v-if
edison1105 Apr 24, 2025
e9c9e49
wip: refactor hydration for v-if
edison1105 Apr 24, 2025
612cde7
wip: test hydrate v-if in PROD
edison1105 Apr 25, 2025
4d8284b
test: update
edison1105 Apr 25, 2025
34b9a4b
wip: hydation for dynamic component
edison1105 Apr 25, 2025
aad75fd
wip: refactor
edison1105 Apr 25, 2025
e6e0160
wip: v-for hydration
edison1105 Apr 25, 2025
7a842ab
wip: refactor
edison1105 Apr 26, 2025
ca34d4a
wip: add more tests
edison1105 Apr 26, 2025
42a421a
wip: hydration for slots
edison1105 Apr 26, 2025
2f00264
fix(compiler-vapor): move `next`, `child` and `nthChild` before setI…
zhiyuanzmj Apr 27, 2025
700f49e
wip: hydration for slots
edison1105 Apr 27, 2025
e5399c3
wip: vdom interop
edison1105 Apr 28, 2025
4253b0c
wip: update
edison1105 Apr 28, 2025
d281d62
wip: vdom hydration interop
edison1105 Apr 29, 2025
ea34f2f
wip: vdom interop
edison1105 Apr 29, 2025
3e69504
fix(compiler-vapor): properly handle static ref in inline mode
edison1105 Apr 29, 2025
a9496de
test: more tests
edison1105 Apr 29, 2025
d776a26
chore: tweaks
edison1105 Apr 30, 2025
9477b91
fix(vapor): special handling vapor props in vdom interop
edison1105 May 26, 2025
ebd32e6
chore: Merge branch 'edison/fix/vdomInteropWithProps' into edison/tes…
edison1105 May 26, 2025
86a6604
wip: handling vapor props
edison1105 May 26, 2025
bd701f2
fix(vapor): ensure props are shallow reactive to prevent DEV warnings
edison1105 May 26, 2025
29b3133
Merge branch 'edison/vapor/vdomInteropProps' into edison/testVapor
edison1105 May 26, 2025
594ffae
wip: handling vapor props
edison1105 May 26, 2025
b0df00a
fix(runtime-vapor): should not warn invalid watch source when directl…
edison1105 May 26, 2025
d751b6c
Merge branch 'edison/vapor/vdomInteropProps' into edison/testVapor
edison1105 May 27, 2025
8a6382c
fix(compiler-vapor): properly locate last if node
edison1105 May 28, 2025
cbfc289
Merge branch 'edison/fix/slotAndIfError' into edison/testVapor
edison1105 May 28, 2025
584c04f
feat(compiler-vapor): resolve implicitly self-referencing component
edison1105 May 28, 2025
bc9ff3f
Merge branch 'edison/fix/resolveComponent' into edison/testVapor
edison1105 May 29, 2025
3a39bc8
chore: update
edison1105 May 29, 2025
dde7076
feat(compiler-vapor): add support for forwarded slots
edison1105 May 29, 2025
a952b03
test: add tests
edison1105 May 29, 2025
c23d635
chore: update
edison1105 May 30, 2025
3a3fcda
Merge branch 'edison/feat/fowardedSlots' into edison/testVapor
edison1105 May 30, 2025
187396d
Merge branch 'edison/fix/vaporRenderSlotfallback' into edison/testVapor
edison1105 May 30, 2025
3896780
fix(vdomInterop): handle forwarded vapor slots during render VDOM slot
edison1105 May 30, 2025
023b005
chore: update
edison1105 May 30, 2025
dcf927f
fix(vdomInterop): handle forwarded vapor slots during render VDOM slot
edison1105 May 30, 2025
8f29088
wip: refactor
edison1105 Jun 6, 2025
d0d5c3e
chore: Merge branch 'edison/feat/setScopeId' into edison/testVapor
edison1105 Jun 6, 2025
7cfec7f
wip: vdom slot interop
edison1105 Jun 11, 2025
f4f0388
wip: refactor tests
edison1105 Jun 12, 2025
6180b8a
chore: Merge branch 'edison/feat/fowardedSlots' into edison/testVapor
edison1105 Jun 12, 2025
954748b
chore: update
edison1105 Jun 12, 2025
8bd6fc4
test(compiler-vapor): add test for v-if + v-if / v-else[-if] scenario
edison1105 Jun 12, 2025
a4f716f
Merge branch 'edison/fix/slotAndIfError' into edison/testVapor
edison1105 Jun 12, 2025
a93b49c
fix(runtime-vapor): dynamic component attrs fallthrough
edison1105 Jun 12, 2025
e033870
chore: Merge branch 'edison/fix/dynamicComponentAttrsFallthrough' int…
edison1105 Jun 12, 2025
2f89d6e
chore: avoid empty class
edison1105 Jun 12, 2025
ba08c54
chore: Merge branch 'edison/feat/vaporTransition' into edison/testVapor
edison1105 Jun 16, 2025
829c816
chore: Merge branch 'edison/fix/resetInsertion' into edison/testVapor
edison1105 Jun 16, 2025
d6d3dd2
fix(runtime-vapor): dynamic component fallback rendering with inserti…
edison1105 Jun 18, 2025
d262438
chore: Merge branch 'edison/fix/dynamicComponentWithVHtml' into ediso…
edison1105 Jun 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
406 changes: 406 additions & 0 deletions packages-private/vapor-e2e-test/__tests__/transition-group.spec.ts

Large diffs are not rendered by default.

1,660 changes: 1,660 additions & 0 deletions packages-private/vapor-e2e-test/__tests__/transition.spec.ts

Large diffs are not rendered by default.

185 changes: 180 additions & 5 deletions packages-private/vapor-e2e-test/__tests__/vdomInterop.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,23 @@ import {
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
import connect from 'connect'
import sirv from 'sirv'
const {
page,
click,
text,
enterValue,
html,
transitionStart,
waitForElement,
nextFrame,
timeout,
} = setupPuppeteer()

describe('vdom / vapor interop', () => {
const { page, click, text, enterValue } = setupPuppeteer()
const duration = process.env.CI ? 200 : 50
const buffer = process.env.CI ? 50 : 20
const transitionFinish = (time = duration) => timeout(time + buffer)

describe('vdom / vapor interop', () => {
let server: any
const port = '8193'
beforeAll(() => {
Expand All @@ -22,12 +35,15 @@ describe('vdom / vapor interop', () => {
server.close()
})

beforeEach(async () => {
const baseUrl = `http://localhost:${port}/interop/`
await page().goto(baseUrl)
await page().waitForSelector('#app')
})

test(
'should work',
async () => {
const baseUrl = `http://localhost:${port}/interop/`
await page().goto(baseUrl)

expect(await text('.vapor > h2')).toContain('Vapor component in VDOM')

expect(await text('.vapor-prop')).toContain('hello')
Expand Down Expand Up @@ -81,4 +97,163 @@ describe('vdom / vapor interop', () => {
},
E2E_TIMEOUT,
)

describe('vdom transition', () => {
test(
'render vapor component',
async () => {
const btnSelector = '.trans-vapor > button'
const containerSelector = '.trans-vapor > div'

expect(await html(containerSelector)).toBe(`<div>vapor compA</div>`)

// comp leave
expect(
(await transitionStart(btnSelector, containerSelector)).innerHTML,
).toBe(
`<div class="v-leave-from v-leave-active">vapor compA</div><!---->`,
)

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="v-leave-active v-leave-to">vapor compA</div><!---->`,
)

await transitionFinish()
expect(await html(containerSelector)).toBe(`<!---->`)

// comp enter
expect(
(await transitionStart(btnSelector, containerSelector)).innerHTML,
).toBe(`<div class="v-enter-from v-enter-active">vapor compA</div>`)

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="v-enter-active v-enter-to">vapor compA</div>`,
)

await transitionFinish()
expect(await html(containerSelector)).toBe(
`<div class="">vapor compA</div>`,
)
},
E2E_TIMEOUT,
)

test(
'switch between vdom/vapor component (out-in mode)',
async () => {
const btnSelector = '.trans-vdom-vapor-out-in > button'
const containerSelector = '.trans-vdom-vapor-out-in > div'
const childSelector = `${containerSelector} > div`

expect(await html(containerSelector)).toBe(`<div>vdom comp</div>`)

// switch to vapor comp
// vdom comp leave
expect(
(await transitionStart(btnSelector, containerSelector)).innerHTML,
).toBe(
`<div class="fade-leave-from fade-leave-active">vdom comp</div><!---->`,
)

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="fade-leave-active fade-leave-to">vdom comp</div><!---->`,
)

// vapor comp enter
await waitForElement(childSelector, 'vapor compA', [
'fade-enter-from',
'fade-enter-active',
])

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="fade-enter-active fade-enter-to">vapor compA</div>`,
)

await transitionFinish()
expect(await html(containerSelector)).toBe(
`<div class="">vapor compA</div>`,
)

// switch to vdom comp
// vapor comp leave
expect(
(await transitionStart(btnSelector, containerSelector)).innerHTML,
).toBe(
`<div class="fade-leave-from fade-leave-active">vapor compA</div><!---->`,
)

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="fade-leave-active fade-leave-to">vapor compA</div><!---->`,
)

// vdom comp enter
await waitForElement(childSelector, 'vdom comp', [
'fade-enter-from',
'fade-enter-active',
])

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div class="fade-enter-active fade-enter-to">vdom comp</div>`,
)

await transitionFinish()
expect(await html(containerSelector)).toBe(
`<div class="">vdom comp</div>`,
)
},
E2E_TIMEOUT,
)
})

describe('vdom transition-group', () => {
test(
'render vapor component',
async () => {
const btnSelector = '.trans-group-vapor > button'
const containerSelector = '.trans-group-vapor > div'

expect(await html(containerSelector)).toBe(
`<div><div>a</div></div>` +
`<div><div>b</div></div>` +
`<div><div>c</div></div>`,
)

// insert
expect(
(await transitionStart(btnSelector, containerSelector)).innerHTML,
).toBe(
`<div><div>a</div></div>` +
`<div><div>b</div></div>` +
`<div><div>c</div></div>` +
`<div class="test-enter-from test-enter-active"><div>d</div></div>` +
`<div class="test-enter-from test-enter-active"><div>e</div></div>`,
)

await nextFrame()
expect(await html(containerSelector)).toBe(
`<div><div>a</div></div>` +
`<div><div>b</div></div>` +
`<div><div>c</div></div>` +
`<div class="test-enter-active test-enter-to"><div>d</div></div>` +
`<div class="test-enter-active test-enter-to"><div>e</div></div>`,
)

await transitionFinish()
expect(await html(containerSelector)).toBe(
`<div><div>a</div></div>` +
`<div><div>b</div></div>` +
`<div><div>c</div></div>` +
`<div class=""><div>d</div></div>` +
`<div class=""><div>e</div></div>`,
)
},
E2E_TIMEOUT,
)
})
})
9 changes: 9 additions & 0 deletions packages-private/vapor-e2e-test/index.html
Original file line number Diff line number Diff line change
@@ -1,2 +1,11 @@
<a href="/interop/">VDOM / Vapor interop</a>
<a href="/todomvc/">Vapor TodoMVC</a>
<a href="/transition/">Vapor Transition</a>
<a href="/transition-group/">Vapor TransitionGroup</a>

<style>
a {
display: block;
margin: 10px;
}
</style>
52 changes: 51 additions & 1 deletion packages-private/vapor-e2e-test/interop/App.vue
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
<script setup lang="ts">
import { ref } from 'vue'
import { ref, shallowRef } from 'vue'
import VaporComp from './VaporComp.vue'
import VaporCompA from '../transition/components/VaporCompA.vue'
import VdomComp from '../transition/components/VdomComp.vue'
import VaporSlot from '../transition/components/VaporSlot.vue'

const msg = ref('hello')
const passSlot = ref(true)

const toggleVapor = ref(true)
const interopComponent = shallowRef(VdomComp)
function toggleInteropComponent() {
interopComponent.value =
interopComponent.value === VaporCompA ? VdomComp : VaporCompA
}

const items = ref(['a', 'b', 'c'])
const enterClick = () => items.value.push('d', 'e')
</script>

<template>
Expand All @@ -19,4 +32,41 @@ const passSlot = ref(true)

<template #test v-if="passSlot">A test slot</template>
</VaporComp>

<!-- transition interop -->
<div>
<div class="trans-vapor">
<button @click="toggleVapor = !toggleVapor">
toggle vapor component
</button>
<div>
<Transition>
<VaporCompA v-if="toggleVapor" />
</Transition>
</div>
</div>
<div class="trans-vdom-vapor-out-in">
<button @click="toggleInteropComponent">
switch between vdom/vapor component out-in mode
</button>
<div>
<Transition name="fade" mode="out-in">
<component :is="interopComponent"></component>
</Transition>
</div>
</div>
</div>
<!-- transition-group interop -->
<div>
<div class="trans-group-vapor">
<button @click="enterClick">insert items</button>
<div>
<transition-group name="test">
<VaporSlot v-for="item in items" :key="item">
<div>{{ item }}</div>
</VaporSlot>
</transition-group>
</div>
</div>
</div>
</template>
5 changes: 3 additions & 2 deletions packages-private/vapor-e2e-test/interop/VaporComp.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ const slotProp = ref('slot prop')
change slot prop
</button>
<div class="vdom-slot-in-vapor-default">
#default: <slot :foo="slotProp" />
#default:
<slot :foo="slotProp" />
</div>
<div class="vdom-slot-in-vapor-test">
#test: <slot name="test">fallback content</slot>
Expand All @@ -40,7 +41,7 @@ const slotProp = ref('slot prop')
>
Toggle default slot to vdom
</button>
<VdomComp :msg="msg">
<VdomComp :msg="msg" class="foo">
<template #default="{ foo }" v-if="passSlot">
<div>slot prop: {{ foo }}</div>
<div>component prop: {{ msg }}</div>
Expand Down
1 change: 1 addition & 0 deletions packages-private/vapor-e2e-test/interop/main.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.vue'
import '../transition/style.css'

createApp(App).use(vaporInteropPlugin).mount('#app')
Loading
Loading