Source code
Revision control
Copy as Markdown
Other Tools
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 }) //
);
});
});