all repos

clerk @ e586ae2516f828afd5a62156055812e727a17d1c

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
lexer & parser & ast..., 13 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("update", false, "update golden files")
12
13
func Assert(t *testing.T, got string) {
14
	t.Helper()
15
16
	name := strings.NewReplacer("/", "__", " ", "_").Replace(t.Name())
17
	name = strings.TrimLeft(name, "Test")
18
	path := filepath.Join("testdata", "golden", name+".golden")
19
20
	if *update {
21
		if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
22
			t.Fatalf("creating golden dir: %v", err)
23
		}
24
		t.Logf("Saving golden file in %s", got)
25
		if err := os.WriteFile(path, []byte(got), 0o644); err != nil {
26
			t.Fatalf("writing golden file: %v", err)
27
		}
28
		return
29
	}
30
31
	golden, err := os.ReadFile(path)
32
	if os.IsNotExist(err) {
33
		t.Fatalf("no golden file, run with -update:\n%s", got)
34
	}
35
	if err != nil {
36
		t.Fatalf("reading golden file: %v", err)
37
	}
38
39
	if string(golden) != got {
40
		t.Fatalf("golden mismatch\nwant:\n%s\ngot:\n%s", string(golden), got)
41
	}
42
}