33 lines
1.1 KiB
TypeScript
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();
|
|
});
|
|
});
|