From 99e5114a8b22ce692fb6cbf26b0b11908dde69e8 Mon Sep 17 00:00:00 2001 From: Thibaut Horel Date: Sun, 21 Feb 2016 22:21:06 -0500 Subject: Add a few tests --- names_test.go | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 names_test.go (limited to 'names_test.go') diff --git a/names_test.go b/names_test.go new file mode 100644 index 0000000..0406a85 --- /dev/null +++ b/names_test.go @@ -0,0 +1,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) + } + } +} -- cgit v1.2.3-70-g09d2