all repos

clerk @ 3bf8ce6fc568892f0a83c41c6246fe9a8abe1df2

missing tooling for ledger/hledger

clerk/journal/printer/printer_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
tests: unify golden test api and usage, 1 month ago
1
package printer
2
3
import (
4
	"strings"
5
	"testing"
6
7
	"olexsmir.xyz/clerk/internal/testutil/golden"
8
	"olexsmir.xyz/clerk/journal"
9
)
10
11
var tests = []string{"entries", "directives", "sample"}
12
13
func TestRoundTrip(t *testing.T) {
14
	for _, tname := range tests {
15
		t.Run(tname, func(t *testing.T) {
16
			inp := golden.Load(t, tname)
17
18
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
19
			if err != nil {
20
				t.Fatal(err)
21
			}
22
			var b strings.Builder
23
			if err := defaultConfig.Fprint(&b, pf.Ast); err != nil {
24
				t.Fatal(err)
25
			}
26
27
			golden.Assert(t, tname, b.String())
28
		})
29
	}
30
}
31
32
func BenchmarkPrinter(b *testing.B) {
33
	for _, tname := range tests {
34
		b.Run(tname, func(b *testing.B) {
35
			b.ReportAllocs()
36
			inp := golden.Load(b, tname)
37
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
38
			if err != nil {
39
				b.Fatal(err)
40
			}
41
			b.ResetTimer()
42
			for i := 0; i < b.N; i++ {
43
				var buf strings.Builder
44
				if err := defaultConfig.Fprint(&buf, pf.Ast); err != nil {
45
					b.Fatal(err)
46
				}
47
			}
48
		})
49
	}
50
}
51
52
var testsWithConfig = map[string]*Config{
53
	"align_right":      {AlignStyle: AlignRight, AlignColumn: 50},
54
	"align_tab":        {AlignStyle: AlignTab, AlignColumn: 50},
55
	"commodity_before": {CommodityPos: CommodityBefore},
56
	"preserve_blanks":  {PreserveBlankLines: true},
57
	"tab_indent":       {TabIndent: true},
58
	"indent_width":     {IndentWidth: 4},
59
}
60
61
func TestRoundTrip_WithConfig(t *testing.T) {
62
	for tname, tt := range testsWithConfig {
63
		t.Run(tname, func(t *testing.T) {
64
			inp := golden.Load(t, tname)
65
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
66
			if err != nil {
67
				t.Fatal(err)
68
			}
69
			var b strings.Builder
70
			if err := tt.Fprint(&b, pf.Ast); err != nil {
71
				t.Fatal(err)
72
			}
73
74
			golden.Assert(t, tname, b.String())
75
		})
76
	}
77
}
78
79
func BenchmarkPrinter_Config(b *testing.B) {
80
	inp := golden.Load(b, "entries")
81
	pf, err := journal.NewLoader().LoadBytes("entries.journal", inp)
82
	if err != nil {
83
		b.Fatal(err)
84
	}
85
	for name, cfg := range testsWithConfig {
86
		b.Run(name, func(b *testing.B) {
87
			b.ReportAllocs()
88
			b.ResetTimer()
89
			for i := 0; i < b.N; i++ {
90
				var buf strings.Builder
91
				if err := cfg.Fprint(&buf, pf.Ast); err != nil {
92
					b.Fatal(err)
93
				}
94
			}
95
		})
96
	}
97
}