tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

urlsearchparams-stringifier.any.js (4490B)


      1 test(function() {
      2    var params = new URLSearchParams();
      3    params.append('a', 'b c');
      4    assert_equals(params + '', 'a=b+c');
      5    params.delete('a');
      6    params.append('a b', 'c');
      7    assert_equals(params + '', 'a+b=c');
      8 }, 'Serialize space');
      9 
     10 test(function() {
     11    var params = new URLSearchParams();
     12    params.append('a', '');
     13    assert_equals(params + '', 'a=');
     14    params.append('a', '');
     15    assert_equals(params + '', 'a=&a=');
     16    params.append('', 'b');
     17    assert_equals(params + '', 'a=&a=&=b');
     18    params.append('', '');
     19    assert_equals(params + '', 'a=&a=&=b&=');
     20    params.append('', '');
     21    assert_equals(params + '', 'a=&a=&=b&=&=');
     22 }, 'Serialize empty value');
     23 
     24 test(function() {
     25    var params = new URLSearchParams();
     26    params.append('', 'b');
     27    assert_equals(params + '', '=b');
     28    params.append('', 'b');
     29    assert_equals(params + '', '=b&=b');
     30 }, 'Serialize empty name');
     31 
     32 test(function() {
     33    var params = new URLSearchParams();
     34    params.append('', '');
     35    assert_equals(params + '', '=');
     36    params.append('', '');
     37    assert_equals(params + '', '=&=');
     38 }, 'Serialize empty name and value');
     39 
     40 test(function() {
     41    var params = new URLSearchParams();
     42    params.append('a', 'b+c');
     43    assert_equals(params + '', 'a=b%2Bc');
     44    params.delete('a');
     45    params.append('a+b', 'c');
     46    assert_equals(params + '', 'a%2Bb=c');
     47 }, 'Serialize +');
     48 
     49 test(function() {
     50    var params = new URLSearchParams();
     51    params.append('=', 'a');
     52    assert_equals(params + '', '%3D=a');
     53    params.append('b', '=');
     54    assert_equals(params + '', '%3D=a&b=%3D');
     55 }, 'Serialize =');
     56 
     57 test(function() {
     58    var params = new URLSearchParams();
     59    params.append('&', 'a');
     60    assert_equals(params + '', '%26=a');
     61    params.append('b', '&');
     62    assert_equals(params + '', '%26=a&b=%26');
     63 }, 'Serialize &');
     64 
     65 test(function() {
     66    var params = new URLSearchParams();
     67    params.append('a', '*-._');
     68    assert_equals(params + '', 'a=*-._');
     69    params.delete('a');
     70    params.append('*-._', 'c');
     71    assert_equals(params + '', '*-._=c');
     72 }, 'Serialize *-._');
     73 
     74 test(function() {
     75    var params = new URLSearchParams();
     76    params.append('a', 'b%c');
     77    assert_equals(params + '', 'a=b%25c');
     78    params.delete('a');
     79    params.append('a%b', 'c');
     80    assert_equals(params + '', 'a%25b=c');
     81 
     82    params = new URLSearchParams('id=0&value=%')
     83    assert_equals(params + '', 'id=0&value=%25')
     84 }, 'Serialize %');
     85 
     86 test(function() {
     87    var params = new URLSearchParams();
     88    params.append('a', 'b\0c');
     89    assert_equals(params + '', 'a=b%00c');
     90    params.delete('a');
     91    params.append('a\0b', 'c');
     92    assert_equals(params + '', 'a%00b=c');
     93 }, 'Serialize \\0');
     94 
     95 test(function() {
     96    var params = new URLSearchParams();
     97    params.append('a', 'b\uD83D\uDCA9c');
     98    assert_equals(params + '', 'a=b%F0%9F%92%A9c');
     99    params.delete('a');
    100    params.append('a\uD83D\uDCA9b', 'c');
    101    assert_equals(params + '', 'a%F0%9F%92%A9b=c');
    102 }, 'Serialize \uD83D\uDCA9');  // Unicode Character 'PILE OF POO' (U+1F4A9)
    103 
    104 test(function() {
    105    var params;
    106    params = new URLSearchParams('a=b&c=d&&e&&');
    107    assert_equals(params.toString(), 'a=b&c=d&e=');
    108    params = new URLSearchParams('a = b &a=b&c=d%20');
    109    assert_equals(params.toString(), 'a+=+b+&a=b&c=d+');
    110    // The lone '=' _does_ survive the roundtrip.
    111    params = new URLSearchParams('a=&a=b');
    112    assert_equals(params.toString(), 'a=&a=b');
    113 
    114    params = new URLSearchParams('b=%2sf%2a');
    115    assert_equals(params.toString(), 'b=%252sf*');
    116 
    117    params = new URLSearchParams('b=%2%2af%2a');
    118    assert_equals(params.toString(), 'b=%252*f*');
    119 
    120    params = new URLSearchParams('b=%%2a');
    121    assert_equals(params.toString(), 'b=%25*');
    122 }, 'URLSearchParams.toString');
    123 
    124 test(() => {
    125    const url = new URL('http://www.example.com/?a=b,c');
    126    const params = url.searchParams;
    127 
    128    assert_equals(url.toString(), 'http://www.example.com/?a=b,c');
    129    assert_equals(params.toString(), 'a=b%2Cc');
    130 
    131    params.append('x', 'y');
    132 
    133    assert_equals(url.toString(), 'http://www.example.com/?a=b%2Cc&x=y');
    134    assert_equals(params.toString(), 'a=b%2Cc&x=y');
    135 }, 'URLSearchParams connected to URL');
    136 
    137 test(() => {
    138    const url = new URL('http://www.example.com/');
    139    const params = url.searchParams;
    140 
    141    params.append('a\nb', 'c\rd');
    142    params.append('e\n\rf', 'g\r\nh');
    143 
    144    assert_equals(params.toString(), "a%0Ab=c%0Dd&e%0A%0Df=g%0D%0Ah");
    145 }, 'URLSearchParams must not do newline normalization');