@@ -573,6 +573,119 @@ describe('Test axes', function() {
573
573
. toEqual ( tinycolor . mix ( '#444' , bgColor , frac ) . toRgbString ( ) ) ;
574
574
} ) ;
575
575
576
+ it ( 'should default to a dark color for tickfont when plotting background is light' , function ( ) {
577
+ layoutIn = {
578
+ plot_bgcolor : 'lightblue' ,
579
+ xaxis : {
580
+ showgrid : true ,
581
+ ticklabelposition : 'inside'
582
+ }
583
+ } ;
584
+
585
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
586
+ expect ( layoutOut . xaxis . tickfont . color ) . toEqual ( '#444' ) ;
587
+ } ) ;
588
+
589
+ it ( 'should default to a light color for tickfont when plotting background is dark' , function ( ) {
590
+ layoutIn = {
591
+ plot_bgcolor : 'darkblue' ,
592
+ xaxis : {
593
+ showgrid : true ,
594
+ ticklabelposition : 'inside'
595
+ }
596
+ } ;
597
+
598
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
599
+ expect ( layoutOut . xaxis . tickfont . color ) . toEqual ( '#fff' ) ;
600
+ } ) ;
601
+
602
+ it ( 'should not coerce ticklabelposition on *multicategory* axes for now' , function ( ) {
603
+ layoutIn = {
604
+ xaxis : { type : 'multicategory' } ,
605
+ yaxis : { type : 'multicategory' }
606
+ } ;
607
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
608
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBeUndefined ( ) ;
609
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBeUndefined ( ) ;
610
+ } ) ;
611
+
612
+ [ 'category' , 'linear' , 'date' ] . forEach ( function ( type ) {
613
+ it ( 'should coerce ticklabelposition on *' + type + '* axes' , function ( ) {
614
+ layoutIn = {
615
+ xaxis : { type : type } ,
616
+ yaxis : { type : type }
617
+ } ;
618
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
619
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( 'outside' ) ;
620
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( 'outside' ) ;
621
+ } ) ;
622
+ } ) ;
623
+
624
+ [ 'category' , 'linear' , 'date' ] . forEach ( function ( type ) {
625
+ it ( 'should be able to set ticklabelposition to *inside* on *' + type + '* axes' , function ( ) {
626
+ layoutIn = {
627
+ xaxis : { type : type , ticklabelposition : 'inside' } ,
628
+ yaxis : { type : type , ticklabelposition : 'inside' }
629
+ } ;
630
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
631
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( 'inside' ) ;
632
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( 'inside' ) ;
633
+ } ) ;
634
+ } ) ;
635
+
636
+ [ 'inside left' , 'inside right' , 'outside left' , 'outside right' ] . forEach ( function ( ticklabelposition ) {
637
+ [ 'category' , 'linear' , 'date' ] . forEach ( function ( type ) {
638
+ it ( 'should be able to set ticklabelposition to *' + ticklabelposition + '* on xaxis for *' + type + '* axes' , function ( ) {
639
+ layoutIn = {
640
+ xaxis : { type : type , ticklabelposition : ticklabelposition } ,
641
+ yaxis : { type : type , ticklabelposition : ticklabelposition }
642
+ } ;
643
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
644
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( ticklabelposition ) ;
645
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( 'outside' , ticklabelposition + ' is not a valid input on yaxis' ) ;
646
+ } ) ;
647
+ } ) ;
648
+ } ) ;
649
+
650
+ [ 'inside top' , 'inside bottom' , 'outside top' , 'outside bottom' ] . forEach ( function ( ticklabelposition ) {
651
+ [ 'category' , 'linear' , 'date' ] . forEach ( function ( type ) {
652
+ it ( 'should be able to set ticklabelposition to *' + ticklabelposition + '* on yaxis for *' + type + '* axes' , function ( ) {
653
+ layoutIn = {
654
+ xaxis : { type : type , ticklabelposition : ticklabelposition } ,
655
+ yaxis : { type : type , ticklabelposition : ticklabelposition }
656
+ } ;
657
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
658
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( 'outside' , ticklabelposition + ' is not a valid input on yaxis' ) ;
659
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( ticklabelposition ) ;
660
+ } ) ;
661
+ } ) ;
662
+ } ) ;
663
+
664
+ [
665
+ 'inside left' , 'inside right' , 'outside left' , 'outside right' ,
666
+ 'inside top' , 'inside bottom' , 'outside top' , 'outside bottom'
667
+ ] . forEach ( function ( ticklabelposition ) {
668
+ it ( 'should not be able to set ticklabelposition to *' + ticklabelposition + '* when ticklabelmode is *period*' , function ( ) {
669
+ layoutIn = {
670
+ xaxis : { type : 'date' , ticklabelmode : 'period' , ticklabelposition : ticklabelposition } ,
671
+ yaxis : { type : 'date' , ticklabelmode : 'period' , ticklabelposition : ticklabelposition }
672
+ } ;
673
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
674
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( 'outside' , ticklabelposition + ' is not a valid input with period mode' ) ;
675
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( 'outside' , ticklabelposition + ' is not a valid input with period mode' ) ;
676
+ } ) ;
677
+ } ) ;
678
+
679
+ it ( 'should be able to set ticklabelposition to *inside* on yaxis when ticklabelmode is *period*' , function ( ) {
680
+ layoutIn = {
681
+ xaxis : { type : 'date' , ticklabelmode : 'period' , ticklabelposition : 'inside' } ,
682
+ yaxis : { type : 'date' , ticklabelmode : 'period' , ticklabelposition : 'inside' }
683
+ } ;
684
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
685
+ expect ( layoutOut . xaxis . ticklabelposition ) . toBe ( 'inside' ) ;
686
+ expect ( layoutOut . yaxis . ticklabelposition ) . toBe ( 'inside' ) ;
687
+ } ) ;
688
+
576
689
it ( 'should inherit calendar from the layout' , function ( ) {
577
690
layoutOut . calendar = 'nepali' ;
578
691
layoutIn = {
0 commit comments