@@ -4,40 +4,110 @@ var Plotly = require('@lib/index');
4
4
var Fx = require ( '@src/components/fx' ) ;
5
5
var Lib = require ( '@src/lib' ) ;
6
6
7
+ var fail = require ( '../assets/fail_test' ) ;
7
8
var createGraphDiv = require ( '../assets/create_graph_div' ) ;
8
9
var destroyGraphDiv = require ( '../assets/destroy_graph_div' ) ;
10
+ var customMatchers = require ( '../assets/custom_matchers' ) ;
9
11
10
12
describe ( 'spikeline' , function ( ) {
11
13
'use strict' ;
12
14
13
- var mock = require ( '@mocks/19.json' ) ;
15
+ beforeAll ( function ( ) {
16
+ jasmine . addMatchers ( customMatchers ) ;
17
+ } ) ;
14
18
15
19
afterEach ( destroyGraphDiv ) ;
16
20
17
21
describe ( 'hover' , function ( ) {
18
- var mockCopy = Lib . extendDeep ( { } , mock ) ;
19
-
20
- mockCopy . layout . xaxis . showspikes = true ;
21
- mockCopy . layout . xaxis . spikemode = 'toaxis' ;
22
- mockCopy . layout . yaxis . showspikes = true ;
23
- mockCopy . layout . yaxis . spikemode = 'toaxis+marker' ;
24
- mockCopy . layout . xaxis2 . showspikes = true ;
25
- mockCopy . layout . xaxis2 . spikemode = 'toaxis' ;
26
- mockCopy . layout . hovermode = 'closest' ;
27
- beforeEach ( function ( done ) {
28
- Plotly . plot ( createGraphDiv ( ) , mockCopy . data , mockCopy . layout ) . then ( done ) ;
29
- } ) ;
22
+ var gd ;
23
+
24
+ function makeMock ( ) {
25
+ var _mock = Lib . extendDeep ( { } , require ( '@mocks/19.json' ) ) ;
26
+ _mock . layout . xaxis . showspikes = true ;
27
+ _mock . layout . xaxis . spikemode = 'toaxis' ;
28
+ _mock . layout . yaxis . showspikes = true ;
29
+ _mock . layout . yaxis . spikemode = 'toaxis+marker' ;
30
+ _mock . layout . xaxis2 . showspikes = true ;
31
+ _mock . layout . xaxis2 . spikemode = 'toaxis' ;
32
+ _mock . layout . hovermode = 'closest' ;
33
+ return _mock ;
34
+ }
35
+
36
+ function _hover ( evt , subplot ) {
37
+ Fx . hover ( gd , evt , subplot ) ;
38
+ delete gd . _lastHoverTime ;
39
+ }
40
+
41
+ function _assert ( lineExpect , circleExpect ) {
42
+ var TOL = 5 ;
43
+ var lines = d3 . selectAll ( 'line.spikeline' ) ;
44
+ var circles = d3 . selectAll ( 'circle.spikeline' ) ;
45
+
46
+ expect ( lines . size ( ) ) . toBe ( lineExpect . length , '# of line nodes' ) ;
47
+ expect ( circles . size ( ) ) . toBe ( circleExpect . length , '# of circle nodes' ) ;
30
48
31
- it ( 'draws lines and markers on enabled axes' , function ( ) {
32
- Fx . hover ( 'graph' , { xval : 2 , yval : 3 } , 'xy' ) ;
33
- expect ( d3 . selectAll ( 'line.spikeline' ) . size ( ) ) . toEqual ( 4 ) ;
34
- expect ( d3 . selectAll ( 'circle.spikeline' ) . size ( ) ) . toEqual ( 1 ) ;
49
+ lines . each ( function ( _ , i ) {
50
+ var sel = d3 . select ( this ) ;
51
+ [ 'x1' , 'y1' , 'x2' , 'y2' ] . forEach ( function ( d , j ) {
52
+ expect ( sel . attr ( d ) )
53
+ . toBeWithin ( lineExpect [ i ] [ j ] , TOL , 'line ' + i + ' attr ' + d ) ;
54
+ } ) ;
55
+ } ) ;
56
+
57
+ circles . each ( function ( _ , i ) {
58
+ var sel = d3 . select ( this ) ;
59
+ [ 'cx' , 'cy' ] . forEach ( function ( d , j ) {
60
+ expect ( sel . attr ( d ) )
61
+ . toBeWithin ( circleExpect [ i ] [ j ] , TOL , 'circle ' + i + ' attr ' + d ) ;
62
+ } ) ;
63
+ } ) ;
64
+ }
65
+
66
+ it ( 'draws lines and markers on enabled axes' , function ( done ) {
67
+ gd = createGraphDiv ( ) ;
68
+ var _mock = makeMock ( ) ;
69
+
70
+ Plotly . plot ( gd , _mock ) . then ( function ( ) {
71
+ _hover ( { xval : 2 , yval : 3 } , 'xy' ) ;
72
+ _assert (
73
+ [ [ 80 , 250 , 557 , 250 ] , [ 80 , 250 , 557 , 250 ] , [ 557 , 401 , 557 , 250 ] , [ 557 , 401 , 557 , 250 ] ] ,
74
+ [ [ 83 , 250 ] ]
75
+ ) ;
76
+ } )
77
+ . then ( function ( ) {
78
+ _hover ( { xval : 30 , yval : 40 } , 'x2y2' ) ;
79
+ _assert (
80
+ [ [ 820 , 220 , 820 , 167 ] , [ 820 , 220 , 820 , 167 ] ] ,
81
+ [ ]
82
+ ) ;
83
+ } )
84
+ . catch ( fail )
85
+ . then ( done ) ;
35
86
} ) ;
36
87
37
- it ( 'doesn\'t draw lines and markers on disabled axes' , function ( ) {
38
- Fx . hover ( 'graph' , { xval : 30 , yval : 40 } , 'x2y2' ) ;
39
- expect ( d3 . selectAll ( 'line.spikeline' ) . size ( ) ) . toEqual ( 2 ) ;
40
- expect ( d3 . selectAll ( 'circle.spikeline' ) . size ( ) ) . toEqual ( 0 ) ;
88
+ it ( 'draws lines and markers on enabled axes w/o tick labels' , function ( done ) {
89
+ gd = createGraphDiv ( ) ;
90
+ var _mock = makeMock ( ) ;
91
+
92
+ _mock . layout . xaxis . showticklabels = false ;
93
+ _mock . layout . yaxis . showticklabels = false ;
94
+
95
+ Plotly . plot ( gd , _mock ) . then ( function ( ) {
96
+ _hover ( { xval : 2 , yval : 3 } , 'xy' ) ;
97
+ _assert (
98
+ [ [ 80 , 250 , 557 , 250 ] , [ 80 , 250 , 557 , 250 ] , [ 557 , 401 , 557 , 250 ] , [ 557 , 401 , 557 , 250 ] ] ,
99
+ [ [ 83 , 250 ] ]
100
+ ) ;
101
+ } )
102
+ . then ( function ( ) {
103
+ _hover ( { xval : 30 , yval : 40 } , 'x2y2' ) ;
104
+ _assert (
105
+ [ [ 820 , 220 , 820 , 167 ] , [ 820 , 220 , 820 , 167 ] ] ,
106
+ [ ]
107
+ ) ;
108
+ } )
109
+ . catch ( fail )
110
+ . then ( done ) ;
41
111
} ) ;
42
112
} ) ;
43
113
} ) ;
0 commit comments