@@ -89,6 +89,42 @@ describe('heatmap supplyDefaults', function() {
8989 expect ( traceOut . visible ) . toBe ( false ) ;
9090 } ) ;
9191
92+ it ( 'should set paddings to 0 when not defined' , function ( ) {
93+ traceIn = {
94+ type : 'heatmap' ,
95+ z : [ [ 1 , 2 ] , [ 3 , 4 ] ]
96+ } ;
97+
98+ supplyDefaults ( traceIn , traceOut , defaultColor , layout ) ;
99+ expect ( traceOut . xgap ) . toBe ( 0 ) ;
100+ expect ( traceOut . ygap ) . toBe ( 0 ) ;
101+ } ) ;
102+
103+ it ( 'should not step on defined paddings' , function ( ) {
104+ traceIn = {
105+ xgap : 10 ,
106+ type : 'heatmap' ,
107+ z : [ [ 1 , 2 ] , [ 3 , 4 ] ]
108+ } ;
109+
110+ supplyDefaults ( traceIn , traceOut , defaultColor , layout ) ;
111+ expect ( traceOut . xgap ) . toBe ( 10 ) ;
112+ expect ( traceOut . ygap ) . toBe ( 0 ) ;
113+ } ) ;
114+
115+ it ( 'should not coerce gap if zsmooth is set' , function ( ) {
116+ traceIn = {
117+ xgap : 10 ,
118+ zsmooth : 'best' ,
119+ type : 'heatmap' ,
120+ z : [ [ 1 , 2 ] , [ 3 , 4 ] ]
121+ } ;
122+
123+ supplyDefaults ( traceIn , traceOut , defaultColor , layout ) ;
124+ expect ( traceOut . xgap ) . toBe ( undefined ) ;
125+ expect ( traceOut . ygap ) . toBe ( undefined ) ;
126+ } ) ;
127+
92128} ) ;
93129
94130describe ( 'heatmap convertColumnXYZ' , function ( ) {
@@ -381,7 +417,80 @@ describe('heatmap plot', function() {
381417
382418 done ( ) ;
383419 } ) ;
420+ } ) ;
421+
422+ it ( 'draws canvas with correct margins' , function ( done ) {
423+ var mockWithPadding = require ( '@mocks/heatmap_brick_padding.json' ) ,
424+ mockWithoutPadding = Lib . extendDeep ( { } , mockWithPadding ) ,
425+ gd = createGraphDiv ( ) ,
426+ getContextStub = {
427+ fillRect : jasmine . createSpy ( )
428+ } ,
429+ originalCreateElement = document . createElement ;
430+
431+ mockWithoutPadding . data [ 0 ] . xgap = 0 ;
432+ mockWithoutPadding . data [ 0 ] . ygap = 0 ;
433+
434+ spyOn ( document , 'createElement' ) . and . callFake ( function ( elementType ) {
435+ var element = originalCreateElement . call ( document , elementType ) ;
436+ if ( elementType === 'canvas' ) {
437+ spyOn ( element , 'getContext' ) . and . returnValue ( getContextStub ) ;
438+ }
439+ return element ;
440+ } ) ;
384441
442+ var argumentsWithoutPadding = [ ] ,
443+ argumentsWithPadding = [ ] ;
444+ Plotly . plot ( gd , mockWithoutPadding . data , mockWithoutPadding . layout ) . then ( function ( ) {
445+ argumentsWithoutPadding = getContextStub . fillRect . calls . allArgs ( ) . slice ( 0 ) ;
446+ return Plotly . plot ( gd , mockWithPadding . data , mockWithPadding . layout ) ;
447+ } ) . then ( function ( ) {
448+ var centerXGap = mockWithPadding . data [ 0 ] . xgap / 3 ;
449+ var centerYGap = mockWithPadding . data [ 0 ] . ygap / 3 ;
450+ var edgeXGap = mockWithPadding . data [ 0 ] . xgap * 2 / 3 ;
451+ var edgeYGap = mockWithPadding . data [ 0 ] . ygap * 2 / 3 ;
452+
453+ argumentsWithPadding = getContextStub . fillRect . calls . allArgs ( ) . slice ( getContextStub . fillRect . calls . allArgs ( ) . length - 9 ) ;
454+ expect ( argumentsWithPadding ) . toEqual ( [
455+ [ argumentsWithoutPadding [ 0 ] [ 0 ] ,
456+ argumentsWithoutPadding [ 0 ] [ 1 ] + edgeYGap ,
457+ argumentsWithoutPadding [ 0 ] [ 2 ] - edgeXGap ,
458+ argumentsWithoutPadding [ 0 ] [ 3 ] - edgeYGap ] ,
459+ [ argumentsWithoutPadding [ 1 ] [ 0 ] + centerXGap ,
460+ argumentsWithoutPadding [ 1 ] [ 1 ] + edgeYGap ,
461+ argumentsWithoutPadding [ 1 ] [ 2 ] - edgeXGap ,
462+ argumentsWithoutPadding [ 1 ] [ 3 ] - edgeYGap ] ,
463+ [ argumentsWithoutPadding [ 2 ] [ 0 ] + edgeXGap ,
464+ argumentsWithoutPadding [ 2 ] [ 1 ] + edgeYGap ,
465+ argumentsWithoutPadding [ 2 ] [ 2 ] - edgeXGap ,
466+ argumentsWithoutPadding [ 2 ] [ 3 ] - edgeYGap ] ,
467+ [ argumentsWithoutPadding [ 3 ] [ 0 ] ,
468+ argumentsWithoutPadding [ 3 ] [ 1 ] + centerYGap ,
469+ argumentsWithoutPadding [ 3 ] [ 2 ] - edgeXGap ,
470+ argumentsWithoutPadding [ 3 ] [ 3 ] - edgeYGap ] ,
471+ [ argumentsWithoutPadding [ 4 ] [ 0 ] + centerXGap ,
472+ argumentsWithoutPadding [ 4 ] [ 1 ] + centerYGap ,
473+ argumentsWithoutPadding [ 4 ] [ 2 ] - edgeXGap ,
474+ argumentsWithoutPadding [ 4 ] [ 3 ] - edgeYGap ] ,
475+ [ argumentsWithoutPadding [ 5 ] [ 0 ] + edgeXGap ,
476+ argumentsWithoutPadding [ 5 ] [ 1 ] + centerYGap ,
477+ argumentsWithoutPadding [ 5 ] [ 2 ] - edgeXGap ,
478+ argumentsWithoutPadding [ 5 ] [ 3 ] - edgeYGap ] ,
479+ [ argumentsWithoutPadding [ 6 ] [ 0 ] ,
480+ argumentsWithoutPadding [ 6 ] [ 1 ] ,
481+ argumentsWithoutPadding [ 6 ] [ 2 ] - edgeXGap ,
482+ argumentsWithoutPadding [ 6 ] [ 3 ] - edgeYGap ] ,
483+ [ argumentsWithoutPadding [ 7 ] [ 0 ] + centerXGap ,
484+ argumentsWithoutPadding [ 7 ] [ 1 ] ,
485+ argumentsWithoutPadding [ 7 ] [ 2 ] - edgeXGap ,
486+ argumentsWithoutPadding [ 7 ] [ 3 ] - edgeYGap ] ,
487+ [ argumentsWithoutPadding [ 8 ] [ 0 ] + edgeXGap ,
488+ argumentsWithoutPadding [ 8 ] [ 1 ] ,
489+ argumentsWithoutPadding [ 8 ] [ 2 ] - edgeXGap ,
490+ argumentsWithoutPadding [ 8 ] [ 3 ] - edgeYGap
491+ ] ] ) ;
492+ done ( ) ;
493+ } ) ;
385494 } ) ;
386495} ) ;
387496
0 commit comments