File: org_writer_test.go

package info (click to toggle)
golang-github-niklasfasching-go-org 1.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 788 kB
  • sloc: sh: 142; makefile: 42
file content (89 lines) | stat: -rw-r--r-- 2,168 bytes parent folder | download | duplicates (2)
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
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
}