all repos

clerk @ master

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
improve loader, 1 day 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_before": {CommodityPos: CommodityBefore},
51
	"preserve_blanks":  {PreserveBlankLines: true},
52
	"tab_indent":       {TabIndent: true},
53
	"indent_width":     {IndentWidth: 4},
54
}
55
56
func TestRoundTrip_WithConfig(t *testing.T) {
57
	for tname, tt := range testsWithConfig {
58
		t.Run(tname, func(t *testing.T) {
59
			a := golden.Read(t, tname)
60
			rj := journal.NewLoader().ResolveBytes(tname+".journal", a.Get("input"))
61
			pf := rj.Occurrences[0]
62
			var b strings.Builder
63
			if err := tt.Fprint(&b, pf.Ast); err != nil {
64
				t.Fatal(err)
65
			}
66
67
			golden.Assert(t, a, b.String())
68
		})
69
	}
70
}
71
72
func BenchmarkPrinter_Config(b *testing.B) {
73
	inp := golden.Read(b, "entries").Get("input")
74
	rj := journal.NewLoader().ResolveBytes("entries.journal", inp)
75
	pf := rj.Occurrences[0]
76
	for name, cfg := range testsWithConfig {
77
		b.Run(name, func(b *testing.B) {
78
			b.ReportAllocs()
79
			b.ResetTimer()
80
			for i := 0; i < b.N; i++ {
81
				var buf strings.Builder
82
				if err := cfg.Fprint(&buf, pf.Ast); err != nil {
83
					b.Fatal(err)
84
				}
85
			}
86
		})
87
	}
88
}