Infraestrutura de testes
INFO
Texto também como convite: sugestões de melhorias são bem-vindas no Discord.
No projeto Oxc correção e confiabilidade têm peso alto; investimos muito tempo na base de testes para não espalhar bugs para ferramentas downstream.
Parser
Conformidade
Testes vindos de Test262, Babel e TypeScript cobrem sintaxe JS, TS e JSX.
No Test262 entram cenários estágio 4 e testes RegExp.
Resultados ficam em snapshots versionados para ver regressões rapidamente:
Erros de sintaxe também entram nos snapshots para diffs estáveis.
Fuzz
Três ferramentas evitam pânico com dados aleatórios:
- cargo fuzz - bytes brutos ao parser).
- shift-fuzzer-js por bakkot — AST válido aleatório.
- Automated-Fuzzer por qarmin (issues abertas).
Segurança de memória
Arena em bumpalo guarda AST e outros dados grandes. Tipos AST não implementam Drop; o próprio allocator proíbe, em tempo de compilação, valores Drop dentro da arena — evita fugas porque nada proprietário grande fica perdido lá.
Código unsafe
unsafe é usado só onde compensa por performance e fica encapsulado em structs com APIs seguras externamente. Miri roda nos PRs nas crates onde isso aparece.
Linter
Snapshots de diagnósticos
Todos os diagnósticos vão para snapshots:
⚠ typescript-eslint(adjacent-overload-signatures): All "foo" signatures should be adjacent.
╭─[adjacent_overload_signatures.tsx:3:18]
2 │ function foo(s: string);
3 │ function foo(n: number);
· ───
4 │ type bar = number;
5 │ function foo(sn: string | number) {}
· ───
6 │ }
╰────CI de ecossistema
oxc-ecosystem-ci roda oxlint em repositórios grandes (falsos positivos, regressões, pânicos), por exemplo:
- rolldown/rolldown, vscode, kibana, entre outros citados na fonte EN.
Idempotência
Integração ponta-a-ponta em todas as ferramentas:
let sourceText = "foo";
let printed = tool(sourceText);
let printed2 = tool(printed);
assert(printed == printed2);Útil especialmente ao minificar repetidamente. Parser/transformer/minifier passam pelo mesmo modelo em cópias dos cenários Test262/Babel/TS.
Testes de integração
Preferimos integração antes de suites unitárias pesadas no núcleo.
codecov mostra
Monitoramento ponta-a-ponta
monitor-oxc testa contra os pacotes npm de maior impacto em npm-high-impact — ~3000 devDependencies e arquivo dynamic.test.mjs que apenas importa cada pacote para validar sintaxe/arquivos reescritos quando rodam todas as ferramentas sobre node_modules. Atualizações diárias dos pacotes; já encontrou vários defeitos sutis ausentes nos suites sintéticos.
Ideias sobre testes? Fale no Discord.