Cópia estática
Copiado de docs/guides/testing.pt-BR.md em https://github.com/poppy-team/ori-lang (MIT). Fixado na revisão 42e1817227fbc96e8e4a4a85fac78b3fec0a0e0f, blob c96448f2e2e6fe0c5a93f20408eda21a00fdd7e5. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.
Manual de mantenedor (PT). English (user + contributor summary): testing.md
Este manual mostra como executar os testes do projeto Ori.
module app.main
import ori.test as test
@test
adds()
test.assert(1 + 1 == 2, "add")
end
main()
endori test main.orl
ori test main.orl --filter addsTestes assíncronos usam async e await no backend nativo. O @test fica na linha anterior à função:
module app.async_tests
imports
ori.task = task
ori.test = test
end
@test
async async_check()
await task.sleep(1)
test.assert(true, "teste async deve passar")
endUse a raiz do repositorio e o workspace em compiler/:
cd /path/to/ori-lang/compilerPara validar o projeto inteiro:
cd compiler && cargo check --workspace
cargo test --workspacePara coletar metricas de seguranca e performance:
cargo run -p ori-driver -- run tools/quality_metrics.orlOs relatorios ficam em:
target/ori-quality-metrics/Para comparar Ori com Rust, C, Python e Node.js em workloads equivalentes:
.\tools\compare_language_workloads.ps1 -Iterations 5Os relatorios ficam em:
target/language-comparison/O script tools/quality_metrics.orl executa uma suite curada e salva:
Comando normal:
cargo run -p ori-driver -- run tools/quality_metrics.orlCom budgets estritos de performance:
$env:ORI_PERF_STRICT="1"
cargo run -p ori-driver -- run tools/quality_metrics.orlNo Linux/macOS:
ORI_PERF_STRICT=1 cargo run -p ori-driver -- run tools/quality_metrics.orlCampos do CSV:
| Campo | Significado |
|---|---|
category | Grupo do teste: baseline, security ou performance. |
name | Nome curto da suite. |
exit_code | Codigo de saida do comando. 0 significa sucesso. |
passed | true quando exit_code == 0. |
duration_ms | Tempo total do processo em milissegundos. |
log_bytes | Tamanho do log bruto redirecionado para disco. |
log_path | Arquivo TXT com log bruto. |
Use estes comandos antes de considerar uma mudanca pronta:
cd compiler && cargo check --workspace
cargo test --workspace
cargo test -p ori-driver --test diagnostic_catalog
cargo test -p ori-driver --test security_robustness
cargo test -p ori-driver --test performance_guardPara validar o probe pesado de runtime gerado:
cargo test -p ori-driver --test performance_guard -- --ignoredcargo test --workspaceRoda testes unitarios e integracao de todos os crates.
cargo test -p ori-lexer
cargo test -p ori-ast
cargo test -p ori-parser
cargo test -p ori-hir
cargo test -p ori-diagnosticsUse quando mudar tokens, AST, parser, HIR ou spans/diagnosticos.
cargo test -p ori-types
cargo test -p ori-types --lib stdlibUse quando mudar tipos, stdlib manifest, constraints, generics ou diagnosticos semanticos.
cargo test -p ori-codegenUse quando mudar Cranelift, linker, JIT, headers C FFI ou runtime symbols. Valide a paridade AOT/JIT na superfície compartilhada; sanitizers do host C/FFI continuam separados da instrumentação do código nativo gerado.
cargo test -p ori-runtimeUse quando mudar ARC, cycle collector, FFI, collections, filesystem, process, async executor ou test harness.
cargo test -p ori-driverUse quando mudar pipeline, CLI, imports, doc export, fmt, summary, doctor ou execucao E2E.
Filtro de teste no binario ori:
ori test tests/minha_suite.orl --filter nome_do_testeO filtro compara texto contra o nome completo (app.modulo.test_nome) e contra o nome curto (test_nome). A saida mostra quantos testes foram descobertos e quantos foram selecionados.
cargo test -p ori-lsp
cargo test -p ori-lsp --test e2eUse quando mudar hover, completion, diagnostics, goto definition, sync incremental ou extension protocol.
ori-driver Rode uma suite isolada quando a mudanca for focada.
| Suite | Comando | Quando usar |
|---|---|---|
ori_spec | cargo test -p ori-driver --test ori_spec | Sintaxe, tipos, statements, generics e contrato geral da linguagem. |
multifile_imports | cargo test -p ori-driver --test multifile_imports | Imports, stdlib .orl, projetos multi-arquivo, compilação nativa e features transversais. |
concurrency_async | cargo test -p ori-driver --test concurrency_async | async, await, task, channel, atomic, cancelamento e formatter async. |
memory_arc | cargo test -p ori-driver --test memory_arc | ARC, destrutores, cycle collector e leak-check. |
jit_run | cargo test -p ori-driver --test jit_run | ori run via JIT e fallback default. |
diagnostic_catalog | cargo test -p ori-driver --test diagnostic_catalog | Consistencia entre codigos emitidos e docs/spec/13-error-catalog.md. |
security_robustness | cargo test -p ori-driver --test security_robustness | Corpus adversarial, spans validos, escaping HTML e leak smoke. |
performance_guard | cargo test -p ori-driver --test performance_guard | Guardas leves de performance para check/fmt/doc/import graph. |
doctor | cargo test -p ori-driver --test doctor | ori doctor e descoberta de runtime/stdlib/linker. |
doc_export | cargo test -p ori-driver --test doc_export | ori doc export e JSON de referencia. |
explain | cargo test -p ori-driver --test explain | ori explain <code>. |
summary | cargo test -p ori-driver --test summary | ori summary. |
method_resolution | cargo test -p ori-driver --test method_resolution | Resolucao de metodos. |
stdlib_fallback | cargo test -p ori-driver --test stdlib_fallback | Descoberta de stdlib fora do layout principal. |
Modo leve:
cargo test -p ori-driver --test performance_guardModo estrito:
$env:ORI_PERF_STRICT="1"
cargo test -p ori-driver --test performance_guardProbe pesado:
$env:ORI_PERF_STRICT="1"
cargo test -p ori-driver --test performance_guard -- --ignoredBudgets configuraveis:
| Variavel | Default |
|---|---|
ORI_PERF_CHECK_SINGLE_FILE_BUDGET_MS | 2000 |
ORI_PERF_CHECK_IMPORT_GRAPH_BUDGET_MS | 2500 |
ORI_PERF_FMT_SURFACE_BUDGET_MS | 1500 |
ORI_PERF_DOC_SURFACE_BUDGET_MS | 1500 |
ORI_PERF_RUNTIME_PROBE_BUDGET_MS | 3500 |
Use o runner abaixo para executar funcoes equivalentes em Ori, Rust, C, Python e Node.js:
.\tools\compare_language_workloads.ps1 -Iterations 5Fontes dos workloads:
benchmarks/language-comparison/Relatorio de metodologia e resultados atuais:
docs/guides/language-comparison.mdO runner valida a saida antes de comparar tempos. Se uma linguagem imprimir resultado diferente, a execucao fica registrada no CSV, mas nao entra como execucao valida.
Suite principal:
cargo test -p ori-driver --test security_robustnessEla cobre:
ori doc;ORI_TEST_LEAK_CHECK=1.Para memoria/ARC em profundidade:
cargo test -p ori-driver --test memory_arcPara async/concurrency:
cargo test -p ori-driver --test concurrency_asyncWindows:
.\tools\stage_native_runtime.ps1
.\tools\smoke_native_release.ps1Linux/macOS:
sh tools/stage_native_runtime.sh
sh tools/smoke_native_release.shSmoke sem rebuild, quando os artefatos ja foram gerados:
.\tools\smoke_native_release.ps1 -SkipBuildGerar pacote depois do smoke:
.\tools\package_native_release.ps1Linux/macOS:
sh tools/package_native_release.shOs scripts de pacote chamam o smoke primeiro. Se compile, test, stdlib, LSP ou JIT falharem no pacote isolado, o arquivo .zip/.tar.gz nao e gerado.
Smoke completo a partir da raiz:
.\tools\smoke_vscode_extension.ps1Esse smoke compila a extensao, valida os JSONs, roda o E2E do LSP e cria um projeto temporario fora do repo para executar check, run, test, fmt, doc check e summary.
Para validar apenas TypeScript:
cd extensions/vscode-orl
npm install
npm run compileVolte para a raiz depois:
cd ..\...orl Checar um arquivo:
cargo run -p ori-driver -- check examples/helloRodar via ori run:
cargo run -p ori-driver -- run examples/helloCompilar binario:
cargo run -p ori-driver -- compile examples/helloRodar testes declarados em .orl:
cargo run -p ori-driver -- test caminho/do/arquivo.orlMudanca pequena de parser/checker:
cd compiler && cargo check --workspace
cargo test -p ori-driver --test ori_spec
cargo test -p ori-driver --test diagnostic_catalogMudanca em stdlib:
cargo test -p ori-types --lib stdlib
cargo test -p ori-driver --test multifile_imports
cargo test -p ori-driver --test diagnostic_catalogMudanca em runtime:
cargo test -p ori-runtime
cargo test -p ori-driver --test memory_arc
cargo test -p ori-driver --test concurrency_asyncMudanca em LSP:
cargo test -p ori-lsp --test e2e
cargo test -p ori-driver --test diagnostic_catalogMudanca antes de release:
cd compiler && cargo check --workspace
cargo test --workspace
cargo run -p ori-driver -- run tools/quality_metrics.orlnative.link_failed, gere novamente o runtime com tools/stage_native_runtime.ps1 ou .sh.docs/spec/13-error-catalog.md.ORI_PERF_STRICT para separar lentidao real de variacao da maquina.ORI_USE_AOT=1 para comparar JIT e AOT.Quando adicionar ou alterar testes relevantes:
CHANGELOG.md;docs/planning/security-performance-testing.md se mudar metricas ou budgets.docs/guides/language-comparison.md se mudar workloads comparativos, linguagens ou metodologia.