1package analyzer
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7)
8
9func TestIsTestDoubleName(t *testing.T) {
10 tests := []struct {
11 name string
12 want bool
13 }{
14 {name: "fakeUserRepository", want: true},
15 {name: "FakeUserRepository", want: true},
16 {name: "stubClock", want: true},
17 {name: "StubClock", want: true},
18 {name: "user_fake", want: true},
19 {name: "fake", want: true},
20 {name: "stub", want: true},
21 {name: "StubbornHandler", want: false},
22 {name: "stubbornHandler", want: false},
23 {name: "FakeoutService", want: false},
24 {name: "fakeoutService", want: false},
25 {name: "outfake", want: false},
26 }
27 for _, tt := range tests {
28 t.Run(tt.name, func(t *testing.T) {
29 if got := isTestDoubleName(tt.name); got != tt.want {
30 t.Fatalf("isTestDoubleName(%q) = %v, want %v", tt.name, got, tt.want)
31 }
32 })
33 }
34}
35
36func TestDeclaredTypes(t *testing.T) {
37 tests := []struct {
38 name string
39 source string
40 want []string
41 }{
42 {
43 name: "plain and generic declarations",
44 source: `package mocks
45
46type MockCache[K comparable, V any] struct{}
47type (
48 MockUserRepository struct{}
49 helper string
50)
51`,
52 want: []string{"MockCache", "MockUserRepository", "helper"},
53 },
54 }
55 for _, tt := range tests {
56 t.Run(tt.name, func(t *testing.T) {
57 path := filepath.Join(t.TempDir(), "mocks.go")
58 if err := os.WriteFile(path, []byte(tt.source), 0o600); err != nil {
59 t.Fatal(err)
60 }
61 got := declaredTypes(path)
62 if len(got) != len(tt.want) {
63 t.Fatalf("declaredTypes() = %#v, want %#v", got, tt.want)
64 }
65 for i := range got {
66 if got[i] != tt.want[i] {
67 t.Fatalf("declaredTypes() = %#v, want %#v", got, tt.want)
68 }
69 }
70 })
71 }
72}