From e7b8fa290fd587fb800c25ddecfa4b26a5adad63 Mon Sep 17 00:00:00 2001 From: Arun Philip Date: Fri, 17 May 2024 08:16:58 -0400 Subject: [PATCH] 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 --- src/helpers/helpers.canvas.ts | 6 +++++- test/specs/helpers.canvas.tests.js | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/helpers/helpers.canvas.ts b/src/helpers/helpers.canvas.ts index a959d1dea1d..f37504c0097 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 ec7a539042a..ba28e3f78d9 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() {