@@ -280,6 +280,61 @@ describe('user-defined transforms:', function() {
280
280
expect ( calledSupplyLayoutDefaults ) . toBe ( 1 ) ;
281
281
} ) ;
282
282
283
+ it ( 'handles `makesData` transforms when the incoming trace has no data' , function ( ) {
284
+ var transformIn = { type : 'linemaker' , x0 : 3 , y0 : 2 , x1 : 5 , y1 : 10 , n : 3 } ;
285
+ var dataIn = [ { transforms : [ transformIn ] , mode : 'lines+markers' } ] ;
286
+ var fullData = [ ] ;
287
+ var layout = { } ;
288
+ var fullLayout = Lib . extendDeep ( { } , mockFullLayout ) ;
289
+
290
+ var lineMakerModule = {
291
+ moduleType : 'transform' ,
292
+ name : 'linemaker' ,
293
+ makesData : true ,
294
+ attributes : { } ,
295
+ supplyDefaults : function ( transformIn ) {
296
+ return Lib . extendFlat ( { } , transformIn ) ;
297
+ } ,
298
+ transform : function ( data , state ) {
299
+ var transform = state . transform ;
300
+ var trace = data [ 0 ] ;
301
+ var n = transform . n ;
302
+ var x = new Array ( n ) ;
303
+ var y = new Array ( n ) ;
304
+
305
+ // our exciting transform - make a line!
306
+ for ( var i = 0 ; i < n ; i ++ ) {
307
+ x [ i ] = transform . x0 + ( i / ( n - 1 ) ) * ( transform . x1 - transform . x0 ) ;
308
+ y [ i ] = transform . y0 + ( i / ( n - 1 ) ) * ( transform . y1 - transform . y0 ) ;
309
+ }
310
+
311
+ // we didn't coerce mode before, because there was no data
312
+ expect ( trace . mode ) . toBeUndefined ( ) ;
313
+ expect ( trace . line ) . toBeUndefined ( ) ;
314
+ expect ( trace . marker ) . toBeUndefined ( ) ;
315
+
316
+ // just put the input trace back in here, it'll get coerced again after the transform
317
+ var traceOut = Lib . extendFlat ( trace . _input , { x : x , y : y } ) ;
318
+
319
+ return [ traceOut ] ;
320
+ }
321
+ } ;
322
+
323
+ Plotly . register ( lineMakerModule ) ;
324
+ Plots . supplyDataDefaults ( dataIn , fullData , layout , fullLayout ) ;
325
+ delete Plots . transformsRegistry . linemaker ;
326
+
327
+ expect ( fullData . length ) . toBe ( 1 ) ;
328
+ var traceOut = fullData [ 0 ] ;
329
+ expect ( traceOut . x ) . toEqual ( [ 3 , 4 , 5 ] ) ;
330
+ expect ( traceOut . y ) . toEqual ( [ 2 , 6 , 10 ] ) ;
331
+
332
+ // make sure we redid supplyDefaults after the data arrays were added
333
+ expect ( traceOut . mode ) . toBe ( 'lines+markers' ) ;
334
+ expect ( traceOut . line ) . toBeDefined ( ) ;
335
+ expect ( traceOut . marker ) . toBeDefined ( ) ;
336
+ } ) ;
337
+
283
338
} ) ;
284
339
285
340
describe ( 'multiple transforms:' , function ( ) {
0 commit comments