Skip to content

Commit 80662d4

Browse files
committed
fix selectedpoints for q1/median/q3 traces + add hover/select tests
1 parent bc9d121 commit 80662d4

File tree

3 files changed

+143
-1
lines changed

3 files changed

+143
-1
lines changed

src/lib/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,9 @@ lib.tagSelected = function(calcTrace, trace, ptNumber2cdIndex) {
584584
for(var i = 0; i < selectedpoints.length; i++) {
585585
var ptIndex = selectedpoints[i];
586586

587-
if(lib.isIndex(ptIndex)) {
587+
if(lib.isIndex(ptIndex) ||
588+
(lib.isArrayOrTypedArray(ptIndex) && lib.isIndex(ptIndex[0]) && lib.isIndex(ptIndex[1]))
589+
) {
588590
var ptNumber = ptIndex2ptNumber ? ptIndex2ptNumber[ptIndex] : ptIndex;
589591
var cdIndex = ptNumber2cdIndex ? ptNumber2cdIndex[ptNumber] : ptNumber;
590592

test/jasmine/tests/box_test.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,72 @@ describe('Test box hover:', function() {
753753
nums: ['median: 2', 'q1: 1.5', 'q3: 2.5', 'max: 3', 'min: 1'],
754754
name: ['', '', '', '', ''],
755755
axis: 'trace 0'
756+
}, {
757+
desc: 'q1/median/q3 signature on boxes',
758+
mock: {
759+
data: [{
760+
type: 'box',
761+
x0: 'A',
762+
q1: [1],
763+
median: [2],
764+
q3: [3]
765+
}],
766+
layout: {
767+
width: 400,
768+
height: 400
769+
}
770+
},
771+
pos: [200, 200],
772+
nums: ['median: 2', 'q1: 1', 'q3: 3'],
773+
name: ['', '', ''],
774+
axis: 'A'
775+
}, {
776+
desc: 'q1/median/q3 signature on points',
777+
mock: {
778+
data: [{
779+
type: 'box',
780+
x0: 'A',
781+
q1: [1],
782+
median: [2],
783+
q3: [3],
784+
y: [[0, 1, 2, 3, 4]],
785+
hoveron: 'points',
786+
pointpos: 0
787+
}],
788+
layout: {
789+
width: 400,
790+
height: 400,
791+
margin: {l: 0, t: 0, b: 0, r: 0}
792+
}
793+
},
794+
pos: [200, 200],
795+
nums: '2',
796+
name: '',
797+
axis: 'A'
798+
}, {
799+
desc: 'q1/median/q3 signature on points + hovertemplate',
800+
mock: {
801+
data: [{
802+
type: 'box',
803+
x0: 'A',
804+
q1: [1],
805+
median: [2],
806+
q3: [3],
807+
y: [[0, 1, 2, 3, 4]],
808+
hoveron: 'points',
809+
pointpos: 0,
810+
hovertemplate: '%{x} | %{y}<extra>%{pointNumber[0]} | %{pointNumber[1]}</extra>'
811+
}],
812+
layout: {
813+
width: 400,
814+
height: 400,
815+
margin: {l: 0, t: 0, b: 0, r: 0}
816+
}
817+
},
818+
pos: [200, 200],
819+
nums: 'A | 2',
820+
name: '0 | 2',
821+
axis: 'A'
756822
}].forEach(function(specs) {
757823
it('should generate correct hover labels ' + specs.desc, function(done) {
758824
run(specs).catch(failTest).then(done);
@@ -1306,5 +1372,30 @@ describe('Test box calc', function() {
13061372
]]
13071373
);
13081374
});
1375+
1376+
it('should tag selected sample points', function() {
1377+
var cd = _calc({
1378+
q1: [1], median: [2], q3: [3],
1379+
x: [[1, 3, 2]]
1380+
});
1381+
_assert('base case', cd[0],
1382+
['pts'],
1383+
[[{v: 1, i: [0, 0]}, {v: 2, i: [0, 2]}, {v: 3, i: [0, 1]}]]
1384+
);
1385+
1386+
cd = _calc({
1387+
q1: [1], median: [2], q3: [3],
1388+
x: [[1, 3, 2]],
1389+
selectedpoints: [[0, 1]]
1390+
});
1391+
_assert('with set selectedpoints', cd[0],
1392+
['pts'],
1393+
[[
1394+
{v: 1, i: [0, 0]},
1395+
{v: 2, i: [0, 2]},
1396+
{v: 3, i: [0, 1], selected: 1}
1397+
]]
1398+
);
1399+
});
13091400
});
13101401
});

test/jasmine/tests/select_test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2692,6 +2692,55 @@ describe('Test select box and lasso per trace:', function() {
26922692
.then(done);
26932693
});
26942694

2695+
it('@flaky should work for box traces (q1/median/q3 case)', function(done) {
2696+
var assertPoints = makeAssertPoints(['curveNumber', 'y', 'x']);
2697+
var assertSelectedPoints = makeAssertSelectedPoints();
2698+
2699+
var fig = {
2700+
data: [{
2701+
type: 'box',
2702+
x0: 'A',
2703+
q1: [1],
2704+
median: [2],
2705+
q3: [3],
2706+
y: [[0, 1, 2, 3, 4]],
2707+
pointpos: 0,
2708+
}],
2709+
layout: {
2710+
width: 500,
2711+
height: 500,
2712+
dragmode: 'lasso'
2713+
}
2714+
};
2715+
2716+
Plotly.plot(gd, fig)
2717+
.then(function() {
2718+
return _run(
2719+
[[200, 200], [400, 200], [400, 350], [200, 350], [200, 200]],
2720+
function() {
2721+
assertPoints([ [0, 1, undefined], [0, 2, undefined] ]);
2722+
assertSelectedPoints({ 0: [[0, 1], [0, 2]] });
2723+
},
2724+
null, LASSOEVENTS, 'box lasso'
2725+
);
2726+
})
2727+
.then(function() {
2728+
return Plotly.relayout(gd, 'dragmode', 'select');
2729+
})
2730+
.then(function() {
2731+
return _run(
2732+
[[200, 200], [400, 300]],
2733+
function() {
2734+
assertPoints([ [0, 2, undefined] ]);
2735+
assertSelectedPoints({ 0: [[0, 2]] });
2736+
},
2737+
null, BOXEVENTS, 'box select'
2738+
);
2739+
})
2740+
.catch(failTest)
2741+
.then(done);
2742+
});
2743+
26952744
it('@flaky should work for violin traces', function(done) {
26962745
var assertPoints = makeAssertPoints(['curveNumber', 'y', 'x']);
26972746
var assertSelectedPoints = makeAssertSelectedPoints();

0 commit comments

Comments
 (0)