@@ -1852,201 +1852,215 @@ describe('Test axes', function() {
1852
1852
} ) ;
1853
1853
1854
1854
describe ( 'handleTickValueDefaults' , function ( ) {
1855
+ var viaTemplate ;
1856
+
1855
1857
function mockSupplyDefaults ( axIn , axOut , axType ) {
1858
+ if ( viaTemplate ) {
1859
+ axOut . _template = axIn ;
1860
+ axIn = { } ;
1861
+ }
1862
+
1856
1863
function coerce ( attr , dflt ) {
1857
1864
return Lib . coerce ( axIn , axOut , Cartesian . layoutAttributes , attr , dflt ) ;
1858
1865
}
1859
1866
1860
1867
handleTickValueDefaults ( axIn , axOut , coerce , axType ) ;
1861
1868
}
1862
1869
1863
- it ( 'should set default tickmode correctly' , function ( ) {
1864
- var axIn = { } ;
1865
- var axOut = { } ;
1866
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1867
- expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1868
- // and not push it back to axIn (which we used to do)
1869
- expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1870
-
1871
- axIn = { tickmode : 'array' , tickvals : 'stuff' } ;
1872
- axOut = { } ;
1873
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1874
- expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1875
- expect ( axIn . tickmode ) . toBe ( 'array' ) ;
1876
-
1877
- axIn = { tickmode : 'array' , tickvals : [ 1 , 2 , 3 ] } ;
1878
- axOut = { } ;
1879
- mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1880
- expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1881
- expect ( axIn . tickmode ) . toBe ( 'array' ) ;
1882
-
1883
- axIn = { tickvals : [ 1 , 2 , 3 ] } ;
1884
- axOut = { } ;
1885
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1886
- expect ( axOut . tickmode ) . toBe ( 'array' ) ;
1887
- expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1888
-
1889
- axIn = { dtick : 1 } ;
1890
- axOut = { } ;
1891
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1892
- expect ( axOut . tickmode ) . toBe ( 'linear' ) ;
1893
- expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1894
- } ) ;
1895
-
1896
- it ( 'should set nticks iff tickmode=auto' , function ( ) {
1897
- var axIn = { } ;
1898
- var axOut = { } ;
1899
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1900
- expect ( axOut . nticks ) . toBe ( 0 ) ;
1901
-
1902
- axIn = { tickmode : 'auto' , nticks : 5 } ;
1903
- axOut = { } ;
1904
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1905
- expect ( axOut . nticks ) . toBe ( 5 ) ;
1906
-
1907
- axIn = { tickmode : 'linear' , nticks : 15 } ;
1908
- axOut = { } ;
1909
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1910
- expect ( axOut . nticks ) . toBe ( undefined ) ;
1911
- } ) ;
1912
-
1913
- it ( 'should set tick0 and dtick iff tickmode=linear' , function ( ) {
1914
- var axIn = { tickmode : 'auto' , tick0 : 1 , dtick : 1 } ;
1915
- var axOut = { } ;
1916
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1917
- expect ( axOut . tick0 ) . toBe ( undefined ) ;
1918
- expect ( axOut . dtick ) . toBe ( undefined ) ;
1919
-
1920
- axIn = { tickvals : [ 1 , 2 , 3 ] , tick0 : 1 , dtick : 1 } ;
1921
- axOut = { } ;
1922
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1923
- expect ( axOut . tick0 ) . toBe ( undefined ) ;
1924
- expect ( axOut . dtick ) . toBe ( undefined ) ;
1925
-
1926
- axIn = { tick0 : 2.71 , dtick : 0.00828 } ;
1927
- axOut = { } ;
1928
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1929
- expect ( axOut . tick0 ) . toBe ( 2.71 ) ;
1930
- expect ( axOut . dtick ) . toBe ( 0.00828 ) ;
1931
-
1932
- axIn = { tickmode : 'linear' , tick0 : 3.14 , dtick : 0.00159 } ;
1933
- axOut = { } ;
1934
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1935
- expect ( axOut . tick0 ) . toBe ( 3.14 ) ;
1936
- expect ( axOut . dtick ) . toBe ( 0.00159 ) ;
1937
- } ) ;
1938
-
1939
- it ( 'should handle tick0 and dtick for date axes' , function ( ) {
1940
- var someMs = 123456789 ;
1941
- var someMsDate = Lib . ms2DateTimeLocal ( someMs ) ;
1942
- var oneDay = 24 * 3600 * 1000 ;
1943
- var axIn = { tick0 : someMs , dtick : String ( 3 * oneDay ) } ;
1944
- var axOut = { } ;
1945
- mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1946
- expect ( axOut . tick0 ) . toBe ( someMsDate ) ;
1947
- expect ( axOut . dtick ) . toBe ( 3 * oneDay ) ;
1948
-
1949
- var someDate = '2011-12-15 13:45:56' ;
1950
- axIn = { tick0 : someDate , dtick : 'M15' } ;
1951
- axOut = { } ;
1952
- mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1953
- expect ( axOut . tick0 ) . toBe ( someDate ) ;
1954
- expect ( axOut . dtick ) . toBe ( 'M15' ) ;
1955
-
1956
- // dtick without tick0: get the right default
1957
- axIn = { dtick : 'M12' } ;
1958
- axOut = { } ;
1959
- mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1960
- expect ( axOut . tick0 ) . toBe ( '2000-01-01' ) ;
1961
- expect ( axOut . dtick ) . toBe ( 'M12' ) ;
1962
-
1963
- var errors = [ ] ;
1964
- spyOn ( Loggers , 'error' ) . and . callFake ( function ( msg ) {
1965
- errors . push ( msg ) ;
1966
- } ) ;
1870
+ [
1871
+ '(without template) ' ,
1872
+ '(with template) '
1873
+ ] . forEach ( function ( woTemplate , index ) {
1874
+ viaTemplate = index === 1 ;
1875
+
1876
+ it ( woTemplate + 'should set default tickmode correctly' , function ( ) {
1877
+ var axIn = { } ;
1878
+ var axOut = { } ;
1879
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1880
+ expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1881
+ // and not push it back to axIn (which we used to do)
1882
+ expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1883
+
1884
+ axIn = { tickmode : 'array' , tickvals : 'stuff' } ;
1885
+ axOut = { } ;
1886
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1887
+ expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1888
+ expect ( axIn . tickmode ) . toBe ( 'array' ) ;
1967
1889
1968
- // now some stuff that shouldn't work, should give defaults
1969
- [
1970
- [ 'next thursday' , - 1 ] ,
1971
- [ '123-45' , 'L1' ] ,
1972
- [ '' , 'M0.5' ] ,
1973
- [ '' , 'M-1' ] ,
1974
- [ '' , '2000-01-01' ]
1975
- ] . forEach ( function ( v , i ) {
1976
- axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
1890
+ axIn = { tickmode : 'array' , tickvals : [ 1 , 2 , 3 ] } ;
1977
1891
axOut = { } ;
1978
1892
mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1979
- expect ( axOut . tick0 ) . toBe ( '2000-01-01' ) ;
1980
- expect ( axOut . dtick ) . toBe ( oneDay ) ;
1981
- expect ( errors . length ) . toBe ( i + 1 ) ;
1893
+ expect ( axOut . tickmode ) . toBe ( 'auto' ) ;
1894
+ expect ( axIn . tickmode ) . toBe ( 'array' ) ;
1895
+
1896
+ axIn = { tickvals : [ 1 , 2 , 3 ] } ;
1897
+ axOut = { } ;
1898
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1899
+ expect ( axOut . tickmode ) . toBe ( 'array' ) ;
1900
+ expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1901
+
1902
+ axIn = { dtick : 1 } ;
1903
+ axOut = { } ;
1904
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1905
+ expect ( axOut . tickmode ) . toBe ( 'linear' ) ;
1906
+ expect ( axIn . tickmode ) . toBeUndefined ( ) ;
1982
1907
} ) ;
1983
- } ) ;
1984
1908
1985
- it ( 'should handle tick0 and dtick for log axes' , function ( ) {
1986
- var axIn = { tick0 : '0.2' , dtick : 0.3 } ;
1987
- var axOut = { } ;
1988
- mockSupplyDefaults ( axIn , axOut , 'log' ) ;
1989
- expect ( axOut . tick0 ) . toBe ( 0.2 ) ;
1990
- expect ( axOut . dtick ) . toBe ( 0.3 ) ;
1909
+ it ( woTemplate + 'should set nticks iff tickmode=auto' , function ( ) {
1910
+ var axIn = { } ;
1911
+ var axOut = { } ;
1912
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1913
+ expect ( axOut . nticks ) . toBe ( 0 ) ;
1991
1914
1992
- [ 'D1' , 'D2' ] . forEach ( function ( v ) {
1993
- axIn = { tick0 : - 1 , dtick : v } ;
1915
+ axIn = { tickmode : 'auto' , nticks : 5 } ;
1994
1916
axOut = { } ;
1995
- mockSupplyDefaults ( axIn , axOut , 'log' ) ;
1996
- // tick0 gets ignored for D<n>
1997
- expect ( axOut . tick0 ) . toBeUndefined ( v ) ;
1998
- expect ( axOut . dtick ) . toBe ( v ) ;
1917
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1918
+ expect ( axOut . nticks ) . toBe ( 5 ) ;
1919
+
1920
+ axIn = { tickmode : 'linear' , nticks : 15 } ;
1921
+ axOut = { } ;
1922
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1923
+ expect ( axOut . nticks ) . toBe ( undefined ) ;
1999
1924
} ) ;
2000
1925
2001
- [
2002
- [ - 1 , 'L3' ] ,
2003
- [ '0.2' , 'L0.3' ] ,
2004
- [ - 1 , 3 ] ,
2005
- [ '0.1234' , '0.69238473' ]
2006
- ] . forEach ( function ( v ) {
2007
- axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
1926
+ it ( woTemplate + 'should set tick0 and dtick iff tickmode=linear' , function ( ) {
1927
+ var axIn = { tickmode : 'auto' , tick0 : 1 , dtick : 1 } ;
1928
+ var axOut = { } ;
1929
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1930
+ expect ( axOut . tick0 ) . toBe ( undefined ) ;
1931
+ expect ( axOut . dtick ) . toBe ( undefined ) ;
1932
+
1933
+ axIn = { tickvals : [ 1 , 2 , 3 ] , tick0 : 1 , dtick : 1 } ;
2008
1934
axOut = { } ;
2009
- mockSupplyDefaults ( axIn , axOut , 'log' ) ;
2010
- expect ( axOut . tick0 ) . toBe ( Number ( v [ 0 ] ) ) ;
2011
- expect ( axOut . dtick ) . toBe ( ( + v [ 1 ] ) ? Number ( v [ 1 ] ) : v [ 1 ] ) ;
1935
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1936
+ expect ( axOut . tick0 ) . toBe ( undefined ) ;
1937
+ expect ( axOut . dtick ) . toBe ( undefined ) ;
1938
+
1939
+ axIn = { tick0 : 2.71 , dtick : 0.00828 } ;
1940
+ axOut = { } ;
1941
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1942
+ expect ( axOut . tick0 ) . toBe ( 2.71 ) ;
1943
+ expect ( axOut . dtick ) . toBe ( 0.00828 ) ;
1944
+
1945
+ axIn = { tickmode : 'linear' , tick0 : 3.14 , dtick : 0.00159 } ;
1946
+ axOut = { } ;
1947
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
1948
+ expect ( axOut . tick0 ) . toBe ( 3.14 ) ;
1949
+ expect ( axOut . dtick ) . toBe ( 0.00159 ) ;
2012
1950
} ) ;
2013
1951
2014
- // now some stuff that should not work, should give defaults
2015
- [
2016
- [ '' , - 1 ] ,
2017
- [ 'D1' , 'D3' ] ,
2018
- [ '' , 'D0' ] ,
2019
- [ '2011-01-01' , 'L0' ] ,
2020
- [ '' , 'L-1' ]
2021
- ] . forEach ( function ( v ) {
2022
- axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
1952
+ it ( woTemplate + 'should handle tick0 and dtick for date axes' , function ( ) {
1953
+ var someMs = 123456789 ;
1954
+ var someMsDate = Lib . ms2DateTimeLocal ( someMs ) ;
1955
+ var oneDay = 24 * 3600 * 1000 ;
1956
+ var axIn = { tick0 : someMs , dtick : String ( 3 * oneDay ) } ;
1957
+ var axOut = { } ;
1958
+ mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1959
+ expect ( axOut . tick0 ) . toBe ( someMsDate ) ;
1960
+ expect ( axOut . dtick ) . toBe ( 3 * oneDay ) ;
1961
+
1962
+ var someDate = '2011-12-15 13:45:56' ;
1963
+ axIn = { tick0 : someDate , dtick : 'M15' } ;
1964
+ axOut = { } ;
1965
+ mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1966
+ expect ( axOut . tick0 ) . toBe ( someDate ) ;
1967
+ expect ( axOut . dtick ) . toBe ( 'M15' ) ;
1968
+
1969
+ // dtick without tick0: get the right default
1970
+ axIn = { dtick : 'M12' } ;
2023
1971
axOut = { } ;
1972
+ mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1973
+ expect ( axOut . tick0 ) . toBe ( '2000-01-01' ) ;
1974
+ expect ( axOut . dtick ) . toBe ( 'M12' ) ;
1975
+
1976
+ var errors = [ ] ;
1977
+ spyOn ( Loggers , 'error' ) . and . callFake ( function ( msg ) {
1978
+ errors . push ( msg ) ;
1979
+ } ) ;
1980
+
1981
+ // now some stuff that shouldn't work, should give defaults
1982
+ [
1983
+ [ 'next thursday' , - 1 ] ,
1984
+ [ '123-45' , 'L1' ] ,
1985
+ [ '' , 'M0.5' ] ,
1986
+ [ '' , 'M-1' ] ,
1987
+ [ '' , '2000-01-01' ]
1988
+ ] . forEach ( function ( v , i ) {
1989
+ axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
1990
+ axOut = { } ;
1991
+ mockSupplyDefaults ( axIn , axOut , 'date' ) ;
1992
+ expect ( axOut . tick0 ) . toBe ( '2000-01-01' ) ;
1993
+ expect ( axOut . dtick ) . toBe ( oneDay ) ;
1994
+ expect ( errors . length ) . toBe ( i + 1 ) ;
1995
+ } ) ;
1996
+ } ) ;
1997
+
1998
+ it ( woTemplate + 'should handle tick0 and dtick for log axes' , function ( ) {
1999
+ var axIn = { tick0 : '0.2' , dtick : 0.3 } ;
2000
+ var axOut = { } ;
2024
2001
mockSupplyDefaults ( axIn , axOut , 'log' ) ;
2025
- expect ( axOut . tick0 ) . toBe ( 0 ) ;
2026
- expect ( axOut . dtick ) . toBe ( 1 ) ;
2002
+ expect ( axOut . tick0 ) . toBe ( 0.2 ) ;
2003
+ expect ( axOut . dtick ) . toBe ( 0.3 ) ;
2004
+
2005
+ [ 'D1' , 'D2' ] . forEach ( function ( v ) {
2006
+ axIn = { tick0 : - 1 , dtick : v } ;
2007
+ axOut = { } ;
2008
+ mockSupplyDefaults ( axIn , axOut , 'log' ) ;
2009
+ // tick0 gets ignored for D<n>
2010
+ expect ( axOut . tick0 ) . toBeUndefined ( v ) ;
2011
+ expect ( axOut . dtick ) . toBe ( v ) ;
2012
+ } ) ;
2013
+
2014
+ [
2015
+ [ - 1 , 'L3' ] ,
2016
+ [ '0.2' , 'L0.3' ] ,
2017
+ [ - 1 , 3 ] ,
2018
+ [ '0.1234' , '0.69238473' ]
2019
+ ] . forEach ( function ( v ) {
2020
+ axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
2021
+ axOut = { } ;
2022
+ mockSupplyDefaults ( axIn , axOut , 'log' ) ;
2023
+ expect ( axOut . tick0 ) . toBe ( Number ( v [ 0 ] ) ) ;
2024
+ expect ( axOut . dtick ) . toBe ( ( + v [ 1 ] ) ? Number ( v [ 1 ] ) : v [ 1 ] ) ;
2025
+ } ) ;
2026
+
2027
+ // now some stuff that should not work, should give defaults
2028
+ [
2029
+ [ '' , - 1 ] ,
2030
+ [ 'D1' , 'D3' ] ,
2031
+ [ '' , 'D0' ] ,
2032
+ [ '2011-01-01' , 'L0' ] ,
2033
+ [ '' , 'L-1' ]
2034
+ ] . forEach ( function ( v ) {
2035
+ axIn = { tick0 : v [ 0 ] , dtick : v [ 1 ] } ;
2036
+ axOut = { } ;
2037
+ mockSupplyDefaults ( axIn , axOut , 'log' ) ;
2038
+ expect ( axOut . tick0 ) . toBe ( 0 ) ;
2039
+ expect ( axOut . dtick ) . toBe ( 1 ) ;
2040
+ } ) ;
2027
2041
} ) ;
2028
- } ) ;
2029
2042
2030
- it ( 'should set tickvals and ticktext iff tickmode=array' , function ( ) {
2031
- var axIn = { tickmode : 'auto' , tickvals : [ 1 , 2 , 3 ] , ticktext : [ '4' , '5' , '6' ] } ;
2032
- var axOut = { } ;
2033
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
2034
- expect ( axOut . tickvals ) . toBe ( undefined ) ;
2035
- expect ( axOut . ticktext ) . toBe ( undefined ) ;
2043
+ it ( woTemplate + 'should set tickvals and ticktext iff tickmode=array' , function ( ) {
2044
+ var axIn = { tickmode : 'auto' , tickvals : [ 1 , 2 , 3 ] , ticktext : [ '4' , '5' , '6' ] } ;
2045
+ var axOut = { } ;
2046
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
2047
+ expect ( axOut . tickvals ) . toBe ( undefined ) ;
2048
+ expect ( axOut . ticktext ) . toBe ( undefined ) ;
2036
2049
2037
- axIn = { tickvals : [ 2 , 4 , 6 , 8 ] , ticktext : [ 'who' , 'do' , 'we' , 'appreciate' ] } ;
2038
- axOut = { } ;
2039
- mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
2040
- expect ( axOut . tickvals ) . toEqual ( [ 2 , 4 , 6 , 8 ] ) ;
2041
- expect ( axOut . ticktext ) . toEqual ( [ 'who' , 'do' , 'we' , 'appreciate' ] ) ;
2042
- } ) ;
2050
+ axIn = { tickvals : [ 2 , 4 , 6 , 8 ] , ticktext : [ 'who' , 'do' , 'we' , 'appreciate' ] } ;
2051
+ axOut = { } ;
2052
+ mockSupplyDefaults ( axIn , axOut , 'linear' ) ;
2053
+ expect ( axOut . tickvals ) . toEqual ( [ 2 , 4 , 6 , 8 ] ) ;
2054
+ expect ( axOut . ticktext ) . toEqual ( [ 'who' , 'do' , 'we' , 'appreciate' ] ) ;
2055
+ } ) ;
2043
2056
2044
- it ( 'should not coerce ticktext/tickvals on multicategory axes' , function ( ) {
2045
- var axIn = { tickvals : [ 1 , 2 , 3 ] , ticktext : [ '4' , '5' , '6' ] } ;
2046
- var axOut = { } ;
2047
- mockSupplyDefaults ( axIn , axOut , 'multicategory' ) ;
2048
- expect ( axOut . tickvals ) . toBe ( undefined ) ;
2049
- expect ( axOut . ticktext ) . toBe ( undefined ) ;
2057
+ it ( woTemplate + 'should not coerce ticktext/tickvals on multicategory axes' , function ( ) {
2058
+ var axIn = { tickvals : [ 1 , 2 , 3 ] , ticktext : [ '4' , '5' , '6' ] } ;
2059
+ var axOut = { } ;
2060
+ mockSupplyDefaults ( axIn , axOut , 'multicategory' ) ;
2061
+ expect ( axOut . tickvals ) . toBe ( undefined ) ;
2062
+ expect ( axOut . ticktext ) . toBe ( undefined ) ;
2063
+ } ) ;
2050
2064
} ) ;
2051
2065
} ) ;
2052
2066
0 commit comments