From 53d19b619df13ee4be94a8b06a05231920bb6582 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Wed, 24 Jan 2018 16:06:25 -0800 Subject: [PATCH] Make the test framework more resilient to errors. --- test/driver.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/test/driver.js b/test/driver.js index fa65afe8e..bb5ef68ec 100644 --- a/test/driver.js +++ b/test/driver.js @@ -43,7 +43,7 @@ var rasterizeTextLayer = (function rasterizeTextLayerClosure() { function rasterizeTextLayer(ctx, viewport, textContent, enhanceTextSelection) { - return new Promise(function (resolve) { + return new Promise(function (resolve, reject) { // Building SVG with size of the viewport. var svg = document.createElementNS(SVG_NS, 'svg:svg'); svg.setAttribute('width', viewport.width + 'px'); @@ -85,6 +85,9 @@ var rasterizeTextLayer = (function rasterizeTextLayerClosure() { ctx.drawImage(img, 0, 0); resolve(); }; + img.onerror = function(e) { + reject(new Error('Error rasterizing text layer ' + e)); + }; }); }); } @@ -126,12 +129,15 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { // Load the style files and cache the results. for (let key in styles) { - styles[key].promise = new Promise(function(resolve) { + styles[key].promise = new Promise(function(resolve, reject) { let xhr = new XMLHttpRequest(); xhr.open('GET', styles[key].file); xhr.onload = function() { resolve(xhr.responseText); }; + xhr.onerror = function(e) { + reject(new Error('Error fetching annotation style ' + e)); + }; xhr.send(null); }); } @@ -142,7 +148,7 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { function inlineAnnotationImages(images) { var imagePromises = []; for (var i = 0, ii = images.length; i < ii; i++) { - var imagePromise = new Promise(function(resolve) { + var imagePromise = new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; xhr.onload = function() { @@ -152,8 +158,8 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { }; reader.readAsDataURL(xhr.response); }; - xhr.onerror = function() { - resolve(''); + xhr.onerror = function(e) { + reject(new Error('Error fetching inline annotation image ' + e)); }; xhr.open('GET', images[i].src); xhr.send(); @@ -165,7 +171,7 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { function rasterizeAnnotationLayer(ctx, viewport, annotations, page, renderInteractiveForms) { - return new Promise(function (resolve) { + return new Promise(function (resolve, reject) { // Building SVG with size of the viewport. var svg = document.createElementNS(SVG_NS, 'svg:svg'); svg.setAttribute('width', viewport.width + 'px'); @@ -202,9 +208,17 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { var images = div.getElementsByTagName('img'); var imagePromises = inlineAnnotationImages(images); var converted = Promise.all(imagePromises).then(function(data) { + var loadedPromises = []; for (var i = 0, ii = data.length; i < ii; i++) { images[i].src = data[i]; + loadedPromises.push(new Promise(function (resolve, reject) { + images[i].onload = resolve; + images[i].onerror = function(e) { + reject(new Error('Error loading image ' + e)); + }; + })); } + return loadedPromises; }); foreignObject.appendChild(div); @@ -220,6 +234,9 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() { ctx.drawImage(img, 0, 0); resolve(); }; + img.onerror = function(e) { + reject(new Error('Error rasterizing annotation layer ' + e)); + }; }); }); }); @@ -541,12 +558,11 @@ var Driver = (function DriverClosure() { // eslint-disable-line no-unused-vars self._snapshot(task, error); }); initPromise.then(function () { - page.render(renderContext).promise.then(function() { + return page.render(renderContext).promise.then(function() { completeRender(false); - }, - function(error) { - completeRender('render : ' + error); }); + }).catch(function (error) { + completeRender('render : ' + error); }); }, function(error) {