Index: third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html b/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6b5740012744c4cf36c775bd20e7c296ff7b1402 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
@@ -0,0 +1,249 @@ |
+<!DOCTYPE html> |
+<meta charset=utf-8> |
+<meta name="timeout" content="long"> |
+<title>img.decode()</title> |
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> |
+<link rel=help href=""> |
+<script src="/resources/testharness.js"></script> |
+<script src="/resources/testharnessreport.js"></script> |
+<div id="log"></div> |
+ |
+<script> |
+"use strict"; |
+ |
+// Basic png decode success test. |
+promise_test(function() { |
+ var message = "PNG Image must be decoded"; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ return img.decode().then( |
domenic
2017/03/23 07:49:20
You should just do `return img.decode()`. promise_
|
+ function() { resolved = true; }, |
+ function() { rejected = true; } |
+ ).then( |
+ function() { |
+ assert_true(resolved, message); |
+ assert_false(rejected, message); |
+ } |
+ ); |
+}); |
+ |
+// Basic svg decode success test. |
+promise_test(function() { |
+ var message = "SVG Image must be decoded"; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ img.src = "/images/green.svg"; |
+ return img.decode().then( |
+ function() { resolved = true; }, |
+ function() { rejected = true; } |
+ ).then( |
+ function() { |
+ assert_true(resolved, message); |
+ assert_false(rejected, message); |
+ } |
+ ); |
+}); |
+ |
+// Non existent path failure. |
+promise_test(function() { |
+ var message = "Non-existent path must be rejected."; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ img.src = "/non/existent/path.png"; |
+ return img.decode().then( |
domenic
2017/03/23 07:49:20
The way to test promise rejections is with `return
|
+ function() { resolved = true; }, |
+ function(e) { |
+ assert_equals(e.name, "EncodingError"); |
+ rejected = true; |
+ } |
+ ).then( |
+ function() { |
+ assert_false(resolved, message); |
+ assert_true(rejected, message); |
+ } |
+ ); |
+}); |
+ |
+// src-less image decode failure. |
+promise_test(function() { |
+ var message = "src-less images must fail decodes."; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ return img.decode().then( |
+ function() { resolved = true; }, |
+ function(e) { |
+ assert_equals(e.name, "EncodingError"); |
+ rejected = true; |
+ } |
+ ).then( |
+ function() { |
+ assert_false(resolved, message); |
+ assert_true(rejected, message); |
+ } |
+ ) |
+}); |
+ |
+// src changes causes a decode failure. |
+promise_test(function() { |
+ var message = "src changes must fail decodes."; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ var promise = img.decode().then( |
+ function() { resolved = true; }, |
+ function(e) { |
+ assert_equals(e.name, "EncodingError"); |
+ rejected = true; |
+ } |
+ ); |
+ img.src = "/images/green.svg"; |
+ return promise.then( |
+ function() { |
+ assert_false(resolved, message); |
+ assert_true(rejected, message); |
+ } |
+ ) |
+}); |
+ |
+// src changes causes a decode failure, following good decodes succeed. |
+promise_test(function() { |
+ var message = "src changes must fail decodes, following good decodes must succeed." |
+ var resolved_count = 0; |
+ var rejected_count = 0; |
+ var decode_request_count = 2; |
+ |
+ var do_resolve = function(resolve) { |
+ ++resolved_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ var do_reject = function(resolve) { |
+ ++rejected_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ |
+ return new Promise(function(resolve, _) { |
domenic
2017/03/23 07:49:19
This promise thing is best done via
```
const img
|
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ img.src = "/images/green.svg"; |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ }).then(function() { |
+ assert_equals(resolved_count, 1, message); |
+ assert_equals(rejected_count, 1, message); |
+ }); |
+}); |
+ |
+// src changes causes a decode failure, following bad decodes also fail. |
+promise_test(function() { |
+ var message = "src changes must fail decodes, following bad decodes also fail."; |
+ var resolved_count = 0; |
+ var rejected_count = 0; |
+ var decode_request_count = 2; |
+ |
+ var do_resolve = function(resolve) { |
+ ++resolved_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ var do_reject = function(resolve) { |
+ ++rejected_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ |
+ return new Promise(function(resolve, _) { |
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ img.src = "/non/existent/path.png"; |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ }).then(function() { |
+ assert_equals(resolved_count, 0, message); |
+ assert_equals(rejected_count, decode_request_count, message); |
+ }); |
+}); |
+ |
+// src changes to the same path succeed. |
+promise_test(function() { |
+ var message = "Same src set must succeed decode."; |
+ var resolved = false; |
+ var rejected = false; |
+ |
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ var promise = img.decode().then( |
+ function() { resolved = true; }, |
+ function(e) { rejected = true; } |
+ ); |
+ img.src = "/images/green.png"; |
+ return promise.then( |
+ function() { |
+ assert_true(resolved, message); |
+ assert_false(rejected, message); |
+ } |
+ ) |
+}); |
+ |
+// Multiple decodes all succeed. |
+promise_test(function() { |
+ var message = "Multiple decodes must succeed."; |
+ var resolved_count = 0; |
+ var rejected_count = 0; |
+ var decode_request_count = 2; |
+ |
+ var do_resolve = function(resolve) { |
+ ++resolved_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ var do_reject = function(resolve) { |
+ ++rejected_count; |
+ if (resolved_count + rejected_count == decode_request_count) |
+ resolve(); |
+ } |
+ |
+ var img = new Image(); |
+ img.src = "/images/green.png"; |
+ |
+ return new Promise(function(resolve, _) { |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ img.decode().then( |
+ function() { do_resolve(resolve); }, |
+ function() { do_reject(resolve); } |
+ ); |
+ }).then(function() { |
+ assert_equals(resolved_count, decode_request_count, message); |
+ assert_equals(rejected_count, 0, message); |
+ }); |
+}); |
+ |
+ |
+</script> |