| 123456789101112131415161718192021222324252627282930313233 |
- import { describe, it, expect } from 'vitest';
- import {
- bytesToBase64,
- base64ToBytes,
- bytesToBase64Url,
- base64UrlToBytes,
- textToBase64,
- base64ToText,
- } from './base64';
- describe('base64', () => {
- it('round-trips raw bytes through standard base64', () => {
- const bytes = new Uint8Array([0, 1, 2, 250, 251, 252, 253, 254, 255]);
- expect(base64ToBytes(bytesToBase64(bytes))).toEqual(bytes);
- });
- it('encodes URL-safe base64 without padding or +//', () => {
- const bytes = new Uint8Array([251, 255, 191, 0]);
- const url = bytesToBase64Url(bytes);
- expect(url).not.toMatch(/[+/=]/);
- expect(base64UrlToBytes(url)).toEqual(bytes);
- });
- it('tolerates missing padding when decoding', () => {
- // "M" => 0x33; "TQ" decodes to one byte 0x4d.
- expect(base64ToBytes('TQ')).toEqual(new Uint8Array([0x4d]));
- });
- it('round-trips UTF-8 text (including non-ASCII) for vmess payloads', () => {
- const text = JSON.stringify({ ps: 'سرور تهران', net: 'ws' });
- expect(base64ToText(textToBase64(text))).toBe(text);
- });
- });
|