LCOV - code coverage report
Current view: top level - test/wpt/xhr - response-json.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 129 129 100.0 %
Date: 2024-12-07 00:20:21 Functions: 4 4 100.0 %
Branches: 11 11 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 :         // no data
       7                 :          1 :         makeTest("", null, 'json response with no data: response property is null');
       8                 :          1 : 
       9                 :          1 :         // malformed
      10                 :          1 :         makeTest('{"test":"foo"', null, 'json response with malformed data: response property is null');
      11                 :          1 : 
      12                 :          1 :         // real object
      13                 :          1 :         let obj = {alpha:'a-z', integer:15003, negated:-20, b1:true, b2:false, myAr:['a', 'b', 'c', 1, 2, 3]};
      14                 :          1 : 
      15                 :          1 :         makeTest(JSON.stringify(obj), obj,  'JSON object roundtrip');
      16                 :          1 :         makeTest('{"日本語":"にほんご"}', {"日本語":"にほんご"}, 'JSON roundtrip with Japanese text');
      17                 :          1 : 
      18            [ + ]:          1 :         function makeTest(data, expectedResponse, description){
      19                 :          4 : 
      20                 :          4 :                 let xhr = setupXHR();
      21                 :          4 :                 assert.strictEqual(xhr.responseType, 'json');
      22                 :          4 : 
      23            [ + ]:          4 :                 xhr.onreadystatechange = () => {
      24            [ + ]:         11 :                         if(xhr.readyState === 4){
      25                 :          4 :                                 assert.strictEqual(xhr.status, 200);
      26                 :          4 :                                 assert.strictEqual(xhr.responseType, 'json');
      27                 :          4 :                                 assert.strictEqual(typeof xhr.response, 'object');
      28                 :          4 : 
      29                 :          4 :                                 // if the expectedResponse is not null, we iterate over properties to do a deeper comparison..
      30            [ + ]:          4 :                                 if(expectedResponse){
      31            [ + ]:          2 :                                         for(let prop in expectedResponse){
      32            [ + ]:          7 :                                                 if(expectedResponse[prop] instanceof Array){
      33                 :          1 :                                                         assert.deepStrictEqual(expectedResponse[prop], xhr.response[prop]);
      34            [ + ]:          1 :                                                 }
      35                 :          6 :                                                 else{
      36                 :          6 :                                                         assert.strictEqual(expectedResponse[prop], xhr.response[prop]);
      37                 :          6 :                                                 }
      38                 :          7 :                                         }
      39            [ + ]:          2 :                                 }
      40                 :          2 :                                 else{
      41                 :          2 :                                         assert.strictEqual(xhr.response, expectedResponse); // null comparison, basically
      42                 :          2 :                                 }
      43                 :          4 :                                 assert.strictEqual(xhr.response, xhr.response, 'Response should be cached');
      44                 :          4 :                                 xhr.onreadystatechange = null;
      45                 :          4 :                         }
      46                 :          4 :                 };
      47                 :          4 : 
      48                 :          4 :                 xhr.send(data);
      49                 :          4 :         }
      50                 :          1 : 
      51            [ + ]:          1 :         function setupXHR(){
      52                 :          4 :                 let xhr = new XMLHttpRequest();
      53                 :          4 : 
      54                 :          4 :                 xhr.open('POST', `${activeURL}/content.py`, true);
      55                 :          4 :                 xhr.responseType = 'json';
      56                 :          4 : 
      57                 :          4 :                 return xhr;
      58                 :          4 :         }
      59                 :          1 : }
      60                 :          2 : 
      61                 :          2 : /*
      62                 :          2 :  * response-json.htm
      63                 :          2 :  *
      64                 :          2 : 
      65                 :          2 : <!doctype html>
      66                 :          2 : <html>
      67                 :          2 :   <head>
      68                 :          2 :     <title>XMLHttpRequest: responseType json</title>
      69                 :          2 :     <meta charset="utf-8">
      70                 :          2 :     <script src="/resources/testharness.js"></script>
      71                 :          2 :     <script src="/resources/testharnessreport.js"></script>
      72                 :          2 :         <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::OL[1]/LI[4]" />
      73                 :          2 :         <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::dt[2]/dt[4] following::dt[2]/dt[4]/following::dd[1]" />
      74                 :          2 :         <link rel="help" href="https://xhr.spec.whatwg.org/#json-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2] following::ol[1]/li[3]" />
      75                 :          2 : 
      76                 :          2 :   </head>
      77                 :          2 :   <body>
      78                 :          2 :     <div id="log"></div>
      79                 :          2 :     <script>
      80                 :          2 :       function setupXHR () {
      81                 :          2 :         var client = new XMLHttpRequest()
      82                 :          2 :         client.open('POST', "resources/content.py", true)
      83                 :          2 :         client.responseType = 'json'
      84                 :          2 :         return client
      85                 :          2 :       }
      86                 :          2 :       function makeTest(data, expectedResponse, description){
      87                 :          2 :         var test = async_test(description)
      88                 :          2 :         var xhr = setupXHR()
      89                 :          2 :         assert_equals(xhr.responseType, 'json')
      90                 :          2 :         xhr.onreadystatechange = function(){
      91                 :          2 :             if(xhr.readyState === 4){
      92                 :          2 :                 test.step(function(){
      93                 :          2 :                     assert_equals(xhr.status, 200)
      94                 :          2 :                     assert_equals(xhr.responseType, 'json')
      95                 :          2 :                     assert_equals(typeof xhr.response, 'object')
      96                 :          2 :                     if(expectedResponse){ // if the expectedResponse is not null, we iterate over properties to do a deeper comparison..
      97                 :          2 :                         for(var prop in expectedResponse){
      98                 :          2 :                           if (expectedResponse[prop] instanceof Array) {
      99                 :          2 :                             assert_array_equals(expectedResponse[prop], xhr.response[prop])
     100                 :          2 :                           }else{
     101                 :          2 :                             assert_equals(expectedResponse[prop], xhr.response[prop])
     102                 :          2 :                           }
     103                 :          2 :                         }
     104                 :          2 :                     }else{
     105                 :          2 :                         assert_equals(xhr.response, expectedResponse) // null comparison, basically
     106                 :          2 :                     }
     107                 :          2 :                     assert_equals(xhr.response, xhr.response,
     108                 :          2 :                                   "Response should be cached")
     109                 :          2 :                     test.done()
     110                 :          2 :                 })
     111                 :          2 :             }
     112                 :          2 :         }
     113                 :          2 :         xhr.send(data)
     114                 :          2 :       }
     115                 :          2 :       // no data
     116                 :          2 :       makeTest("", null, 'json response with no data: response property is null')
     117                 :          2 :       // malformed
     118                 :          2 :       makeTest('{"test":"foo"', null, 'json response with malformed data: response property is null')
     119                 :          2 :       // real object
     120                 :          2 :       var obj = {alpha:'a-z', integer:15003, negated:-20, b1:true, b2:false, myAr:['a', 'b', 'c', 1, 2, 3]}
     121                 :          2 :       makeTest(JSON.stringify(obj), obj,  'JSON object roundtrip')
     122                 :          2 :       makeTest('{"日本語":"にほんご"}', {"日本語":"にほんご"}, 'JSON roundtrip with Japanese text')
     123                 :          2 :     </script>
     124                 :          2 :   </body>
     125                 :          2 : </html>
     126                 :          2 : 
     127                 :          2 :  *
     128                 :          2 :  * response-json.htm
     129                 :          2 :  */

Generated by: LCOV version 1.14