From c6bda02468475fc9b2548e143b64b6a8fff4139c Mon Sep 17 00:00:00 2001 From: Simon Brunel Date: Wed, 26 Jul 2017 13:33:45 +0200 Subject: [PATCH] Rewrite unit test waitForResize helper (#4566) The original implementation tries to intercept events from the chart internal iframe, which ones failing on Chrome 60. Checking internals doesn't seem the best approach, instead we could consider that a chart has been resized after the resize method has been called and processed. So let's hook `Chart.resize` and callback once it's done. --- .travis.yml | 7 +------ test/.eslintrc | 1 + test/jasmine.index.js | 1 + test/jasmine.utils.js | 12 +++++++++++- test/specs/core.controller.tests.js | 13 ------------- test/specs/platform.dom.tests.js | 13 ------------- 6 files changed, 14 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 40e5b442b..862d8b044 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,13 +22,8 @@ sudo: required dist: trusty addons: + chrome: stable firefox: latest - apt: - sources: - - google-chrome - packages: - - google-chrome-stable - # IMPORTANT: scripts require GITHUB_AUTH_TOKEN and GITHUB_AUTH_EMAIL environment variables # IMPORTANT: scripts has to be set executables in the Git repository (error 127) diff --git a/test/.eslintrc b/test/.eslintrc index 5a281785c..8e8f899bf 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -5,6 +5,7 @@ globals: acquireChart: true Chart: true moment: true + waitForResize: true # http://eslint.org/docs/rules/ rules: diff --git a/test/jasmine.index.js b/test/jasmine.index.js index 55c587ab0..10e2e6177 100644 --- a/test/jasmine.index.js +++ b/test/jasmine.index.js @@ -24,6 +24,7 @@ var utils = require('./jasmine.utils'); window.acquireChart = acquireChart; window.releaseChart = releaseChart; + window.waitForResize = utils.waitForResize; window.createMockContext = createMockContext; // some style initialization to limit differences between browsers across different plateforms. diff --git a/test/jasmine.utils.js b/test/jasmine.utils.js index bb3f6445c..473edfde9 100644 --- a/test/jasmine.utils.js +++ b/test/jasmine.utils.js @@ -149,10 +149,20 @@ function specsFromFixtures(path) { }; } +function waitForResize(chart, callback) { + var override = chart.resize; + chart.resize = function() { + chart.resize = override; + override.apply(this, arguments); + callback(); + }; +} + module.exports = { injectCSS: injectCSS, createCanvas: createCanvas, acquireChart: acquireChart, releaseChart: releaseChart, - specsFromFixtures: specsFromFixtures + specsFromFixtures: specsFromFixtures, + waitForResize: waitForResize }; diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index c2038ac24..4c6e61858 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -1,18 +1,5 @@ describe('Chart', function() { - function waitForResize(chart, callback) { - var resizer = chart.canvas.parentNode._chartjs.resizer; - var content = resizer.contentWindow || resizer; - var state = content.document.readyState || 'complete'; - var handler = function() { - Chart.helpers.removeEvent(content, 'load', handler); - Chart.helpers.removeEvent(content, 'resize', handler); - setTimeout(callback, 50); - }; - - 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() { diff --git a/test/specs/platform.dom.tests.js b/test/specs/platform.dom.tests.js index 97806e613..4358b9b35 100644 --- a/test/specs/platform.dom.tests.js +++ b/test/specs/platform.dom.tests.js @@ -1,18 +1,5 @@ describe('Platform.dom', function() { - function waitForResize(chart, callback) { - var resizer = chart.canvas.parentNode._chartjs.resizer; - var content = resizer.contentWindow || resizer; - var state = content.document.readyState || 'complete'; - var handler = function() { - Chart.helpers.removeEvent(content, 'load', handler); - Chart.helpers.removeEvent(content, 'resize', handler); - setTimeout(callback, 50); - }; - - Chart.helpers.addEvent(content, state !== 'complete' ? 'load' : 'resize', handler); - } - describe('context acquisition', function() { var canvasId = 'chartjs-canvas'; -- 2.47.3