Testing & Reporting¶
This page explains how to test RimLoc locally and how to file actionable bug reports with the right diagnostics.
Quick Start (Developers)¶
# Build the entire workspace
cargo build --workspace
# Run all tests (unit + integration)
cargo test --workspace -- --nocapture
# Ensure formatting and lint cleanliness before review
cargo fmt && cargo clippy --workspace --all-targets -- -D warnings
Useful flags:
-- --nocaptureshows test stdout (handy for CLI help localization).- Run a single integration test:
cargo test -p rimloc-cli scan_picks_latest_version_by_default_and_flags_work.
Logging & Diagnostics¶
RimLoc emits diagnostics to stderr and to a rolling log file.
RUST_LOG=info|debug|trace— controls console verbosity (default:info).RIMLOC_LOG_DIR=./logs— directory for daily log files (default:./logs).RIMLOC_LOG_FORMAT=json— switch file logs to structured JSON (default:text).- Disable UI decorations for clean copy/paste:
NO_COLOR=1— remove ANSI colors.NO_ICONS=1— remove symbols like ✔/⚠/✖.
On startup, RimLoc prints a banner that includes version, RIMLOC_LOG_DIR, and the RUST_LOG level so bug reports capture the environment context.
Tip for automation: combine --quiet with --format json to keep stdout machine‑readable and route diagnostics to stderr/logs.
Streams and levels¶
- stdout — primary payload (CSV/JSON). Keep it clean with
--quietfor JSON flows. - stderr — human‑oriented messages and the startup banner.
- File log — detailed traces in
RIMLOC_LOG_DIR(daily rotation), level DEBUG.
Common levels: error, warn, info, debug. Use RUST_LOG=debug for richer traces.
JSON log fields¶
When RIMLOC_LOG_FORMAT=json is set, file logs emit structured entries. Typical fields:
timestamp,level,target— standard tracing metadataevent— semantic event name:app_started,scan_args,validate_args,export_po_args,import_po_args,build_mod_args- Additional fields depending on the event:
cmd,root,out_po,lang,game_version, etc.
Example (abbreviated):
{"timestamp":"...","level":"INFO","event":"app_started","version":"0.2.0","logdir":"logs","rustlog":"debug"}
{"timestamp":"...","level":"DEBUG","event":"scan_args","root":"./Mods/MyMod","format":"json","game_version":"1.4"}
End‑to‑End CLI Checks¶
Use the bundled fixture test/TestMod to exercise the CLI:
# Scan to JSON and keep a copy on disk
rimloc-cli scan --root ./test/TestMod --format json --out-json ./logs/scan.json
# Validate with text output
rimloc-cli validate --root ./test/TestMod --format text
# Validate PO placeholders strictly
rimloc-cli validate-po --po ./test/test-en.po --strict
# Export a PO file and import it back into XML in dry-run mode
rimloc-cli export-po --root ./test/TestMod --out-po ./logs/TestMod.po --lang ru
rimloc-cli import-po --po ./logs/TestMod.po --mod-root ./test/TestMod --dry-run
# Build a translation-only mod (dry run)
rimloc-cli build-mod --po ./logs/TestMod.po --out-mod ./logs/TestMod-ru --lang ru --dry-run
Versioned Mods¶
If your mod uses per‑version folders (1.4, 1.5, v1.6):
rimloc-cli scan --root ./Mods/MyMod --game-version 1.4
rimloc-cli validate --root ./Mods/MyMod --include-all-versions
rimloc-cli export-po --root ./Mods/MyMod --out-po ./out/MyMod.po --game-version v1.6
JSON for Automation¶
scan --format json [--out-json <FILE>]— prints an array of units; persist to a file for CI.validate --format json— emits structured issues (kind, key, path, line, message).validate-po --format json [--strict]— lists placeholder mismatches between msgid/msgstr.
Example:
rimloc-cli validate --root ./test/TestMod --format json | jq '.[] | select(.kind=="duplicate")'
Bug Report Template¶
Please include the following for actionable reports:
1) Command and full invocation
rimloc-cli <command> <args>
2) Versions and environment
rimloc-cli --version- OS and shell
RUST_LOG,RIMLOC_LOG_DIR,NO_COLOR,NO_ICONS
3) Expected vs actual behavior (1–2 sentences each)
4) Attachments
logs/rimloc.logand console output (with--ui-lang enif possible)- Minimal reproducible example: a small mod snippet or a couple of
Languages/...XML files - For PO‑related issues: a short
.pothat reproduces the behavior
Docs Preview¶
To preview this documentation locally:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-docs.txt
mkdocs serve