turbo-editors/turbo-jspublic Fork 0
v1.0.1
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-js.git
git clone ssh://git@rickub.com/turbo-editors/turbo-js.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

run-the-tests.md · 97 lines · 3.6 KBmarkdown Blame HistoryRaw
📦 Turbo JS 91999d1 k33g 12h ago1# How to run the tests
2
3This 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
8make test
9```
10
11That 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
18make test-verbose
19```
20
21**Measure coverage per package:**
22
23```bash
24make cover
25```
26
27**One package only:**
28
29```bash
30go 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
36go 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
42go test -race ./...
43```
44
45**Everything a commit should pass:**
46
47```bash
48make check
49```
50
51This runs `go fmt`, `go vet` and the tests, in that order.
52
53## What the suite covers
54
55No 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
57The 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
59All 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
63Most of Turbo JS is turbo-core, and this repository depends on it by version, from the module proxy:
64
65```
66require rickub.com/turbo-editors/turbo-core v0.8.0
67```
68
69A 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
72go work init . ../turbo-core
73make test
74```
75
76Every 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
79go list -f '{{.Dir}}' rickub.com/turbo-editors/turbo-core/app
80```
81
82The 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
86The test suite is not the whole gate. Quality is measured separately:
87
88```bash
89python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace .
90```
91
92It 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)