Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import {
|
||||
encodeBase64,
|
||||
decodeBase64,
|
||||
encodeUrl,
|
||||
decodeUrl,
|
||||
encodeUnicode,
|
||||
decodeUnicode,
|
||||
bytesToBase64,
|
||||
base64ToBytes,
|
||||
} from '../../src/utils/encoder.js'
|
||||
import { zlibSync, decompressSync } from 'fflate'
|
||||
|
||||
describe('encoder', () => {
|
||||
describe('base64', () => {
|
||||
it('encodes and decodes ASCII text', () => {
|
||||
expect(decodeBase64(encodeBase64('hello'))).toBe('hello')
|
||||
})
|
||||
|
||||
it('encodes and decodes unicode text', () => {
|
||||
const text = '你好世界'
|
||||
expect(decodeBase64(encodeBase64(text))).toBe(text)
|
||||
})
|
||||
})
|
||||
|
||||
describe('url', () => {
|
||||
it('encodes and decodes URL components', () => {
|
||||
expect(decodeUrl(encodeUrl('a b&c=1'))).toBe('a b&c=1')
|
||||
})
|
||||
})
|
||||
|
||||
describe('unicode escape', () => {
|
||||
it('encodes BMP characters', () => {
|
||||
expect(encodeUnicode('A')).toBe('\\u0041')
|
||||
})
|
||||
|
||||
it('roundtrips BMP text', () => {
|
||||
expect(decodeUnicode('\\u0048\\u0065\\u006C\\u006C\\u006F')).toBe('Hello')
|
||||
})
|
||||
|
||||
it('encodes and decodes emoji (surrogate pair)', () => {
|
||||
const emoji = '😀'
|
||||
const encoded = encodeUnicode(emoji)
|
||||
expect(decodeUnicode(encoded)).toBe(emoji)
|
||||
})
|
||||
|
||||
it('decodes \\UXXXXXXXX format', () => {
|
||||
expect(decodeUnicode('\\U0001F600')).toBe('😀')
|
||||
})
|
||||
|
||||
it('throws on invalid unicode code point', () => {
|
||||
expect(() => decodeUnicode('\\U00110000')).toThrow('Unicode 解码失败')
|
||||
})
|
||||
})
|
||||
|
||||
describe('binary helpers', () => {
|
||||
it('roundtrips bytes through base64', () => {
|
||||
const bytes = new Uint8Array([1, 2, 3, 255])
|
||||
expect([...base64ToBytes(bytesToBase64(bytes))]).toEqual([...bytes])
|
||||
})
|
||||
|
||||
it('strips whitespace when decoding base64', () => {
|
||||
const bytes = new Uint8Array([72, 101, 108, 108, 111])
|
||||
expect(new TextDecoder().decode(base64ToBytes('SGVs\nbG8='))).toBe('Hello')
|
||||
})
|
||||
})
|
||||
|
||||
describe('zlib roundtrip', () => {
|
||||
it('compresses and decompresses text', () => {
|
||||
const text = 'hello zlib compression test'
|
||||
const compressed = zlibSync(new TextEncoder().encode(text))
|
||||
const b64 = bytesToBase64(compressed)
|
||||
const decompressed = new TextDecoder().decode(decompressSync(base64ToBytes(b64)))
|
||||
expect(decompressed).toBe(text)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user