@@ -4,40 +4,110 @@ var Plotly = require('@lib/index');
44var Fx = require ( '@src/components/fx' ) ;
55var Lib = require ( '@src/lib' ) ;
66
7+ var fail = require ( '../assets/fail_test' ) ;
78var createGraphDiv = require ( '../assets/create_graph_div' ) ;
89var destroyGraphDiv = require ( '../assets/destroy_graph_div' ) ;
10+ var customMatchers = require ( '../assets/custom_matchers' ) ;
911
1012describe ( 'spikeline' , function ( ) {
1113 'use strict' ;
1214
13- var mock = require ( '@mocks/19.json' ) ;
15+ beforeAll ( function ( ) {
16+ jasmine . addMatchers ( customMatchers ) ;
17+ } ) ;
1418
1519 afterEach ( destroyGraphDiv ) ;
1620
1721 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' ) ;
3048
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 ) ;
3586 } ) ;
3687
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 ) ;
41111 } ) ;
42112 } ) ;
43113} ) ;
0 commit comments