| export const description = ` |
| Unit tests for TestQuery strings. |
| `; |
| |
| import { makeTestGroup } from '../common/framework/test_group.js'; |
| import { compareQueries, Ordering } from '../common/internal/query/compare.js'; |
| import { |
| TestQuery, |
| TestQuerySingleCase, |
| TestQueryMultiCase, |
| TestQueryMultiTest, |
| TestQueryMultiFile, |
| relativeQueryString, |
| } from '../common/internal/query/query.js'; |
| |
| import { UnitTest } from './unit_test.js'; |
| |
| class T extends UnitTest { |
| expectQueryString(q: TestQuery, exp: string): void { |
| const s = q.toString(); |
| this.expect(s === exp, `got ${s} expected ${exp}`); |
| } |
| |
| expectRelativeQueryString(parent: TestQuery, child: TestQuery, exp: string): void { |
| const s = relativeQueryString(parent, child); |
| this.expect(s === exp, `got ${s} expected ${exp}`); |
| |
| if (compareQueries(parent, child) !== Ordering.Equal) { |
| // Test in reverse |
| this.shouldThrow('Error', () => { |
| relativeQueryString(child, parent); |
| }); |
| } |
| } |
| } |
| |
| export const g = makeTestGroup(T); |
| |
| g.test('stringifyQuery,single_case').fn(t => { |
| t.expectQueryString( |
| new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { |
| f: 'g', |
| _pri1: 0, |
| x: 3, |
| _pri2: 1, |
| }), |
| 'a:b_1,2_c:d_3,4_e:f="g";x=3' |
| ); |
| }); |
| |
| g.test('stringifyQuery,single_case,json').fn(t => { |
| t.expectQueryString( |
| new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { |
| f: 'g', |
| x: { p: 2, q: 'Q' }, |
| }), |
| 'a:b_1,2_c:d_3,4_e:f="g";x={"p":2,"q":"Q"}' |
| ); |
| }); |
| |
| g.test('stringifyQuery,multi_case').fn(t => { |
| t.expectQueryString( |
| new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { |
| f: 'g', |
| _pri1: 0, |
| a: 3, |
| _pri2: 1, |
| }), |
| 'a:b_1,2_c:d_3,4_e:f="g";a=3;*' |
| ); |
| |
| t.expectQueryString( |
| new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {}), |
| 'a:b_1,2_c:d_3,4_e:*' |
| ); |
| }); |
| |
| g.test('stringifyQuery,multi_test').fn(t => { |
| t.expectQueryString( |
| new TestQueryMultiTest('a', ['b_1', '2_c'], ['d_3', '4_e']), |
| 'a:b_1,2_c:d_3,4_e,*' |
| ); |
| |
| t.expectQueryString( |
| new TestQueryMultiTest('a', ['b_1', '2_c'], []), // |
| 'a:b_1,2_c:*' |
| ); |
| }); |
| |
| g.test('stringifyQuery,multi_file').fn(t => { |
| t.expectQueryString( |
| new TestQueryMultiFile('a', ['b_1', '2_c']), // |
| 'a:b_1,2_c,*' |
| ); |
| |
| t.expectQueryString( |
| new TestQueryMultiFile('a', []), // |
| 'a:*' |
| ); |
| }); |
| |
| g.test('relativeQueryString,equal_or_child').fn(t => { |
| // Depth difference = 0 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', []), // |
| new TestQueryMultiFile('a', []), // |
| '' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| '' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| '' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| '' |
| ); |
| t.expectRelativeQueryString( |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| '' |
| ); |
| |
| // Depth difference = 1 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', []), // |
| new TestQueryMultiFile('a', ['b']), // |
| ':b,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b']), // |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| ',c,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| new TestQueryMultiTest('a', ['b', 'c'], []), // |
| ':*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], []), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| ':d,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| ',e,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // |
| ':*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| ':f=0;*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| ';g=1;*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| '' |
| ); |
| |
| // Depth difference = 2 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', []), // |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| ':b,c,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b', 'c']), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| ':d,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // |
| ',e:*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| ':f=0;g=1;*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1, h: 2 }), // |
| ';h=2' |
| ); |
| // Depth difference = 2 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b']), // |
| new TestQueryMultiTest('a', ['b', 'c'], []), // |
| ',c:*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], []), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| ':d,e,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| ':f=0;*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| ';g=1' |
| ); |
| |
| // Depth difference = 4 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', []), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| ':b,c:d,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d']), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| ',e:f=0;g=1;*' |
| ); |
| // Depth difference = 4 |
| t.expectRelativeQueryString( |
| new TestQueryMultiFile('a', ['b']), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| ',c:d,e,*' |
| ); |
| t.expectRelativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // |
| new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // |
| ':f=0;g=1' |
| ); |
| }); |
| |
| g.test('relativeQueryString,unrelated').fn(t => { |
| t.shouldThrow('Error', () => { |
| relativeQueryString( |
| new TestQueryMultiFile('a', ['b', 'x']), // |
| new TestQueryMultiFile('a', ['b', 'c']) // |
| ); |
| }); |
| t.shouldThrow('Error', () => { |
| relativeQueryString( |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'x']), // |
| new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']) // |
| ); |
| }); |
| t.shouldThrow('Error', () => { |
| relativeQueryString( |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // |
| new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 1 }) // |
| ); |
| }); |
| }); |