| 📦 Turbo JS 91999d1 k33g 12h ago | 1 | # How to run the tests |
| 2 | |
| 3 | This guide shows how to run and read Turbo JS's test suite. It assumes you have a checkout and Go 1.26 or later. |
| 4 | |
| 5 | ## The whole suite |
| 6 | |
| 7 | ```bash |
| 8 | make test |
| 9 | ``` |
| 10 | |
| 11 | That is the single documented command. It runs `go test ./...` across every package. |
| 12 | |
| 13 | ## Variants |
| 14 | |
| 15 | **See each test by name:** |
| 16 | |
| 17 | ```bash |
| 18 | make test-verbose |
| 19 | ``` |
| 20 | |
| 21 | **Measure coverage per package:** |
| 22 | |
| 23 | ```bash |
| 24 | make cover |
| 25 | ``` |
| 26 | |
| 27 | **One package only:** |
| 28 | |
| 29 | ```bash |
| 30 | go test ./internal/jslang/ |
| 31 | ``` |
| 32 | |
| 33 | **Without starting a language server, and without building the editor.** The tests in `internal/jslang/editor_test.go` whose names end in `WithRealServer` start a real `typescript-language-server` when they find one, and the installer tests at the root compile the whole editor. To skip both: |
| 34 | |
| 35 | ```bash |
| 36 | go test -short ./... |
| 37 | ``` |
| 38 | |
| 39 | **With the race detector.** The LSP client is concurrent, so this is worth running before touching anything that talks to it: |
| 40 | |
| 41 | ```bash |
| 42 | go test -race ./... |
| 43 | ``` |
| 44 | |
| 45 | **Everything a commit should pass:** |
| 46 | |
| 47 | ```bash |
| 48 | make check |
| 49 | ``` |
| 50 | |
| 51 | This runs `go fmt`, `go vet` and the tests, in that order. |
| 52 | |
| 53 | ## What the suite covers |
| 54 | |
| 55 | No test needs a real terminal. `internal/jslang/editor_test.go` assembles a whole Turbo JS on tcell's `SimulationScreen` — a real `Screen` that draws into memory — opens a file and checks the colouring, the menu bar and the hot keys on the picture a terminal would actually show. `scan_test.go` holds the scanner to every construct it colours and every one it must refuse — `0xFF` and `.5` as numbers, a `/` that divides rather than opening a regular expression, a block comment that does not nest. |
| 56 | |
| 57 | The tests named `…WithRealServer` start the real `typescript-language-server`: they complete text that exists only in the buffer, go to a definition, list every reference, find a class's subclasses as its implementations and an instance's class as its type definition, read the JSDoc comment a hover shows, list a file's symbols, search the project for one, and wait for a diagnostic on a file that does not parse. Nine questions, nine tests — so the day the server stops answering one of them, the documentation gets revisited rather than quietly going stale. |
| 58 | |
| 59 | All of them **skip themselves** when `typescript-language-server` is not installed, and under `-short`, so a checkout without the server still has a green suite. |
| 60 | |
| 61 | ## Testing against an unreleased turbo-core |
| 62 | |
| 63 | Most of Turbo JS is turbo-core, and this repository depends on it by version, from the module proxy: |
| 64 | |
| 65 | ``` |
| 66 | require rickub.com/turbo-editors/turbo-core v0.8.0 |
| 67 | ``` |
| 68 | |
| 69 | A change made in a turbo-core checkout beside this one is therefore invisible here until it is published. To test it before that, make a workspace: |
| 70 | |
| 71 | ```bash |
| 72 | go work init . ../turbo-core |
| 73 | make test |
| 74 | ``` |
| 75 | |
| 76 | Every import of the library now resolves to that checkout. Nothing in `go.mod` or `go.sum` changes, so there is no edit to undo. Check it took effect — this is the mistake worth guarding against, because everything still builds and still passes if it did not: |
| 77 | |
| 78 | ```bash |
| 79 | go list -f '{{.Dir}}' rickub.com/turbo-editors/turbo-core/app |
| 80 | ``` |
| 81 | |
| 82 | The answer should be your checkout, not a path under `pkg/mod`. When you are done, `rm go.work go.work.sum`; both are gitignored, so they cannot be committed by accident. |
| 83 | |
| 84 | ## Code quality |
| 85 | |
| 86 | The test suite is not the whole gate. Quality is measured separately: |
| 87 | |
| 88 | ```bash |
| 89 | python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace . |
| 90 | ``` |
| 91 | |
| 92 | It writes a report under `.quality/` and exits non-zero if the gate fails. |
| 93 | |
| 94 | ## See also |
| 95 | |
| 96 | - Why the tests are shaped this way: [Architecture](../explanation/architecture.md) |
| 97 | - Every make target: [command line reference](../reference/cli.md) |