all repos

clerk @ 624171a82cf3ffe31d9e6b7ec44af7811aa450c3

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
tests: unify golden test api and usage, 1 month 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/<path>.input. Fails the test if file is not found.
14
func Load(t testing.TB, path string) []byte {
15
	t.Helper()
16
	data, err := os.ReadFile(filepath.Join("testdata", path+".input"))
17
	if err != nil {
18
		t.Fatalf("loading %s: %v", path, err)
19
	}
20
	return data
21
}
22
23
// Assert compares got against testdata/<name>.golden.
24
func Assert(t testing.TB, name, got string) {
25
	t.Helper()
26
27
	normalized := strings.NewReplacer("/", "__", " ", "_").Replace(name)
28
	path := filepath.Join("testdata", normalized+".golden")
29
30
	if *update {
31
		if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
32
			t.Fatalf("creating testdata dir: %v", err)
33
		}
34
		if err := os.WriteFile(path, []byte(got), 0o644); err != nil {
35
			t.Fatalf("writing golden file: %v", err)
36
		}
37
		return
38
	}
39
40
	golden, err := os.ReadFile(path)
41
	if os.IsNotExist(err) {
42
		t.Fatalf("no golden file %s, run with -golden.update:\n%s", path, got)
43
	}
44
	if err != nil {
45
		t.Fatalf("reading golden file: %v", err)
46
	}
47
48
	if string(golden) != got {
49
		t.Fatalf("golden mismatch for %s\nwant:\n%s\ngot:\n%s", path, string(golden), got)
50
	}
51
}