cmd/vet: add subtestnames analyzer; fix all existing violations

Add a new vet analyzer that checks t.Run subtest names don't contain
characters requiring quoting when re-running via "go test -run". This
enforces the style guide rule: don't use spaces or punctuation in
subtest names.

The analyzer flags:
- Direct t.Run calls with string literal names containing spaces,
  regex metacharacters, quotes, or other problematic characters
- Table-driven t.Run(tt.name, ...) calls where tt ranges over a
  slice/map literal with bad name field values

Also fix all 978 existing violations across 81 test files, replacing
spaces with hyphens and shortening long sentence-like names to concise
hyphenated forms.

Updates #19242

Change-Id: Ib0ad96a111bd8e764582d1d4902fe2599454ab65
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2026-04-04 21:32:14 +00:00
committed by Brad Fitzpatrick
parent 0f02c20c5e
commit 5ef3713c9f
87 changed files with 1405 additions and 982 deletions
+7 -7
View File
@@ -185,7 +185,7 @@ func TestMarkActiveChain(t *testing.T) {
expectLastActiveIdx: 0,
},
{
name: "simple truncate",
name: "simple-truncate",
minChain: 2,
chain: []aumTemplate{
{AUM: AUM{MessageKind: AUMCheckpoint, State: &State{}}},
@@ -196,7 +196,7 @@ func TestMarkActiveChain(t *testing.T) {
expectLastActiveIdx: 1,
},
{
name: "long truncate",
name: "long-truncate",
minChain: 5,
chain: []aumTemplate{
{AUM: AUM{MessageKind: AUMCheckpoint, State: &State{}}},
@@ -211,7 +211,7 @@ func TestMarkActiveChain(t *testing.T) {
expectLastActiveIdx: 2,
},
{
name: "truncate finding checkpoint",
name: "truncate-finding-checkpoint",
minChain: 2,
chain: []aumTemplate{
{AUM: AUM{MessageKind: AUMCheckpoint, State: &State{}}},
@@ -342,7 +342,7 @@ func TestMarkAncestorIntersectionAUMs(t *testing.T) {
wantRetained: []string{"A"},
},
{
name: "no adjustment",
name: "no-adjustment",
chain: newTestchain(t, `
DEAD -> A -> B -> C
A.template = checkpoint
@@ -380,7 +380,7 @@ func TestMarkAncestorIntersectionAUMs(t *testing.T) {
wantDeleted: []string{"A", "B"},
},
{
name: "fork finding earlier checkpoint",
name: "fork-finding-earlier-checkpoint",
chain: newTestchain(t, `
A -> B -> C -> D -> E -> F
| -> FORK
@@ -403,7 +403,7 @@ func TestMarkAncestorIntersectionAUMs(t *testing.T) {
wantDeleted: []string{"A"},
},
{
name: "fork multi",
name: "fork-multi",
chain: newTestchain(t, `
A -> B -> C -> D -> E
| -> DEADFORK
@@ -429,7 +429,7 @@ func TestMarkAncestorIntersectionAUMs(t *testing.T) {
wantDeleted: []string{"A", "B", "DEADFORK"},
},
{
name: "fork multi 2",
name: "fork-multi-2",
chain: newTestchain(t, `
A -> B -> C -> D -> E -> F -> G