all repos

clerk @ e5cc255

missing tooling for ledger/hledger

clerk/internal/testutil/golden/golden.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
improve golden tests helper, 2 days ago
1
package golden
2
3
import (
4
	"flag"
5
	"os"
6
	"path/filepath"
7
	"strings"
8
	"testing"
9
)
10
11
var update = flag.Bool("golden.update", false, "update golden files")
12
13
// Load reads testdata/<name>.input. Fails the test if the file is missing.
14
func Load(t testing.TB, name string) []byte {
15
	t.Helper()
16
	path := filepath.Join("testdata", name+".input")
17
	data, err := os.ReadFile(path)
18
	if err != nil {
19
		t.Fatalf("reading input file %s: %v", path, err)
20
	}
21
	return data
22
}
23
24
func AssertInput(t testing.TB, got string, name string) {
25
	t.Helper()
26
27
	path := filepath.Join("testdata", name+".golden")
28
	if *update {
29
		if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
30
			t.Fatalf("creating testdata dir: %v", err)
31
		}
32
		if err := os.WriteFile(path, []byte(got), 0o644); err != nil {
33
			t.Fatalf("writing golden file: %v", err)
34
		}
35
		return
36
	}
37
38
	golden, err := os.ReadFile(path)
39
	if os.IsNotExist(err) {
40
		t.Fatalf("no golden file %s, run with -golden.update:\n%s", path, got)
41
	}
42
	if err != nil {
43
		t.Fatalf("reading golden file: %v", err)
44
	}
45
46
	if string(golden) != got {
47
		t.Fatalf("golden mismatch for %s\nwant:\n%s\ngot:\n%s", path, string(golden), got)
48
	}
49
}
50
51
func Assert(t testing.TB, got string) {
52
	t.Helper()
53
54
	name := strings.NewReplacer("/", "__", " ", "_").Replace(t.Name())
55
	name = strings.TrimPrefix(name, "Test")
56
	path := filepath.Join("testdata", "golden", name+".golden")
57
58
	if *update {
59
		if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
60
			t.Fatalf("creating golden dir: %v", err)
61
		}
62
		t.Logf("updated golden file: %s", path)
63
		if err := os.WriteFile(path, []byte(got), 0o644); err != nil {
64
			t.Fatalf("writing golden file: %v", err)
65
		}
66
		return
67
	}
68
69
	golden, err := os.ReadFile(path)
70
	if os.IsNotExist(err) {
71
		t.Fatalf("no golden file %s, run with -golden.update:\n%s", path, got)
72
	}
73
	if err != nil {
74
		t.Fatalf("reading golden file: %v", err)
75
	}
76
77
	if string(golden) != got {
78
		t.Fatalf("golden mismatch for %s\nwant:\n%s\ngot:\n%s", path, string(golden), got)
79
	}
80
}