Until now we're not using t.Run to create a sub test for each fixture - for the current bug I want to only run a single file as I'm a print debugger and don't care for the noise of logs from other tests. While at it, it made sense to merge the implementations.
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package org
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/pmezard/go-difflib/difflib"
|
|
)
|
|
|
|
type ExtendedOrgWriter struct {
|
|
*OrgWriter
|
|
callCount int
|
|
}
|
|
|
|
func (w *ExtendedOrgWriter) WriteText(t Text) {
|
|
w.callCount++
|
|
w.OrgWriter.WriteText(t)
|
|
}
|
|
|
|
func TestOrgWriter(t *testing.T) {
|
|
testWriter(t, func() Writer { return NewOrgWriter() }, ".pretty_org")
|
|
}
|
|
|
|
func TestExtendedOrgWriter(t *testing.T) {
|
|
p := Paragraph{Children: []Node{Text{Content: "text"}, Text{Content: "more text"}}}
|
|
orgWriter := NewOrgWriter()
|
|
extendedWriter := &ExtendedOrgWriter{orgWriter, 0}
|
|
orgWriter.ExtendingWriter = extendedWriter
|
|
WriteNodes(extendedWriter, p)
|
|
if extendedWriter.callCount != 2 {
|
|
t.Errorf("WriteText method of extending writer was not called: CallCount %d", extendedWriter.callCount)
|
|
}
|
|
}
|
|
|
|
func testWriter(t *testing.T, newWriter func() Writer, ext string) {
|
|
for _, path := range orgTestFiles() {
|
|
tmpPath := path[:len(path)-len(".org")]
|
|
t.Run(filepath.Base(tmpPath), func(t *testing.T) {
|
|
expected := fileString(t, tmpPath+ext)
|
|
reader := strings.NewReader(fileString(t, path))
|
|
actual, err := New().Silent().Parse(reader, path).Write(newWriter())
|
|
if err != nil {
|
|
t.Fatalf("%s\n got error: %s", path, err)
|
|
} else if actual != expected {
|
|
t.Fatalf("%s:\n%s'", path, "")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func orgTestFiles() []string {
|
|
dir := "./testdata"
|
|
files, err := ioutil.ReadDir(dir)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Could not read directory: %s", err))
|
|
}
|
|
orgFiles := []string{}
|
|
for _, f := range files {
|
|
name := f.Name()
|
|
if filepath.Ext(name) != ".org" {
|
|
continue
|
|
}
|
|
orgFiles = append(orgFiles, filepath.Join(dir, name))
|
|
}
|
|
return orgFiles
|
|
}
|
|
|
|
func fileString(t *testing.T, path string) string {
|
|
bs, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("Could not read file %s: %s", path, err)
|
|
}
|
|
return string(bs)
|
|
}
|
|
|
|
func diff(actual, expected string) string {
|
|
diff := difflib.UnifiedDiff{
|
|
A: difflib.SplitLines(actual),
|
|
B: difflib.SplitLines(expected),
|
|
FromFile: "Actual",
|
|
ToFile: "Expected",
|
|
Context: 3,
|
|
}
|
|
text, _ := difflib.GetUnifiedDiffString(diff)
|
|
return text
|
|
}
|