Files
openidea/fixtures/README.md
l0ng-ai f5895d0336 test(debug): smoke-test debugging each language's fixture (#1357)
Debugs each language's fixture the way the editor does, against openidea-server and the debugger the IDE installs: a breakpoint on the entry point's marker line, Debug from the file's context, then the paused frame, its variables, Evaluate Expression, Step Over and Resume. Runs per language in the Language smoke workflow. The build model is loaded first, as the Build Tools feature does, so a Gradle Application is debugged through Gradle; Step Over allows a repeated stop on a line (Python 3.12 reports a conditional expression's line twice).
2026-11-05 08:32:11 +08:00

130 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# QA fixtures
Small, realistic projects for manual QA and end-to-end tests of OpenIDEA. Each one
has a few source files, passing tests, an **opt-in failing test**, `TODO`/`FIXME`
comments and at least one **intentional warning**, so every IDE feature has
something to show.
| Fixture | Toolchain | Run | Tests | Failing test | Intentional warning |
| ---------------- | --------------------------------------------------------------- | ----------------------------------- | -------------------- | ------------------------------------- | -------------------------------------------------------- |
| `rust-app/` | cargo | `cargo run` | `cargo test` | `cargo test --features failing-tests` | unused variable in `src/parser.rs` |
| `ts-app/` | Node 22+, pnpm/npm | `pnpm start` | `pnpm test` (vitest) | `OPENIDEA_FAIL=1 pnpm test` | unused function in `src/index.ts` |
| `python-app/` | Python 3.10+, pytest | `python -m tasks.cli` (from `src/`) | `pytest` | `OPENIDEA_FAIL=1 pytest` | unused imports in `models.py` |
| `go-app/` | Go 1.22+ | `go run ./cmd/server` | `go test ./...` | `OPENIDEA_FAIL=1 go test ./...` | unused `fmt.Sprintf` result in `internal/store/store.go` |
| `kotlin-gradle/` | JDK 21, Gradle 8 (no wrapper) | `gradle run` | `gradle test` | `gradle test -PopenideaFail` | unused variable in `App.kt` |
| `java-app/` | JDK 21, Maven 3.9 | `mvn compile exec:java` | `mvn test` | `mvn test -DopenideaFail=true` | unused variable in `App.java` |
| `polyglot/` | Go, TS, Python, C, shell, SQL, TOML/YAML/JSON, proto, Terraform | `make` | `make test` | — | unused variable in `native/hash.c` |
The fixtures are standalone: `rust-app` declares its own `[workspace]` and
`fixtures/eslint.config.js` keeps them out of the IDE's own lint run.
The language smoke test (`crates/ide-host/tests/language_smoke.rs`) runs completion,
navigation, diagnostics, quick fixes, formatting and rename on these projects with real
language servers, `smoke/run.test.ts` runs each project's run and test configurations
(the intentionally failing test included, then Rerun Failed Tests), and `smoke/debug.test.ts`
debugs its entry point from the "Set a breakpoint here" line: when you change a fixture, run
them for that language.
## Setup
Work on a **copy** so git and edits never touch this repository:
```sh
cp -R fixtures/rust-app /tmp/qa-rust && cd /tmp/qa-rust
git init -q && git add -A && git commit -qm "initial" # for the VCS checks
```
Then open the folder with **File › Open…** (`⌘⇧⌥O`) or from the Welcome screen.
For `ts-app` / `polyglot/web` run `pnpm install` first; for `python-app` create a
venv (`python3 -m venv .venv && .venv/bin/pip install -e '.[dev]'`).
Missing language servers / debuggers can be installed from the IDE:
**Settings › Languages & Frameworks › Language Servers**, or from the
"… is not installed — Install" notification shown when a file is opened.
## QA checklist
Run each block on at least `rust-app` and one other fixture; tick `polyglot` for
language detection and highlighting.
### Open & workbench
- [ ] Opening the folder shows the project name in the title bar, the Project tool
window (`⌘1`) on the left, stripes on both sides and the status bar.
- [ ] Indexing progress appears in the status bar and finishes.
- [ ] Closing and reopening the window restores open tabs and tool windows.
### Project tree
- [ ] Arrow keys move the selection; `→`/`←` expand/collapse; `Enter`/`F4` opens a file.
- [ ] Ignored folders (`target/`, `node_modules/`, `build/`) appear dimmed.
- [ ] New file (`⌘N`), rename (`⇧F6`), delete (`⌫`) work and the tree updates.
### Search Everywhere & navigation
- [ ] Double `⇧` opens Search Everywhere; typing `parser` finds `src/parser.rs`.
- [ ] `⌘O` (classes) finds `Inventory` / `Cart` / `TaskList` / `Library`.
- [ ] `⌘⇧O` (files) and `⌘⌥O` (symbols) find `format_price` / `formatMoney`.
- [ ] `⌘E` lists recent files; `⌘[` / `⌘]` navigate back/forward.
- [ ] `⌘B` on a call (`format_price` in `main.rs`, `cart.total()` in `index.ts`)
jumps to the declaration; `⌥F7` lists usages.
- [ ] `⌘F12` shows the file structure; `⌘L` goes to a line.
### Editing & code insight
- [ ] Typing in a file marks the tab modified; `⌘S` saves; external edits reload.
- [ ] `⌘F` opens the find bar (match case / words / regex); `⌘R` replaces.
- [ ] `⌘⇧F` finds `TODO` across the project and opens results.
- [ ] Completion (`⌃Space`) on `inventory.` / `cart.` / `tasks.` lists members.
- [ ] Hover / `F1` shows documentation; `⌘P` shows parameter info.
- [ ] Warnings: the intentional warning is underlined and listed in Problems (`⌘6`);
`F2` jumps to it; `⌥Enter` offers a quick fix.
- [ ] Rename (`⇧F6`) `total_value` / `subtotal` / `pending` updates every usage
(check the preview) and undo restores them.
- [ ] Reformat (`⌘⌥L`), comment line (`⌘/`), duplicate line (`⌘D`) and extend
selection (`⌥↑`) behave like IDEA.
### TODO
- [ ] The TODO tool window lists every `TODO`/`FIXME` in the fixture and opens them.
### Run configurations & tests
- [ ] Run configurations are detected: cargo run/test (Rust), package.json scripts
(TS), pytest (Python), `go test` / `go run` (Go), Gradle tasks (Kotlin).
- [ ] Gutter run icons appear next to `main` and test functions; running one opens
the Run tool window (`⌘4`) with the output.
- [ ] The test tree shows passed tests; enabling the failing test (table above)
shows it red with the assertion message and a link to the source line.
- [ ] `⌘F2` stops a running process (try `go run ./cmd/server`).
### Debugger
- [ ] Each fixture's entry point has a "Set a breakpoint here" comment: toggle a
breakpoint there (`⌘F8`) and start debugging (`⌃D`).
- [ ] Execution stops on the line; Frames and Variables show `inventory` / `cart` /
`tasks` / `library`; inline values appear in the editor.
- [ ] Step over (`F8`), into (`F7`), out (`⇧F8`), resume (`⌘⌥R`) and evaluate (`⌥F8`).
- [ ] If the debug adapter is missing (CodeLLDB, debugpy, Delve), the error offers
the installer and debugging works after installing.
### Git
- [ ] Edited lines show gutter change markers; the tree and tabs colour modified files.
- [ ] Commit tool window (`⌘0` / `⌘K`) lists changes with a diff; partial staging works.
- [ ] Committing clears the changes; Git log (`⌘9`) shows the commit; blame works.
- [ ] Creating and switching branches from the status bar widget works.
### Terminal
- [ ] `⌥F12` opens the terminal in the project root; run the test command there.
- [ ] Several tabs, resize, copy/paste and `exit` behave; the shell's `PATH` includes
tools installed by the IDE.
### Settings & installer
- [ ] `⌘,` opens Settings; search finds "Language Servers".
- [ ] Language Servers lists each tool with languages, status (Installed / On PATH /
Missing) and version; Install streams progress and can be cancelled;
Uninstall removes managed tools. Nothing downloads without clicking Install.