diff --git a/packages/cli/src/services/__tests__/util.spec.ts b/packages/cli/src/services/__tests__/util.spec.ts index b39cecb8..d4f0ad60 100644 --- a/packages/cli/src/services/__tests__/util.spec.ts +++ b/packages/cli/src/services/__tests__/util.spec.ts @@ -1,10 +1,13 @@ import path from 'node:path' import { describe, it, expect } from 'vitest' +import fs from 'node:fs/promises' +import os from 'node:os' import { pathToPosix, isFileSync, getPlaywrightVersionFromPackage, + findRegexFiles, } from '../util' describe('util', () => { @@ -46,4 +49,36 @@ describe('util', () => { expect(version).toMatch(/^\d+\.\d+\.\d+/) }) }) + + describe('findRegexFiles()', () => { + it('should correctly handle relative directory paths', async () => { + // Create a temporary directory structure + const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'test-util-')) + const testSubDir = path.join(tmpDir, 'testdir') + await fs.mkdir(testSubDir) + await fs.writeFile(path.join(testSubDir, 'file1.ts'), 'content') + await fs.writeFile(path.join(testSubDir, 'file2.js'), 'content') + + try { + // Change to temp directory to test relative paths + const originalCwd = process.cwd() + process.chdir(tmpDir) + + // Call with relative directory (no leading ./ or /) + // findRegexFiles internally uses path.relative, so it needs to resolve the directory + const files = await findRegexFiles('testdir', /.*/, []) + + // Should get correct relative paths, not paths like ../../absolute/path/... + expect(files).toContain('file1.ts') + expect(files).toContain('file2.js') + expect(files.every(p => !p.startsWith('..'))).toBe(true) + + // Restore original cwd + process.chdir(originalCwd) + } finally { + // Cleanup + await fs.rm(tmpDir, { recursive: true, force: true }) + } + }) + }) }) diff --git a/packages/cli/src/services/util.ts b/packages/cli/src/services/util.ts index 9be87e82..6faa0dde 100644 --- a/packages/cli/src/services/util.ts +++ b/packages/cli/src/services/util.ts @@ -309,8 +309,9 @@ export async function loadPlaywrightProjectFiles ( export async function findRegexFiles (directory: string, regex: RegExp, ignorePattern: string[]): Promise { - const files = await findFilesWithPattern(directory, '**/*.{js,ts,mjs}', ignorePattern) - return files.filter(file => regex.test(file)).map(file => pathToPosix(path.relative(directory, file))) + const resolvedDirectory = path.resolve(directory) + const files = await findFilesWithPattern(resolvedDirectory, '**/*.{js,ts,mjs}', ignorePattern) + return files.filter(file => regex.test(file)).map(file => pathToPosix(path.relative(resolvedDirectory, file))) } export async function findFilesWithPattern (