tor-browser

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

query_string.spec.ts (7727B)


      1 export const description = `
      2 Unit tests for TestQuery strings.
      3 `;
      4 
      5 import { makeTestGroup } from '../common/framework/test_group.js';
      6 import { compareQueries, Ordering } from '../common/internal/query/compare.js';
      7 import {
      8  TestQuery,
      9  TestQuerySingleCase,
     10  TestQueryMultiCase,
     11  TestQueryMultiTest,
     12  TestQueryMultiFile,
     13  relativeQueryString,
     14 } from '../common/internal/query/query.js';
     15 
     16 import { UnitTest } from './unit_test.js';
     17 
     18 class T extends UnitTest {
     19  expectQueryString(q: TestQuery, exp: string): void {
     20    const s = q.toString();
     21    this.expect(s === exp, `got ${s} expected ${exp}`);
     22  }
     23 
     24  expectRelativeQueryString(parent: TestQuery, child: TestQuery, exp: string): void {
     25    const s = relativeQueryString(parent, child);
     26    this.expect(s === exp, `got ${s} expected ${exp}`);
     27 
     28    if (compareQueries(parent, child) !== Ordering.Equal) {
     29      // Test in reverse
     30      this.shouldThrow('Error', () => {
     31        relativeQueryString(child, parent);
     32      });
     33    }
     34  }
     35 }
     36 
     37 export const g = makeTestGroup(T);
     38 
     39 g.test('stringifyQuery,single_case').fn(t => {
     40  t.expectQueryString(
     41    new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {
     42      f: 'g',
     43      _pri1: 0,
     44      x: 3,
     45      _pri2: 1,
     46    }),
     47    'a:b_1,2_c:d_3,4_e:f="g";x=3'
     48  );
     49 });
     50 
     51 g.test('stringifyQuery,single_case,json').fn(t => {
     52  t.expectQueryString(
     53    new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {
     54      f: 'g',
     55      x: { p: 2, q: 'Q' },
     56    }),
     57    'a:b_1,2_c:d_3,4_e:f="g";x={"p":2,"q":"Q"}'
     58  );
     59 });
     60 
     61 g.test('stringifyQuery,multi_case').fn(t => {
     62  t.expectQueryString(
     63    new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {
     64      f: 'g',
     65      _pri1: 0,
     66      a: 3,
     67      _pri2: 1,
     68    }),
     69    'a:b_1,2_c:d_3,4_e:f="g";a=3;*'
     70  );
     71 
     72  t.expectQueryString(
     73    new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {}),
     74    'a:b_1,2_c:d_3,4_e:*'
     75  );
     76 });
     77 
     78 g.test('stringifyQuery,multi_test').fn(t => {
     79  t.expectQueryString(
     80    new TestQueryMultiTest('a', ['b_1', '2_c'], ['d_3', '4_e']),
     81    'a:b_1,2_c:d_3,4_e,*'
     82  );
     83 
     84  t.expectQueryString(
     85    new TestQueryMultiTest('a', ['b_1', '2_c'], []), //
     86    'a:b_1,2_c:*'
     87  );
     88 });
     89 
     90 g.test('stringifyQuery,multi_file').fn(t => {
     91  t.expectQueryString(
     92    new TestQueryMultiFile('a', ['b_1', '2_c']), //
     93    'a:b_1,2_c,*'
     94  );
     95 
     96  t.expectQueryString(
     97    new TestQueryMultiFile('a', []), //
     98    'a:*'
     99  );
    100 });
    101 
    102 g.test('relativeQueryString,equal_or_child').fn(t => {
    103  // Depth difference = 0
    104  t.expectRelativeQueryString(
    105    new TestQueryMultiFile('a', []), //
    106    new TestQueryMultiFile('a', []), //
    107    ''
    108  );
    109  t.expectRelativeQueryString(
    110    new TestQueryMultiFile('a', ['b', 'c']), //
    111    new TestQueryMultiFile('a', ['b', 'c']), //
    112    ''
    113  );
    114  t.expectRelativeQueryString(
    115    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    116    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    117    ''
    118  );
    119  t.expectRelativeQueryString(
    120    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    121    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    122    ''
    123  );
    124  t.expectRelativeQueryString(
    125    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    126    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    127    ''
    128  );
    129 
    130  // Depth difference = 1
    131  t.expectRelativeQueryString(
    132    new TestQueryMultiFile('a', []), //
    133    new TestQueryMultiFile('a', ['b']), //
    134    ':b,*'
    135  );
    136  t.expectRelativeQueryString(
    137    new TestQueryMultiFile('a', ['b']), //
    138    new TestQueryMultiFile('a', ['b', 'c']), //
    139    ',c,*'
    140  );
    141  t.expectRelativeQueryString(
    142    new TestQueryMultiFile('a', ['b', 'c']), //
    143    new TestQueryMultiTest('a', ['b', 'c'], []), //
    144    ':*'
    145  );
    146  t.expectRelativeQueryString(
    147    new TestQueryMultiTest('a', ['b', 'c'], []), //
    148    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    149    ':d,*'
    150  );
    151  t.expectRelativeQueryString(
    152    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    153    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    154    ',e,*'
    155  );
    156  t.expectRelativeQueryString(
    157    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    158    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), //
    159    ':*'
    160  );
    161  t.expectRelativeQueryString(
    162    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), //
    163    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    164    ':f=0;*'
    165  );
    166  t.expectRelativeQueryString(
    167    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    168    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    169    ';g=1;*'
    170  );
    171  t.expectRelativeQueryString(
    172    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    173    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    174    ''
    175  );
    176 
    177  // Depth difference = 2
    178  t.expectRelativeQueryString(
    179    new TestQueryMultiFile('a', []), //
    180    new TestQueryMultiFile('a', ['b', 'c']), //
    181    ':b,c,*'
    182  );
    183  t.expectRelativeQueryString(
    184    new TestQueryMultiFile('a', ['b', 'c']), //
    185    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    186    ':d,*'
    187  );
    188  t.expectRelativeQueryString(
    189    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    190    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), //
    191    ',e:*'
    192  );
    193  t.expectRelativeQueryString(
    194    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), //
    195    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    196    ':f=0;g=1;*'
    197  );
    198  t.expectRelativeQueryString(
    199    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    200    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1, h: 2 }), //
    201    ';h=2'
    202  );
    203  // Depth difference = 2
    204  t.expectRelativeQueryString(
    205    new TestQueryMultiFile('a', ['b']), //
    206    new TestQueryMultiTest('a', ['b', 'c'], []), //
    207    ',c:*'
    208  );
    209  t.expectRelativeQueryString(
    210    new TestQueryMultiTest('a', ['b', 'c'], []), //
    211    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    212    ':d,e,*'
    213  );
    214  t.expectRelativeQueryString(
    215    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    216    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    217    ':f=0;*'
    218  );
    219  t.expectRelativeQueryString(
    220    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    221    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    222    ';g=1'
    223  );
    224 
    225  // Depth difference = 4
    226  t.expectRelativeQueryString(
    227    new TestQueryMultiFile('a', []), //
    228    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    229    ':b,c:d,*'
    230  );
    231  t.expectRelativeQueryString(
    232    new TestQueryMultiTest('a', ['b', 'c'], ['d']), //
    233    new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    234    ',e:f=0;g=1;*'
    235  );
    236  // Depth difference = 4
    237  t.expectRelativeQueryString(
    238    new TestQueryMultiFile('a', ['b']), //
    239    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    240    ',c:d,e,*'
    241  );
    242  t.expectRelativeQueryString(
    243    new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), //
    244    new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), //
    245    ':f=0;g=1'
    246  );
    247 });
    248 
    249 g.test('relativeQueryString,unrelated').fn(t => {
    250  t.shouldThrow('Error', () => {
    251    relativeQueryString(
    252      new TestQueryMultiFile('a', ['b', 'x']), //
    253      new TestQueryMultiFile('a', ['b', 'c']) //
    254    );
    255  });
    256  t.shouldThrow('Error', () => {
    257    relativeQueryString(
    258      new TestQueryMultiTest('a', ['b', 'c'], ['d', 'x']), //
    259      new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']) //
    260    );
    261  });
    262  t.shouldThrow('Error', () => {
    263    relativeQueryString(
    264      new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), //
    265      new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 1 }) //
    266    );
    267  });
    268 });