@@ -10,6 +10,7 @@ var destroyGraphDiv = require('../assets/destroy_graph_div');
1010var  failTest  =  require ( '../assets/fail_test' ) ; 
1111var  mouseEvent  =  require ( '../assets/mouse_event' ) ; 
1212var  drag  =  require ( '../assets/drag' ) ; 
13+ var  doubleClick  =  require ( '../assets/double_click' ) ; 
1314
1415var  customAssertions  =  require ( '../assets/custom_assertions' ) ; 
1516var  assertHoverLabelContent  =  customAssertions . assertHoverLabelContent ; 
@@ -918,7 +919,7 @@ describe('@gl Test splom select:', function() {
918919    } 
919920
920921    it ( 'should emit correct event data and draw selection outlines' ,  function ( done )  { 
921-         var  fig  =  require ( '@mocks/splom_0.json' ) ; 
922+         var  fig  =  Lib . extendDeep ( { } ,   require ( '@mocks/splom_0.json' ) ) ; 
922923        fig . layout  =  { 
923924            dragmode : 'select' , 
924925            width : 400 , 
@@ -1039,4 +1040,105 @@ describe('@gl Test splom select:', function() {
10391040        . catch ( failTest ) 
10401041        . then ( done ) ; 
10411042    } ) ; 
1043+ 
1044+     it ( 'should behave correctly during select->dblclick->pan scenarios' ,  function ( done )  { 
1045+         var  fig  =  Lib . extendDeep ( { } ,  require ( '@mocks/splom_0.json' ) ) ; 
1046+         fig . layout  =  { 
1047+             width : 400 , 
1048+             height : 400 , 
1049+             margin : { l : 0 ,  t : 0 ,  r : 0 ,  b : 0 } , 
1050+             grid : { xgap : 0 ,  ygap : 0 } 
1051+         } ; 
1052+ 
1053+         var  scene ; 
1054+ 
1055+         function  _assert ( msg ,  exp )  { 
1056+             expect ( scene . matrix . update ) . toHaveBeenCalledTimes ( exp . updateCnt ,  'update cnt' ) ; 
1057+             expect ( scene . matrix . draw ) . toHaveBeenCalledTimes ( exp . drawCnt ,  'draw cnt' ) ; 
1058+ 
1059+             expect ( scene . matrix . traces . length ) . toBe ( exp . matrixTraces ,  '# of regl-splom traces' ) ; 
1060+             expect ( scene . selectBatch ) . toEqual ( exp . selectBatch ,  'selectBatch' ) ; 
1061+             expect ( scene . unselectBatch ) . toEqual ( exp . unselectBatch ,  'unselectBatch' ) ; 
1062+ 
1063+             scene . matrix . update . calls . reset ( ) ; 
1064+             scene . matrix . draw . calls . reset ( ) ; 
1065+         } 
1066+ 
1067+         Plotly . plot ( gd ,  fig ) . then ( function ( )  { 
1068+             scene  =  gd . calcdata [ 0 ] [ 0 ] . t . _scene ; 
1069+             spyOn ( scene . matrix ,  'update' ) . and . callThrough ( ) ; 
1070+             spyOn ( scene . matrix ,  'draw' ) . and . callThrough ( ) ; 
1071+         } ) 
1072+         . then ( function ( )  { 
1073+             _assert ( 'base' ,  { 
1074+                 updateCnt : 0 , 
1075+                 drawCnt : 0 , 
1076+                 matrixTraces : 1 , 
1077+                 selectBatch : null , 
1078+                 unselectBatch : null 
1079+             } ) ; 
1080+         } ) 
1081+         . then ( function ( )  {  return  Plotly . relayout ( gd ,  'dragmode' ,  'select' ) ;  } ) 
1082+         . then ( function ( )  { 
1083+             _assert ( 'under dragmode:select' ,  { 
1084+                 updateCnt : 3 ,      // updates positions, viewport and style in 3 calls 
1085+                 drawCnt : 1 ,        // results in a 'plot' edit 
1086+                 matrixTraces : 2 , 
1087+                 selectBatch : [ ] , 
1088+                 unselectBatch : [ ] 
1089+             } ) ; 
1090+         } ) 
1091+         . then ( function ( )  {  return  _select ( [ [ 5 ,  5 ] ,  [ 100 ,  100 ] ] ) ;  } ) 
1092+         . then ( function ( )  { 
1093+             _assert ( 'after selection' ,  { 
1094+                 updateCnt : 0 , 
1095+                 drawCnt : 1 , 
1096+                 matrixTraces : 2 , 
1097+                 selectBatch : [ 1 ] , 
1098+                 unselectBatch : [ 0 ,  2 ] 
1099+             } ) ; 
1100+         } ) 
1101+         . then ( function ( )  {  return  Plotly . relayout ( gd ,  'dragmode' ,  'pan' ) ;  } ) 
1102+         . then ( function ( )  { 
1103+             _assert ( 'under dragmode:pan with active selection' ,  { 
1104+                 updateCnt : 0 , 
1105+                 drawCnt : 0 ,       // nothing here, this is a 'modebar' edit 
1106+                 matrixTraces : 2 , 
1107+                 selectBatch : [ 1 ] , 
1108+                 unselectBatch : [ 0 ,  2 ] 
1109+             } ) ; 
1110+         } ) 
1111+         . then ( function ( )  {  return  Plotly . relayout ( gd ,  'dragmode' ,  'select' ) ;  } ) 
1112+         . then ( function ( )  { 
1113+             _assert ( 'back dragmode:select' ,  { 
1114+                 updateCnt : 3 , 
1115+                 drawCnt : 1 ,        // a 'plot' edit (again) 
1116+                 matrixTraces : 2 , 
1117+                 selectBatch : [ 1 ] , 
1118+                 unselectBatch : [ 0 ,  2 ] 
1119+             } ) ; 
1120+         } ) 
1121+         . then ( function ( )  {  return  doubleClick ( 100 ,  100 ) ;  } ) 
1122+         . then ( function ( )  { 
1123+             _assert ( 'after dblclick clearing selection' ,  { 
1124+                 updateCnt : 0 , 
1125+                 drawCnt : 1 , 
1126+                 matrixTraces : 2 , 
1127+                 selectBatch : null , 
1128+                 unselectBatch : [ ] 
1129+             } ) ; 
1130+         } ) 
1131+         . then ( function ( )  {  return  Plotly . relayout ( gd ,  'dragmode' ,  'pan' ) ;  } ) 
1132+         . then ( function ( )  { 
1133+             _assert ( 'under dragmode:pan with NO active selection' ,  { 
1134+                 updateCnt : 1 ,        // to clear off 1 matrixTrace 
1135+                 drawCnt : 0 , 
1136+                 matrixTraces : 1 ,     // N.B. back to '1' here 
1137+                 selectBatch : null , 
1138+                 unselectBatch : [ ] 
1139+             } ) ; 
1140+         } ) 
1141+         . catch ( failTest ) 
1142+         . then ( done ) ; 
1143+     } ) ; 
10421144} ) ; 
0 commit comments