fix(logging): Fix log file naming to prevent collisions and update logging system documentation.
This commit is contained in:
		| @@ -1,5 +1,12 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## 2025-05-23 - 1.9.2 - fix(logging) | ||||
| Fix log file naming to prevent collisions and update logging system documentation. | ||||
|  | ||||
| - Enhance safe filename generation in tstest logging to preserve directory structure using double underscores. | ||||
| - Update readme.hints.md to include detailed logging system documentation and behavior. | ||||
| - Add .claude/settings.local.json with updated permissions for build tools. | ||||
|  | ||||
| ## 2025-05-23 - 1.9.1 - fix(dependencies) | ||||
| Update dependency versions and add local configuration files | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,7 @@ This project integrates tstest with tapbundle through a modular architecture: | ||||
|  | ||||
| ### Test Execution Flow | ||||
|  | ||||
| 1. **CLI Entry Point** (`cli.js` <20> `cli.ts.js` <20> `cli.child.ts`) | ||||
| 1. **CLI Entry Point** (`cli.js` <20> `cli.ts.js` <20> `cli.child.ts`) | ||||
|    - The CLI uses tsx to run TypeScript files directly | ||||
|    - Accepts glob patterns to find test files | ||||
|    - Supports options like `--verbose`, `--quiet`, `--web` | ||||
| @@ -59,4 +59,19 @@ The framework automatically detects the runtime environment: | ||||
| - Browser tests are compiled and served via a local server | ||||
| - WebHelpers are only enabled in browser environment | ||||
|  | ||||
| This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns. | ||||
| This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns. | ||||
|  | ||||
| ## Logging System | ||||
|  | ||||
| ### Log File Naming (Fixed in v1.9.1) | ||||
|  | ||||
| When using the `--logfile` flag, tstest creates log files in `.nogit/testlogs/`. The log file naming was updated to preserve directory structure and prevent collisions: | ||||
|  | ||||
| - **Old behavior**: `test/tapbundle/test.ts` → `.nogit/testlogs/test.log` | ||||
| - **New behavior**: `test/tapbundle/test.ts` → `.nogit/testlogs/test__tapbundle__test.log` | ||||
|  | ||||
| This fix ensures that test files with the same basename in different directories don't overwrite each other's logs. The implementation: | ||||
| 1. Takes the relative path from the current working directory | ||||
| 2. Replaces path separators (`/`) with double underscores (`__`) | ||||
| 3. Removes the `.ts` extension | ||||
| 4. Creates a flat filename that preserves the directory structure | ||||
| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@git.zone/tstest', | ||||
|   version: '1.9.1', | ||||
|   version: '1.9.2', | ||||
|   description: 'a test utility to run tests that match test/**/*.ts' | ||||
| } | ||||
|   | ||||
| @@ -153,8 +153,16 @@ export class TsTestLogger { | ||||
|      | ||||
|     // Only set up test log file if --logfile option is specified | ||||
|     if (this.options.logFile) { | ||||
|       const baseFilename = path.basename(filename, '.ts'); | ||||
|       this.currentTestLogFile = path.join('.nogit', 'testlogs', `${baseFilename}.log`); | ||||
|       // Create a safe filename that preserves directory structure | ||||
|       // Convert relative path to a flat filename by replacing separators with __ | ||||
|       const relativeFilename = path.relative(process.cwd(), filename); | ||||
|       const safeFilename = relativeFilename | ||||
|         .replace(/\\/g, '/') // Normalize Windows paths | ||||
|         .replace(/\//g, '__') // Replace path separators with double underscores | ||||
|         .replace(/\.ts$/, '') // Remove .ts extension | ||||
|         .replace(/^\.\.__|^\.__|^__/, ''); // Clean up leading separators from relative paths | ||||
|        | ||||
|       this.currentTestLogFile = path.join('.nogit', 'testlogs', `${safeFilename}.log`); | ||||
|        | ||||
|       // Ensure the directory exists | ||||
|       const logDir = path.dirname(this.currentTestLogFile); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user