Skip to content

Commit f3e361f

Browse files
committed
add tests for handleTickValueDefaults cases using template
1 parent cd3e503 commit f3e361f

File tree

1 file changed

+183
-169
lines changed

1 file changed

+183
-169
lines changed

test/jasmine/tests/axes_test.js

+183-169
Original file line numberDiff line numberDiff line change
@@ -1852,201 +1852,215 @@ describe('Test axes', function() {
18521852
});
18531853

18541854
describe('handleTickValueDefaults', function() {
1855+
var viaTemplate;
1856+
18551857
function mockSupplyDefaults(axIn, axOut, axType) {
1858+
if(viaTemplate) {
1859+
axOut._template = axIn;
1860+
axIn = {};
1861+
}
1862+
18561863
function coerce(attr, dflt) {
18571864
return Lib.coerce(axIn, axOut, Cartesian.layoutAttributes, attr, dflt);
18581865
}
18591866

18601867
handleTickValueDefaults(axIn, axOut, coerce, axType);
18611868
}
18621869

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');
19671889

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]};
19771891
axOut = {};
19781892
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();
19821907
});
1983-
});
19841908

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);
19911914

1992-
['D1', 'D2'].forEach(function(v) {
1993-
axIn = {tick0: -1, dtick: v};
1915+
axIn = {tickmode: 'auto', nticks: 5};
19941916
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);
19991924
});
20001925

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};
20081934
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);
20121950
});
20131951

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'};
20231971
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 = {};
20242001
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+
});
20272041
});
2028-
});
20292042

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);
20362049

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+
});
20432056

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+
});
20502064
});
20512065
});
20522066

0 commit comments

Comments
 (0)