11import { ref , reactive } from "vue" ;
22import Slicer from "./Slicer.vue" ;
33
4+ const ds = [ 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 ]
5+
46describe ( "<Slicer />" , ( ) => {
57 function mountSlicer ( ) {
68 const FINAL_CONFIG = reactive ( {
@@ -23,7 +25,9 @@ describe("<Slicer />", () => {
2325 grid : {
2426 xAxis : {
2527 dataLabels : {
26- values : [ "JAN" , "FEB" , "MAR" , "APR" , "MAY" , "JUN" , "JUL" ] ,
28+ values : ds . map ( ( d , i ) => {
29+ return `____ ${ i } ____`
30+ } ) ,
2731 } ,
2832 } ,
2933 } ,
@@ -32,9 +36,9 @@ describe("<Slicer />", () => {
3236 } ,
3337 } ) ;
3438
35- const maxLength = ref ( 6 ) ;
39+ const maxLength = ref ( ds . length ) ;
3640 const slicerStep = ref ( 1 ) ;
37- const slicer = reactive ( { start : 0 , end : 6 } ) ;
41+ const slicer = reactive ( { start : 0 , end : ds . length } ) ;
3842
3943 return cy . mount ( {
4044 components : { Slicer } ,
@@ -44,7 +48,7 @@ describe("<Slicer />", () => {
4448 maxLength,
4549 slicerStep,
4650 slicer,
47- minimap : [ 0 , 1000 , 0 , 1000 , 0 , 1000 ]
51+ minimap : ds
4852 } ;
4953 } ,
5054 template : `
@@ -83,8 +87,8 @@ describe("<Slicer />", () => {
8387 it ( 'shows start & end labels on hover' , ( ) => {
8488 mountSlicer ( ) ;
8589 cy . get ( '[data-cy="slicer"]' ) . trigger ( 'mouseenter' )
86- cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'JAN ' )
87- cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'JUN' )
90+ cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 0 ____ ' )
91+ cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , `____ ${ ds . length - 1 } ____` )
8892 cy . get ( '[data-cy="slicer"]' ) . trigger ( 'mouseleave' )
8993 cy . get ( '@right' ) . should ( 'not.be.visible' )
9094 cy . get ( '@left' ) . should ( 'not.be.visible' )
@@ -99,14 +103,14 @@ describe("<Slicer />", () => {
99103 . trigger ( "input" , { force : true } ) ;
100104
101105 cy . get ( '[data-cy="slicer-handle-right"]' )
102- . invoke ( "val" , 5 )
106+ . invoke ( "val" , 8 )
103107 . trigger ( "input" , { force : true } ) ;
104108
105109 cy . wrap ( slicer ) . should ( 'have.property' , 'start' , 1 ) ;
106- cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 5 ) ;
110+ cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 8 ) ;
107111 cy . get ( '[data-cy="slicer"]' ) . trigger ( 'mouseenter' )
108- cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'FEB ' )
109- cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'MAY ' )
112+ cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 1 ____ ' )
113+ cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 7 ____ ' )
110114 } ) ;
111115 } ) ;
112116
@@ -118,7 +122,7 @@ describe("<Slicer />", () => {
118122 . trigger ( "input" , { force : true } ) ;
119123
120124 cy . get ( '[data-cy="slicer-handle-right"]' )
121- . invoke ( "val" , 4 )
125+ . invoke ( "val" , 10 )
122126 . trigger ( "input" , { force : true } ) ;
123127
124128 cy . wait ( 100 )
@@ -127,9 +131,9 @@ describe("<Slicer />", () => {
127131 . trigger ( 'mousemove' , { force : true , clientX : 400 } )
128132
129133 cy . wrap ( slicer ) . should ( 'have.property' , 'start' , 3 ) ;
130- cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 5 ) ;
131- cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'APR ' )
132- cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'MAY ' )
134+ cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 11 ) ;
135+ cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 3 ____ ' )
136+ cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 10 ____ ' )
133137 } )
134138 } )
135139
@@ -141,7 +145,7 @@ describe("<Slicer />", () => {
141145 . trigger ( "input" , { force : true } ) ;
142146
143147 cy . get ( '[data-cy="slicer-handle-right"]' )
144- . invoke ( "val" , 4 )
148+ . invoke ( "val" , 10 )
145149 . trigger ( "input" , { force : true } ) ;
146150
147151 cy . wait ( 100 )
@@ -150,9 +154,51 @@ describe("<Slicer />", () => {
150154 . trigger ( 'mousemove' , { force : true , clientX : 400 } )
151155
152156 cy . wrap ( slicer ) . should ( 'have.property' , 'start' , 3 ) ;
153- cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 5 ) ;
154- cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'APR' )
155- cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , 'MAY' )
157+ cy . wrap ( slicer ) . should ( 'have.property' , 'end' , 11 ) ;
158+ cy . get ( '[data-cy="slicer-label-left"]' ) . as ( 'left' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 3 ____' )
159+ cy . get ( '[data-cy="slicer-label-right"]' ) . as ( 'right' ) . should ( 'exist' ) . and ( 'be.visible' ) . and ( 'contain' , '____ 10 ____' )
160+ } )
161+ } )
162+
163+ it ( 'merges tooltips when they collide on the same index' , ( ) => {
164+ mountSlicer ( ) . then ( cmp => {
165+ cy . get ( '[data-cy="slicer-handle-left"]' )
166+ . invoke ( "val" , 2 )
167+ . trigger ( "input" , { force : true } ) ;
168+
169+ cy . get ( '[data-cy="slicer-handle-right"]' )
170+ . invoke ( "val" , 2 )
171+ . trigger ( "input" , { force : true } ) ;
172+
173+ cy . wait ( 100 )
174+ cy . get ( '[data-cy="slicer-range-highlight"]' )
175+ . trigger ( 'mousedown' , { force : true } )
176+ . trigger ( 'mousemove' , { force : true , clientX : 400 } )
177+
178+ cy . get ( '[data-cy="slicer-label-merged"]' ) . should ( 'be.visible' ) . and ( 'contain' , '____ 3 ____' )
179+ cy . get ( '[data-cy="slicer-label-left"]' ) . should ( 'not.be.visible' )
180+ cy . get ( '[data-cy="slicer-label-right"]' ) . should ( 'not.be.visible' )
181+ } )
182+ } )
183+
184+ it ( 'merges the two labels in a single tooltip when tooltips collide' , ( ) => {
185+ mountSlicer ( ) . then ( cmp => {
186+ cy . get ( '[data-cy="slicer-handle-left"]' )
187+ . invoke ( "val" , 2 )
188+ . trigger ( "input" , { force : true } ) ;
189+
190+ cy . get ( '[data-cy="slicer-handle-right"]' )
191+ . invoke ( "val" , 4 )
192+ . trigger ( "input" , { force : true } ) ;
193+
194+ cy . wait ( 100 )
195+ cy . get ( '[data-cy="slicer-range-highlight"]' )
196+ . trigger ( 'mousedown' , { force : true } )
197+ . trigger ( 'mousemove' , { force : true , clientX : 400 } )
198+
199+ cy . get ( '[data-cy="slicer-label-merged"]' ) . should ( 'be.visible' ) . and ( 'contain' , '____ 3 ____ - ____ 4 ____' ) ;
200+ cy . get ( '[data-cy="slicer-label-left"]' ) . should ( 'not.be.visible' )
201+ cy . get ( '[data-cy="slicer-label-right"]' ) . should ( 'not.be.visible' )
156202 } )
157203 } )
158204} ) ;
0 commit comments