|
|
@@ -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()
|
|
|
+
|
|
|
+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', () => {
|
|
|
- const { page, click, text, enterValue } = setupPuppeteer()
|
|
|
-
|
|
|
let server: any
|
|
|
const port = '8193'
|
|
|
beforeAll(() => {
|
|
|
@@ -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')
|
|
|
@@ -81,4 +97,121 @@ 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 key="0">vapor compA</div>`,
|
|
|
+ )
|
|
|
+
|
|
|
+ // comp leave
|
|
|
+ expect(
|
|
|
+ (await transitionStart(btnSelector, containerSelector)).innerHTML,
|
|
|
+ ).toBe(
|
|
|
+ `<div key="0" class="v-leave-from v-leave-active">vapor compA</div><!---->`,
|
|
|
+ )
|
|
|
+
|
|
|
+ await nextFrame()
|
|
|
+ expect(await html(containerSelector)).toBe(
|
|
|
+ `<div key="0" 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 key="0" class="v-enter-from v-enter-active">vapor compA</div>`,
|
|
|
+ )
|
|
|
+
|
|
|
+ await nextFrame()
|
|
|
+ expect(await html(containerSelector)).toBe(
|
|
|
+ `<div key="0" class="v-enter-active v-enter-to">vapor compA</div>`,
|
|
|
+ )
|
|
|
+
|
|
|
+ await transitionFinish()
|
|
|
+ expect(await html(containerSelector)).toBe(
|
|
|
+ `<div key="0" 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,
|
|
|
+ )
|
|
|
+ })
|
|
|
})
|