/
change_test.go
109 lines (95 loc) · 2.96 KB
/
change_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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package gompatible
import (
"log"
"strings"
"testing"
"go/ast"
"go/parser"
"go/token"
"go/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func typesPackage(source string) (*types.Package, error) {
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "x.go", source, parser.ParseComments)
if err != nil {
return nil, err
}
conf := types.Config{
IgnoreFuncBodies: true,
Error: func(err error) {
log.Println(err)
},
}
return conf.Check("TEST", fset, []*ast.File{file}, nil)
}
func TestDiffPackages(t *testing.T) {
pkgs1, err := LoadDir(&DirSpec{Path: "testdata/before", pkgOverride: "testdata"}, false)
require.NoError(t, err)
pkgs2, err := LoadDir(&DirSpec{Path: "testdata/after", pkgOverride: "testdata"}, false)
require.NoError(t, err)
diff := DiffPackages(pkgs1["testdata"], pkgs2["testdata"])
assert.NotEmpty(t, diff.Funcs())
assert.NotEmpty(t, diff.Types())
assert.NotEmpty(t, diff.Values())
for name, change := range diff.Funcs() {
var expected ChangeKind
if strings.HasPrefix(name, "Unchanged") {
expected = ChangeUnchanged
} else if strings.HasPrefix(name, "Compatible") {
expected = ChangeCompatible
} else if strings.HasPrefix(name, "Added") {
expected = ChangeAdded
} else if strings.HasPrefix(name, "Removed") {
expected = ChangeRemoved
} else if strings.HasPrefix(name, "Breaking") {
expected = ChangeBreaking
} else if strings.HasPrefix(name, "Aux") {
continue
} else {
t.Fatalf("unexpected name: %q", name)
}
assert.Equal(t, expected.String(), change.Kind().String(), ShowChange(change))
}
for name, change := range diff.Types() {
var expected ChangeKind
name = strings.TrimPrefix(name, "TEST.")
if strings.HasPrefix(name, "Unchanged") {
expected = ChangeUnchanged
} else if strings.HasPrefix(name, "Compatible") {
expected = ChangeCompatible
} else if strings.HasPrefix(name, "Added") {
expected = ChangeAdded
} else if strings.HasPrefix(name, "Removed") {
expected = ChangeRemoved
} else if strings.HasPrefix(name, "Breaking") {
expected = ChangeBreaking
} else if strings.HasPrefix(name, "Aux") {
continue
} else {
t.Fatalf("unexpected name: %q", name)
}
assert.Equal(t, expected.String(), change.Kind().String(), ShowChange(change))
}
for name, change := range diff.Values() {
var expected ChangeKind
name = strings.TrimPrefix(name, "TEST.")
if strings.HasPrefix(name, "Unchanged") {
expected = ChangeUnchanged
} else if strings.HasPrefix(name, "Compatible") {
expected = ChangeCompatible
} else if strings.HasPrefix(name, "Added") {
expected = ChangeAdded
} else if strings.HasPrefix(name, "Removed") {
expected = ChangeRemoved
} else if strings.HasPrefix(name, "Breaking") {
expected = ChangeBreaking
} else if strings.HasPrefix(name, "Aux") {
continue
} else {
t.Fatalf("unexpected name: %q", name)
}
assert.Equal(t, expected.String(), change.Kind().String(), ShowChange(change))
}
}