@@ -86,6 +86,33 @@ describe('filter transforms defaults:', function() {
86
86
expect ( traceOut . transforms [ 2 ] . target ) . toEqual ( 'x' ) ;
87
87
expect ( traceOut . transforms [ 3 ] . target ) . toEqual ( 'marker.color' ) ;
88
88
} ) ;
89
+
90
+ it ( 'supplyTraceDefaults should set *enabled:false* and return early when *target* is an empty array' , function ( ) {
91
+ // see https://github.com/plotly/plotly.js/issues/2908
92
+ // this solves multiple problems downstream
93
+
94
+ traceIn = {
95
+ x : [ 1 , 2 , 3 ] ,
96
+ transforms : [ {
97
+ type : 'filter' ,
98
+ target : [ ]
99
+ } ]
100
+ } ;
101
+ traceOut = Plots . supplyTraceDefaults ( traceIn , { type : 'scatter' } , 0 , fullLayout ) ;
102
+ expect ( traceOut . transforms [ 0 ] . target ) . toEqual ( [ ] ) ;
103
+ expect ( traceOut . transforms [ 0 ] . enabled ) . toBe ( false , 'set to false!' ) ;
104
+
105
+ traceIn = {
106
+ x : new Float32Array ( [ 1 , 2 , 3 ] ) ,
107
+ transforms : [ {
108
+ type : 'filter' ,
109
+ target : new Float32Array ( )
110
+ } ]
111
+ } ;
112
+ traceOut = Plots . supplyTraceDefaults ( traceIn , { type : 'scatter' } , 0 , fullLayout ) ;
113
+ expect ( traceOut . transforms [ 0 ] . target ) . toEqual ( new Float32Array ( ) ) ;
114
+ expect ( traceOut . transforms [ 0 ] . enabled ) . toBe ( false , 'set to false!' ) ;
115
+ } ) ;
89
116
} ) ;
90
117
91
118
describe ( 'filter transforms calc:' , function ( ) {
@@ -1292,3 +1319,69 @@ describe('filter transforms interactions', function() {
1292
1319
. then ( done ) ;
1293
1320
} ) ;
1294
1321
} ) ;
1322
+
1323
+ describe ( 'filter resulting in empty coordinate arrays' , function ( ) {
1324
+ var gd ;
1325
+
1326
+ afterEach ( function ( done ) {
1327
+ Plotly . purge ( gd ) ;
1328
+ setTimeout ( function ( ) {
1329
+ destroyGraphDiv ( ) ;
1330
+ done ( ) ;
1331
+ } , 200 ) ;
1332
+ } ) ;
1333
+
1334
+ function filter2empty ( mock ) {
1335
+ var fig = Lib . extendDeep ( { } , mock ) ;
1336
+ var data = fig . data || [ ] ;
1337
+
1338
+ data . forEach ( function ( trace ) {
1339
+ trace . transforms = [ {
1340
+ type : 'filter' ,
1341
+ target : [ null ]
1342
+ } ] ;
1343
+ } ) ;
1344
+
1345
+ return fig ;
1346
+ }
1347
+
1348
+ describe ( 'svg mocks' , function ( ) {
1349
+ var mockList = require ( '../assets/mock_lists' ) . svg ;
1350
+
1351
+ mockList . forEach ( function ( d ) {
1352
+ it ( d [ 0 ] , function ( done ) {
1353
+ gd = createGraphDiv ( ) ;
1354
+ var fig = filter2empty ( d [ 1 ] ) ;
1355
+ Plotly . newPlot ( gd , fig ) . catch ( failTest ) . then ( done ) ;
1356
+ } ) ;
1357
+ } ) ;
1358
+ } ) ;
1359
+
1360
+ describe ( 'gl mocks' , function ( ) {
1361
+ var mockList = require ( '../assets/mock_lists' ) . gl ;
1362
+
1363
+ mockList . forEach ( function ( d ) {
1364
+ it ( '@gl ' + d [ 0 ] , function ( done ) {
1365
+ gd = createGraphDiv ( ) ;
1366
+ var fig = filter2empty ( d [ 1 ] ) ;
1367
+ Plotly . newPlot ( gd , fig ) . catch ( failTest ) . then ( done ) ;
1368
+ } ) ;
1369
+ } ) ;
1370
+ } ) ;
1371
+
1372
+ describe ( 'mapbox mocks' , function ( ) {
1373
+ var mockList = require ( '../assets/mock_lists' ) . mapbox ;
1374
+
1375
+ Plotly . setPlotConfig ( {
1376
+ mapboxAccessToken : require ( '@build/credentials.json' ) . MAPBOX_ACCESS_TOKEN
1377
+ } ) ;
1378
+
1379
+ mockList . forEach ( function ( d ) {
1380
+ it ( '@noCI ' + d [ 0 ] , function ( done ) {
1381
+ gd = createGraphDiv ( ) ;
1382
+ var fig = filter2empty ( d [ 1 ] ) ;
1383
+ Plotly . newPlot ( gd , fig ) . catch ( failTest ) . then ( done ) ;
1384
+ } ) ;
1385
+ } ) ;
1386
+ } ) ;
1387
+ } ) ;
0 commit comments