Make the test framework more resilient to errors.

This commit is contained in:
Brendan Dahl 2018-01-24 16:06:25 -08:00
parent f774abc8d3
commit 53d19b619d

View File

@ -43,7 +43,7 @@ var rasterizeTextLayer = (function rasterizeTextLayerClosure() {
function rasterizeTextLayer(ctx, viewport, textContent, function rasterizeTextLayer(ctx, viewport, textContent,
enhanceTextSelection) { enhanceTextSelection) {
return new Promise(function (resolve) { return new Promise(function (resolve, reject) {
// Building SVG with size of the viewport. // Building SVG with size of the viewport.
var svg = document.createElementNS(SVG_NS, 'svg:svg'); var svg = document.createElementNS(SVG_NS, 'svg:svg');
svg.setAttribute('width', viewport.width + 'px'); svg.setAttribute('width', viewport.width + 'px');
@ -85,6 +85,9 @@ var rasterizeTextLayer = (function rasterizeTextLayerClosure() {
ctx.drawImage(img, 0, 0); ctx.drawImage(img, 0, 0);
resolve(); 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. // Load the style files and cache the results.
for (let key in styles) { for (let key in styles) {
styles[key].promise = new Promise(function(resolve) { styles[key].promise = new Promise(function(resolve, reject) {
let xhr = new XMLHttpRequest(); let xhr = new XMLHttpRequest();
xhr.open('GET', styles[key].file); xhr.open('GET', styles[key].file);
xhr.onload = function() { xhr.onload = function() {
resolve(xhr.responseText); resolve(xhr.responseText);
}; };
xhr.onerror = function(e) {
reject(new Error('Error fetching annotation style ' + e));
};
xhr.send(null); xhr.send(null);
}); });
} }
@ -142,7 +148,7 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
function inlineAnnotationImages(images) { function inlineAnnotationImages(images) {
var imagePromises = []; var imagePromises = [];
for (var i = 0, ii = images.length; i < ii; i++) { 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(); var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; xhr.responseType = 'blob';
xhr.onload = function() { xhr.onload = function() {
@ -152,8 +158,8 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
}; };
reader.readAsDataURL(xhr.response); reader.readAsDataURL(xhr.response);
}; };
xhr.onerror = function() { xhr.onerror = function(e) {
resolve(''); reject(new Error('Error fetching inline annotation image ' + e));
}; };
xhr.open('GET', images[i].src); xhr.open('GET', images[i].src);
xhr.send(); xhr.send();
@ -165,7 +171,7 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
function rasterizeAnnotationLayer(ctx, viewport, annotations, page, function rasterizeAnnotationLayer(ctx, viewport, annotations, page,
renderInteractiveForms) { renderInteractiveForms) {
return new Promise(function (resolve) { return new Promise(function (resolve, reject) {
// Building SVG with size of the viewport. // Building SVG with size of the viewport.
var svg = document.createElementNS(SVG_NS, 'svg:svg'); var svg = document.createElementNS(SVG_NS, 'svg:svg');
svg.setAttribute('width', viewport.width + 'px'); svg.setAttribute('width', viewport.width + 'px');
@ -202,9 +208,17 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
var images = div.getElementsByTagName('img'); var images = div.getElementsByTagName('img');
var imagePromises = inlineAnnotationImages(images); var imagePromises = inlineAnnotationImages(images);
var converted = Promise.all(imagePromises).then(function(data) { var converted = Promise.all(imagePromises).then(function(data) {
var loadedPromises = [];
for (var i = 0, ii = data.length; i < ii; i++) { for (var i = 0, ii = data.length; i < ii; i++) {
images[i].src = data[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); foreignObject.appendChild(div);
@ -220,6 +234,9 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
ctx.drawImage(img, 0, 0); ctx.drawImage(img, 0, 0);
resolve(); 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); self._snapshot(task, error);
}); });
initPromise.then(function () { initPromise.then(function () {
page.render(renderContext).promise.then(function() { return page.render(renderContext).promise.then(function() {
completeRender(false); completeRender(false);
},
function(error) {
completeRender('render : ' + error);
}); });
}).catch(function (error) {
completeRender('render : ' + error);
}); });
}, },
function(error) { function(error) {