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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
package bibtex
import (
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
"testing"
"text/template"
)
func bibtex(bib string, style string, entry string) string {
f, err := os.Create("test.aux")
if err != nil {
log.Print(err)
}
defer f.Close()
tpl := `
\relax
\citation{[.Entry]}
\bibstyle{[.Style]}
\bibdata{[.Bib]}`
type params struct {
Entry string
Style string
Bib string
}
t := template.New("")
t.Delims("[", "]")
t = template.Must(t.Parse(tpl))
err = t.Execute(f, params{entry, style, bib})
if err != nil {
log.Print(err)
}
exec.Command("bibtex", "test").Output()
in, _ := ioutil.ReadFile("test.bbl")
return string(in)
}
func TestName(t *testing.T) {
os.Chdir("testdata")
f, _ := os.Open("parsing.bib")
defer f.Close()
parser := NewParser(f)
err := parser.Parse(false)
if err != nil {
log.Print(err)
}
for _, entry := range parser.entries {
lines := strings.Split(bibtex("parsing", "names", entry.key), "\n")
names := SplitNames(entry.fields["author"])
i := 0
var s string
for _, name := range names {
s = name.Format("{ff}|{vv}|{ll}|{jj}")
if lines[i] != s {
t.Errorf("Expected: %q, actual: %q", lines[i], s)
}
i += 1
s = name.Format("{f}|{v}|{l}|{j}")
if lines[i] != s {
t.Errorf("Expected: %q, actual: %q", lines[i], s)
}
i += 1
s = name.Format("{ff~}{vv~}{ll}{, jj}")
if lines[i] != s {
t.Errorf("Expected: %q, actual: %q", lines[i], s)
}
i += 1
s = name.Format("{f~}{vv~}{ll}{, jj}")
if lines[i] != s {
t.Errorf("Expected: %q, actual: %q", lines[i], s)
}
i += 1
}
}
}
func TestLength(t *testing.T) {
tests := []struct {
s string
expected int
}{
{"", 0},
{"a", 1},
{"{ab}", 4},
{"{\\abc}", 1},
{"{ab{c}}a{\\a{bc}}a", 10},
}
for _, test := range tests {
actual := length(test.s)
if test.expected != actual {
t.Errorf("Expected: %d, actual: %d", test.expected, actual)
}
}
}
|