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 : error('hello world\0'); 7 : 1 : error('\0hello world'); 8 : 1 : error('hello\0world'); 9 : 1 : 10 : 1 : matchHeaderValue(' hello world'); 11 : 1 : matchHeaderValue('hello world '); 12 : 1 : matchHeaderValue(' hello world '); 13 : 1 : matchHeaderValue('\thello world'); 14 : 1 : matchHeaderValue('hello world\t'); 15 : 1 : matchHeaderValue('\thello world\t'); 16 : 1 : matchHeaderValue('hello world'); 17 : 1 : matchHeaderValue('hello\tworld'); 18 : 1 : 19 : 1 : error('\0'); 20 : 1 : 21 : 1 : matchHeaderValue(' '); 22 : 1 : matchHeaderValue('\t'); 23 : 1 : matchHeaderValue(''); 24 : 1 : 25 [ + ]: 1 : function error(val){ 26 : 4 : const xhr = new XMLHttpRequest(); 27 : 4 : 28 : 4 : xhr.open('GET', `${activeURL}/parse-headers.py?my-custom-header=${encodeURIComponent(val)}`, false); 29 : 4 : 30 : 4 : assert.throws( 31 [ + ]: 4 : () => { 32 : 4 : xhr.send(); 33 : 4 : }, 34 [ + ]: 4 : (err) => { 35 : 4 : assert(err instanceof DOMException, 'DOMException expected'); 36 : 4 : assert(err.name === 'NetworkError', 'NetworkError expected'); 37 : 4 : 38 : 4 : return true; 39 : 4 : } 40 : 4 : ); 41 : 4 : } 42 : 1 : 43 [ + ]: 1 : function matchHeaderValue(val){ 44 : 11 : const xhr = new XMLHttpRequest(); 45 : 11 : let trimmed = val.trim(); 46 : 11 : 47 : 11 : xhr.open('GET', `${activeURL}/parse-headers.py?my-custom-header=${encodeURIComponent(val)}`, false); 48 : 11 : xhr.send(); 49 : 11 : 50 : 11 : assert.strictEqual(xhr.getResponseHeader('My-Custom-Header'), trimmed); 51 : 11 : } 52 : 1 : } 53 : 2 : 54 : 2 : /* 55 : 2 : * headers-normalize-response.htm 56 : 2 : * 57 : 2 : 58 : 2 : <!DOCTYPE html> 59 : 2 : <meta charset=utf-8> 60 : 2 : <title>Whitespace and null in header values</title> 61 : 2 : <script src=/resources/testharness.js></script> 62 : 2 : <script src=/resources/testharnessreport.js></script> 63 : 2 : <div id=log></div> 64 : 2 : <script> 65 : 2 : function error(val) { 66 : 2 : test(() => { 67 : 2 : const client = new XMLHttpRequest(); 68 : 2 : client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false); 69 : 2 : assert_throws_dom("NetworkError", () => client.send()); 70 : 2 : }, "Header value: " + val.replace("\0", "\\0")); 71 : 2 : } 72 : 2 : 73 : 2 : function matchHeaderValue(val) { 74 : 2 : test(function () { 75 : 2 : var client = new XMLHttpRequest(); 76 : 2 : var trimmed = val.trim(); 77 : 2 : client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false); 78 : 2 : client.send(); 79 : 2 : var r = client.getResponseHeader("My-Custom-Header"); 80 : 2 : 81 : 2 : assert_equals(r, trimmed); 82 : 2 : }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_")); 83 : 2 : } 84 : 2 : 85 : 2 : error("hello world\0"); 86 : 2 : error("\0hello world"); 87 : 2 : error("hello\0world"); 88 : 2 : matchHeaderValue(" hello world"); 89 : 2 : matchHeaderValue("hello world "); 90 : 2 : matchHeaderValue(" hello world "); 91 : 2 : matchHeaderValue("\thello world"); 92 : 2 : matchHeaderValue("hello world\t"); 93 : 2 : matchHeaderValue("\thello world\t"); 94 : 2 : matchHeaderValue("hello world"); 95 : 2 : matchHeaderValue("hello\tworld"); 96 : 2 : error("\0"); 97 : 2 : matchHeaderValue(" "); 98 : 2 : matchHeaderValue("\t"); 99 : 2 : matchHeaderValue(""); 100 : 2 : </script> 101 : 2 : 102 : 2 : * 103 : 2 : * headers-normalize-response.htm 104 : 2 : */