From: Simon Brunel Date: Sat, 28 Jan 2017 12:17:38 +0000 (+0100) Subject: Unit tests for Chart constructor and deprecations X-Git-Tag: v2.6.0~2^2~70 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ba6e041713a50eaf1c31000c91c187fb580f88a6;p=thirdparty%2FChart.js.git Unit tests for Chart constructor and deprecations --- diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 57a6cfe42..0d4c128ba 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -373,6 +373,7 @@ module.exports = function(Chart) { * @method IPlugin#afterScaleUpdate * @deprecated since version 2.5.0 * @todo remove at version 3 + * @private */ plugins.notify(me, 'afterScaleUpdate'); plugins.notify(me, 'afterLayout'); diff --git a/src/core/core.interaction.js b/src/core/core.interaction.js index 53a479f61..c2c4ffcbf 100644 --- a/src/core/core.interaction.js +++ b/src/core/core.interaction.js @@ -158,6 +158,8 @@ module.exports = function(Chart) { /** * @function Chart.Interaction.modes.label * @deprecated since version 2.4.0 + * @todo remove at version 3 + * @private */ label: indexMode, @@ -196,6 +198,8 @@ module.exports = function(Chart) { /** * @function Chart.Interaction.modes.x-axis * @deprecated since version 2.4.0. Use index mode and intersect == true + * @todo remove at version 3 + * @private */ 'x-axis': function(chart, e) { return indexMode(chart, e, true); diff --git a/test/core.controller.tests.js b/test/core.controller.tests.js index 9c5e9e26d..f29542cbf 100644 --- a/test/core.controller.tests.js +++ b/test/core.controller.tests.js @@ -1,4 +1,4 @@ -describe('Chart.Controller', function() { +describe('Chart', function() { function waitForResize(chart, callback) { var resizer = chart.canvas.parentNode._chartjs.resizer; @@ -13,6 +13,17 @@ describe('Chart.Controller', function() { Chart.helpers.addEvent(content, state !== 'complete'? 'load' : 'resize', handler); } + // https://github.com/chartjs/Chart.js/issues/2481 + // See global.deprecations.tests.js for backward compatibility + it('should be defined and prototype of chart instances', function() { + var chart = acquireChart({}); + expect(Chart).toBeDefined(); + expect(Chart instanceof Object).toBeTruthy(); + expect(chart.constructor).toBe(Chart); + expect(chart instanceof Chart).toBeTruthy(); + expect(Chart.prototype.isPrototypeOf(chart)).toBeTruthy(); + }); + describe('config initialization', function() { it('should create missing config.data properties', function() { var chart = acquireChart({}); diff --git a/test/global.deprecations.tests.js b/test/global.deprecations.tests.js new file mode 100644 index 000000000..a6b4f70f5 --- /dev/null +++ b/test/global.deprecations.tests.js @@ -0,0 +1,94 @@ +describe('Deprecations', function() { + describe('Version 2.6.0', function() { + // https://github.com/chartjs/Chart.js/issues/2481 + describe('Chart.Controller', function() { + it('should be defined and an alias of Chart', function() { + expect(Chart.Controller).toBeDefined(); + expect(Chart.Controller).toBe(Chart); + }); + it('should be prototype of chart instances', function() { + var chart = acquireChart({}); + expect(chart.constructor).toBe(Chart.Controller); + expect(chart instanceof Chart.Controller).toBeTruthy(); + expect(Chart.Controller.prototype.isPrototypeOf(chart)).toBeTruthy(); + }); + }); + + describe('chart.chart', function() { + it('should be defined and an alias of chart', function() { + var chart = acquireChart({}); + var proxy = chart.chart; + expect(proxy).toBeDefined(); + expect(proxy).toBe(chart); + }); + it('should defined previously existing properties', function() { + var chart = acquireChart({}, { + canvas: { + style: 'width: 140px; height: 320px' + } + }); + + var proxy = chart.chart; + expect(proxy.config instanceof Object).toBeTruthy(); + expect(proxy.controller instanceof Chart.Controller).toBeTruthy(); + expect(proxy.canvas instanceof HTMLCanvasElement).toBeTruthy(); + expect(proxy.ctx instanceof CanvasRenderingContext2D).toBeTruthy(); + expect(proxy.currentDevicePixelRatio).toBe(window.devicePixelRatio || 1); + expect(proxy.aspectRatio).toBe(140/320); + expect(proxy.height).toBe(320); + expect(proxy.width).toBe(140); + }); + }); + }); + + describe('Version 2.5.0', function() { + describe('Chart.PluginBase', function() { + it('should exist and extendable', function() { + expect(Chart.PluginBase).toBeDefined(); + expect(Chart.PluginBase.extend).toBeDefined(); + }); + }); + + describe('IPlugin.afterScaleUpdate', function() { + it('should be called after the chart as been layed out', function() { + var sequence = []; + var plugin = {}; + var hooks = [ + 'beforeLayout', + 'afterScaleUpdate', + 'afterLayout' + ]; + + var override = Chart.layoutService.update; + Chart.layoutService.update = function() { + sequence.push('layoutUpdate'); + override.apply(this, arguments); + }; + + hooks.forEach(function(name) { + plugin[name] = function() { + sequence.push(name); + }; + }); + + window.acquireChart({plugins: [plugin]}); + expect(sequence).toEqual([].concat( + 'beforeLayout', + 'layoutUpdate', + 'afterScaleUpdate', + 'afterLayout' + )); + }); + }); + }); + + describe('Version 2.1.5', function() { + // https://github.com/chartjs/Chart.js/pull/2752 + describe('Chart.pluginService', function() { + it('should be defined and an alias of Chart.plugins', function() { + expect(Chart.pluginService).toBeDefined(); + expect(Chart.pluginService).toBe(Chart.plugins); + }); + }); + }); +});