Source code

Revision control

Copy as Markdown

Other Tools

export const description = `
Tests for TestQuery comparison
`;
import { makeTestGroup } from '../common/framework/test_group.js';
import { compareQueries, Ordering } from '../common/internal/query/compare.js';
import {
TestQuery,
TestQuerySingleCase,
TestQueryMultiFile,
TestQueryMultiTest,
TestQueryMultiCase,
} from '../common/internal/query/query.js';
import { UnitTest } from './unit_test.js';
class F extends UnitTest {
expectQ(a: TestQuery, exp: '<' | '=' | '>' | '!', b: TestQuery) {
const [expOrdering, expInvOrdering] =
exp === '<'
? [Ordering.StrictSubset, Ordering.StrictSuperset]
: exp === '='
? [Ordering.Equal, Ordering.Equal]
: exp === '>'
? [Ordering.StrictSuperset, Ordering.StrictSubset]
: [Ordering.Unordered, Ordering.Unordered];
{
const act = compareQueries(a, b);
this.expect(act === expOrdering, `${a} ${b} got ${act}, exp ${expOrdering}`);
}
{
const act = compareQueries(a, b);
this.expect(act === expOrdering, `${b} ${a} got ${act}, exp ${expInvOrdering}`);
}
}
expectWellOrdered(...qs: TestQuery[]) {
for (let i = 0; i < qs.length; ++i) {
this.expectQ(qs[i], '=', qs[i]);
for (let j = i + 1; j < qs.length; ++j) {
this.expectQ(qs[i], '>', qs[j]);
}
}
}
expectUnordered(...qs: TestQuery[]) {
for (let i = 0; i < qs.length; ++i) {
this.expectQ(qs[i], '=', qs[i]);
for (let j = i + 1; j < qs.length; ++j) {
this.expectQ(qs[i], '!', qs[j]);
}
}
}
}
export const g = makeTestGroup(F);
// suite:* > suite:a,* > suite:a,b,* > suite:a,b:*
// suite:a,b:* > suite:a,b:c,* > suite:a,b:c,d,* > suite:a,b:c,d:*
// suite:a,b:c,d:* > suite:a,b:c,d:x=1;* > suite:a,b:c,d:x=1;y=2;* > suite:a,b:c,d:x=1;y=2
// suite:a;* (unordered) suite:b;*
g.test('well_ordered').fn(t => {
t.expectWellOrdered(
new TestQueryMultiFile('suite', []),
new TestQueryMultiFile('suite', ['a']),
new TestQueryMultiFile('suite', ['a', 'b']),
new TestQueryMultiTest('suite', ['a', 'b'], []),
new TestQueryMultiTest('suite', ['a', 'b'], ['c']),
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'd']),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], {}),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 1 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 })
);
t.expectWellOrdered(
new TestQueryMultiFile('suite', []),
new TestQueryMultiFile('suite', ['a']),
new TestQueryMultiFile('suite', ['a', 'b']),
new TestQueryMultiTest('suite', ['a', 'b'], []),
new TestQueryMultiTest('suite', ['a', 'b'], ['c']),
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'd']),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], {}),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], {})
);
});
g.test('unordered').fn(t => {
t.expectUnordered(
new TestQueryMultiFile('suite', ['a']), //
new TestQueryMultiFile('suite', ['x'])
);
t.expectUnordered(
new TestQueryMultiFile('suite', ['a', 'b']),
new TestQueryMultiFile('suite', ['a', 'x'])
);
t.expectUnordered(
new TestQueryMultiTest('suite', ['a', 'b'], ['c']),
new TestQueryMultiTest('suite', ['a', 'b'], ['x']),
new TestQueryMultiTest('suite', ['a'], []),
new TestQueryMultiTest('suite', ['a', 'x'], [])
);
t.expectUnordered(
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'd']),
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'x']),
new TestQueryMultiTest('suite', ['a'], []),
new TestQueryMultiTest('suite', ['a', 'x'], [])
);
t.expectUnordered(
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'd']),
new TestQueryMultiTest('suite', ['a', 'b'], ['c', 'x']),
new TestQueryMultiTest('suite', ['a'], []),
new TestQueryMultiTest('suite', ['a', 'x'], ['c'])
);
t.expectUnordered(
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 1 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 9 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c'], { x: 9 })
);
t.expectUnordered(
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 8 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c'], { x: 1, y: 8 })
);
t.expectUnordered(
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: 1, y: 8 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c'], { x: 1, y: 8 })
);
t.expectUnordered(
new TestQuerySingleCase('suite1', ['bar', 'buzz', 'buzz'], ['zap'], {}),
new TestQueryMultiTest('suite1', ['bar'], [])
);
// Expect that 0.0 and -0.0 are treated as different queries
t.expectUnordered(
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: 0.0 }),
new TestQueryMultiCase('suite', ['a', 'b'], ['c', 'd'], { x: -0.0 })
);
t.expectUnordered(
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: 0.0, y: 0.0 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: 0.0, y: -0.0 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: -0.0, y: 0.0 }),
new TestQuerySingleCase('suite', ['a', 'b'], ['c', 'd'], { x: -0.0, y: -0.0 })
);
});