all repos

clerk @ a1448b5

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
tests: switch to txtar, 3 days 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
			a := golden.Read(t, tname)
17
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", a.Get("input"))
18
			if err != nil {
19
				t.Fatal(err)
20
			}
21
			var b strings.Builder
22
			if err := DefaultConfig.Fprint(&b, pf.Ast); err != nil {
23
				t.Fatal(err)
24
			}
25
26
			golden.Assert(t, a, b.String())
27
		})
28
	}
29
}
30
31
func BenchmarkPrinter(b *testing.B) {
32
	for _, tname := range tests {
33
		b.Run(tname, func(b *testing.B) {
34
			b.ReportAllocs()
35
			inp := golden.Read(b, tname).Get("input")
36
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
37
			if err != nil {
38
				b.Fatal(err)
39
			}
40
			b.ResetTimer()
41
			for i := 0; i < b.N; i++ {
42
				var buf strings.Builder
43
				if err := DefaultConfig.Fprint(&buf, pf.Ast); err != nil {
44
					b.Fatal(err)
45
				}
46
			}
47
		})
48
	}
49
}
50
51
var testsWithConfig = map[string]*Config{
52
	"align_right":      {AlignStyle: AlignRight, AlignColumn: 50},
53
	"align_tab":        {AlignStyle: AlignTab, AlignColumn: 50},
54
	"commodity_before": {CommodityPos: CommodityBefore},
55
	"preserve_blanks":  {PreserveBlankLines: true},
56
	"tab_indent":       {TabIndent: true},
57
	"indent_width":     {IndentWidth: 4},
58
}
59
60
func TestRoundTrip_WithConfig(t *testing.T) {
61
	for tname, tt := range testsWithConfig {
62
		t.Run(tname, func(t *testing.T) {
63
			a := golden.Read(t, tname)
64
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", a.Get("input"))
65
			if err != nil {
66
				t.Fatal(err)
67
			}
68
			var b strings.Builder
69
			if err := tt.Fprint(&b, pf.Ast); err != nil {
70
				t.Fatal(err)
71
			}
72
73
			golden.Assert(t, a, b.String())
74
		})
75
	}
76
}
77
78
func BenchmarkPrinter_Config(b *testing.B) {
79
	inp := golden.Read(b, "entries").Get("input")
80
	pf, err := journal.NewLoader().LoadBytes("entries.journal", inp)
81
	if err != nil {
82
		b.Fatal(err)
83
	}
84
	for name, cfg := range testsWithConfig {
85
		b.Run(name, func(b *testing.B) {
86
			b.ReportAllocs()
87
			b.ResetTimer()
88
			for i := 0; i < b.N; i++ {
89
				var buf strings.Builder
90
				if err := cfg.Fprint(&buf, pf.Ast); err != nil {
91
					b.Fatal(err)
92
				}
93
			}
94
		})
95
	}
96
}