summaryrefslogtreecommitdiff
path: root/internal/bible/books_test.go
blob: e89cf6e5394a5c4971598982f48dc8a31d2347c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package bible

import "testing"

func TestResolveBook(t *testing.T) {
	cases := []struct{ in, want string }{
		{"John", "John"},
		{"Joh", "John"}, // English prefix
		{"J", "John"},   // Polish abbrev — NOT Joshua
		{"Łk", "Luke"},
		{"1 Kor", "1 Corinthians"},
		{"Jana", "John"},
		{"Rodzaju", "Genesis"},
		{"Mdr", "Wisdom"},
		{"Pnp", "Song of Solomon"},
		{"Dz", "The Acts"},
	}
	for _, c := range cases {
		if got, ok := ResolveBook(c.in); !ok || got != c.want {
			t.Errorf("ResolveBook(%q)=%q,%v want %q", c.in, got, ok, c.want)
		}
	}
	if _, ok := ResolveBook("Nonsense"); ok {
		t.Error("ResolveBook(Nonsense) should fail")
	}
}

func TestBooksTableIntegrity(t *testing.T) {
	if len(canonOrder) != len(aliasSeed) {
		t.Fatalf("canonOrder has %d names, aliasSeed has %d", len(canonOrder), len(aliasSeed))
	}
	seen := map[string]bool{}
	for _, name := range canonOrder {
		if seen[name] {
			t.Errorf("canonOrder duplicate %q", name)
		}
		seen[name] = true
		a, ok := aliasSeed[name]
		if !ok {
			t.Errorf("canonOrder name %q missing from aliasSeed", name)
			continue
		}
		if len(a) < 2 {
			t.Errorf("book %q has %d aliases, need >=2 (abbrev, pl-name)", name, len(a))
		}
	}
	for name := range aliasSeed {
		if !seen[name] {
			t.Errorf("aliasSeed name %q missing from canonOrder", name)
		}
	}
}