Files
private_image/frontend/src/utils/encoding/base64ToBytes.spec.ts
T

33 lines
1.1 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { base64ToBytes } from '@/utils/encoding/base64ToBytes';
describe('base64ToBytes', () => {
it('decodes RFC 4648 examples', () => {
expect(base64ToBytes('Zg==')).toEqual(new Uint8Array([102]));
expect(base64ToBytes('Zm8=')).toEqual(new Uint8Array([102, 111]));
expect(base64ToBytes('Zm9v')).toEqual(new Uint8Array([102, 111, 111]));
expect(base64ToBytes('Zm9vYg==')).toEqual(new Uint8Array([102, 111, 111, 98]));
});
it('decodes empty input', () => {
expect(base64ToBytes('')).toEqual(new Uint8Array([]));
});
it('decodes every byte value via roundtrip with btoa', () => {
const bytes = new Uint8Array(256);
for (let i = 0; i < 256; i++) {
bytes[i] = i;
}
const binary = Array.from(bytes, byte => String.fromCharCode(byte)).join('');
const base64 = btoa(binary);
expect(base64ToBytes(base64)).toEqual(bytes);
});
it('rejects invalid base64', () => {
expect(() => base64ToBytes('not!!!valid')).toThrow();
});
});