From cdeb3fe535a31e4e120bcf5c6ce7ac0fed47dbbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Fri, 19 Feb 2016 12:44:09 -0500 Subject: [PATCH 1/7] Add test for hover label format --- test/jasmine/tests/hover_label_test.js | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/jasmine/tests/hover_label_test.js b/test/jasmine/tests/hover_label_test.js index e01fcdf606f..ee1395464ba 100644 --- a/test/jasmine/tests/hover_label_test.js +++ b/test/jasmine/tests/hover_label_test.js @@ -6,6 +6,7 @@ var Lib = require('@src/lib'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); +var mouseEvent = require('../assets/mouse_event'); describe('hover info', function() { 'use strict'; @@ -242,4 +243,42 @@ describe('hover info', function() { expect(d3.selectAll('g.hovertext').select('text').selectAll('tspan').size()).toEqual(2); }); }); + + describe('hoverformat', function() { + + var data = [{ + x: [1, 2, 3], + y: [0.12345, 0.23456, 0.34567] + }], + layout = { + yaxis: { showticklabels: true, hoverformat: ',.2r' }, + width: 600, + height: 400 + }; + + beforeEach(function() { + this. gd = createGraphDiv(); + }); + + it('should display the correct format when ticklabels true', function() { + Plotly.plot(this.gd, data, layout); + mouseEvent('mousemove', 310, 220); + + var hovers = d3.selectAll('g.hovertext'); + + expect(hovers.size()).toEqual(1); + expect(hovers.select('text')[0][0].textContent).toEqual('0.23'); + }); + + it('should display the correct format when ticklabels false', function() { + layout.yaxis.showticklabels = false; + Plotly.plot(this.gd, data, layout); + mouseEvent('mousemove', 310, 220); + + var hovers = d3.selectAll('g.hovertext'); + + expect(hovers.size()).toEqual(1); + expect(hovers.select('text')[0][0].textContent).toEqual('0.23'); + }); + }); }); From 3cd0487af592af41a0d83c9a0ea8741eeea2578a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Fri, 19 Feb 2016 16:07:14 -0500 Subject: [PATCH 2/7] Add coersion for hoverformat regardless of showticklabels --- src/plots/cartesian/tick_defaults.js | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/plots/cartesian/tick_defaults.js b/src/plots/cartesian/tick_defaults.js index a6a2585b2c1..34b3693eebb 100644 --- a/src/plots/cartesian/tick_defaults.js +++ b/src/plots/cartesian/tick_defaults.js @@ -29,28 +29,28 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, delete containerOut.tickcolor; } - var showTickLabels = coerce('showticklabels'); + var showAttrDflt = getShowAttrDflt(containerIn); + + var showTickLabels = coerce('showticklabels'), + tickFormat = coerce('tickformat'), + tickPrefix = coerce('tickprefix'), + tickSuffix = coerce('ticksuffix'); + + if(tickPrefix) coerce('showtickprefix', showAttrDflt); + if(tickSuffix) coerce('showticksuffix', showAttrDflt); + if(showTickLabels) { Lib.coerceFont(coerce, 'tickfont', options.font || {}); coerce('tickangle'); + } - var showAttrDflt = getShowAttrDflt(containerIn); - - if(axType !== 'category') { - var tickFormat = coerce('tickformat'); - if(!options.noHover) coerce('hoverformat'); + if(axType !== 'category') { + if(!options.noHover) coerce('hoverformat'); - if(!tickFormat && axType !== 'date') { - coerce('showexponent', showAttrDflt); - coerce('exponentformat'); - } + if(!tickFormat && axType !== 'date') { + coerce('showexponent', showAttrDflt); + coerce('exponentformat'); } - - var tickPrefix = coerce('tickprefix'); - if(tickPrefix) coerce('showtickprefix', showAttrDflt); - - var tickSuffix = coerce('ticksuffix'); - if(tickSuffix) coerce('showticksuffix', showAttrDflt); } }; From 34c6feff988330afd5e203d764134c540f4bf048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Fri, 19 Feb 2016 17:48:53 -0500 Subject: [PATCH 3/7] Move tickprefix/suffic coersion back into if block --- src/plots/cartesian/tick_defaults.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/plots/cartesian/tick_defaults.js b/src/plots/cartesian/tick_defaults.js index 34b3693eebb..675edf92810 100644 --- a/src/plots/cartesian/tick_defaults.js +++ b/src/plots/cartesian/tick_defaults.js @@ -31,27 +31,25 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, var showAttrDflt = getShowAttrDflt(containerIn); - var showTickLabels = coerce('showticklabels'), - tickFormat = coerce('tickformat'), - tickPrefix = coerce('tickprefix'), - tickSuffix = coerce('ticksuffix'); - - if(tickPrefix) coerce('showtickprefix', showAttrDflt); - if(tickSuffix) coerce('showticksuffix', showAttrDflt); - + var showTickLabels = coerce('showticklabels'); if(showTickLabels) { Lib.coerceFont(coerce, 'tickfont', options.font || {}); coerce('tickangle'); - } - if(axType !== 'category') { - if(!options.noHover) coerce('hoverformat'); + var tickPrefix = coerce('tickprefix'); + if(tickPrefix) coerce('showtickprefix', showAttrDflt); + var tickSuffix = coerce('ticksuffix'); + if(tickSuffix) coerce('showticksuffix', showAttrDflt); + + var tickFormat = coerce('tickformat'); if(!tickFormat && axType !== 'date') { coerce('showexponent', showAttrDflt); coerce('exponentformat'); } } + + if(axType !== 'category' && !options.noHover) coerce('hoverformat'); }; /* From d8e09ee12659e3aa64c5969fe60aef3f83499e1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Mon, 22 Feb 2016 16:26:49 -0500 Subject: [PATCH 4/7] Add test for handleTickDevaults --- test/jasmine/tests/axes_test.js | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index b9866b580b3..c2b7563fa3b 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -7,6 +7,9 @@ var Color = require('@src/components/color'); var handleTickValueDefaults = require('@src/plots/cartesian/tick_value_defaults'); var Axes = PlotlyInternal.Axes; +var createGraph = require('../assets/create_graph_div'); +var destroyGraph = require('../assets/destroy_graph_div'); + describe('Test axes', function() { 'use strict'; @@ -252,6 +255,79 @@ describe('Test axes', function() { }); }); + describe('handleTickDefaults', function() { + var data = [{ x: [1,2,3], y: [3,4,5] }], + gd; + + beforeEach(function() { + gd = createGraph(); + }); + + afterEach(destroyGraph); + + it('should set defaults on bad inputs', function() { + var layout = { + yaxis: { + ticklen: 'invalid', + tickwidth: 'invalid', + tickcolor: 'invalid', + showticklabels: 'invalid', + tickfont: 'invalid', + tickangle: 'invalid' + } + }; + + PlotlyInternal.plot(gd, data, layout); + + var yaxis = gd._fullLayout.yaxis; + expect(yaxis.ticklen).toBe(5); + expect(yaxis.tickwidth).toBe(1); + expect(yaxis.tickcolor).toBe('#444'); + expect(yaxis.ticks).toBe('outside'); + expect(yaxis.showticklabels).toBe(true); + expect(yaxis.tickfont).toEqual({ family: '"Open Sans", verdana, arial, sans-serif', size: 12, color: '#444' }); + expect(yaxis.tickangle).toBe('auto'); + }); + + it('should use valid inputs', function() { + var layout = { + yaxis: { + ticklen: 10, + tickwidth: 5, + tickcolor: '#F00', + showticklabels: true, + tickfont: { family: 'Garamond', size: 72, color: '#0FF' }, + tickangle: -20 + } + }; + + PlotlyInternal.plot(gd, data, layout); + + var yaxis = gd._fullLayout.yaxis; + expect(yaxis.ticklen).toBe(10); + expect(yaxis.tickwidth).toBe(5); + expect(yaxis.tickcolor).toBe('#F00'); + expect(yaxis.ticks).toBe('outside'); + expect(yaxis.showticklabels).toBe(true); + expect(yaxis.tickfont).toEqual({ family: 'Garamond', size: 72, color: '#0FF' }); + expect(yaxis.tickangle).toBe(-20); + }); + + it('should conditionally coerce based on showticklabels', function() { + var layout = { + yaxis: { + showticklabels: false, + tickangle: -90 + } + }; + + PlotlyInternal.plot(gd, data, layout); + + var yaxis = gd._fullLayout.yaxis; + expect(yaxis.tickangle).toBeUndefined(); + }); + }); + describe('handleTickValueDefaults', function() { function mockSupplyDefaults(axIn, axOut, axType) { function coerce(attr, dflt) { From bc329a9f5c4009f10d638477f2ffa9447586195b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Tue, 23 Feb 2016 11:46:14 -0500 Subject: [PATCH 5/7] Move tickPrefix and tickSuffix coersion out of if block --- src/plots/cartesian/tick_defaults.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plots/cartesian/tick_defaults.js b/src/plots/cartesian/tick_defaults.js index 675edf92810..9ed8f0edf31 100644 --- a/src/plots/cartesian/tick_defaults.js +++ b/src/plots/cartesian/tick_defaults.js @@ -31,17 +31,17 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, var showAttrDflt = getShowAttrDflt(containerIn); + var tickPrefix = coerce('tickprefix'); + if(tickPrefix) coerce('showtickprefix', showAttrDflt); + + var tickSuffix = coerce('ticksuffix'); + if(tickSuffix) coerce('showticksuffix', showAttrDflt); + var showTickLabels = coerce('showticklabels'); if(showTickLabels) { Lib.coerceFont(coerce, 'tickfont', options.font || {}); coerce('tickangle'); - var tickPrefix = coerce('tickprefix'); - if(tickPrefix) coerce('showtickprefix', showAttrDflt); - - var tickSuffix = coerce('ticksuffix'); - if(tickSuffix) coerce('showticksuffix', showAttrDflt); - var tickFormat = coerce('tickformat'); if(!tickFormat && axType !== 'date') { coerce('showexponent', showAttrDflt); From d16ec2993d2920b8a4ba10d749d67614b490c20a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Tue, 23 Feb 2016 11:46:30 -0500 Subject: [PATCH 6/7] Change gl test timeout to 500ms --- test/jasmine/tests/gl_plot_interact_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/gl_plot_interact_test.js b/test/jasmine/tests/gl_plot_interact_test.js index 7c69980b925..6a2657d2e18 100644 --- a/test/jasmine/tests/gl_plot_interact_test.js +++ b/test/jasmine/tests/gl_plot_interact_test.js @@ -153,7 +153,7 @@ describe('Test plot structure', function() { describe('buttons resetCameraDefault3d and resetCameraLastSave3d', function() { // changes in scene objects are not instantaneous - var DELAY = 200; + var DELAY = 500; it('should update the scene camera', function(done) { var sceneLayout = gd._fullLayout.scene, From 9b5663aa85490565bc47b72cac568bb4f9ff9d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Tusz?= Date: Tue, 23 Feb 2016 18:40:36 -0500 Subject: [PATCH 7/7] Fix careless mistake --- src/plots/cartesian/tick_defaults.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plots/cartesian/tick_defaults.js b/src/plots/cartesian/tick_defaults.js index 9ed8f0edf31..e3b079e5c35 100644 --- a/src/plots/cartesian/tick_defaults.js +++ b/src/plots/cartesian/tick_defaults.js @@ -42,10 +42,12 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, Lib.coerceFont(coerce, 'tickfont', options.font || {}); coerce('tickangle'); - var tickFormat = coerce('tickformat'); - if(!tickFormat && axType !== 'date') { - coerce('showexponent', showAttrDflt); - coerce('exponentformat'); + if(axType !== 'category'){ + var tickFormat = coerce('tickformat'); + if(!tickFormat && axType !== 'date') { + coerce('showexponent', showAttrDflt); + coerce('exponentformat'); + } } }