Merge pull request #9401 from brendandahl/svg-fail

Make the test framework more resilient to errors.
This commit is contained in:
Brendan Dahl 2018-02-14 17:05:40 -08:00 committed by GitHub
commit 4f5fb78237
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -44,7 +44,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');
@ -86,6 +86,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));
};
}); });
}); });
} }
@ -127,12 +130,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);
}); });
} }
@ -143,7 +149,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() {
@ -153,8 +159,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();
@ -167,7 +173,7 @@ var rasterizeAnnotationLayer = (function rasterizeAnnotationLayerClosure() {
function rasterizeAnnotationLayer(ctx, viewport, annotations, page, function rasterizeAnnotationLayer(ctx, viewport, annotations, page,
imageResourcesPath, imageResourcesPath,
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');
@ -205,9 +211,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);
@ -223,6 +237,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));
};
}); });
}); });
}); });
@ -544,12 +561,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) {