@@ -903,25 +903,351 @@ describe('vapor transition', () => {
903903 )
904904 } )
905905
906+ describe . todo ( 'transition with KeepAlive' , ( ) => { } )
907+ describe . todo ( 'transition with Suspense' , ( ) => { } )
908+ describe . todo ( 'transition with Teleport' , ( ) => { } )
909+
906910 describe ( 'transition with v-show' , ( ) => {
907- test . todo ( 'named transition with v-show' , async ( ) => { } , E2E_TIMEOUT )
908- test . todo ( 'transition events with v-show' , async ( ) => { } , E2E_TIMEOUT )
909- test . todo ( 'onLeaveCancelled (v-show only)' , async ( ) => { } , E2E_TIMEOUT )
910- test . todo ( 'transition on appear with v-show' , async ( ) => { } , E2E_TIMEOUT )
911+ test (
912+ 'named transition with v-show' ,
913+ async ( ) => {
914+ const btnSelector = '.show-named > button'
915+ const containerSelector = '.show-named > div'
916+ const childSelector = `${ containerSelector } > div`
917+
918+ expect ( await html ( containerSelector ) ) . toBe (
919+ '<div class="test">content</div>' ,
920+ )
921+ expect ( await isVisible ( childSelector ) ) . toBe ( true )
922+
923+ // leave
924+ expect (
925+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
926+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
927+ await nextFrame ( )
928+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
929+ 'test' ,
930+ 'test-leave-active' ,
931+ 'test-leave-to' ,
932+ ] )
933+ await transitionFinish ( )
934+ expect ( await isVisible ( childSelector ) ) . toBe ( false )
935+
936+ // enter
937+ expect (
938+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
939+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
940+ await nextFrame ( )
941+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
942+ 'test' ,
943+ 'test-enter-active' ,
944+ 'test-enter-to' ,
945+ ] )
946+ await transitionFinish ( )
947+ expect ( await html ( containerSelector ) ) . toBe (
948+ '<div class="test" style="">content</div>' ,
949+ )
950+ } ,
951+ E2E_TIMEOUT ,
952+ )
953+
954+ test (
955+ 'transition events with v-show' ,
956+ async ( ) => {
957+ const btnSelector = '.show-events > button'
958+ const containerSelector = '.show-events > div'
959+ const childSelector = `${ containerSelector } > div`
960+
961+ expect ( await html ( containerSelector ) ) . toBe (
962+ '<div class="test">content</div>' ,
963+ )
964+
965+ // leave
966+ expect (
967+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
968+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
969+
970+ let calls = await page ( ) . evaluate ( ( ) => {
971+ return ( window as any ) . getCalls ( 'show' )
972+ } )
973+ expect ( calls ) . toStrictEqual ( [ 'beforeLeave' , 'onLeave' ] )
974+ await nextFrame ( )
975+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
976+ 'test' ,
977+ 'test-leave-active' ,
978+ 'test-leave-to' ,
979+ ] )
980+ calls = await page ( ) . evaluate ( ( ) => {
981+ return ( window as any ) . getCalls ( 'show' )
982+ } )
983+ expect ( calls ) . not . contain ( 'afterLeave' )
984+ await transitionFinish ( )
985+ expect ( await isVisible ( childSelector ) ) . toBe ( false )
986+ calls = await page ( ) . evaluate ( ( ) => {
987+ return ( window as any ) . getCalls ( 'show' )
988+ } )
989+ expect ( calls ) . toStrictEqual ( [ 'beforeLeave' , 'onLeave' , 'afterLeave' ] )
990+
991+ // clear calls
992+ await page ( ) . evaluate ( ( ) => {
993+ ; ( window as any ) . resetCalls ( 'show' )
994+ } )
995+
996+ // enter
997+ expect (
998+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
999+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1000+ await nextFrame ( )
1001+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1002+ 'test' ,
1003+ 'test-enter-active' ,
1004+ 'test-enter-to' ,
1005+ ] )
1006+ calls = await page ( ) . evaluate ( ( ) => {
1007+ return ( window as any ) . getCalls ( 'show' )
1008+ } )
1009+ expect ( calls ) . toStrictEqual ( [ 'beforeEnter' , 'onEnter' ] )
1010+ await transitionFinish ( )
1011+ expect ( await html ( containerSelector ) ) . toBe (
1012+ '<div class="test" style="">content</div>' ,
1013+ )
1014+ calls = await page ( ) . evaluate ( ( ) => {
1015+ return ( window as any ) . getCalls ( 'show' )
1016+ } )
1017+ expect ( calls ) . toStrictEqual ( [ 'beforeEnter' , 'onEnter' , 'afterEnter' ] )
1018+ } ,
1019+ E2E_TIMEOUT ,
1020+ )
1021+
1022+ test (
1023+ 'onLeaveCancelled (v-show only)' ,
1024+ async ( ) => {
1025+ const btnSelector = '.show-leave-cancelled > button'
1026+ const containerSelector = '.show-leave-cancelled > div'
1027+ const childSelector = `${ containerSelector } > div`
1028+
1029+ expect ( await html ( containerSelector ) ) . toBe (
1030+ '<div class="test">content</div>' ,
1031+ )
1032+
1033+ // leave
1034+ expect (
1035+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1036+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
1037+ await nextFrame ( )
1038+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1039+ 'test' ,
1040+ 'test-leave-active' ,
1041+ 'test-leave-to' ,
1042+ ] )
1043+
1044+ // cancel (enter)
1045+ expect (
1046+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1047+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1048+ let calls = await page ( ) . evaluate ( ( ) => {
1049+ return ( window as any ) . getCalls ( 'showLeaveCancel' )
1050+ } )
1051+ expect ( calls ) . toStrictEqual ( [ 'leaveCancelled' ] )
1052+ await nextFrame ( )
1053+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1054+ 'test' ,
1055+ 'test-enter-active' ,
1056+ 'test-enter-to' ,
1057+ ] )
1058+ await transitionFinish ( )
1059+ expect ( await isVisible ( childSelector ) ) . toBe ( true )
1060+ } ,
1061+ E2E_TIMEOUT ,
1062+ )
1063+
1064+ test . todo (
1065+ 'transition on appear with v-show' ,
1066+ async ( ) => {
1067+ const btnSelector = '.show-appear > button'
1068+ const containerSelector = '.show-appear > div'
1069+ const childSelector = `${ containerSelector } > div`
1070+ } ,
1071+ E2E_TIMEOUT ,
1072+ )
1073+
9111074 test . todo (
9121075 'transition events should not call onEnter with v-show false' ,
9131076 async ( ) => { } ,
9141077 E2E_TIMEOUT ,
9151078 )
1079+
9161080 test . todo ( 'transition on appear with v-show' , async ( ) => { } , E2E_TIMEOUT )
9171081 } )
9181082
9191083 describe ( 'explicit durations' , ( ) => {
920- test . todo ( 'single value' , async ( ) => { } , E2E_TIMEOUT )
921- test . todo ( 'enter with explicit durations' , async ( ) => { } , E2E_TIMEOUT )
922- test . todo ( 'leave with explicit durations' , async ( ) => { } , E2E_TIMEOUT )
923- test . todo ( 'separate enter and leave' , async ( ) => { } , E2E_TIMEOUT )
924- test . todo ( 'warn invalid durations' , async ( ) => { } , E2E_TIMEOUT )
1084+ test (
1085+ 'single value' ,
1086+ async ( ) => {
1087+ const btnSelector = '.duration-single-value > button'
1088+ const containerSelector = '.duration-single-value > div'
1089+ const childSelector = `${ containerSelector } > div`
1090+
1091+ expect ( await html ( containerSelector ) ) . toBe (
1092+ '<div class="test">content</div>' ,
1093+ )
1094+
1095+ // leave
1096+ expect (
1097+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1098+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
1099+ await nextFrame ( )
1100+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1101+ 'test' ,
1102+ 'test-leave-active' ,
1103+ 'test-leave-to' ,
1104+ ] )
1105+ await transitionFinish ( duration * 2 )
1106+ expect ( await html ( containerSelector ) ) . toBe ( '' )
1107+
1108+ // enter
1109+ expect (
1110+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1111+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1112+ await nextFrame ( )
1113+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1114+ 'test' ,
1115+ 'test-enter-active' ,
1116+ 'test-enter-to' ,
1117+ ] )
1118+ await transitionFinish ( duration * 2 )
1119+ expect ( await html ( containerSelector ) ) . toBe (
1120+ '<div class="test">content</div>' ,
1121+ )
1122+ } ,
1123+ E2E_TIMEOUT ,
1124+ )
1125+
1126+ test (
1127+ 'enter with explicit durations' ,
1128+ async ( ) => {
1129+ const btnSelector = '.duration-enter > button'
1130+ const containerSelector = '.duration-enter > div'
1131+ const childSelector = `${ containerSelector } > div`
1132+
1133+ expect ( await html ( containerSelector ) ) . toBe (
1134+ '<div class="test">content</div>' ,
1135+ )
1136+
1137+ // leave
1138+ expect (
1139+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1140+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
1141+ await nextFrame ( )
1142+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1143+ 'test' ,
1144+ 'test-leave-active' ,
1145+ 'test-leave-to' ,
1146+ ] )
1147+ await transitionFinish ( )
1148+ expect ( await html ( containerSelector ) ) . toBe ( '' )
1149+
1150+ // enter
1151+ expect (
1152+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1153+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1154+ await nextFrame ( )
1155+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1156+ 'test' ,
1157+ 'test-enter-active' ,
1158+ 'test-enter-to' ,
1159+ ] )
1160+ await transitionFinish ( duration * 2 )
1161+ expect ( await html ( containerSelector ) ) . toBe (
1162+ '<div class="test">content</div>' ,
1163+ )
1164+ } ,
1165+ E2E_TIMEOUT ,
1166+ )
1167+
1168+ test (
1169+ 'leave with explicit durations' ,
1170+ async ( ) => {
1171+ const btnSelector = '.duration-leave > button'
1172+ const containerSelector = '.duration-leave > div'
1173+ const childSelector = `${ containerSelector } > div`
1174+
1175+ expect ( await html ( containerSelector ) ) . toBe (
1176+ '<div class="test">content</div>' ,
1177+ )
1178+
1179+ // leave
1180+ expect (
1181+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1182+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
1183+ await nextFrame ( )
1184+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1185+ 'test' ,
1186+ 'test-leave-active' ,
1187+ 'test-leave-to' ,
1188+ ] )
1189+ await transitionFinish ( duration * 2 )
1190+ expect ( await html ( containerSelector ) ) . toBe ( '' )
1191+
1192+ // enter
1193+ expect (
1194+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1195+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1196+ await nextFrame ( )
1197+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1198+ 'test' ,
1199+ 'test-enter-active' ,
1200+ 'test-enter-to' ,
1201+ ] )
1202+ await transitionFinish ( )
1203+ expect ( await html ( containerSelector ) ) . toBe (
1204+ '<div class="test">content</div>' ,
1205+ )
1206+ } ,
1207+ E2E_TIMEOUT ,
1208+ )
1209+
1210+ test (
1211+ 'separate enter and leave' ,
1212+ async ( ) => {
1213+ const btnSelector = '.duration-enter-leave > button'
1214+ const containerSelector = '.duration-enter-leave > div'
1215+ const childSelector = `${ containerSelector } > div`
1216+
1217+ expect ( await html ( containerSelector ) ) . toBe (
1218+ '<div class="test">content</div>' ,
1219+ )
1220+
1221+ // leave
1222+ expect (
1223+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1224+ ) . toStrictEqual ( [ 'test' , 'test-leave-from' , 'test-leave-active' ] )
1225+ await nextFrame ( )
1226+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1227+ 'test' ,
1228+ 'test-leave-active' ,
1229+ 'test-leave-to' ,
1230+ ] )
1231+ await transitionFinish ( duration * 2 )
1232+ expect ( await html ( containerSelector ) ) . toBe ( '' )
1233+
1234+ // enter
1235+ expect (
1236+ ( await transitionStart ( btnSelector , childSelector ) ) . classNames ,
1237+ ) . toStrictEqual ( [ 'test' , 'test-enter-from' , 'test-enter-active' ] )
1238+ await nextFrame ( )
1239+ expect ( await classList ( childSelector ) ) . toStrictEqual ( [
1240+ 'test' ,
1241+ 'test-enter-active' ,
1242+ 'test-enter-to' ,
1243+ ] )
1244+ await transitionFinish ( duration * 4 )
1245+ expect ( await html ( containerSelector ) ) . toBe (
1246+ '<div class="test">content</div>' ,
1247+ )
1248+ } ,
1249+ E2E_TIMEOUT ,
1250+ )
9251251 } )
9261252
9271253 test (
0 commit comments