Skip to content

Commit d4aad3f

Browse files
committed
add gl2d select/lasso tests
1 parent b92059a commit d4aad3f

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

test/jasmine/tests/gl2d_click_test.js

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,3 +444,149 @@ describe('Test hover and click interactions', function() {
444444
.then(done);
445445
});
446446
});
447+
448+
describe('Test gl2d lasso/select:', function() {
449+
var mockFancy = require('@mocks/gl2d_14.json');
450+
var mockFast = Lib.extendDeep({}, mockFancy, {
451+
data: [{mode: 'markers'}],
452+
layout: {
453+
xaxis: {type: 'linear'},
454+
yaxis: {type: 'linear'}
455+
}
456+
});
457+
458+
var gd;
459+
var selectPath = [[93, 193], [143, 193]];
460+
var lassoPath = [[316, 171], [318, 239], [335, 243], [328, 169]];
461+
var lassoPath2 = [[93, 193], [143, 193], [143, 500], [93, 500], [93, 193]];
462+
463+
afterEach(function() {
464+
Plotly.purge(gd);
465+
destroyGraphDiv();
466+
});
467+
468+
function drag(path) {
469+
var len = path.length;
470+
471+
mouseEvent('mousemove', path[0][0], path[0][1]);
472+
mouseEvent('mousedown', path[0][0], path[0][1]);
473+
474+
path.slice(1, len).forEach(function(pt) {
475+
mouseEvent('mousemove', pt[0], pt[1]);
476+
});
477+
478+
mouseEvent('mouseup', path[len - 1][0], path[len - 1][1]);
479+
}
480+
481+
function select(path) {
482+
return new Promise(function(resolve, reject) {
483+
gd.once('plotly_selected', resolve);
484+
setTimeout(function() { reject('did not trigger *plotly_selected*');}, 100);
485+
drag(path);
486+
});
487+
}
488+
489+
function assertEventData(actual, expected) {
490+
expect(actual.points.length).toBe(expected.points.length);
491+
492+
expected.points.forEach(function(e, i) {
493+
var a = actual.points[i];
494+
if(a) {
495+
expect(a.x).toBe(e.x, 'x');
496+
expect(a.y).toBe(e.y, 'y');
497+
}
498+
});
499+
}
500+
501+
function countGlObjects() {
502+
return gd._fullLayout._plots.xy._scene2d.glplot.objects.length;
503+
}
504+
505+
it('should work under fast mode with *select* dragmode', function(done) {
506+
var _mock = Lib.extendDeep({}, mockFast);
507+
_mock.layout.dragmode = 'select';
508+
gd = createGraphDiv();
509+
510+
Plotly.plot(gd, _mock).then(function() {
511+
expect(countGlObjects()).toBe(1, 'has on gl-scatter2d object');
512+
513+
return select(selectPath);
514+
})
515+
.then(function(eventData) {
516+
assertEventData(eventData, {
517+
points: [
518+
{x: 3.911, y: 0.401},
519+
{x: 5.34, y: 0.403},
520+
{x: 6.915, y: 0.411}
521+
]
522+
});
523+
expect(countGlObjects()).toBe(2, 'adds a dimmed gl-scatter2d objects');
524+
})
525+
.catch(fail)
526+
.then(done);
527+
});
528+
529+
it('should work under fast mode with *lasso* dragmode', function(done) {
530+
var _mock = Lib.extendDeep({}, mockFast);
531+
_mock.layout.dragmode = 'lasso';
532+
gd = createGraphDiv();
533+
534+
Plotly.plot(gd, _mock).then(function() {
535+
expect(countGlObjects()).toBe(1);
536+
537+
return select(lassoPath2);
538+
})
539+
.then(function(eventData) {
540+
assertEventData(eventData, {
541+
points: [
542+
{x: 3.911, y: 0.401},
543+
{x: 5.34, y: 0.403},
544+
{x: 6.915, y: 0.411}
545+
]
546+
});
547+
expect(countGlObjects()).toBe(2);
548+
})
549+
.catch(fail)
550+
.then(done);
551+
});
552+
553+
it('should work under fancy mode with *select* dragmode', function(done) {
554+
var _mock = Lib.extendDeep({}, mockFancy);
555+
_mock.layout.dragmode = 'select';
556+
gd = createGraphDiv();
557+
558+
Plotly.plot(gd, _mock).then(function() {
559+
expect(countGlObjects()).toBe(2, 'has a gl-line2d and a gl-scatter2d-sdf');
560+
561+
return select(selectPath);
562+
})
563+
.then(function(eventData) {
564+
assertEventData(eventData, {
565+
points: [{x: 0.004, y: 12.5}]
566+
});
567+
expect(countGlObjects()).toBe(2, 'only changes colors of gl-scatter2d-sdf object');
568+
})
569+
.catch(fail)
570+
.then(done);
571+
});
572+
573+
it('should work under fancy mode with *lasso* dragmode', function(done) {
574+
var _mock = Lib.extendDeep({}, mockFancy);
575+
_mock.layout.dragmode = 'lasso';
576+
gd = createGraphDiv();
577+
578+
Plotly.plot(gd, _mock).then(function() {
579+
expect(countGlObjects()).toBe(2, 'has a gl-line2d and a gl-scatter2d-sdf');
580+
581+
return select(lassoPath);
582+
})
583+
.then(function(eventData) {
584+
assertEventData(eventData, {
585+
points: [{ x: 0.099, y: 2.75 }]
586+
});
587+
expect(countGlObjects()).toBe(2, 'only changes colors of gl-scatter2d-sdf object');
588+
})
589+
.catch(fail)
590+
.then(done);
591+
});
592+
});

0 commit comments

Comments
 (0)