Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html

Issue 669353002: Fix broken Promise-related layout tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@return-rejected
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html
diff --git a/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html b/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html
index cd4e0217aa0cfa880af19a0d739d6eb49b1497b4..57d20eae43dbb2e808532cc5b9a6498c13a845e9 100644
--- a/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html
+++ b/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html
@@ -8,150 +8,130 @@
description("Ensure correct behavior of createImageBitmap for invalid inputs.");
window.jsTestIsAsync = true;
-var TypeError = "TypeError: Failed to execute 'createImageBitmap' on 'Window': No function was found that matched the signature provided.";
-var IndexSizeError = "IndexSizeError: Index or size was negative, or greater than the allowed value.";
-
-var image;
-var testBitmap; // an ImageBitmap that is uncropped. We use this to test createImageBitmap(testBitmap)
-var d; // image.imageData
-var blob;
-var invalidBlob;
-var invalidBlobTestPassed = false;
-var invalidCanvasTestPassed = false;
-
-// Draw to an auxillary canvas.
-var aCanvas = document.createElement("canvas");
-aCanvas.setAttribute("width", "200");
-aCanvas.setAttribute("height", "200");
-var aCtx = aCanvas.getContext("2d");
-
-// Create a terapixel canvas to generate an invalid canvas through allocation failure
-var invalidCanvas = document.createElement("canvas");
-invalidCanvas.setAttribute("width", "1000000");
-invalidCanvas.setAttribute("height", "1000000");
-
-image = new Image();
-image.onload = imageLoaded;
-
-// Before image loads
-shouldThrow("createImageBitmap(image)");
-image.src = aCanvas.toDataURL();
-
-video = document.createElement("video");
-video.addEventListener("canplaythrough", videoLoaded, false);
-
-// Before video loads
-shouldThrow("createImageBitmap(video)");
-video.src = "../../compositing/resources/video.ogv";
-
-var imageLoaded = false;
-var videoLoaded = false;
-var imageBitmapLoaded = false;
-var blobLoaded = false;
-var invalidBlobLoaded = false;
-
-function imageLoaded() {
- createImageBitmap(image).then(imageBitmapLoadedCallback, function() {
- testFailed("Promise was rejected.");
- finishJSTest();
- });
- d = aCtx.getImageData(0, 0, 200, 200);
- imageLoaded = true;
- loaded();
+var reason;
+
+function shouldBeRejected(promise, message) {
+ return promise.then(function() {
+ testFailed('Resolved unexpectedly: ' + message);
+ }, function(e) {
+ reason = e;
+ testPassed('Rejected as expected: ' + message);
+ shouldBeTrue('reason instanceof Error');
+ debug(e);
+ });
}
-function videoLoaded() {
- videoLoaded = true;
- loaded();
+function checkInvalidRange(source, message) {
+ return Promise.resolve().then(function() {
+ return shouldBeRejected(createImageBitmap(source, 0, 0, 10, 0), message + ' / invalid range');
+ }).then(function() {
+ return shouldBeRejected(createImageBitmap(source, 0, 0, 0, 10), message + ' / invalid range');
+ });
}
-function imageBitmapLoadedCallback(imageBitmap) {
- testBitmap = imageBitmap;
- imageBitmapLoaded = true;
- loaded();
+function createCanvas() {
+ return new Promise(function(resolve, reject) {
+ var canvas = document.createElement('canvas');
+ canvas.setAttribute('width', '200');
+ canvas.setAttribute('height', '200');
+ resolve(canvas);
+ });
}
-var xhr = new XMLHttpRequest();
-xhr.open("GET", 'resources/pattern.png');
-xhr.responseType = 'blob';
-xhr.send();
-xhr.onload = function() {
- blob = xhr.response;
- blobLoaded = true;
- loaded();
+function createInvalidCanvas() {
+ // Create a terapixel canvas to generate an invalid canvas through
+ // allocation failure
+ return new Promise(function(resolve, reject) {
+ var canvas = document.createElement('canvas');
+ canvas.setAttribute('width', '100000000');
+ canvas.setAttribute('height', '100000000');
+ resolve(canvas);
+ });
}
-var xhr2 = new XMLHttpRequest();
-xhr2.open("GET", 'resources/shadow-offset.js');
-xhr2.responseType = 'blob';
-xhr2.send();
-xhr2.onload = function() {
- invalidBlob = xhr2.response;
- invalidBlobLoaded = true;
- loaded();
+function createVideo() {
+ return new Promise(function(resolve, reject) {
+ var video = document.createElement('video');
+ video.addEventListener('canplaythrough', resolve.bind(undefined, video), false);
+ video.src = '../../compositing/resources/video.ogv';
+ });
}
-var finishIfDoneCallsRemaining = 2;
-function finishIfDone() {
- finishIfDoneCallsRemaining--;
- if (!finishIfDoneCallsRemaining) {
- // Because promise fulfillment is asynchonous, pass/fail messages
- // must be handled here to ensure a deterministic message order.
- if (invalidBlobTestPassed) {
- testPassed("createImageBitmap(invalidBlob) was rejected.");
- } else {
- testFailed("Invalid blob fulfilled.");
- }
- if (invalidCanvasTestPassed) {
- testPassed("createImageBitmap(invalidCanvas) was rejected.");
- } else {
- testFailed("Invalid canvas fulfilled.");
- }
- finishJSTest();
- }
+function createImage() {
+ return createCanvas().then(function(canvas) {
+ var image = new Image();
+ var promise = new Promise(function(resolve, reject) {
+ image.onload = resolve.bind(undefined, image);
+ });
+ image.src = canvas.toDataURL();
+ return promise;
+ });
}
-function loaded() {
- if (imageLoaded && videoLoaded && imageBitmapLoaded && blobLoaded && invalidBlobLoaded) {
- shouldThrow("createImageBitmap(undefined)", "TypeError");
- shouldThrow("createImageBitmap(null)", "TypeError");
-
- shouldThrow("createImageBitmap(image, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(image, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(video, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(video, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(aCanvas, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(aCanvas, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(d, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(d, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(aCtx, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(aCtx, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(testBitmap, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(testBitmap, 0, 0, 0, 10)");
-
- shouldThrow("createImageBitmap(blob, 0, 0, 10, 0)");
- shouldThrow("createImageBitmap(blob, 0, 0, 0, 10)");
+function createBlob(url) {
+ return new Promise(function(resolve, reject) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url);
+ xhr.responseType = 'blob';
+ xhr.onload = function() {
+ resolve(xhr.response);
+ };
+ xhr.onerror = reject;
+ xhr.send();
+ });
+}
- createImageBitmap(invalidBlob).then(function() {
- finishIfDone();
- }, function() {
- invalidBlobTestPassed = true;
- finishIfDone();
- });
+Promise.resolve().then(function() {
+ return shouldBeRejected(createImageBitmap(undefined), 'undefined');
+}).then(function() {
+ return shouldBeRejected(createImageBitmap(null), 'null');
+}).then(function() {
+ return shouldBeRejected(createImageBitmap(new Image), 'empty image');
+}).then(function() {
+ return shouldBeRejected(createImageBitmap(document.createElement('video')), 'empty video');
+}).then(function() {
+ return createImage().then(function(image) {
+ return checkInvalidRange(image, 'image');
+ });
+}).then(function() {
+ return createVideo().then(function(video) {
+ return checkInvalidRange(video, 'video');
+ });
+}).then(function() {
+ return createCanvas().then(function(canvas) {
+ return checkInvalidRange(canvas, 'canvas');
+ });
+}).then(function() {
+ return createCanvas().then(function(canvas) {
+ return checkInvalidRange(canvas.getContext('2d'), 'canvas context');
+ });
+}).then(function() {
+ return createCanvas().then(function(canvas) {
+ var imagedata = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
+ return checkInvalidRange(imagedata, 'canvas imagedata')
+ });
+}).then(function() {
+ return createImage().then(function(image) {
+ return createImageBitmap(image);
+ }).then(function(bitmap) {
+ return checkInvalidRange(bitmap, 'image bitmap');
+ });
+}).then(function() {
+ return createBlob('resources/pattern.png').then(function(blob) {
+ return checkInvalidRange(blob, 'blob');
+ });
+}).then(function() {
+ return createBlob('resources/shadow-offset.js').then(function(blob) {
+ return shouldBeRejected(createImageBitmap(blob), 'invalid blob');
+ });
+}).then(function() {
+ return createInvalidCanvas().then(function(invalidCanvas) {
+ return shouldBeRejected(createImageBitmap(invalidCanvas), 'invalid canvas');
+ });
+}).catch(function(e) {
+ testFailed('Unexpected rejection: ' + e);
+}).then(finishJSTest, finishJSTest);
- createImageBitmap(invalidCanvas).then(function() {
- finishIfDone();
- }, function() {
- invalidCanvasTestPassed = true;
- finishIfDone();
- });
- }
-}
</script>
</body>
</html>

Powered by Google App Engine
This is Rietveld 408576698