-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtype_test.go
74 lines (67 loc) · 2.69 KB
/
type_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestIsIdentifier(t *testing.T) {
assert := assert.New(t)
testCases := []struct {
name string
expected bool
errorIdx int
}{
{"Type", true, 0},
{"a", true, 0},
{"_x9", true, 0},
{"ThisVariableIsExported", true, 0},
{"αβ", true, 0},
{"(foo)", false, 0},
{"12foo", false, 0},
{"", false, -1},
{"foo.", false, 3},
}
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
ok, errorIdx := isIdentifier(tc.name)
assert.Equal(tc.expected, ok, tc.name)
if !ok {
assert.Equal(tc.errorIdx, errorIdx, tc.name+" first error")
}
})
}
}
func TestParseType(t *testing.T) {
assert := assert.New(t)
testCases := []struct {
name string
ok bool
expected Type
}{
{"Concrete", true, Type{Pkg: "", PkgName: "", Name: "Concrete"}},
{"1Concrete", false, Type{Pkg: "", PkgName: "", Name: ""}},
{"pkg.Concrete", true, Type{Pkg: "pkg", PkgName: "pkg", Name: "Concrete"}},
{"github.com/user/pkg/subpkg.Concrete", true, Type{Pkg: "github.com/user/pkg/subpkg", PkgName: "subpkg", Name: "Concrete"}},
{`("github.com/user/pkg/go-subpkg")subpkg.Concrete`, true, Type{Pkg: "github.com/user/pkg/go-subpkg", PkgName: "subpkg", Name: "Concrete", Aliased: true}},
{`("os")goos.File`, true, Type{Pkg: "os", PkgName: "goos", Name: "File", Aliased: true}},
{`(github.com/user/pkg/go-subpkg)subpkg.Concrete`, false, Type{Pkg: "github.com/user/pkg/go-subpkg", PkgName: "subpkg", Name: "Concrete", Aliased: true}},
{`"github.com/user/pkg/go-subpkg"subpkg.Concrete`, false, Type{Pkg: "github.com/user/pkg/go-subpkg", PkgName: "subpkg", Name: "Concrete", Aliased: true}},
{`("github.com/user/pkg/go-subpkg)subpkg.Concrete`, false, Type{Pkg: "github.com/user/pkg/go-subpkg", PkgName: "subpkg", Name: "Concrete", Aliased: true}},
{"*Concrete", true, Type{Pkg: "", PkgName: "", Name: "Concrete", Pointer: true}},
{"*pkg.Concrete", true, Type{Pkg: "pkg", PkgName: "pkg", Name: "Concrete", Pointer: true}},
{"*github.com/user/pkg/subpkg.Concrete", true, Type{Pkg: "github.com/user/pkg/subpkg", PkgName: "subpkg", Name: "Concrete", Pointer: true}},
{`*("github.com/user/pkg/go-subpkg")subpkg.Concrete`, true, Type{Pkg: "github.com/user/pkg/go-subpkg", PkgName: "subpkg", Name: "Concrete", Aliased: true, Pointer: true}},
{`*("os")goos.File`, true, Type{Pkg: "os", PkgName: "goos", Name: "File", Aliased: true, Pointer: true}},
}
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
tp, err := ParseType(tc.name)
assert.Equal(tc.ok, err == nil, fmt.Sprintf("%v: %v", tc.name, err))
if tc.ok {
assert.Equal(tc.expected, tp, tc.name)
}
})
}
}