LCOV - code coverage report
Current view: top level - test/wpt/xhr - status-error.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 179 180 99.4 %
Date: 2024-12-07 00:20:21 Functions: 6 7 85.7 %
Branches: 8 8 100.0 %

           Branch data     Line data    Source code
       1            [ + ]:          2 : import assert from 'node:assert/strict';
       2                 :          2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js';
       3                 :          2 : 
       4            [ + ]:          2 : export default (activeURL) => {
       5                 :          1 : 
       6                 :          1 :         noError('GET', 200);
       7                 :          1 :         noError('GET', 400);
       8                 :          1 :         noError('GET', 401);
       9                 :          1 :         noError('GET', 404);
      10                 :          1 :         noError('GET', 410);
      11                 :          1 :         noError('GET', 500);
      12                 :          1 :         noError('GET', 699);
      13                 :          1 : 
      14                 :          1 :         noError('HEAD', 200);
      15                 :          1 :         noError('HEAD', 404);
      16                 :          1 :         noError('HEAD', 500);
      17                 :          1 :         noError('HEAD', 699);
      18                 :          1 : 
      19                 :          1 :         noError('POST', 200);
      20                 :          1 :         noError('POST', 404);
      21                 :          1 :         noError('POST', 500);
      22                 :          1 :         noError('POST', 699);
      23                 :          1 : 
      24                 :          1 :         noError('PUT', 200);
      25                 :          1 :         noError('PUT', 404);
      26                 :          1 :         noError('PUT', 500);
      27                 :          1 :         noError('PUT', 699);
      28                 :          1 : 
      29                 :          1 :         unknownScheme();
      30                 :          1 :         postOnBlob();
      31                 :          1 : 
      32            [ + ]:          1 :         function noError(method, code){
      33                 :         19 : 
      34                 :         19 :                 let xhr = new XMLHttpRequest();
      35                 :         19 : 
      36                 :         19 :                 xhr.open(method, `${activeURL}/status.py?code=${code}`, true);
      37                 :         19 : 
      38            [ + ]:         19 :                 xhr.onreadystatechange = () => {
      39                 :         38 :                         assert.strictEqual(xhr.response, '', 'response data');
      40                 :         38 :                         assert.strictEqual(xhr.status, code, 'response status');
      41                 :         38 : 
      42                 :         38 :                         if(xhr.readyState === xhr.DONE)
      43                 :         38 :                                 // Give extra time for a bogus error event to pop up
      44       [ + ][ + ]:         38 :                                 setTimeout(() => {
      45                 :         19 :                                         xhr.onreadystatechange = null;
      46                 :         19 :                                 }, 100);
      47                 :         19 :                 };
      48                 :         19 : 
      49                 :         19 :                 xhr.onerror = () => {
      50                 :          0 :                         assert(false, 'HTTP error should not throw error event');
      51                 :         19 :                 };
      52                 :         19 : 
      53                 :         19 :                 xhr.send();
      54                 :         19 :         }
      55                 :          1 : 
      56            [ + ]:          1 :         function unknownScheme(){
      57                 :          1 : 
      58                 :          1 :                 let xhr = new XMLHttpRequest();
      59                 :          1 :                 xhr.open('GET', 'foobar://dummy', false);
      60                 :          1 : 
      61                 :          1 :                 try{
      62                 :          1 :                         xhr.send();
      63                 :          1 :                 }
      64                 :          1 :                 catch(ex){
      65                 :          1 :                 }
      66                 :          1 : 
      67                 :          1 :                 assert.strictEqual(xhr.status, 0, 'response data');
      68                 :          1 :         }
      69                 :          1 : 
      70            [ + ]:          1 :         function postOnBlob(){
      71                 :          1 : 
      72                 :          1 :                 let u = URL.createObjectURL(new Blob([''], {type: 'text/plain'}));
      73                 :          1 :                 let xhr = new XMLHttpRequest();
      74                 :          1 : 
      75                 :          1 :                 xhr.open('POST', u, false);
      76                 :          1 : 
      77                 :          1 :                 try{
      78                 :          1 :                         xhr.send();
      79                 :          1 :                 }
      80                 :          1 :                 catch(ex){
      81                 :          1 :                 }
      82                 :          1 : 
      83                 :          1 :                 assert.strictEqual(xhr.status, 0, 'response data');
      84                 :          1 :         }
      85                 :          1 : }
      86                 :          2 : 
      87                 :          2 : /*
      88                 :          2 :  * status-error.htm
      89                 :          2 :  *
      90                 :          2 : 
      91                 :          2 : <!doctype html>
      92                 :          2 : <html>
      93                 :          2 :   <head>
      94                 :          2 :     <title>XMLHttpRequest: status error handling</title>
      95                 :          2 :     <script src="/resources/testharness.js"></script>
      96                 :          2 :     <script src="/resources/testharnessreport.js"></script>
      97                 :          2 :     <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." />
      98                 :          2 :     <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="/following::ol/li[3]" />
      99                 :          2 :   </head>
     100                 :          2 :   <body>
     101                 :          2 :     <p>This shouldn't be tested inside a tunnel.</p>
     102                 :          2 :     <div id="log"></div>
     103                 :          2 :     <script>
     104                 :          2 :       function noError(method, code) {
     105                 :          2 :         var test = async_test(document.title + " " + method + " " + code)
     106                 :          2 : 
     107                 :          2 :         test.step(function() {
     108                 :          2 :           var client = new XMLHttpRequest()
     109                 :          2 :           client.open(method, "resources/status.py?code=" + code, true)
     110                 :          2 : 
     111                 :          2 :           client.onreadystatechange = test.step_func(function() {
     112                 :          2 :             assert_equals(client.response, "", "response data")
     113                 :          2 :             assert_equals(client.status, code, "response status")
     114                 :          2 : 
     115                 :          2 :             if (client.readyState == client.DONE)
     116                 :          2 :               // Give extra time for a bogus error event to pop up
     117                 :          2 :               test.step_timeout(() => { test.done() }, 100)
     118                 :          2 :           })
     119                 :          2 :           client.onerror = test.step_func(function() {
     120                 :          2 :             assert_unreached("HTTP error should not throw error event")
     121                 :          2 :           })
     122                 :          2 :           client.send()
     123                 :          2 :         })
     124                 :          2 :       }
     125                 :          2 : 
     126                 :          2 :       function unknownScheme() {
     127                 :          2 :         test(() => {
     128                 :          2 :           var client = new XMLHttpRequest();
     129                 :          2 :           client.open("GET", "foobar://dummy", false);
     130                 :          2 :           try {
     131                 :          2 :             client.send();
     132                 :          2 :           } catch(ex) {}
     133                 :          2 :           assert_equals(client.status, 0, "response data");
     134                 :          2 :         }, "Unknown scheme");
     135                 :          2 :       }
     136                 :          2 : 
     137                 :          2 :       function postOnBlob() {
     138                 :          2 :         test(() => {
     139                 :          2 :           var u = URL.createObjectURL(new Blob([""], {type: 'text/plain'}));
     140                 :          2 :           var client = new XMLHttpRequest();
     141                 :          2 :           client.open("POST", u, false);
     142                 :          2 :           try {
     143                 :          2 :             client.send();
     144                 :          2 :           } catch(ex) {}
     145                 :          2 :           assert_equals(client.status, 0, "response data");
     146                 :          2 :         }, "POST on blob uri");
     147                 :          2 :       }
     148                 :          2 : 
     149                 :          2 :       noError('GET', 200)
     150                 :          2 :       noError('GET', 400)
     151                 :          2 :       noError('GET', 401)
     152                 :          2 :       noError('GET', 404)
     153                 :          2 :       noError('GET', 410)
     154                 :          2 :       noError('GET', 500)
     155                 :          2 :       noError('GET', 699)
     156                 :          2 : 
     157                 :          2 :       noError('HEAD', 200)
     158                 :          2 :       noError('HEAD', 404)
     159                 :          2 :       noError('HEAD', 500)
     160                 :          2 :       noError('HEAD', 699)
     161                 :          2 : 
     162                 :          2 :       noError('POST', 200)
     163                 :          2 :       noError('POST', 404)
     164                 :          2 :       noError('POST', 500)
     165                 :          2 :       noError('POST', 699)
     166                 :          2 : 
     167                 :          2 :       noError('PUT', 200)
     168                 :          2 :       noError('PUT', 404)
     169                 :          2 :       noError('PUT', 500)
     170                 :          2 :       noError('PUT', 699)
     171                 :          2 : 
     172                 :          2 :       unknownScheme();
     173                 :          2 :       postOnBlob();
     174                 :          2 :     </script>
     175                 :          2 :   </body>
     176                 :          2 : </html>
     177                 :          2 : 
     178                 :          2 :  *
     179                 :          2 :  * status-error.htm
     180                 :          2 :  */

Generated by: LCOV version 1.14