@@ -6,6 +6,8 @@ var d3 = require('d3');
6
6
var createGraphDiv = require ( '../assets/create_graph_div' ) ;
7
7
var destroyGraphDiv = require ( '../assets/destroy_graph_div' ) ;
8
8
var supplyAllDefaults = require ( '../assets/supply_defaults' ) ;
9
+ var hover = require ( '../assets/hover' ) ;
10
+ var assertHoverLabelContent = require ( '../assets/custom_assertions' ) . assertHoverLabelContent ;
9
11
var failTest = require ( '../assets/fail_test' ) ;
10
12
11
13
var mock0 = {
@@ -426,15 +428,22 @@ describe('finance charts calc', function() {
426
428
addJunk ( trace1 ) ;
427
429
428
430
var out = _calcRaw ( [ trace0 , trace1 ] ) ;
429
- var indices = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ;
431
+ var indices = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , undefined , undefined , undefined , undefined ] ;
430
432
var i = 'increasing' ;
431
433
var d = 'decreasing' ;
432
- var directions = [ i , d , d , i , d , i , d , i ] ;
434
+ var directions = [ i , d , d , i , d , i , d , i , undefined , undefined , undefined , undefined ] ;
435
+ var empties = [
436
+ undefined , undefined , undefined , undefined ,
437
+ undefined , undefined , undefined , undefined ,
438
+ true , true , true , true
439
+ ] ;
433
440
434
441
expect ( mapGet ( out [ 0 ] , 'pos' ) ) . toEqual ( indices ) ;
435
442
expect ( mapGet ( out [ 0 ] , 'dir' ) ) . toEqual ( directions ) ;
436
443
expect ( mapGet ( out [ 1 ] , 'pos' ) ) . toEqual ( indices ) ;
437
444
expect ( mapGet ( out [ 1 ] , 'dir' ) ) . toEqual ( directions ) ;
445
+ expect ( mapGet ( out [ 0 ] , 'empty' ) ) . toEqual ( empties ) ;
446
+ expect ( mapGet ( out [ 1 ] , 'empty' ) ) . toEqual ( empties ) ;
438
447
} ) ;
439
448
440
449
it ( 'should work with *filter* transforms' , function ( ) {
@@ -1104,8 +1113,8 @@ describe('finance trace hover:', function() {
1104
1113
margin : { t : 0 , b : 0 , l : 0 , r : 0 , pad : 0 }
1105
1114
} , specs . layout || { } ) ;
1106
1115
1107
- var xval = 'xval' in specs ? specs . xvals : 0 ;
1108
- var yval = 'yval' in specs ? specs . yvals : 1 ;
1116
+ var xval = 'xval' in specs ? specs . xval : 0 ;
1117
+ var yval = 'yval' in specs ? specs . yval : 1 ;
1109
1118
var hovermode = layout . hovermode || 'x' ;
1110
1119
1111
1120
return Plotly . plot ( gd , data , layout ) . then ( function ( ) {
@@ -1127,7 +1136,6 @@ describe('finance trace hover:', function() {
1127
1136
var actual = results [ 0 ] ;
1128
1137
var exp = specs . exp ;
1129
1138
1130
-
1131
1139
for ( var k in exp ) {
1132
1140
var msg = '- key ' + k ;
1133
1141
expect ( actual [ k ] ) . toBe ( exp [ k ] , msg ) ;
@@ -1178,6 +1186,21 @@ describe('finance trace hover:', function() {
1178
1186
exp : {
1179
1187
extraText : 'A'
1180
1188
}
1189
+ } , {
1190
+ type : type ,
1191
+ desc : 'when high === low in *closest* mode' ,
1192
+ traces : [ {
1193
+ high : [ 6 , null , 7 , 8 ] ,
1194
+ close : [ 4 , null , 7 , 8 ] ,
1195
+ low : [ 5 , null , 7 , 8 ] ,
1196
+ open : [ 3 , null , 7 , 8 ]
1197
+ } ] ,
1198
+ layout : { hovermode : 'closest' } ,
1199
+ xval : 2 ,
1200
+ yval : 6.9 ,
1201
+ exp : {
1202
+ extraText : 'open: 7<br>high: 7<br>low: 7<br>close: 7 ▲'
1203
+ }
1181
1204
} ]
1182
1205
. forEach ( function ( specs ) {
1183
1206
it ( 'should generate correct hover labels ' + type + ' - ' + specs . desc , function ( done ) {
@@ -1186,3 +1209,65 @@ describe('finance trace hover:', function() {
1186
1209
} ) ;
1187
1210
} ) ;
1188
1211
} ) ;
1212
+
1213
+ describe ( 'finance trace hover via Fx.hover():' , function ( ) {
1214
+ var gd ;
1215
+
1216
+ beforeEach ( function ( ) { gd = createGraphDiv ( ) ; } ) ;
1217
+
1218
+ afterEach ( destroyGraphDiv ) ;
1219
+
1220
+ [ 'candlestick' , 'ohlc' ] . forEach ( function ( type ) {
1221
+ it ( 'should pick correct ' + type + ' item' , function ( done ) {
1222
+ var x = [ 'hover ok!' , 'time2' , 'hover off by 1' , 'time4' ] ;
1223
+
1224
+ Plotly . newPlot ( gd , [ {
1225
+ x : x ,
1226
+ high : [ 6 , null , 7 , 8 ] ,
1227
+ close : [ 4 , null , 7 , 8 ] ,
1228
+ low : [ 5 , null , 7 , 8 ] ,
1229
+ open : [ 3 , null , 7 , 8 ] ,
1230
+ type : type
1231
+ } , {
1232
+ x : x ,
1233
+ y : [ 1 , null , 2 , 3 ] ,
1234
+ type : 'bar'
1235
+ } ] , {
1236
+ xaxis : { rangeslider : { visible : false } } ,
1237
+ width : 500 ,
1238
+ height : 500
1239
+ } )
1240
+ . then ( function ( ) {
1241
+ gd . on ( 'plotly_hover' , function ( d ) {
1242
+ Plotly . Fx . hover ( gd , [
1243
+ { curveNumber : 0 , pointNumber : d . points [ 0 ] . pointNumber } ,
1244
+ { curveNumber : 1 , pointNumber : d . points [ 0 ] . pointNumber }
1245
+ ] ) ;
1246
+ } ) ;
1247
+ } )
1248
+ . then ( function ( ) { hover ( 281 , 252 ) ; } )
1249
+ . then ( function ( ) {
1250
+ assertHoverLabelContent ( {
1251
+ nums : [
1252
+ 'hover off by 1\nopen: 7\nhigh: 7\nlow: 7\nclose: 7 ▲' ,
1253
+ '(hover off by 1, 2)'
1254
+ ] ,
1255
+ name : [ 'trace 0' , 'trace 1' ]
1256
+ } , 'hover over 3rd items (aka 2nd visible items)' ) ;
1257
+ } )
1258
+ . then ( function ( ) {
1259
+ Lib . clearThrottle ( ) ;
1260
+ return Plotly . react ( gd , [ gd . data [ 0 ] ] , gd . layout ) ;
1261
+ } )
1262
+ . then ( function ( ) { hover ( 281 , 252 ) ; } )
1263
+ . then ( function ( ) {
1264
+ assertHoverLabelContent ( {
1265
+ nums : 'hover off by 1\nopen: 7\nhigh: 7\nlow: 7\nclose: 7 ▲' ,
1266
+ name : ''
1267
+ } , 'after removing 2nd trace' ) ;
1268
+ } )
1269
+ . catch ( failTest )
1270
+ . then ( done ) ;
1271
+ } ) ;
1272
+ } ) ;
1273
+ } ) ;
0 commit comments