import { expect, tap } from '../ts_tapbundle/index.js'; import { parseTestFilename, isLegacyFilename, getLegacyMigrationTarget } from '../ts/tstest.classes.runtime.parser.js'; tap.test('parseTestFilename - single runtime', async () => { const parsed = parseTestFilename('test.node.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - chromium runtime', async () => { const parsed = parseTestFilename('test.chromium.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['chromium']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - multiple runtimes', async () => { const parsed = parseTestFilename('test.node+chromium.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - deno+bun runtime', async () => { const parsed = parseTestFilename('test.deno+bun.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['deno', 'bun']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - with nonci modifier', async () => { const parsed = parseTestFilename('test.chromium.nonci.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['chromium']); expect(parsed.modifiers).toEqual(['nonci']); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - multi-runtime with nonci', async () => { const parsed = parseTestFilename('test.node+chromium.nonci.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium']); expect(parsed.modifiers).toEqual(['nonci']); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - legacy browser', async () => { const parsed = parseTestFilename('test.browser.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['chromium']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(true); }); tap.test('parseTestFilename - legacy both', async () => { const parsed = parseTestFilename('test.both.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(true); }); tap.test('parseTestFilename - legacy browser with nonci', async () => { const parsed = parseTestFilename('test.browser.nonci.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['chromium']); expect(parsed.modifiers).toEqual(['nonci']); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(true); }); tap.test('parseTestFilename - complex basename', async () => { const parsed = parseTestFilename('test.some.feature.node.ts'); expect(parsed.baseName).toEqual('test.some.feature'); expect(parsed.runtimes).toEqual(['node']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - default to node when no runtime', async () => { const parsed = parseTestFilename('test.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - tsx extension', async () => { const parsed = parseTestFilename('test.chromium.tsx'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['chromium']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('tsx'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - deduplicates runtime tokens', async () => { const parsed = parseTestFilename('test.node+node.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('isLegacyFilename - detects browser', async () => { expect(isLegacyFilename('test.browser.ts')).toEqual(true); }); tap.test('isLegacyFilename - detects both', async () => { expect(isLegacyFilename('test.both.ts')).toEqual(true); }); tap.test('isLegacyFilename - rejects new naming', async () => { expect(isLegacyFilename('test.node.ts')).toEqual(false); expect(isLegacyFilename('test.chromium.ts')).toEqual(false); expect(isLegacyFilename('test.node+chromium.ts')).toEqual(false); }); tap.test('getLegacyMigrationTarget - browser to chromium', async () => { const target = getLegacyMigrationTarget('test.browser.ts'); expect(target).toEqual('test.chromium.ts'); }); tap.test('getLegacyMigrationTarget - both to node+chromium', async () => { const target = getLegacyMigrationTarget('test.both.ts'); expect(target).toEqual('test.node+chromium.ts'); }); tap.test('getLegacyMigrationTarget - browser with nonci', async () => { const target = getLegacyMigrationTarget('test.browser.nonci.ts'); expect(target).toEqual('test.chromium.nonci.ts'); }); tap.test('getLegacyMigrationTarget - both with nonci', async () => { const target = getLegacyMigrationTarget('test.both.nonci.ts'); expect(target).toEqual('test.node+chromium.nonci.ts'); }); tap.test('getLegacyMigrationTarget - returns null for non-legacy', async () => { const target = getLegacyMigrationTarget('test.node.ts'); expect(target).toEqual(null); }); tap.test('parseTestFilename - handles full paths', async () => { const parsed = parseTestFilename('/path/to/test.node+chromium.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium']); expect(parsed.original).toEqual('test.node+chromium.ts'); }); tap.test('parseTestFilename - all keyword expands to all runtimes', async () => { const parsed = parseTestFilename('test.all.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium', 'deno', 'bun']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - all keyword with nonci modifier', async () => { const parsed = parseTestFilename('test.all.nonci.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium', 'deno', 'bun']); expect(parsed.modifiers).toEqual(['nonci']); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - all keyword with complex basename', async () => { const parsed = parseTestFilename('test.some.feature.all.ts'); expect(parsed.baseName).toEqual('test.some.feature'); expect(parsed.runtimes).toEqual(['node', 'chromium', 'deno', 'bun']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); tap.test('parseTestFilename - all keyword in chain expands to all runtimes', async () => { const parsed = parseTestFilename('test.node+all.ts'); expect(parsed.baseName).toEqual('test'); expect(parsed.runtimes).toEqual(['node', 'chromium', 'deno', 'bun']); expect(parsed.modifiers).toEqual([]); expect(parsed.extension).toEqual('ts'); expect(parsed.isLegacy).toEqual(false); }); export default tap.start();