import {Duration} from '@/'; import {describe, it, assert} from 'vitest'; describe('Duration', () => { describe('Duration.from', () => { it('Duration.parse', function () { let duration = Duration.from('P10DT11S')!; assert.ok(duration); assert.equal(duration.days, 10); assert.equal(duration.hours, 0); assert.equal(duration.minutes, 0); assert.equal(duration.seconds, 11); assert.equal(duration.milliseconds, 0); }); it('Duration.parse (full)', function () { let duration = Duration.from('P1Y2M3W10DT12H24M48S')!; assert.ok(duration); assert.equal(duration.sign, 1); assert.equal(duration.years, 1); assert.equal(duration.months, 2); assert.equal(duration.weeks, 3); assert.equal(duration.days, 10); assert.equal(duration.hours, 12); assert.equal(duration.minutes, 24); assert.equal(duration.seconds, 48); assert.equal(duration.milliseconds, 0); }); it('parses duration with + sign', function () { let duration = Duration.from('+P1Y2M3W10DT12H24M48S')!; assert.ok(duration); assert.equal(duration.sign, 1); assert.equal(duration.years, 1); assert.equal(duration.months, 2); assert.equal(duration.weeks, 3); assert.equal(duration.days, 10); assert.equal(duration.hours, 12); assert.equal(duration.minutes, 24); assert.equal(duration.seconds, 48); assert.equal(duration.milliseconds, 0); }); it('parses negative durations', function () { let duration = Duration.from('-P1Y2M3W10DT12H24M48S')!; assert.ok(duration); assert.equal(duration.sign, -1); assert.equal(duration.years, -1); assert.equal(duration.months, -2); assert.equal(duration.weeks, -3); assert.equal(duration.days, -10); assert.equal(duration.hours, -12); assert.equal(duration.minutes, -24); assert.equal(duration.seconds, -48); assert.equal(duration.milliseconds, 0); }); it('creats empty durations', () => { let empty = new Duration(); assert.ok(empty); assert.equal(empty.sign, 0); assert.equal(empty.toJSON(), 'PT0S'); }); it('throws for mixed durations', () => { assert.throws(() => { new Duration(0, 0, 1, -1); }); }); it('Duration.parse (ms)', function () { let duration = Duration.from('PT12.24S')!; assert.ok(duration); assert.equal(duration.days, 0); assert.equal(duration.hours, 0); assert.equal(duration.minutes, 0); assert.equal(duration.seconds, 12); assert.equal(duration.milliseconds, 240); }); it('returns null', function () { assert.throws( () => { Duration.from('PoloS'); }, 'Invalid ISO8601 string', 'throws error when format is invalid', ); }); }); describe('toJSON', function () { it('works', () => { let duration = Duration.from('P1Y2M3W10DT12H24M48S')!; assert.ok(duration, 'Parses duration string'); assert.equal(duration.toJSON(), 'P1Y2M3W10DT12H24M48S'); }); it('prints 0 duration', () => { let duration = new Duration(); assert.equal(duration.toJSON(), 'PT0S'); }); it('prints negative duration', () => { let duration = Duration.from({days: -1, minutes: -1}); assert.equal(duration.toJSON(), '-P1DT1M'); }); }); });