Avoid instanceof checks in global test extensions

This commit is contained in:
Tim Schaub
2017-08-28 10:12:51 -06:00
parent 989b047dc1
commit 0bfa59fb6f
+28 -44
View File
@@ -1,11 +1,8 @@
goog.require('ol.array'); goog.require('ol.array');
goog.require('ol.has'); goog.require('ol.has');
goog.require('ol.renderer.canvas.Map'); // avoid importing anything that results in an instanceof check
goog.require('ol.renderer.webgl.Map'); // 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) { (function(global) {
// show generated maps for rendering tests // show generated maps for rendering tests
@@ -430,37 +427,6 @@ goog.require('ol.renderer.webgl.Map');
} }
global.resembleCanvas = resembleCanvas; 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. * 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. * @param {function} done A callback to indicate that the test is done.
*/ */
global.expectResemble = function(map, referenceImage, tolerance, done) { global.expectResemble = function(map, referenceImage, tolerance, done) {
if (map.getRenderer() instanceof ol.renderer.canvas.Map) { map.render();
expectResembleCanvas(map, referenceImage, tolerance, done); map.on('postcompose', function(event) {
} else if (map.getRenderer() instanceof ol.renderer.webgl.Map) { if (event.frameState.animate) {
expectResembleWebGL(map, referenceImage, tolerance, done); // make sure the tile-queue is empty
} else { return;
expect().fail( }
'resemble only works with the canvas and WebGL renderer.');
} 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 = { var features = {