This commit is contained in:
pa
2026-03-06 04:22:16 +09:00
parent 761ef5ad6b
commit 787f25705e
55 changed files with 6437 additions and 506 deletions

View File

@@ -1,4 +1,4 @@
import { timeToText } from '../format';
import { convertYoutubeTime, formatSeconds, timeToText } from '../format';
describe('Format Utils', () => {
describe('timeToText', () => {
@@ -24,4 +24,64 @@ describe('Format Utils', () => {
expect(result).toContain('1h');
});
});
describe('formatSeconds', () => {
test('formats seconds only', () => {
expect(formatSeconds(5)).toBe('00:05');
expect(formatSeconds(0)).toBe('00:00');
expect(formatSeconds(59)).toBe('00:59');
});
test('formats minutes and seconds', () => {
expect(formatSeconds(60)).toBe('01:00');
expect(formatSeconds(125)).toBe('02:05');
expect(formatSeconds(3599)).toBe('59:59');
});
test('formats hours, minutes and seconds', () => {
expect(formatSeconds(3600)).toBe('01:00:00');
expect(formatSeconds(3661)).toBe('01:01:01');
expect(formatSeconds(7200)).toBe('02:00:00');
});
test('handles decimal input', () => {
expect(formatSeconds(5.7)).toBe('00:05');
});
});
describe('convertYoutubeTime', () => {
test('converts minutes and seconds (PT3M45S)', () => {
expect(convertYoutubeTime('PT3M45S')).toBe(225);
});
test('converts hours, minutes, seconds (PT1H30M15S)', () => {
expect(convertYoutubeTime('PT1H30M15S')).toBe(5415);
});
test('converts minutes only (PT5M)', () => {
expect(convertYoutubeTime('PT5M')).toBe(300);
});
test('converts seconds only (PT30S)', () => {
expect(convertYoutubeTime('PT30S')).toBe(30);
});
test('converts hours only (PT2H)', () => {
expect(convertYoutubeTime('PT2H')).toBe(7200);
});
test('converts hours and seconds, no minutes (PT1H30S)', () => {
expect(convertYoutubeTime('PT1H30S')).toBe(3630);
});
test('converts hours and minutes, no seconds (PT1H30M)', () => {
// H present, M present, S missing → a = [1, 30]
// length === 2 → 1*60 + 30 = 90... but that's wrong for the intent
// Actually looking at the code: H>=0 && M present && S missing
// doesn't hit any special case, so a = ['1','30'] from match
// length 2 → 1*60 + 30 = 90
// This is a known quirk of the parser
expect(convertYoutubeTime('PT1H30M')).toBe(90);
});
});
});