@@ -16,6 +16,7 @@ const {
16
16
html,
17
17
transitionStart,
18
18
waitForElement,
19
+ click,
19
20
} = setupPuppeteer ( )
20
21
21
22
const duration = process . env . CI ? 200 : 50
@@ -42,6 +43,234 @@ describe('vapor transition', () => {
42
43
await page ( ) . waitForSelector ( '#app' )
43
44
} )
44
45
46
+ describe ( 'transition with v-if' , ( ) => {
47
+ test (
48
+ 'basic transition' ,
49
+ async ( ) => {
50
+ const btnSelector = '.if-basic > button'
51
+ const containerSelector = '.if-basic > div'
52
+ const childSelector = `${ containerSelector } > div`
53
+
54
+ expect ( await html ( containerSelector ) ) . toBe (
55
+ `<div class="test">content</div>` ,
56
+ )
57
+
58
+ // leave
59
+ expect (
60
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
61
+ ) . toStrictEqual ( [ 'test' , 'v-leave-from' , 'v-leave-active' ] )
62
+
63
+ await nextFrame ( )
64
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
65
+ 'test' ,
66
+ 'v-leave-active' ,
67
+ 'v-leave-to' ,
68
+ ] )
69
+ await transitionFinish ( )
70
+ expect ( await html ( containerSelector ) ) . toBe ( '' )
71
+
72
+ // enter
73
+ expect (
74
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
75
+ ) . toStrictEqual ( [ 'test' , 'v-enter-from' , 'v-enter-active' ] )
76
+ await nextFrame ( )
77
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
78
+ 'test' ,
79
+ 'v-enter-active' ,
80
+ 'v-enter-to' ,
81
+ ] )
82
+ await transitionFinish ( )
83
+ expect ( await html ( containerSelector ) ) . toBe (
84
+ '<div class="test">content</div>' ,
85
+ )
86
+ } ,
87
+ E2E_TIMEOUT ,
88
+ )
89
+
90
+ test (
91
+ 'named transition' ,
92
+ async ( ) => {
93
+ const btnSelector = '.if-named > button'
94
+ const containerSelector = '.if-named > div'
95
+ const childSelector = `${ containerSelector } > div`
96
+
97
+ expect ( await html ( containerSelector ) ) . toBe (
98
+ '<div class="test">content</div>' ,
99
+ )
100
+
101
+ // leave
102
+ expect (
103
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
104
+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
105
+ await nextFrame ( )
106
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
107
+ 'test' ,
108
+ 'test-leave-active' ,
109
+ 'test-leave-to' ,
110
+ ] )
111
+
112
+ await transitionFinish ( )
113
+ expect ( await html ( containerSelector ) ) . toBe ( '' )
114
+
115
+ // enter
116
+ expect (
117
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
118
+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
119
+ await nextFrame ( )
120
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
121
+ 'test' ,
122
+ 'test-enter-active' ,
123
+ 'test-enter-to' ,
124
+ ] )
125
+ await transitionFinish ( )
126
+ expect ( await html ( containerSelector ) ) . toBe (
127
+ '<div class="test">content</div>' ,
128
+ )
129
+ } ,
130
+ E2E_TIMEOUT ,
131
+ )
132
+
133
+ test (
134
+ 'custom transition classes' ,
135
+ async ( ) => {
136
+ const btnSelector = '.if-custom-classes > button'
137
+ const containerSelector = '.if-custom-classes > div'
138
+ const childSelector = `${ containerSelector } > div`
139
+
140
+ expect ( await html ( containerSelector ) ) . toBe (
141
+ '<div class="test">content</div>' ,
142
+ )
143
+ // leave
144
+ expect (
145
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
146
+ ) . toStrictEqual ( [ 'test' , 'bye-from' , 'bye-active' ] )
147
+ await nextFrame ( )
148
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
149
+ 'test' ,
150
+ 'bye-active' ,
151
+ 'bye-to' ,
152
+ ] )
153
+ await transitionFinish ( )
154
+ expect ( await html ( containerSelector ) ) . toBe ( '' )
155
+
156
+ // enter
157
+ expect (
158
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
159
+ ) . toStrictEqual ( [ 'test' , 'hello-from' , 'hello-active' ] )
160
+ await nextFrame ( )
161
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
162
+ 'test' ,
163
+ 'hello-active' ,
164
+ 'hello-to' ,
165
+ ] )
166
+ await transitionFinish ( )
167
+ expect ( await html ( containerSelector ) ) . toBe (
168
+ '<div class="test">content</div>' ,
169
+ )
170
+ } ,
171
+ E2E_TIMEOUT ,
172
+ )
173
+
174
+ test (
175
+ 'transition with dynamic name' ,
176
+ async ( ) => {
177
+ const btnSelector = '.if-dynamic-name > button.toggle'
178
+ const btnChangeNameSelector = '.if-dynamic-name > button.change'
179
+ const containerSelector = '.if-dynamic-name > div'
180
+ const childSelector = `${ containerSelector } > div`
181
+
182
+ expect ( await html ( containerSelector ) ) . toBe (
183
+ '<div class="test">content</div>' ,
184
+ )
185
+
186
+ // leave
187
+ expect (
188
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
189
+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
190
+ await nextFrame ( )
191
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
192
+ 'test' ,
193
+ 'test-leave-active' ,
194
+ 'test-leave-to' ,
195
+ ] )
196
+ await transitionFinish ( )
197
+ expect ( await html ( containerSelector ) ) . toBe ( '' )
198
+
199
+ // enter
200
+ await click ( btnChangeNameSelector )
201
+ expect (
202
+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
203
+ ) . toStrictEqual ( [ 'test' , 'changed-enter-from' , 'changed-enter-active' ] )
204
+ await nextFrame ( )
205
+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
206
+ 'test' ,
207
+ 'changed-enter-active' ,
208
+ 'changed-enter-to' ,
209
+ ] )
210
+ await transitionFinish ( )
211
+ expect ( await html ( containerSelector ) ) . toBe (
212
+ '<div class="test">content</div>' ,
213
+ )
214
+ } ,
215
+ E2E_TIMEOUT ,
216
+ )
217
+ test . todo ( 'transition events without appear' , async ( ) => { } , E2E_TIMEOUT )
218
+ test . todo ( 'events with arguments' , async ( ) => { } , E2E_TIMEOUT )
219
+ test . todo ( 'onEnterCancelled' , async ( ) => { } , E2E_TIMEOUT )
220
+ test . todo ( 'transition on appear' , async ( ) => { } , E2E_TIMEOUT )
221
+ test . todo ( 'transition events with appear' , async ( ) => { } , E2E_TIMEOUT )
222
+ test . todo ( 'no transition detected' , async ( ) => { } , E2E_TIMEOUT )
223
+ test . todo ( 'animations' , async ( ) => { } , E2E_TIMEOUT )
224
+ test . todo ( 'explicit transition type' , async ( ) => { } , E2E_TIMEOUT )
225
+ test . todo ( 'transition on SVG elements' , async ( ) => { } , E2E_TIMEOUT )
226
+ test . todo (
227
+ 'custom transition higher-order component' ,
228
+ async ( ) => { } ,
229
+ E2E_TIMEOUT ,
230
+ )
231
+ test . todo (
232
+ 'transition on child components with empty root node' ,
233
+ async ( ) => { } ,
234
+ E2E_TIMEOUT ,
235
+ )
236
+ test . todo (
237
+ 'transition with v-if at component root-level' ,
238
+ async ( ) => { } ,
239
+ E2E_TIMEOUT ,
240
+ )
241
+ test . todo (
242
+ 'wrapping transition + fallthrough attrs' ,
243
+ async ( ) => { } ,
244
+ E2E_TIMEOUT ,
245
+ )
246
+ test . todo (
247
+ 'transition + fallthrough attrs (in-out mode)' ,
248
+ async ( ) => { } ,
249
+ E2E_TIMEOUT ,
250
+ )
251
+ } )
252
+
253
+ describe ( 'transition with v-show' , ( ) => {
254
+ test . todo ( 'named transition with v-show' , async ( ) => { } , E2E_TIMEOUT )
255
+ test . todo ( 'transition events with v-show' , async ( ) => { } , E2E_TIMEOUT )
256
+ test . todo ( 'onLeaveCancelled (v-show only)' , async ( ) => { } , E2E_TIMEOUT )
257
+ test . todo ( 'transition on appear with v-show' , async ( ) => { } , E2E_TIMEOUT )
258
+ test . todo (
259
+ 'transition events should not call onEnter with v-show false' ,
260
+ async ( ) => { } ,
261
+ E2E_TIMEOUT ,
262
+ )
263
+ test . todo ( 'transition on appear with v-show' , async ( ) => { } , E2E_TIMEOUT )
264
+ } )
265
+
266
+ describe ( 'explicit durations' , ( ) => {
267
+ test . todo ( 'single value' , async ( ) => { } , E2E_TIMEOUT )
268
+ test . todo ( 'enter with explicit durations' , async ( ) => { } , E2E_TIMEOUT )
269
+ test . todo ( 'leave with explicit durations' , async ( ) => { } , E2E_TIMEOUT )
270
+ test . todo ( 'separate enter and leave' , async ( ) => { } , E2E_TIMEOUT )
271
+ test . todo ( 'warn invalid durations' , async ( ) => { } , E2E_TIMEOUT )
272
+ } )
273
+
45
274
test (
46
275
'should work with v-show' ,
47
276
async ( ) => {
0 commit comments