-
Notifications
You must be signed in to change notification settings - Fork 1
/
overrides_collection_test.go
94 lines (82 loc) · 2.66 KB
/
overrides_collection_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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"testing"
"go/parser"
"go/token"
)
var SRC =
`package testpkg
import (
"nothing/in/particular"
"orig_pkg"
"log"
)
func MyOverriddenFunc(param int) (string, error) {
log.Printf("let's do this instead!")
return "abc", nil
}
func internalFunc() {
log.Printf("nothing to see here")
}
const (
OverriddenConst1 = 123
OverriddenConst2 = "abc"
justSomePrivateConst = 999
)
var myVar = "hello"
var TheirVar = orig_pkg.TheirVar
type (
MyOverriddenType orig_pkg.MyOverriddenType
myInternalType struct { abc int }
)
func (me *MyType) MyOverriddenMethod() {
log.Printf("or maybe this")
}`
func TestCollectOverrides(t *testing.T) {
fset := token.NewFileSet() // positions are relative to fset
f, err := parser.ParseFile(fset, "src.go", SRC, 0)
if err != nil {
t.Errorf("failed to parse override sample source file")
}
overrides := NewWrapperOverrides()
collectOverridesFromFile(overrides, f)
if !overrides.IsFuncOverridden("MyOverriddenFunc") {
t.Errorf("MyOverriddenFunc was not marked as overridden")
}
if overrides.IsFuncOverridden("NotMyOverriddenFunc") {
t.Errorf("NotMyOverriddenFunc was not marked as overridden")
}
if overrides.IsFuncOverridden("internalFunc") {
t.Errorf("internalFunc was marked as overridden")
}
if overrides.IsMethodOverridden("", "MyOverriddenFunc") {
t.Errorf("MyOverriddenFunc was marked as an overridden method instead of function")
}
if !overrides.IsMethodOverridden("MyType", "MyOverriddenMethod") {
t.Errorf("MyOverriddenMethod was not marked as an overridden")
}
if overrides.GetTypeOverride("MyOverriddenType") != TYPE_OVERRIDE_AUTO_WRAP_METHODS {
t.Errorf("MyOverriddenType was not marked for override with method wrapping")
}
if overrides.GetTypeOverride("SomeNonOverriddenType") != TYPE_OVERRIDE_NONE {
t.Errorf("SomeNonOverriddenType was marked for override")
}
if overrides.GetTypeOverride("myInternalType") != TYPE_OVERRIDE_NONE {
t.Errorf("myInternalType was marked for override")
}
if !overrides.IsVarOverridden("TheirVar") {
t.Errorf("TheirVar was not overridden")
}
if overrides.IsVarOverridden("myVar") {
t.Errorf("myVar was overridden")
}
if !overrides.IsVarOverridden("OverriddenConst1") {
t.Errorf("OverriddenConst1 was not overridden")
}
if !overrides.IsVarOverridden("OverriddenConst2") {
t.Errorf("OverriddenConst2 was not overridden")
}
if overrides.IsVarOverridden("justSomePrivateConst") {
t.Errorf("justSomePrivateConst was overridden")
}
}