Skip to content

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:

  1. cargo fuzz - bytes brutos ao parser).
  2. shift-fuzzer-js por bakkot — AST válido aleatório.
  3. 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:

javascript
 ⚠ typescript-eslint(adjacent-overload-signatures): All "foo" signatures should be adjacent.
  ╭─[adjacent_overload_signatures.tsx:3:18]
2function foo(s: string);
3function foo(n: number);
  ·                  ───
4type bar = number;
5function 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:

Idempotência

Integração ponta-a-ponta em todas as ferramentas:

javascript
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 Code Coverage

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.