From 0bfa59fb6f229bce3d671a05468bb85911186cc4 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Mon, 28 Aug 2017 10:12:51 -0600 Subject: [PATCH] Avoid instanceof checks in global test extensions --- test/test-extensions.js | 72 ++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 44 deletions(-) diff --git a/test/test-extensions.js b/test/test-extensions.js index 6811091eeb..9844f74edc 100644 --- a/test/test-extensions.js +++ b/test/test-extensions.js @@ -1,11 +1,8 @@ goog.require('ol.array'); goog.require('ol.has'); -goog.require('ol.renderer.canvas.Map'); -goog.require('ol.renderer.webgl.Map'); +// avoid importing anything that results in an instanceof check +// since these extensions are global, instanceof checks fail with modules -// FIXME remove afterLoadXml as it uses the wrong XML parser on IE9 - -// helper functions for async testing and other utility functions. (function(global) { // show generated maps for rendering tests @@ -430,37 +427,6 @@ goog.require('ol.renderer.webgl.Map'); } global.resembleCanvas = resembleCanvas; - function expectResembleCanvas(map, referenceImage, tolerance, done) { - map.render(); - map.on('postcompose', function(event) { - var canvas = event.context.canvas; - resembleCanvas(canvas, referenceImage, tolerance, done); - }); - } - - function expectResembleWebGL(map, referenceImage, tolerance, done) { - map.render(); - map.on('postcompose', function(event) { - if (event.frameState.animate) { - // make sure the tile-queue is empty - return; - } - - var webglCanvas = event.glContext.getCanvas(); - expect(webglCanvas).to.be.a(HTMLCanvasElement); - - // draw the WebGL canvas on a new canvas, because we can not create - // a 2d context for that canvas because there is already a webgl context. - var canvas = document.createElement('canvas'); - canvas.width = webglCanvas.width; - canvas.height = webglCanvas.height; - canvas.getContext('2d').drawImage(webglCanvas, 0, 0, - webglCanvas.width, webglCanvas.height); - - resembleCanvas(canvas, referenceImage, tolerance, done); - }); - } - /** * Assert that the given map resembles a reference image. * @@ -470,14 +436,32 @@ goog.require('ol.renderer.webgl.Map'); * @param {function} done A callback to indicate that the test is done. */ global.expectResemble = function(map, referenceImage, tolerance, done) { - if (map.getRenderer() instanceof ol.renderer.canvas.Map) { - expectResembleCanvas(map, referenceImage, tolerance, done); - } else if (map.getRenderer() instanceof ol.renderer.webgl.Map) { - expectResembleWebGL(map, referenceImage, tolerance, done); - } else { - expect().fail( - 'resemble only works with the canvas and WebGL renderer.'); - } + map.render(); + map.on('postcompose', function(event) { + if (event.frameState.animate) { + // make sure the tile-queue is empty + return; + } + + var canvas; + if (event.glContext) { + var webglCanvas = event.glContext.getCanvas(); + expect(webglCanvas).to.be.a(HTMLCanvasElement); + + // draw the WebGL canvas on a new canvas, because we can not create + // a 2d context for that canvas because there is already a webgl context. + canvas = document.createElement('canvas'); + canvas.width = webglCanvas.width; + canvas.height = webglCanvas.height; + canvas.getContext('2d').drawImage(webglCanvas, 0, 0, + webglCanvas.width, webglCanvas.height); + } else { + canvas = event.context.canvas; + } + expect(canvas).to.be.a(HTMLCanvasElement); + + resembleCanvas(canvas, referenceImage, tolerance, done); + }); }; var features = {