all repos

clerk @ 263a106703c6521b2fcef090c54f131040a34c13

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
formatter..., 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
func TestRoundTrip(t *testing.T) {
12
	tests := []string{"entries", "directives", "sample"}
13
	for _, tname := range tests {
14
		t.Run(tname, func(t *testing.T) {
15
			inp := golden.Load(t, tname)
16
17
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
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.AssertInput(t, b.String(), tname)
27
		})
28
	}
29
}
30
31
func BenchmarkPrinter(b *testing.B) {
32
	for _, tname := range []string{"entries", "directives", "sample"} {
33
		b.Run(tname, func(b *testing.B) {
34
			b.ReportAllocs()
35
			inp := golden.Load(b, tname)
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
func TestRoundTrip_WithConfig(t *testing.T) {
52
	tests := map[string]*Config{
53
		"align_right":      {AlignStyle: AlignRight, AlignColumn: 50},
54
		"align_tab":        {AlignStyle: AlignTab, AlignColumn: 50},
55
		"commodity_before": {CommodityPos: CommodityBefore},
56
		"tab_indent":       {TabIndent: true},
57
		"indent_width":     {IndentWidth: 4},
58
	}
59
	for tname, tt := range tests {
60
		t.Run(tname, func(t *testing.T) {
61
			inp := golden.Load(t, tname)
62
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
63
			if err != nil {
64
				t.Fatal(err)
65
			}
66
			var b strings.Builder
67
			if err := tt.Fprint(&b, pf.Ast); err != nil {
68
				t.Fatal(err)
69
			}
70
71
			golden.AssertInput(t, b.String(), tname)
72
		})
73
	}
74
}
75
76
func BenchmarkPrinter_Config(b *testing.B) {
77
	configs := map[string]*Config{
78
		"default":          defaultConfig,
79
		"align_right":      {AlignStyle: AlignRight, AlignColumn: 50},
80
		"align_tab":        {AlignStyle: AlignTab, AlignColumn: 50},
81
		"commodity_before": {CommodityPos: CommodityBefore},
82
		"tab_indent":       {TabIndent: true},
83
		"indent_width":     {IndentWidth: 4},
84
	}
85
	inp := golden.Load(b, "entries")
86
	pf, err := journal.NewLoader().LoadBytes("entries.journal", inp)
87
	if err != nil {
88
		b.Fatal(err)
89
	}
90
	for name, cfg := range configs {
91
		b.Run(name, func(b *testing.B) {
92
			b.ReportAllocs()
93
			b.ResetTimer()
94
			for i := 0; i < b.N; i++ {
95
				var buf strings.Builder
96
				if err := cfg.Fprint(&buf, pf.Ast); err != nil {
97
					b.Fatal(err)
98
				}
99
			}
100
		})
101
	}
102
}