@@ -213,13 +213,14 @@ describe('Test gl plot interactions', function() {
213
213
214
214
describe ( 'gl2d plots' , function ( ) {
215
215
var mock = require ( '@mocks/gl2d_10.json' ) ,
216
- relayoutCallback ;
216
+ modeBar , relayoutCallback ;
217
217
218
218
beforeEach ( function ( done ) {
219
219
gd = createGraphDiv ( ) ;
220
220
221
221
Plotly . plot ( gd , mock . data , mock . layout ) . then ( function ( ) {
222
222
223
+ modeBar = gd . _fullLayout . _modeBar ;
223
224
relayoutCallback = jasmine . createSpy ( 'relayoutCallback' ) ;
224
225
225
226
gd . on ( 'plotly_relayout' , relayoutCallback ) ;
@@ -235,18 +236,85 @@ describe('Test gl plot interactions', function() {
235
236
236
237
it ( 'should respond to drag interactions' , function ( done ) {
237
238
238
- var sceneTarget = gd . querySelector ( '.plot-container .gl-container canvas' ) ;
239
+ jasmine . addMatchers ( customMatchers ) ;
240
+
241
+ var precision = 5 ;
242
+
243
+ var buttonPan = selectButton ( modeBar , 'pan2d' ) ;
244
+
245
+ var originalX = [ - 0.022068095838587643 , 5.022068095838588 ] ;
246
+ var originalY = [ - 0.21331533513634046 , 5.851205650049042 ] ;
247
+
248
+ var newX = [ - 0.23224043715846995 , 4.811895754518705 ] ;
249
+ var newY = [ - 1.2962655110623016 , 4.768255474123081 ] ;
239
250
240
- // Drag scene
241
- sceneTarget . dispatchEvent ( new MouseEvent ( 'mousedown' , { x : 0 , y : 0 } ) ) ;
242
- sceneTarget . dispatchEvent ( new MouseEvent ( 'mousemove' , { x : 100 , y : 100 } ) ) ;
243
- sceneTarget . dispatchEvent ( new MouseEvent ( 'mouseup' , { x : 100 , y : 100 } ) ) ;
251
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
252
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
253
+
254
+ // Switch to pan mode
255
+ expect ( buttonPan . isActive ( ) ) . toBe ( false ) ; // initially, zoom is active
256
+ buttonPan . click ( ) ;
257
+ expect ( buttonPan . isActive ( ) ) . toBe ( true ) ; // switched on dragmode
258
+
259
+ // Switching mode must not change visible range
260
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
261
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
244
262
245
263
setTimeout ( function ( ) {
246
264
247
- expect ( relayoutCallback ) . toHaveBeenCalledTimes ( 1 ) ;
265
+ mouseEvent ( 'mousemove' , 200 , 200 ) ;
248
266
249
- done ( ) ;
267
+ relayoutCallback . calls . reset ( ) ;
268
+
269
+ // Drag scene along the X axis
270
+
271
+ mouseEvent ( 'mousemove' , 220 , 200 , { buttons : 1 } ) ;
272
+
273
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( newX , precision ) ;
274
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
275
+
276
+ // Drag scene back along the X axis
277
+
278
+ mouseEvent ( 'mousemove' , 200 , 200 , { buttons : 1 } ) ;
279
+
280
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
281
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
282
+
283
+ // Drag scene along the Y axis
284
+
285
+ mouseEvent ( 'mousemove' , 200 , 150 , { buttons : 1 } ) ;
286
+
287
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
288
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( newY , precision ) ;
289
+
290
+ // Drag scene back along the Y axis
291
+
292
+ mouseEvent ( 'mousemove' , 200 , 200 , { buttons : 1 } ) ;
293
+
294
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
295
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
296
+
297
+ // Drag scene along both the X and Y axis
298
+
299
+ mouseEvent ( 'mousemove' , 220 , 150 , { buttons : 1 } ) ;
300
+
301
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( newX , precision ) ;
302
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( newY , precision ) ;
303
+
304
+ // Drag scene back along the X and Y axis
305
+
306
+ mouseEvent ( 'mousemove' , 200 , 200 , { buttons : 1 } ) ;
307
+
308
+ expect ( gd . layout . xaxis . range ) . toBeCloseToArray ( originalX , precision ) ;
309
+ expect ( gd . layout . yaxis . range ) . toBeCloseToArray ( originalY , precision ) ;
310
+
311
+ setTimeout ( function ( ) {
312
+
313
+ expect ( relayoutCallback ) . toHaveBeenCalledTimes ( 6 ) ; // X and back; Y and back; XY and back
314
+
315
+ done ( ) ;
316
+
317
+ } , MODEBAR_DELAY ) ;
250
318
251
319
} , MODEBAR_DELAY ) ;
252
320
} ) ;
@@ -391,7 +459,6 @@ describe('Test gl plot interactions', function() {
391
459
sceneTarget = gd . querySelector ( '.svg-container .gl-container #scene canvas' ) ,
392
460
sceneTarget2 = gd . querySelector ( '.svg-container .gl-container #scene2 canvas' ) ;
393
461
394
-
395
462
expect ( sceneLayout . camera . eye )
396
463
. toEqual ( { x : 0.1 , y : 0.1 , z : 1 } ) ;
397
464
expect ( sceneLayout2 . camera . eye )
0 commit comments