forked from golangci/golangci-lint
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmigrate_test.go
113 lines (85 loc) · 2.19 KB
/
migrate_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
110
111
112
113
package migrate
import (
"bytes"
"io/fs"
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/golangci/golangci-lint/pkg/commands/internal/migrate/fakeloader"
"github.com/golangci/golangci-lint/pkg/commands/internal/migrate/parser"
"github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone"
)
type fakeFile struct {
bytes.Buffer
name string
}
func newFakeFile(name string) *fakeFile {
return &fakeFile{name: name}
}
func (f *fakeFile) Name() string {
return f.name
}
func TestToConfig(t *testing.T) {
var testFiles []string
err := filepath.WalkDir("testdata", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
if strings.Contains(path, ".golden.") {
return nil
}
testFiles = append(testFiles, path)
return nil
})
require.NoError(t, err)
for _, fileIn := range testFiles {
t.Run(fileIn, func(t *testing.T) {
t.Parallel()
ext := filepath.Ext(fileIn)
fileGolden := strings.TrimSuffix(fileIn, ext) + ".golden" + ext
testFile(t, fileIn, fileGolden, false)
})
}
}
func testFile(t *testing.T, in, golden string, update bool) {
t.Helper()
old := versionone.NewConfig()
// Fake load of the configuration.
// IMPORTANT: The default values from flags are not set.
err := fakeloader.Load(in, old)
require.NoError(t, err)
if update {
updateGolden(t, golden, old)
}
buf := newFakeFile("test" + filepath.Ext(golden))
err = parser.Encode(ToConfig(old), buf)
require.NoError(t, err)
expected, err := os.ReadFile(golden)
require.NoError(t, err)
switch filepath.Ext(golden) {
case ".yml":
assert.YAMLEq(t, string(expected), buf.String())
case ".json":
assert.JSONEq(t, string(expected), buf.String())
case ".toml":
assert.Equal(t, string(expected), buf.String())
default:
require.Failf(t, "unsupported extension: %s", golden)
}
}
func updateGolden(t *testing.T, golden string, old *versionone.Config) {
t.Helper()
fileOut, err := os.Create(golden)
require.NoError(t, err)
defer func() {
_ = fileOut.Close()
}()
err = parser.Encode(ToConfig(old), fileOut)
require.NoError(t, err)
}