fix(logging): Fix log file naming to prevent collisions and update logging system documentation.
This commit is contained in:
		| @@ -1,5 +1,12 @@ | |||||||
| # Changelog | # 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) | ## 2025-05-23 - 1.9.1 - fix(dependencies) | ||||||
| Update dependency versions and add local configuration files | 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 | ### 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 |    - The CLI uses tsx to run TypeScript files directly | ||||||
|    - Accepts glob patterns to find test files |    - Accepts glob patterns to find test files | ||||||
|    - Supports options like `--verbose`, `--quiet`, `--web` |    - Supports options like `--verbose`, `--quiet`, `--web` | ||||||
| @@ -60,3 +60,18 @@ The framework automatically detects the runtime environment: | |||||||
| - WebHelpers are only enabled in browser environment | - 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 = { | export const commitinfo = { | ||||||
|   name: '@git.zone/tstest', |   name: '@git.zone/tstest', | ||||||
|   version: '1.9.1', |   version: '1.9.2', | ||||||
|   description: 'a test utility to run tests that match test/**/*.ts' |   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 |     // Only set up test log file if --logfile option is specified | ||||||
|     if (this.options.logFile) { |     if (this.options.logFile) { | ||||||
|       const baseFilename = path.basename(filename, '.ts'); |       // Create a safe filename that preserves directory structure | ||||||
|       this.currentTestLogFile = path.join('.nogit', 'testlogs', `${baseFilename}.log`); |       // 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 |       // Ensure the directory exists | ||||||
|       const logDir = path.dirname(this.currentTestLogFile); |       const logDir = path.dirname(this.currentTestLogFile); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user