Signal-Desktop/ts/test-node/util/unicodeSlice_test.ts

40 lines
1.4 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import assert from 'node:assert/strict';
import { unicodeSlice } from '../../util/unicodeSlice';
import { byteLength } from '../../Bytes';
describe('unicodeSlice()', () => {
function test(
title: string,
input: string,
begin: number,
end: number,
expected: string,
expectedSize: number
): void {
it(title, () => {
const result = unicodeSlice(input, begin, end);
assert.strictEqual(result, expected);
assert.strictEqual(byteLength(result), expectedSize);
});
}
test('one-byte chars', '123456', 2, 4, '34', 2);
test('past max length', '123456', 0, 100, '123456', 6);
test('end before start', '123456', 5, 1, '', 0);
test('negative start', '123456', -5, 4, '1234', 4);
test('negative end', '123456', 0, -5, '', 0);
test('end at start', '123456', 3, 3, '', 0);
test('multi-byte char', 'x€x', 1, 4, '€', 3);
test('multi-byte char slice before end', '€', 1, 3, '', 0);
test('multi-byte char slice after start', '€', 2, 4, '', 0);
test('emoji', 'x👩👩👧👦x', 1, 26, '👩‍👩‍👧‍👦', 25);
test('emoji slice before end', 'x👩👩👧👦x', 1, 25, '', 0);
test('emoji slice after start', 'x👩👩👧👦x', 2, 26, '', 0);
test('emoji slice capture around', 'x👩👩👧👦x', 0, 27, 'x👩👩👧👦x', 27);
});