import { resetEnv } from '../.utils.ts';
import { INPUTS, EXPECTED } from './.data.ts';
import { encode, decode } from '../../dist/index.js';

describe('no textencoder/decoder', () => {
    const { TextEncoder, TextDecoder } = globalThis;
    beforeAll(() => {
        // @ts-expect-error 移除 TextEncoder 以测试兼容性
        globalThis.TextEncoder = undefined;
        // @ts-expect-error 移除 TextDecoder 以测试兼容性
        globalThis.TextDecoder = undefined;
        resetEnv();
    });
    afterAll(() => {
        globalThis.TextEncoder = TextEncoder;
        globalThis.TextDecoder = TextDecoder;
        resetEnv();
    });

    it.each(Object.keys(INPUTS))('%s', (name) => {
        const input = INPUTS[name];
        const expected = EXPECTED[name] ?? input;
        if (expected instanceof Error) {
            expect(() => {
                const encoded = encode(input);
                decode(encoded);
            }).toThrow(expected);
        } else {
            const encoded = encode(input);
            const decoded = decode(encoded);
            expect(decoded).toEqual(expected);
        }
    });
});
