Skip to content

Commit b974eab

Browse files
committed
add toBeClassed custom matcher
- to easily test all items in class list while not having to worry about class name ordering.
1 parent 8e6032d commit b974eab

File tree

3 files changed

+40
-40
lines changed

3 files changed

+40
-40
lines changed

test/jasmine/assets/custom_matchers.js

+25
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,31 @@ var matchers = {
149149
msgExtra
150150
].join(' ');
151151

152+
return {
153+
pass: passed,
154+
message: message
155+
};
156+
}
157+
};
158+
},
159+
160+
toBeClassed: function() {
161+
return {
162+
compare: function(node, _expected, msgExtra) {
163+
var actual = node.classList;
164+
var expected = Array.isArray(_expected) ? _expected : [_expected];
165+
166+
var passed = (
167+
actual.length === expected.length &&
168+
expected.every(function(e) { return actual.contains(e); })
169+
);
170+
171+
var message = [
172+
'Expected classList', '[' + actual + ']',
173+
'to have classes', expected,
174+
msgExtra
175+
].join(' ');
176+
152177
return {
153178
pass: passed,
154179
message: message

test/jasmine/tests/cartesian_test.js

+5-10
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ describe('restyle', function() {
2828

2929
// First is tozero, second is tonext:
3030
expect(d3.selectAll('g.trace.scatter .js-fill').size()).toEqual(2);
31-
expect(fills[0].classList.contains('js-tozero')).toBe(true);
32-
expect(fills[0].classList.contains('js-tonext')).toBe(false);
33-
expect(fills[1].classList.contains('js-tozero')).toBe(false);
34-
expect(fills[1].classList.contains('js-tonext')).toBe(true);
31+
expect(fills[0]).toBeClassed(['js-fill', 'js-tozero']);
32+
expect(fills[1]).toBeClassed(['js-fill', 'js-tonext']);
3533

3634
firstToZero = fills[0];
3735
firstToNext = fills[1];
@@ -40,8 +38,7 @@ describe('restyle', function() {
4038
}).then(function() {
4139
// Trace 1 hidden leaves only trace zero's tozero fill:
4240
expect(d3.selectAll('g.trace.scatter .js-fill').size()).toEqual(1);
43-
expect(fills[0].classList.contains('js-tozero')).toBe(true);
44-
expect(fills[0].classList.contains('js-tonext')).toBe(false);
41+
expect(fills[0]).toBeClassed(['js-fill', 'js-tozero']);
4542
}).then(function() {
4643
return Plotly.restyle(gd, {visible: [true]}, [1]);
4744
}).then(function() {
@@ -50,10 +47,8 @@ describe('restyle', function() {
5047

5148
// First is tozero, second is tonext:
5249
expect(d3.selectAll('g.trace.scatter .js-fill').size()).toEqual(2);
53-
expect(fills[0].classList.contains('js-tozero')).toBe(true);
54-
expect(fills[0].classList.contains('js-tonext')).toBe(false);
55-
expect(fills[1].classList.contains('js-tozero')).toBe(false);
56-
expect(fills[1].classList.contains('js-tonext')).toBe(true);
50+
expect(fills[0]).toBeClassed(['js-fill', 'js-tozero']);
51+
expect(fills[1]).toBeClassed(['js-fill', 'js-tonext']);
5752

5853
secondToZero = fills[0];
5954
secondToNext = fills[1];

test/jasmine/tests/click_test.js

+10-30
Original file line numberDiff line numberDiff line change
@@ -418,9 +418,7 @@ describe('Test click interactions:', function() {
418418
var node = document.querySelector('rect.nwdrag');
419419
var pos = getRectCenter(node);
420420

421-
expect(node.classList[1]).toBe('drag');
422-
expect(node.classList[0]).toBe('nwdrag');
423-
expect(node.classList[2]).toBe('cursor-nw-resize');
421+
expect(node).toBeClassed(['drag', 'nwdrag', 'cursor-nw-resize']);
424422

425423
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
426424
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -442,9 +440,7 @@ describe('Test click interactions:', function() {
442440
var node = document.querySelector('rect.nedrag');
443441
var pos = getRectCenter(node);
444442

445-
expect(node.classList[1]).toBe('drag');
446-
expect(node.classList[0]).toBe('nedrag');
447-
expect(node.classList[2]).toBe('cursor-ne-resize');
443+
expect(node).toBeClassed(['drag', 'nedrag', 'cursor-ne-resize']);
448444

449445
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
450446
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -466,9 +462,7 @@ describe('Test click interactions:', function() {
466462
var node = document.querySelector('rect.swdrag');
467463
var pos = getRectCenter(node);
468464

469-
expect(node.classList[1]).toBe('drag');
470-
expect(node.classList[0]).toBe('swdrag');
471-
expect(node.classList[2]).toBe('cursor-sw-resize');
465+
expect(node).toBeClassed(['drag', 'swdrag', 'cursor-sw-resize']);
472466

473467
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
474468
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -490,9 +484,7 @@ describe('Test click interactions:', function() {
490484
var node = document.querySelector('rect.sedrag');
491485
var pos = getRectCenter(node);
492486

493-
expect(node.classList[1]).toBe('drag');
494-
expect(node.classList[0]).toBe('sedrag');
495-
expect(node.classList[2]).toBe('cursor-se-resize');
487+
expect(node).toBeClassed(['drag', 'sedrag', 'cursor-se-resize']);
496488

497489
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
498490
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -514,9 +506,7 @@ describe('Test click interactions:', function() {
514506
var node = document.querySelector('rect.ewdrag');
515507
var pos = getRectCenter(node);
516508

517-
expect(node.classList[1]).toBe('drag');
518-
expect(node.classList[0]).toBe('ewdrag');
519-
expect(node.classList[2]).toBe('cursor-ew-resize');
509+
expect(node).toBeClassed(['drag', 'ewdrag', 'cursor-ew-resize']);
520510

521511
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
522512
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -538,9 +528,7 @@ describe('Test click interactions:', function() {
538528
var node = document.querySelector('rect.wdrag');
539529
var pos = getRectCenter(node);
540530

541-
expect(node.classList[1]).toBe('drag');
542-
expect(node.classList[0]).toBe('wdrag');
543-
expect(node.classList[2]).toBe('cursor-w-resize');
531+
expect(node).toBeClassed(['drag', 'wdrag', 'cursor-w-resize']);
544532

545533
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
546534
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -562,9 +550,7 @@ describe('Test click interactions:', function() {
562550
var node = document.querySelector('rect.edrag');
563551
var pos = getRectCenter(node);
564552

565-
expect(node.classList[1]).toBe('drag');
566-
expect(node.classList[0]).toBe('edrag');
567-
expect(node.classList[2]).toBe('cursor-e-resize');
553+
expect(node).toBeClassed(['drag', 'edrag', 'cursor-e-resize']);
568554

569555
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
570556
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -586,9 +572,7 @@ describe('Test click interactions:', function() {
586572
var node = document.querySelector('rect.nsdrag');
587573
var pos = getRectCenter(node);
588574

589-
expect(node.classList[1]).toBe('drag');
590-
expect(node.classList[0]).toBe('nsdrag');
591-
expect(node.classList[2]).toBe('cursor-ns-resize');
575+
expect(node).toBeClassed(['drag', 'nsdrag', 'cursor-ns-resize']);
592576

593577
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
594578
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -610,9 +594,7 @@ describe('Test click interactions:', function() {
610594
var node = document.querySelector('rect.sdrag');
611595
var pos = getRectCenter(node);
612596

613-
expect(node.classList[1]).toBe('drag');
614-
expect(node.classList[0]).toBe('sdrag');
615-
expect(node.classList[2]).toBe('cursor-s-resize');
597+
expect(node).toBeClassed(['drag', 'sdrag', 'cursor-s-resize']);
616598

617599
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
618600
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);
@@ -634,9 +616,7 @@ describe('Test click interactions:', function() {
634616
var node = document.querySelector('rect.ndrag');
635617
var pos = getRectCenter(node);
636618

637-
expect(node.classList[1]).toBe('drag');
638-
expect(node.classList[0]).toBe('ndrag');
639-
expect(node.classList[2]).toBe('cursor-n-resize');
619+
expect(node).toBeClassed(['drag', 'ndrag', 'cursor-n-resize']);
640620

641621
expect(gd.layout.xaxis.range).toBeCloseToArray(autoRangeX);
642622
expect(gd.layout.yaxis.range).toBeCloseToArray(autoRangeY);

0 commit comments

Comments
 (0)