all repos

clerk @ 56a4631

missing tooling for ledger/hledger

clerk/internal/linter/linter_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
implement basic linter, 1 month ago
1
package linter
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 = map[string][]Rule{
12
	"correct":        Rules,
13
	"empty-postings": {&EmptyPostings{}},
14
	"parse-error":    {&ParseError{}},
15
}
16
17
func TestLinter(t *testing.T) {
18
	for tname, trules := range tests {
19
		t.Run(tname, func(t *testing.T) {
20
			inp := golden.Load(t, tname)
21
			pf, err := journal.NewLoader().LoadBytes(tname+".journal", inp)
22
			if err != nil {
23
				t.Fatalf("failed to load test journal: %v\n", err)
24
			}
25
26
			finds := NewLinter(trules).Run(pf.Ast)
27
28
			var b strings.Builder
29
			Fprint(&b, PathBasename, finds)
30
			golden.Assert(t, tname, b.String())
31
		})
32
	}
33
}
34
35
func BenchmarkLinter(b *testing.B) {
36
	pf, err := journal.NewLoader().Load(
37
		"../../journal/testdata/journals/actual-1ktxns-100accts.journal",
38
	)
39
	if err != nil {
40
		b.Fatalf("failed to load benchmark journal: %v", err)
41
	}
42
	l := NewLinter(Rules)
43
44
	b.ResetTimer()
45
	b.ReportAllocs()
46
	for b.Loop() {
47
		l.Run(pf.Ast)
48
	}
49
}