Chromium Code Reviews| 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> |