You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
4.7 KiB
112 lines
4.7 KiB
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package example
|
|
|
|
import "testing"
|
|
|
|
func TestDirect(t *testing.T) {
|
|
// Bad: spaces
|
|
t.Run("that everything's cool", func(t *testing.T) {}) // want `subtest name "that everything's cool" contains characters that require quoting`
|
|
|
|
// Bad: apostrophe
|
|
t.Run("it's working", func(t *testing.T) {}) // want `subtest name "it's working" contains characters that require quoting`
|
|
|
|
// Bad: regex metacharacters
|
|
t.Run("test(foo)", func(t *testing.T) {}) // want `subtest name "test\(foo\)" contains characters that require quoting`
|
|
t.Run("test[0]", func(t *testing.T) {}) // want `subtest name "test\[0\]" contains characters that require quoting`
|
|
t.Run("a|b", func(t *testing.T) {}) // want `subtest name "a\|b" contains characters that require quoting`
|
|
t.Run("a*b", func(t *testing.T) {}) // want `subtest name "a\*b" contains characters that require quoting`
|
|
t.Run("a+b", func(t *testing.T) {}) // want `subtest name "a\+b" contains characters that require quoting`
|
|
t.Run("a.b", func(t *testing.T) {}) // want `subtest name "a\.b" contains characters that require quoting`
|
|
t.Run("^start", func(t *testing.T) {}) // want `subtest name "\^start" contains characters that require quoting`
|
|
t.Run("end$", func(t *testing.T) {}) // want `subtest name "end\$" contains characters that require quoting`
|
|
t.Run("a{2}", func(t *testing.T) {}) // want `subtest name "a\{2\}" contains characters that require quoting`
|
|
t.Run("a?b", func(t *testing.T) {}) // want `subtest name "a\?b" contains characters that require quoting`
|
|
t.Run("a\\b", func(t *testing.T) {}) // want `subtest name "a\\\\b" contains characters that require quoting`
|
|
|
|
// Bad: double quotes
|
|
t.Run("say \"hello\"", func(t *testing.T) {}) // want `subtest name "say \\"hello\\"" contains characters that require quoting`
|
|
|
|
// Bad: hash
|
|
t.Run("comment#1", func(t *testing.T) {}) // want `subtest name "comment#1" contains characters that require quoting`
|
|
|
|
// Bad: leading/trailing dash
|
|
t.Run("-leading-dash", func(t *testing.T) {}) // want `subtest name "-leading-dash" starts or ends with '-' which is problematic`
|
|
t.Run("trailing-dash-", func(t *testing.T) {}) // want `subtest name "trailing-dash-" starts or ends with '-' which is problematic`
|
|
t.Run("-both-", func(t *testing.T) {}) // want `subtest name "-both-" starts or ends with '-' which is problematic`
|
|
|
|
// Good: clean names
|
|
t.Run("zero-passes", func(t *testing.T) {})
|
|
t.Run("simple_test", func(t *testing.T) {})
|
|
t.Run("CamelCase", func(t *testing.T) {})
|
|
t.Run("with-dashes", func(t *testing.T) {})
|
|
t.Run("123", func(t *testing.T) {})
|
|
t.Run("comma,separated", func(t *testing.T) {})
|
|
t.Run("colon:value", func(t *testing.T) {})
|
|
t.Run("slash/path", func(t *testing.T) {})
|
|
t.Run("equals=sign", func(t *testing.T) {})
|
|
}
|
|
|
|
func TestTableDriven(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
val int
|
|
}{
|
|
{name: "bad space name", val: 1}, // want `subtest name "bad space name" contains characters that require quoting`
|
|
{name: "good-name", val: 2},
|
|
{name: "also(bad)", val: 3}, // want `subtest name "also\(bad\)" contains characters that require quoting`
|
|
{name: "it's-bad", val: 4}, // want `subtest name "it's-bad" contains characters that require quoting`
|
|
{name: "clean-name", val: 5},
|
|
{name: "-leading-dash", val: 6}, // want `subtest name "-leading-dash" starts or ends with '-' which is problematic`
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {})
|
|
}
|
|
}
|
|
|
|
func TestTableDrivenVar(t *testing.T) {
|
|
var tests = []struct {
|
|
name string
|
|
val int
|
|
}{
|
|
{name: "has spaces", val: 1}, // want `subtest name "has spaces" contains characters that require quoting`
|
|
{name: "ok-name", val: 2},
|
|
}
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {})
|
|
}
|
|
}
|
|
|
|
func TestTableDrivenMap(t *testing.T) {
|
|
tests := map[string]struct {
|
|
name string
|
|
val int
|
|
}{
|
|
"key1": {name: "bad name here", val: 1}, // want `subtest name "bad name here" contains characters that require quoting`
|
|
"key2": {name: "ok-name", val: 2},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {})
|
|
}
|
|
}
|
|
|
|
func TestNotTesting(t *testing.T) {
|
|
// Not a t.Run call, should not trigger.
|
|
s := struct{ Run func(string, func()) }{}
|
|
s.Run("bad name here", func() {})
|
|
}
|
|
|
|
func TestDynamicName(t *testing.T) {
|
|
// Dynamic name, not a string literal — should not trigger.
|
|
name := getName()
|
|
t.Run(name, func(t *testing.T) {})
|
|
}
|
|
|
|
func getName() string { return "foo" }
|
|
|
|
func BenchmarkDirect(b *testing.B) {
|
|
// Also check b.Run.
|
|
b.Run("bad name here", func(b *testing.B) {}) // want `subtest name "bad name here" contains characters that require quoting`
|
|
b.Run("good-name", func(b *testing.B) {})
|
|
}
|
|
|