LCOV - code coverage report
Current view: top level - test/wpt/xhr - send-sync-blocks-async.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 105 108 97.2 %
Date: 2024-12-07 00:20:21 Functions: 4 4 100.0 %
Branches: 7 8 87.5 %

           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 : import { prepare_xhr_for_event_order_test } from './xmlhttprequest-event-order.js?q5';
       5                 :          2 : import { assert_xhr_event_order_matches } from './xmlhttprequest-event-order.js?q5';
       6                 :          2 : 
       7            [ + ]:          2 : export default (activeURL) => {
       8                 :          1 : 
       9                 :          1 :         let expect = ['sync 4', 'async 2', 'async 3', 'async 4'];
      10                 :          1 :         let actual = [];
      11                 :          1 : 
      12                 :          1 :         let xhr_async = new XMLHttpRequest();
      13                 :          1 : 
      14                 :          1 :         // first launch an async request, completes in 1 second
      15                 :          1 :         xhr_async.open('GET', `${activeURL}/delay.py?ms=1000`, true);
      16                 :          1 : 
      17            [ + ]:          1 :         xhr_async.onreadystatechange = () => {
      18                 :          3 :                 actual.push('async ' + xhr_async.readyState);
      19                 :          3 : 
      20       [ + ][ + ]:          3 :                 if(xhr_async.readyState === 4 && actual.indexOf('sync 4') > -1){
      21                 :          1 :                         assert.deepStrictEqual(actual, expect);
      22                 :          1 :                         xhr_async.onreadystatechange = null;
      23                 :          1 :                 }
      24                 :          1 :         };
      25                 :          1 : 
      26                 :          1 :         xhr_async.send();
      27                 :          1 : 
      28            [ + ]:          1 :         setTimeout(() => {
      29                 :          1 : 
      30                 :          1 :                 let xhr_sync = new XMLHttpRequest();
      31                 :          1 : 
      32                 :          1 :                 // here's a sync request that will take 2 seconds to finish
      33                 :          1 :                 xhr_sync.open('GET', `${activeURL}/delay.py?ms=2000`, false);
      34                 :          1 : 
      35            [ + ]:          1 :                 xhr_sync.onreadystatechange = () => {
      36                 :          1 :                         actual.push('sync ' + xhr_sync.readyState);
      37                 :          1 : 
      38            [ - ]:          1 :                         if(xhr_sync.readyState === 4 && actual.indexOf('async 4') > -1){
      39                 :          0 :                                 assert.deepStrictEqual(actual, expect);
      40                 :          0 :                                 xhr_sync.onreadystatechange = null;
      41                 :          0 :                         }
      42                 :          1 :                 };
      43                 :          1 : 
      44                 :          1 :         xhr_sync.send();
      45                 :          1 :         }, 10);
      46                 :          1 : }
      47                 :          2 : 
      48                 :          2 : /*
      49                 :          2 :  * send-sync-blocks-async.htm
      50                 :          2 :  *
      51                 :          2 : 
      52                 :          2 : <!DOCTYPE html>
      53                 :          2 : <html>
      54                 :          2 : <head>
      55                 :          2 :     <script src="/resources/testharness.js"></script>
      56                 :          2 :     <script src="/resources/testharnessreport.js"></script>
      57                 :          2 :     <title>XMLHttpRequest: sync requests should block events on pending async requests</title>
      58                 :          2 : </head>
      59                 :          2 : 
      60                 :          2 : <body>
      61                 :          2 :     <div id="log"></div>
      62                 :          2 : 
      63                 :          2 :     <script type="text/javascript">
      64                 :          2 :         var test = async_test();
      65                 :          2 : 
      66                 :          2 :         var expect = ['sync 4', 'async 2', 'async 3', 'async 4']
      67                 :          2 :         var actual = []
      68                 :          2 : 
      69                 :          2 :         test.step(function()
      70                 :          2 :         {
      71                 :          2 :             var xhr_async = new XMLHttpRequest()
      72                 :          2 :             xhr_async.open('GET', 'resources/delay.py?ms=1000', true) // first launch an async request, completes in 1 second
      73                 :          2 :             xhr_async.onreadystatechange = test.step_func(() => {
      74                 :          2 :                 actual.push('async ' + xhr_async.readyState)
      75                 :          2 :                 if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){
      76                 :          2 :                     VerifyResult()
      77                 :          2 :                 }
      78                 :          2 :             });
      79                 :          2 :             xhr_async.send()
      80                 :          2 : 
      81                 :          2 :             test.step_timeout(() => {
      82                 :          2 :                 var xhr_sync = new XMLHttpRequest();
      83                 :          2 :                 xhr_sync.open('GET', 'resources/delay.py?ms=2000', false) // here's a sync request that will take 2 seconds to finish
      84                 :          2 :                 xhr_sync.onreadystatechange = test.step_func(() => {
      85                 :          2 :                     actual.push('sync ' + xhr_sync.readyState)
      86                 :          2 :                     if(xhr_sync.readyState === 4 && actual.indexOf('async 4')>-1){
      87                 :          2 :                         VerifyResult()
      88                 :          2 :                     }
      89                 :          2 :                 });
      90                 :          2 :                 xhr_sync.send()
      91                 :          2 :             }, 10);
      92                 :          2 : 
      93                 :          2 :             function VerifyResult()
      94                 :          2 :             {
      95                 :          2 :                 test.step(function()
      96                 :          2 :                 {
      97                 :          2 :                     assert_array_equals(actual, expect);
      98                 :          2 :                     test.done();
      99                 :          2 :                 });
     100                 :          2 :             };
     101                 :          2 :         });
     102                 :          2 :     </script>
     103                 :          2 : </body>
     104                 :          2 : </html>
     105                 :          2 : 
     106                 :          2 :  *
     107                 :          2 :  * send-sync-blocks-async.htm
     108                 :          2 :  */

Generated by: LCOV version 1.14