@@ -183,17 +183,28 @@ describe('contour makeColorMap', function() {
183
183
describe ( 'contour calc' , function ( ) {
184
184
'use strict' ;
185
185
186
- function _calc ( opts ) {
186
+ function _calc ( opts , layout ) {
187
187
var base = { type : 'contour' } ;
188
188
var trace = Lib . extendFlat ( { } , base , opts ) ;
189
189
var gd = { data : [ trace ] } ;
190
+ if ( layout ) gd . layout = layout ;
190
191
191
192
supplyAllDefaults ( gd ) ;
192
193
var fullTrace = gd . _fullData [ 0 ] ;
194
+ var fullLayout = gd . _fullLayout ;
193
195
fullTrace . _extremes = { } ;
194
196
197
+ // we used to call ax.setScale during supplyDefaults, and this had a
198
+ // fallback to provide _categories and _categoriesMap. Now neither of
199
+ // those is true... anyway the right way to do this though is
200
+ // ax.clearCalc.
201
+ fullLayout . xaxis . clearCalc ( ) ;
202
+ fullLayout . yaxis . clearCalc ( ) ;
203
+
195
204
var out = Contour . calc ( gd , fullTrace ) [ 0 ] ;
196
205
out . trace = fullTrace ;
206
+ out . _xcategories = fullLayout . xaxis . _categories ;
207
+ out . _ycategories = fullLayout . yaxis . _categories ;
197
208
return out ;
198
209
}
199
210
@@ -343,6 +354,57 @@ describe('contour calc', function() {
343
354
} ) ;
344
355
} ) ;
345
356
} ) ;
357
+
358
+ [ 'contour' ] . forEach ( function ( traceType ) {
359
+ it ( 'should sort z data based on axis categoryorder for ' + traceType , function ( ) {
360
+ var mock = require ( '@mocks/heatmap_categoryorder' ) ;
361
+ var mockCopy = Lib . extendDeep ( { } , mock ) ;
362
+ var data = mockCopy . data [ 0 ] ;
363
+ data . type = traceType ;
364
+ var layout = mockCopy . layout ;
365
+
366
+ // sort x axis categories
367
+ var mockLayout = Lib . extendDeep ( { } , layout ) ;
368
+ var out = _calc ( data , mockLayout ) ;
369
+ mockLayout . xaxis . categoryorder = 'category ascending' ;
370
+ var out1 = _calc ( data , mockLayout ) ;
371
+
372
+ expect ( out . _xcategories ) . toEqual ( out1 . _xcategories . slice ( ) . reverse ( ) ) ;
373
+ // Check z data is also sorted
374
+ for ( var i = 0 ; i < out . z . length ; i ++ ) {
375
+ expect ( out1 . z [ i ] ) . toEqual ( out . z [ i ] . slice ( ) . reverse ( ) ) ;
376
+ }
377
+
378
+ // sort y axis categories
379
+ mockLayout = Lib . extendDeep ( { } , layout ) ;
380
+ out = _calc ( data , mockLayout ) ;
381
+ mockLayout . yaxis . categoryorder = 'category ascending' ;
382
+ out1 = _calc ( data , mockLayout ) ;
383
+
384
+ expect ( out . _ycategories ) . toEqual ( out1 . _ycategories . slice ( ) . reverse ( ) ) ;
385
+ // Check z data is also sorted
386
+ expect ( out1 . z ) . toEqual ( out . z . slice ( ) . reverse ( ) ) ;
387
+ } ) ;
388
+
389
+ it ( 'should sort z data based on axis categoryarray ' + traceType , function ( ) {
390
+ var mock = require ( '@mocks/heatmap_categoryorder' ) ;
391
+ var mockCopy = Lib . extendDeep ( { } , mock ) ;
392
+ var data = mockCopy . data [ 0 ] ;
393
+ data . type = traceType ;
394
+ var layout = mockCopy . layout ;
395
+
396
+ layout . xaxis . categoryorder = 'array' ;
397
+ layout . xaxis . categoryarray = [ 'x' , 'z' , 'y' , 'w' ] ;
398
+ layout . yaxis . categoryorder = 'array' ;
399
+ layout . yaxis . categoryarray = [ 'a' , 'd' , 'b' , 'c' ] ;
400
+
401
+ var out = _calc ( data , layout ) ;
402
+
403
+ expect ( out . _xcategories ) . toEqual ( layout . xaxis . categoryarray , 'xaxis should reorder' ) ;
404
+ expect ( out . _ycategories ) . toEqual ( layout . yaxis . categoryarray , 'yaxis should reorder' ) ;
405
+ expect ( out . z [ 0 ] [ 0 ] ) . toEqual ( 0 ) ;
406
+ } ) ;
407
+ } ) ;
346
408
} ) ;
347
409
348
410
describe ( 'contour plotting and editing' , function ( ) {
0 commit comments