You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.6 KiB
TypeScript
96 lines
3.6 KiB
TypeScript
import { assert } from 'chai';
|
|
import { TimedLog } from '../../../../util/loggerTimed';
|
|
|
|
const second = 's';
|
|
const ms = 'ms';
|
|
|
|
type TimePair = { offset: number; output: string };
|
|
type TimePairs = Readonly<Array<TimePair>>;
|
|
|
|
function testPair({ offset, output }: TimePair) {
|
|
const result = TimedLog.formatDistanceToNow(Date.now() - offset);
|
|
assert.strictEqual(result, output);
|
|
}
|
|
|
|
function testPairFuzzy({ offset, output }: TimePair) {
|
|
const result = TimedLog.formatDistanceToNow(Date.now() - offset);
|
|
const resultNumber = parseInt(result.replaceAll(/[a-zA-Z]/g, ''), 10);
|
|
const expectedNumber = parseInt(output.replaceAll(/[a-zA-Z]/g, ''), 10);
|
|
assert.approximately(resultNumber, expectedNumber, 1);
|
|
}
|
|
|
|
describe('TimedLog', () => {
|
|
describe('formatDistanceToNow', () => {
|
|
it('should return exact milliseconds when the time difference is less than 1 second', () => {
|
|
(
|
|
[
|
|
{ offset: 0, output: `0${ms}` },
|
|
{ offset: 2, output: `2${ms}` },
|
|
{ offset: 10, output: `10${ms}` },
|
|
{ offset: 22, output: `22${ms}` },
|
|
{ offset: 257, output: `257${ms}` },
|
|
{ offset: 555, output: `555${ms}` },
|
|
{ offset: 900, output: `900${ms}` },
|
|
] satisfies TimePairs
|
|
).forEach(testPairFuzzy);
|
|
});
|
|
|
|
it('should not round milliseconds when the time difference is less than 1 second', () => {
|
|
(
|
|
[
|
|
{ offset: 1, output: `1${ms}` },
|
|
{ offset: 50, output: `50${ms}` },
|
|
{ offset: 500, output: `500${ms}` },
|
|
{ offset: 750, output: `750${ms}` },
|
|
{ offset: 998, output: `998${ms}` },
|
|
{ offset: 999, output: `999${ms}` },
|
|
] satisfies TimePairs
|
|
).forEach(testPairFuzzy);
|
|
});
|
|
|
|
it('should return exact seconds when the time difference is an exact second', () => {
|
|
(
|
|
[
|
|
{ offset: 1000, output: `1${second}` },
|
|
{ offset: 2000, output: `2${second}` },
|
|
{ offset: 10000, output: `10${second}` },
|
|
{ offset: 25000, output: `25${second}` },
|
|
{ offset: 59000, output: `59${second}` },
|
|
{ offset: 60000, output: `60${second}` },
|
|
{ offset: 127000, output: `127${second}` },
|
|
] satisfies TimePairs
|
|
).forEach(testPair);
|
|
});
|
|
|
|
it('should return seconds with milliseconds when the time difference is greater than or equal to 1 second', () => {
|
|
(
|
|
[
|
|
{ offset: 1001, output: `1.001${second}` },
|
|
{ offset: 1010, output: `1.01${second}` },
|
|
{ offset: 1100, output: `1.1${second}` },
|
|
{ offset: 2002, output: `2.002${second}` },
|
|
{ offset: 10010, output: `10.01${second}` },
|
|
{ offset: 25022, output: `25.022${second}` },
|
|
{ offset: 59057, output: `59.057${second}` },
|
|
{ offset: 60001, output: `60.001${second}` },
|
|
{ offset: 127123, output: `127.123${second}` },
|
|
] satisfies TimePairs
|
|
).forEach(testPair);
|
|
});
|
|
|
|
it('should return accurate seconds with milliseconds when the time offset is a float millisecond value', () => {
|
|
// Millisecond values should be whole numbers but we should still handle non-regular values as its theoretically possible for the time to be a float
|
|
(
|
|
[
|
|
{ offset: 1.11112123213, output: `2${ms}` },
|
|
{ offset: 1.567, output: `2${ms}` },
|
|
{ offset: 1.867, output: `2${ms}` },
|
|
{ offset: 1001.567, output: `1.002${second}` },
|
|
{ offset: 2002.1, output: `2.003${second}` },
|
|
{ offset: 10000.0000001, output: `10${second}` },
|
|
] satisfies TimePairs
|
|
).forEach(testPair);
|
|
});
|
|
});
|
|
});
|