| export const description = ` |
| Tests for TestQuery |
| `; |
| |
| import { makeTestGroup } from '../common/framework/test_group.js'; |
| import { parseQuery } from '../common/internal/query/parseQuery.js'; |
| import { |
| TestQueryMultiFile, |
| TestQueryMultiTest, |
| TestQueryMultiCase, |
| TestQuerySingleCase, |
| TestQuery, |
| } from '../common/internal/query/query.js'; |
| |
| import { UnitTest } from './unit_test.js'; |
| |
| class F extends UnitTest { |
| expectToString(q: TestQuery, exp: string) { |
| this.expect(q.toString() === exp); |
| } |
| |
| expectQueriesEqual(q1: TestQuery, q2: TestQuery) { |
| this.expect(q1.level === q2.level); |
| |
| if (q1.level >= 1) { |
| this.expect(q1.isMultiFile === q2.isMultiFile); |
| this.expect(q1.suite === q2.suite); |
| this.expect(q1.filePathParts.length === q2.filePathParts.length); |
| for (let i = 0; i < q1.filePathParts.length; i++) { |
| this.expect(q1.filePathParts[i] === q2.filePathParts[i]); |
| } |
| } |
| |
| if (q1.level >= 2) { |
| const p1 = q1 as TestQueryMultiTest; |
| const p2 = q2 as TestQueryMultiTest; |
| |
| this.expect(p1.isMultiTest === p2.isMultiTest); |
| this.expect(p1.testPathParts.length === p2.testPathParts.length); |
| for (let i = 0; i < p1.testPathParts.length; i++) { |
| this.expect(p1.testPathParts[i] === p2.testPathParts[i]); |
| } |
| } |
| |
| if (q1.level >= 3) { |
| const p1 = q1 as TestQueryMultiCase; |
| const p2 = q2 as TestQueryMultiCase; |
| |
| this.expect(p1.isMultiCase === p2.isMultiCase); |
| this.expect(Object.keys(p1.params).length === Object.keys(p2.params).length); |
| for (const key of Object.keys(p1.params)) { |
| this.expect(key in p2.params); |
| const v1 = p1.params[key]; |
| const v2 = p2.params[key]; |
| this.expect( |
| v1 === v2 || |
| (typeof v1 === 'number' && isNaN(v1)) === (typeof v2 === 'number' && isNaN(v2)) |
| ); |
| this.expect(Object.is(v1, -0) === Object.is(v2, -0)); |
| } |
| } |
| } |
| |
| expectQueryParse(s: string, q: TestQuery) { |
| this.expectQueriesEqual(q, parseQuery(s)); |
| } |
| } |
| |
| export const g = makeTestGroup(F); |
| |
| g.test('constructor').fn(t => { |
| t.shouldThrow('Error', () => new TestQueryMultiTest('suite', [], [])); |
| |
| t.shouldThrow('Error', () => new TestQueryMultiCase('suite', ['a'], [], {})); |
| t.shouldThrow('Error', () => new TestQueryMultiCase('suite', [], ['c'], {})); |
| t.shouldThrow('Error', () => new TestQueryMultiCase('suite', [], [], {})); |
| |
| t.shouldThrow('Error', () => new TestQuerySingleCase('suite', ['a'], [], {})); |
| t.shouldThrow('Error', () => new TestQuerySingleCase('suite', [], ['c'], {})); |
| t.shouldThrow('Error', () => new TestQuerySingleCase('suite', [], [], {})); |
| }); |
| |
| g.test('toString').fn(t => { |
| t.expectToString(new TestQueryMultiFile('s', []), 's:*'); |
| t.expectToString(new TestQueryMultiFile('s', ['a']), 's:a,*'); |
| t.expectToString(new TestQueryMultiFile('s', ['a', 'b']), 's:a,b,*'); |
| t.expectToString(new TestQueryMultiTest('s', ['a', 'b'], []), 's:a,b:*'); |
| t.expectToString(new TestQueryMultiTest('s', ['a', 'b'], ['c']), 's:a,b:c,*'); |
| t.expectToString(new TestQueryMultiTest('s', ['a', 'b'], ['c', 'd']), 's:a,b:c,d,*'); |
| t.expectToString(new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], {}), 's:a,b:c,d:*'); |
| t.expectToString( |
| new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], { x: 1 }), |
| 's:a,b:c,d:x=1;*' |
| ); |
| t.expectToString( |
| new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }), |
| 's:a,b:c,d:x=1;y=2;*' |
| ); |
| t.expectToString( |
| new TestQuerySingleCase('s', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }), |
| 's:a,b:c,d:x=1;y=2' |
| ); |
| t.expectToString(new TestQuerySingleCase('s', ['a', 'b'], ['c', 'd'], {}), 's:a,b:c,d:'); |
| |
| // Test handling of magic param value that convert to NaN/undefined/Infinity/etc. |
| t.expectToString(new TestQuerySingleCase('s', ['a'], ['b'], { c: NaN }), 's:a:b:c="_nan_"'); |
| t.expectToString( |
| new TestQuerySingleCase('s', ['a'], ['b'], { c: undefined }), |
| 's:a:b:c="_undef_"' |
| ); |
| t.expectToString(new TestQuerySingleCase('s', ['a'], ['b'], { c: -0 }), 's:a:b:c="_negzero_"'); |
| }); |
| |
| g.test('parseQuery').fn(t => { |
| t.expectQueryParse('s:*', new TestQueryMultiFile('s', [])); |
| t.expectQueryParse('s:a,*', new TestQueryMultiFile('s', ['a'])); |
| t.expectQueryParse('s:a,b,*', new TestQueryMultiFile('s', ['a', 'b'])); |
| t.expectQueryParse('s:a,b:*', new TestQueryMultiTest('s', ['a', 'b'], [])); |
| t.expectQueryParse('s:a,b:c,*', new TestQueryMultiTest('s', ['a', 'b'], ['c'])); |
| t.expectQueryParse('s:a,b:c,d,*', new TestQueryMultiTest('s', ['a', 'b'], ['c', 'd'])); |
| t.expectQueryParse('s:a,b:c,d:*', new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], {})); |
| t.expectQueryParse( |
| 's:a,b:c,d:x=1;*', |
| new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], { x: 1 }) |
| ); |
| t.expectQueryParse( |
| 's:a,b:c,d:x=1;y=2;*', |
| new TestQueryMultiCase('s', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }) |
| ); |
| t.expectQueryParse( |
| 's:a,b:c,d:x=1;y=2', |
| new TestQuerySingleCase('s', ['a', 'b'], ['c', 'd'], { x: 1, y: 2 }) |
| ); |
| t.expectQueryParse('s:a,b:c,d:', new TestQuerySingleCase('s', ['a', 'b'], ['c', 'd'], {})); |
| |
| // Test handling of magic param value that convert to NaN/undefined/Infinity/etc. |
| t.expectQueryParse('s:a:b:c="_nan_"', new TestQuerySingleCase('s', ['a'], ['b'], { c: NaN })); |
| t.expectQueryParse( |
| 's:a:b:c="_undef_"', |
| new TestQuerySingleCase('s', ['a'], ['b'], { c: undefined }) |
| ); |
| t.expectQueryParse('s:a:b:c="_negzero_"', new TestQuerySingleCase('s', ['a'], ['b'], { c: -0 })); |
| }); |