Skip to content

Commit 1fe3b08

Browse files
author
Robert Paskowitz
committed
New legend interaction tests
1 parent fb37088 commit 1fe3b08

File tree

1 file changed

+186
-0
lines changed

1 file changed

+186
-0
lines changed

test/jasmine/tests/legend_test.js

+186
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var Plotly = require('@lib/index');
22
var Plots = require('@src/plots/plots');
33
var Lib = require('@src/lib');
4+
var DBLCLICKDELAY = require('@src/constants/interactions').DBLCLICKDELAY;
45

56
var Legend = require('@src/components/legend');
67
var getLegendData = require('@src/components/legend/get_legend_data');
@@ -628,3 +629,188 @@ describe('legend restyle update', function() {
628629
});
629630
});
630631
});
632+
633+
describe('legend interaction', function() {
634+
'use strict';
635+
636+
describe('pie chart', function() {
637+
var mockCopy, gd, legendItems, legendItem, legendLabels, legendLabel;
638+
var testEntry = 2;
639+
640+
beforeAll(function(done) {
641+
var mock = require('@mocks/pie_simple.json');
642+
mockCopy = Lib.extendDeep({}, mock);
643+
gd = createGraphDiv();
644+
645+
Plotly.plot(gd, mockCopy.data, mockCopy.layout).then(function() {
646+
legendItems = d3.selectAll('rect.legendtoggle')[0];
647+
legendLabels = d3.selectAll('text.legendtext')[0];
648+
legendItem = legendItems[testEntry];
649+
legendLabel = legendLabels[testEntry].innerHTML;
650+
done();
651+
});
652+
});
653+
afterAll(function() {
654+
destroyGraphDiv();
655+
});
656+
describe('single click', function() {
657+
it('should hide slice', function(done) {
658+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
659+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
660+
setTimeout(function() {
661+
expect(gd._fullLayout.hiddenlabels.length).toBe(1);
662+
expect(gd._fullLayout.hiddenlabels[0]).toBe(legendLabel);
663+
done();
664+
}, DBLCLICKDELAY * 2);
665+
});
666+
it('should fade legend item', function() {
667+
expect(+legendItem.parentNode.style.opacity).toBeLessThan(1);
668+
});
669+
it('should unhide slice', function(done) {
670+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
671+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
672+
setTimeout(function() {
673+
expect(gd._fullLayout.hiddenlabels.length).toBe(0);
674+
done();
675+
}, DBLCLICKDELAY * 2);
676+
});
677+
it('should unfade legend item', function() {
678+
expect(+legendItem.parentNode.style.opacity).toBe(1);
679+
});
680+
});
681+
682+
describe('double click', function() {
683+
it('should hide other slices', function(done) {
684+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
685+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
686+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
687+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
688+
setTimeout(function() {
689+
expect(gd._fullLayout.hiddenlabels.length).toBe((legendItems.length - 1));
690+
expect(gd._fullLayout.hiddenlabels.indexOf(legendLabel)).toBe(-1);
691+
done();
692+
}, DBLCLICKDELAY);
693+
});
694+
it('should fade other legend items', function() {
695+
var legendItemi;
696+
for(var i = 0; i < legendItems.length; i++) {
697+
legendItemi = legendItems[i];
698+
if(i === testEntry) {
699+
expect(+legendItemi.parentNode.style.opacity).toBe(1);
700+
} else {
701+
expect(+legendItemi.parentNode.style.opacity).toBeLessThan(1);
702+
}
703+
}
704+
});
705+
it('should unhide all slices', function(done) {
706+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
707+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
708+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
709+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
710+
setTimeout(function() {
711+
expect(gd._fullLayout.hiddenlabels.length).toBe(0);
712+
done();
713+
}, DBLCLICKDELAY);
714+
});
715+
it('should unfade legend items', function() {
716+
var legendItemi;
717+
for(var i = 0; i < legendItems.length; i++) {
718+
legendItemi = legendItems[i];
719+
expect(+legendItemi.parentNode.style.opacity).toBe(1);
720+
}
721+
});
722+
});
723+
});
724+
describe('non-pie chart', function() {
725+
var mockCopy, gd, legendItems, legendItem;
726+
var testEntry = 2;
727+
728+
beforeAll(function(done) {
729+
var mock = require('@mocks/29.json');
730+
mockCopy = Lib.extendDeep({}, mock);
731+
gd = createGraphDiv();
732+
733+
Plotly.plot(gd, mockCopy.data, mockCopy.layout).then(function() {
734+
legendItems = d3.selectAll('rect.legendtoggle')[0];
735+
legendItem = legendItems[testEntry];
736+
done();
737+
});
738+
});
739+
afterAll(function() {
740+
destroyGraphDiv();
741+
});
742+
743+
describe('single click', function() {
744+
it('should hide series', function(done) {
745+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
746+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
747+
setTimeout(function() {
748+
expect(gd.data[2].visible).toBe('legendonly');
749+
done();
750+
}, DBLCLICKDELAY * 2);
751+
});
752+
it('should fade legend item', function() {
753+
expect(+legendItem.parentNode.style.opacity).toBeLessThan(1);
754+
});
755+
it('should unhide series', function(done) {
756+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
757+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
758+
setTimeout(function() {
759+
expect(gd.data[2].visible).toBe(true);
760+
done();
761+
}, DBLCLICKDELAY * 2);
762+
});
763+
it('should unfade legend item', function() {
764+
expect(+legendItem.parentNode.style.opacity).toBe(1);
765+
});
766+
});
767+
describe('double click', function() {
768+
it('should hide series', function(done) {
769+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
770+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
771+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
772+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
773+
setTimeout(function() {
774+
for(var i = 0; i < legendItems.length; i++) {
775+
if(i === testEntry) {
776+
expect(gd.data[i].visible).toBe(true);
777+
} else {
778+
expect(gd.data[i].visible).toBe('legendonly');
779+
}
780+
}
781+
done();
782+
}, DBLCLICKDELAY);
783+
});
784+
it('should fade legend item', function() {
785+
var legendItemi;
786+
for(var i = 0; i < legendItems.length; i++) {
787+
legendItemi = legendItems[i];
788+
if(i === testEntry) {
789+
expect(+legendItemi.parentNode.style.opacity).toBe(1);
790+
} else {
791+
expect(+legendItemi.parentNode.style.opacity).toBeLessThan(1);
792+
}
793+
}
794+
});
795+
it('should unhide series', function(done) {
796+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
797+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
798+
legendItem.dispatchEvent(new MouseEvent('mousedown'));
799+
legendItem.dispatchEvent(new MouseEvent('mouseup'));
800+
setTimeout(function() {
801+
for(var i = 0; i < legendItems.length; i++) {
802+
expect(gd.data[i].visible).toBe(true);
803+
}
804+
done();
805+
}, DBLCLICKDELAY);
806+
});
807+
it('should unfade legend items', function() {
808+
var legendItemi;
809+
for(var i = 0; i < legendItems.length; i++) {
810+
legendItemi = legendItems[i];
811+
expect(+legendItemi.parentNode.style.opacity).toBe(1);
812+
}
813+
});
814+
});
815+
});
816+
});

0 commit comments

Comments
 (0)