@@ -14,6 +14,7 @@ const appDef = {
14
14
controls : false ,
15
15
fade : false ,
16
16
noAnimation : false ,
17
+ noWrap : false ,
17
18
value : 0
18
19
} ,
19
20
render ( h ) {
@@ -26,6 +27,7 @@ const appDef = {
26
27
controls : this . controls ,
27
28
fade : this . fade ,
28
29
noAnimation : this . noAnimation ,
30
+ noWrap : this . noWrap ,
29
31
value : this . value
30
32
}
31
33
} ,
@@ -995,4 +997,178 @@ describe('carousel', () => {
995
997
996
998
wrapper . destroy ( )
997
999
} )
1000
+
1001
+ it ( 'Next/Prev slide wraps to end/start when no-wrap is false' , async ( ) => {
1002
+ const wrapper = mount ( localVue . extend ( appDef ) , {
1003
+ localVue : localVue ,
1004
+ attachToDocument : true ,
1005
+ propsData : {
1006
+ interval : 0 ,
1007
+ fade : false ,
1008
+ noAnimation : true ,
1009
+ noWrap : false ,
1010
+ indicators : true ,
1011
+ controls : true ,
1012
+ // Start at last slide
1013
+ value : 3
1014
+ }
1015
+ } )
1016
+
1017
+ expect ( wrapper . isVueInstance ( ) ) . toBe ( true )
1018
+ const $carousel = wrapper . find ( BCarousel )
1019
+ expect ( $carousel ) . toBeDefined ( )
1020
+ expect ( $carousel . isVueInstance ( ) ) . toBe ( true )
1021
+
1022
+ await waitNT ( wrapper . vm )
1023
+ await waitRAF ( )
1024
+
1025
+ const $indicators = $carousel . findAll ( '.carousel-indicators > li' )
1026
+ expect ( $indicators . length ) . toBe ( 4 )
1027
+
1028
+ expect ( $carousel . emitted ( 'sliding-start' ) ) . not . toBeDefined ( )
1029
+ expect ( $carousel . emitted ( 'sliding-end' ) ) . not . toBeDefined ( )
1030
+ expect ( $carousel . emitted ( 'input' ) ) . not . toBeDefined ( )
1031
+
1032
+ expect ( $carousel . vm . index ) . toBe ( 3 )
1033
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1034
+
1035
+ // Transitions (or fallback timers) are not used when no-animation set
1036
+ // Call vm.next()
1037
+ $carousel . vm . next ( )
1038
+ await waitNT ( wrapper . vm )
1039
+
1040
+ expect ( $carousel . emitted ( 'sliding-start' ) ) . toBeDefined ( )
1041
+ expect ( $carousel . emitted ( 'sliding-end' ) ) . toBeDefined ( )
1042
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 1 )
1043
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 1 )
1044
+ // Should have index of 0
1045
+ expect ( $carousel . emitted ( 'sliding-start' ) [ 0 ] [ 0 ] ) . toEqual ( 0 )
1046
+ expect ( $carousel . emitted ( 'sliding-end' ) [ 0 ] [ 0 ] ) . toEqual ( 0 )
1047
+ expect ( $carousel . emitted ( 'input' ) ) . toBeDefined ( )
1048
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 1 )
1049
+ expect ( $carousel . emitted ( 'input' ) [ 0 ] [ 0 ] ) . toEqual ( 0 )
1050
+ expect ( $carousel . vm . index ) . toBe ( 0 )
1051
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1052
+
1053
+ // Call vm.prev()
1054
+ $carousel . vm . prev ( )
1055
+ await waitNT ( wrapper . vm )
1056
+
1057
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 2 )
1058
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 2 )
1059
+ // Should have index set to last slide
1060
+ expect ( $carousel . emitted ( 'sliding-start' ) [ 1 ] [ 0 ] ) . toEqual ( 3 )
1061
+ expect ( $carousel . emitted ( 'sliding-end' ) [ 1 ] [ 0 ] ) . toEqual ( 3 )
1062
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 2 )
1063
+ expect ( $carousel . emitted ( 'input' ) [ 1 ] [ 0 ] ) . toEqual ( 3 )
1064
+ expect ( $carousel . vm . index ) . toBe ( 3 )
1065
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1066
+
1067
+ wrapper . destroy ( )
1068
+ } )
1069
+
1070
+ it ( 'Next/Prev slide does not wrap to end/start when no-wrap is true' , async ( ) => {
1071
+ const wrapper = mount ( localVue . extend ( appDef ) , {
1072
+ localVue : localVue ,
1073
+ attachToDocument : true ,
1074
+ propsData : {
1075
+ interval : 0 ,
1076
+ fade : false ,
1077
+ // Transitions (or fallback timers) are not used when no-animation set
1078
+ noAnimation : true ,
1079
+ noWrap : true ,
1080
+ indicators : true ,
1081
+ controls : true ,
1082
+ // Start at last slide
1083
+ value : 3
1084
+ }
1085
+ } )
1086
+
1087
+ expect ( wrapper . isVueInstance ( ) ) . toBe ( true )
1088
+ const $carousel = wrapper . find ( BCarousel )
1089
+ expect ( $carousel ) . toBeDefined ( )
1090
+ expect ( $carousel . isVueInstance ( ) ) . toBe ( true )
1091
+
1092
+ await waitNT ( wrapper . vm )
1093
+ await waitRAF ( )
1094
+
1095
+ const $indicators = $carousel . findAll ( '.carousel-indicators > li' )
1096
+ expect ( $indicators . length ) . toBe ( 4 )
1097
+
1098
+ expect ( $carousel . emitted ( 'sliding-start' ) ) . not . toBeDefined ( )
1099
+ expect ( $carousel . emitted ( 'sliding-end' ) ) . not . toBeDefined ( )
1100
+ expect ( $carousel . emitted ( 'input' ) ) . not . toBeDefined ( )
1101
+
1102
+ expect ( $carousel . vm . index ) . toBe ( 3 )
1103
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1104
+
1105
+ // Call vm.next()
1106
+ $carousel . vm . next ( )
1107
+ await waitNT ( wrapper . vm )
1108
+
1109
+ // Should not slide to start
1110
+ expect ( $carousel . emitted ( 'sliding-start' ) ) . not . toBeDefined ( )
1111
+ expect ( $carousel . emitted ( 'sliding-end' ) ) . not . toBeDefined ( )
1112
+ // Should have index of 3 (no input event emitted since value set to 3)
1113
+ expect ( $carousel . emitted ( 'input' ) ) . not . toBeDefined ( )
1114
+ expect ( $carousel . vm . index ) . toBe ( 3 )
1115
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1116
+
1117
+ // Call vm.prev()
1118
+ $carousel . vm . prev ( )
1119
+ await waitNT ( wrapper . vm )
1120
+
1121
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 1 )
1122
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 1 )
1123
+ // Should have index set to 2
1124
+ expect ( $carousel . emitted ( 'sliding-start' ) [ 0 ] [ 0 ] ) . toEqual ( 2 )
1125
+ expect ( $carousel . emitted ( 'sliding-end' ) [ 0 ] [ 0 ] ) . toEqual ( 2 )
1126
+ expect ( $carousel . emitted ( 'input' ) ) . toBeDefined ( )
1127
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 1 )
1128
+ expect ( $carousel . emitted ( 'input' ) [ 0 ] [ 0 ] ) . toEqual ( 2 )
1129
+ expect ( $carousel . vm . index ) . toBe ( 2 )
1130
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1131
+
1132
+ // Call vm.prev()
1133
+ $carousel . vm . prev ( )
1134
+ await waitNT ( wrapper . vm )
1135
+
1136
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 2 )
1137
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 2 )
1138
+ // Should have index set to 1
1139
+ expect ( $carousel . emitted ( 'sliding-start' ) [ 1 ] [ 0 ] ) . toEqual ( 1 )
1140
+ expect ( $carousel . emitted ( 'sliding-end' ) [ 1 ] [ 0 ] ) . toEqual ( 1 )
1141
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 2 )
1142
+ expect ( $carousel . emitted ( 'input' ) [ 1 ] [ 0 ] ) . toEqual ( 1 )
1143
+ expect ( $carousel . vm . index ) . toBe ( 1 )
1144
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1145
+
1146
+ // Call vm.prev()
1147
+ $carousel . vm . prev ( )
1148
+ await waitNT ( wrapper . vm )
1149
+
1150
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 3 )
1151
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 3 )
1152
+ // Should have index set to 0
1153
+ expect ( $carousel . emitted ( 'sliding-start' ) [ 2 ] [ 0 ] ) . toEqual ( 0 )
1154
+ expect ( $carousel . emitted ( 'sliding-end' ) [ 2 ] [ 0 ] ) . toEqual ( 0 )
1155
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 3 )
1156
+ expect ( $carousel . emitted ( 'input' ) [ 2 ] [ 0 ] ) . toEqual ( 0 )
1157
+ expect ( $carousel . vm . index ) . toBe ( 0 )
1158
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1159
+
1160
+ // Call vm.prev() (should not wrap)
1161
+ $carousel . vm . prev ( )
1162
+ await waitNT ( wrapper . vm )
1163
+
1164
+ expect ( $carousel . emitted ( 'sliding-start' ) . length ) . toBe ( 3 )
1165
+ expect ( $carousel . emitted ( 'sliding-end' ) . length ) . toBe ( 3 )
1166
+ // Should have index still set to 0, and emit input to update v-model
1167
+ expect ( $carousel . emitted ( 'input' ) . length ) . toBe ( 4 )
1168
+ expect ( $carousel . emitted ( 'input' ) [ 3 ] [ 0 ] ) . toEqual ( 0 )
1169
+ expect ( $carousel . vm . index ) . toBe ( 0 )
1170
+ expect ( $carousel . vm . isSliding ) . toBe ( false )
1171
+
1172
+ wrapper . destroy ( )
1173
+ } )
998
1174
} )
0 commit comments