Update WPT tests for embedded content
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / html / semantics / embedded-content / the-img-element / img.complete.html
1 <!DOCTYPE HTML>
2 <title>DOM img complete Test</title>
3 <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
4 <link rel="author" title="Anselm Hannemann" href="http://anselm-hannemann.com/" />
5 <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-img-complete" />
6 <meta name="assert" content="Tests the complete status of the img-element">
7 <script src="/resources/testharness.js"></script>
8 <script src="/resources/testharnessreport.js"></script>
9
10 <img id="imgTestTag">
11 <img src="" id="imgTestTag2">
12 <img id="imgTestTag3" style="width: 80px; height:auto;">
13 <img id="imgTestTag4">
14 <img id="imgTestTag5">
15
16 <script>
17   var imageInstance = document.createElement('img');
18   imageInstance.style.display = 'none';
19
20   document.body.appendChild(imageInstance);
21 </script>
22
23 <div id="log"></div>
24 <script>
25   test(function() {
26     assert_true(document.getElementById("imgTestTag").complete);
27   }, "img src and srcset omitted");
28
29   test(function() {
30     assert_true(document.getElementById("imgTestTag2").complete);
31   }, "img src and srcset empty");
32
33   // test if set to true after img is completely available
34   var t = async_test("async src complete test");
35
36   t.step(function(){
37     var loaded = false;
38     document.getElementById("imgTestTag3").onload = t.step_func_done(function(){
39       assert_false(loaded);
40       loaded = true;
41       assert_true(document.getElementById("imgTestTag3").complete);
42       var currentSrc = document.getElementById("imgTestTag3").currentSrc;
43       var expectedUrl = new URL("3.jpg", window.location);
44       assert_equals(new URL(currentSrc).pathname, expectedUrl.pathname);
45     }, "Only one onload, despite setting the src twice");
46
47     document.getElementById("imgTestTag3").src = 'test' + Math.random();
48     //test if img.complete is set to false if src is changed
49     assert_false(document.getElementById("imgTestTag3").complete, "src changed, should be set to false")
50     //change src again, should make only one request as per 'await stable state'
51     document.getElementById("imgTestTag3").src = '3.jpg?nocache=' + Math.random();
52   });
53
54   var t1 = async_test("async srcset complete test");
55   t1.step(function(){
56     var loaded = false;
57     document.getElementById("imgTestTag5").onload = t1.step_func_done(function(){
58       assert_false(loaded);
59       loaded = true;
60       assert_true(document.getElementById("imgTestTag5").complete);
61     }, "Only one onload, despite setting the srcset twice");
62     //Test if src, srcset is omitted
63     assert_true(document.getElementById("imgTestTag5").complete)
64     document.getElementById("imgTestTag5").srcset = "/images/green-256x256.png 1x";
65     //test if img.complete is set to false if srcset is present
66     assert_false(document.getElementById("imgTestTag5").complete, "srcset present, should be set to false");
67     //change src again, should make only one request as per 'await stable state'
68     document.getElementById("imgTestTag5").srcset="/images/green-256x256.png 1.6x"
69   });
70
71   // https://html.spec.whatwg.org/multipage/multipage/embedded-content-1.html#update-the-image-data
72   // says to "await a stable state" before fetching so we use a separate <script>
73   imageInstance.src = 'image-1.jpg?pipe=trickle(d1)&nocache=' + Math.random(); // make sure the image isn't in cache
74 </script>
75 <script>
76   // test: The final task that is queued by the networking task source once the resource has been fetched has been queued, but has not yet been run, and the img element is not in the broken state
77   async_test(function(t) {
78     assert_false(imageInstance.complete, "imageInstance.complete should be false");
79     var startTime = Date.now();
80     while (true) {
81       if (Date.now() - startTime > 2000)
82         assert_unreached('.complete didn\'t change to true');
83       if (imageInstance.complete === true) break;
84     }
85     t.done();
86   },
87   'IDL attribute complete returns true when image resource has been fetched but not run yet & image is not in broken state');
88
89   // test if broken img does not pass
90   var t2 = async_test("async src broken test");
91   var img4 = document.getElementById("imgTestTag4");
92
93   t2.step(
94     function(){
95     img4.src = 'brokenimg.jpg';
96
97     //test if img.complete is set to false if src is changed
98     assert_false(img4.complete, "src changed to broken img, should be set to false");
99   });
100
101   img4.onload = img4.onerror = t2.step_func(function(event){
102     assert_equals(event.type, "error");
103     assert_true(img4.complete);
104     t2.done();
105   });
106 </script>