diff --git a/src/timer/executionTimer.spec.ts b/src/timer/executionTimer.spec.ts index 4480942..3390314 100644 --- a/src/timer/executionTimer.spec.ts +++ b/src/timer/executionTimer.spec.ts @@ -118,4 +118,48 @@ describe('ExecutionTimer', () => { const elapsedTime = timer.getElapsedTime(customId); expect(elapsedTime).toMatch(/5 seconds/); }); + + it('should return correct timer details', () => { + const customId = 'testExecution'; + + jest.spyOn(performance, 'now').mockReturnValueOnce(1000); + timer.start(customId); + + jest.spyOn(performance, 'now').mockReturnValueOnce(5000); + timer.stop(customId); + + const timeInfo = timer.getInfo(customId); + + expect(timeInfo).toBeDefined(); + expect(timeInfo.executionId).toBe(customId); + expect(timeInfo.startTime).toBeInstanceOf(Date); + expect(timeInfo.endTime).toBeInstanceOf(Date); + expect(timeInfo.duration).toBe(4000); + expect(timeInfo.elapsedTime).toMatch(/4 seconds/); + }); + + it('should return default values if timer was not started', () => { + const timeInfo = timer.getInfo('timerForDetails'); + + expect(timeInfo).toBeDefined(); + expect(timeInfo.executionId).toBe('timerForDetails'); + expect(timeInfo.startTime).toBeUndefined(); + expect(timeInfo.endTime).toBeUndefined(); + expect(timeInfo.duration).toBeUndefined(); + expect(timeInfo.elapsedTime).toBeUndefined(); + }); + + it('should handle fraction digits for duration', () => { + const customId = 'fractionTest'; + + jest.spyOn(performance, 'now').mockReturnValueOnce(1000); + timer.start(customId); + + jest.spyOn(performance, 'now').mockReturnValueOnce(3500); + timer.stop(customId); + + const timeInfo = timer.getInfo(customId, 2); + + expect(timeInfo.duration).toBeCloseTo(2500, 2); + }); }); diff --git a/src/timer/executionTimer.ts b/src/timer/executionTimer.ts index 7f3f7bd..2949daf 100644 --- a/src/timer/executionTimer.ts +++ b/src/timer/executionTimer.ts @@ -1,3 +1,5 @@ +import { TimerDetailsModel } from './models/timer.model'; + /** * A class for measuring the execution time of code blocks. */ @@ -115,4 +117,20 @@ export class ExecutionTimer { return parts.join(' '); } + + /** + * Gets details of a specific execution timer. + * @param executionId - The timer ID. Defaults to 'default'. + * @param fractionDigits - Decimal places for milliseconds. + * @returns An object containing timer details. + */ + getInfo(executionId: string = 'default', fractionDigits?: number): TimerDetailsModel { + return { + executionId, + startTime: this.getStartDate(executionId), + endTime: this.getEndDate(executionId), + duration: this.getDuration(executionId, fractionDigits), + elapsedTime: this.getElapsedTime(executionId, fractionDigits) + }; + } } diff --git a/src/timer/models/timer.model.ts b/src/timer/models/timer.model.ts new file mode 100644 index 0000000..dc6f3ae --- /dev/null +++ b/src/timer/models/timer.model.ts @@ -0,0 +1,8 @@ + +export interface TimerDetailsModel{ + executionId: string; + startTime: Date | undefined; + endTime: Date | undefined; + duration: number | undefined; + elapsedTime: string | undefined; +}