all repos

clerk @ e0319e5

missing tooling for ledger/hledger

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

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