From: Arun Philip Date: Fri, 17 May 2024 12:16:58 +0000 (-0400) Subject: do not attempt to clear canvas if one does not exist (#11764) X-Git-Tag: v4.4.3~1 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=e7b8fa290fd587fb800c25ddecfa4b26a5adad63;p=thirdparty%2FChart.js.git do not attempt to clear canvas if one does not exist (#11764) * do not attempt to clear canvas if one does not exist * update test to explicitly run clearCanvas method to ensure it doesn't throw an error * explicitly set canvas and ctx to null in test since the helper in test code didn't * Update test/specs/helpers.canvas.tests.js --------- Co-authored-by: Jacco van den Berg --- diff --git a/src/helpers/helpers.canvas.ts b/src/helpers/helpers.canvas.ts index a959d1dea..f37504c00 100644 --- a/src/helpers/helpers.canvas.ts +++ b/src/helpers/helpers.canvas.ts @@ -131,7 +131,11 @@ export function _alignPixel(chart: Chart, pixel: number, width: number) { /** * Clears the entire canvas. */ -export function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) { +export function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) { + if (!ctx && !canvas) { + return; + } + ctx = ctx || canvas.getContext('2d'); ctx.save(); diff --git a/test/specs/helpers.canvas.tests.js b/test/specs/helpers.canvas.tests.js index ec7a53904..ba28e3f78 100644 --- a/test/specs/helpers.canvas.tests.js +++ b/test/specs/helpers.canvas.tests.js @@ -21,6 +21,21 @@ describe('Chart.helpers.canvas', function() { expect(chart.ctx.clearRect.calls.first().object).toBe(chart.ctx); expect(chart.ctx.clearRect.calls.first().args).toEqual([0, 0, 150, 245]); }); + + it('should not throw error when chart is null', function() { + function createAndClearChart() { + var chart = acquireChart({}, { + canvas: null + }); + // explicitly set canvas and ctx to null since setting it in acquireChart doesn't do anything + chart.canvas = null; + chart.ctx = null; + + helpers.clearCanvas(chart.canvas, chart.ctx); + } + + expect(createAndClearChart).not.toThrow(); + }); }); describe('isPointInArea', function() {