time-parser.test.ts•3.79 kB
/**
* Tests for time parser utilities
*/
import { describe, it, expect } from 'vitest';
import {
parseSRTTime,
formatSRTTime,
timeToMilliseconds,
millisecondsToTime,
validateTimeSequence,
calculateDuration,
addTimeOffset,
parseSRTTimeRange,
formatSRTTimeRange,
} from './time-parser.js';
describe('Time Parser', () => {
describe('parseSRTTime', () => {
it('should parse valid SRT time format', () => {
const result = parseSRTTime('01:23:45,678');
expect(result).toEqual({
hours: 1,
minutes: 23,
seconds: 45,
milliseconds: 678,
});
});
it('should throw error for invalid format', () => {
expect(() => parseSRTTime('invalid')).toThrow('Invalid SRT time format');
});
});
describe('formatSRTTime', () => {
it('should format SRT time correctly', () => {
const time = { hours: 1, minutes: 23, seconds: 45, milliseconds: 678 };
const result = formatSRTTime(time);
expect(result).toBe('01:23:45,678');
});
});
describe('timeToMilliseconds', () => {
it('should convert time to milliseconds', () => {
const time = { hours: 1, minutes: 2, seconds: 3, milliseconds: 456 };
const result = timeToMilliseconds(time);
expect(result).toBe(3723456);
});
});
describe('millisecondsToTime', () => {
it('should convert milliseconds to time', () => {
const result = millisecondsToTime(3723456);
expect(result).toEqual({
hours: 1,
minutes: 2,
seconds: 3,
milliseconds: 456,
});
});
});
describe('validateTimeSequence', () => {
it('should validate correct time sequence', () => {
const start = { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
const end = { hours: 0, minutes: 0, seconds: 1, milliseconds: 0 };
expect(validateTimeSequence(start, end)).toBe(true);
});
it('should reject invalid time sequence', () => {
const start = { hours: 0, minutes: 0, seconds: 1, milliseconds: 0 };
const end = { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
expect(validateTimeSequence(start, end)).toBe(false);
});
});
describe('calculateDuration', () => {
it('should calculate duration correctly', () => {
const start = { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
const end = { hours: 0, minutes: 0, seconds: 5, milliseconds: 500 };
const result = calculateDuration(start, end);
expect(result).toEqual({
hours: 0,
minutes: 0,
seconds: 5,
milliseconds: 500,
});
});
});
describe('addTimeOffset', () => {
it('should add positive offset', () => {
const time = { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
const result = addTimeOffset(time, 1500);
expect(result).toEqual({
hours: 0,
minutes: 0,
seconds: 1,
milliseconds: 500,
});
});
});
describe('parseSRTTimeRange', () => {
it('should parse time range correctly', () => {
const result = parseSRTTimeRange('01:23:45,678 --> 01:23:47,890');
expect(result.start).toEqual({
hours: 1,
minutes: 23,
seconds: 45,
milliseconds: 678,
});
expect(result.end).toEqual({
hours: 1,
minutes: 23,
seconds: 47,
milliseconds: 890,
});
});
});
describe('formatSRTTimeRange', () => {
it('should format time range correctly', () => {
const start = { hours: 1, minutes: 23, seconds: 45, milliseconds: 678 };
const end = { hours: 1, minutes: 23, seconds: 47, milliseconds: 890 };
const result = formatSRTTimeRange(start, end);
expect(result).toBe('01:23:45,678 --> 01:23:47,890');
});
});
});