fix decode function

This commit is contained in:
Chris Kruining 2025-01-16 15:54:58 +01:00
parent 1a61f86bea
commit 50a1b7e2d5
No known key found for this signature in database
GPG key ID: EB894A3560CCCAD2
2 changed files with 41 additions and 3 deletions

View file

@ -1,5 +1,5 @@
import { describe, beforeEach, it, expect, mock, afterAll, spyOn } from 'bun:test'; import { describe, beforeEach, it, expect, afterAll, spyOn } from 'bun:test';
import { debounce, deepCopy, deepDiff, filter, map, MutarionKind, splitAt } from './utilities'; import { decode, deepCopy, deepDiff, filter, map, MutarionKind, splitAt } from './utilities';
import { install } from '@sinonjs/fake-timers'; import { install } from '@sinonjs/fake-timers';
type MilliSeconds = number; type MilliSeconds = number;
@ -72,6 +72,44 @@ describe('utilities', () => {
}); });
}); });
describe('decode', () => {
it('should decode \\t characters', async () => {
// Arrange
const given = 'this is\\ta string';
const expected = 'this is\ta string';
// Act
const actual = decode(given);
// Assert
expect(actual).toBe(expected);
});
it('should decode \\n characters', async () => {
// Arrange
const given = 'this is\\na string';
const expected = 'this is\na string';
// Act
const actual = decode(given);
// Assert
expect(actual).toBe(expected);
});
it('should decode \\uHHHH characters', async () => {
// Arrange
const given = 'this is \\u1234 a string';
const expected = 'this is \u1234 a string';
// Act
const actual = decode(given);
// Assert
expect(actual).toBe(expected);
});
});
describe('deepCopy', () => { describe('deepCopy', () => {
it('can skip values passed by reference (non-objects, null, and undefined)', async () => { it('can skip values passed by reference (non-objects, null, and undefined)', async () => {
// arrange // arrange

View file

@ -19,7 +19,7 @@ const decodeReplacer = (_: any, char: string) => ({
f: '\f', f: '\f',
"'": '\'', "'": '\'',
'"': '\"', '"': '\"',
u: String.fromCharCode(Number.parseInt(char.slice(1))), u: String.fromCharCode(Number.parseInt(`0x${char.slice(1)}`)),
}[char.charAt(0)] ?? ''); }[char.charAt(0)] ?? '');
export const decode = (subject: string): string => subject.replace(decodeRegex, decodeReplacer); export const decode = (subject: string): string => subject.replace(decodeRegex, decodeReplacer);