package org import ( "strings" "testing" ) type ExtendedHTMLWriter struct { *HTMLWriter callCount int } func (w *ExtendedHTMLWriter) WriteText(t Text) { w.callCount++ w.HTMLWriter.WriteText(t) } func TestHTMLWriter(t *testing.T) { testWriter(t, func() Writer { return NewHTMLWriter() }, ".html") } func TestExtendedHTMLWriter(t *testing.T) { p := Paragraph{Children: []Node{Text{Content: "text"}, Text{Content: "more text"}}} htmlWriter := NewHTMLWriter() extendedWriter := &ExtendedHTMLWriter{htmlWriter, 0} htmlWriter.ExtendingWriter = extendedWriter WriteNodes(extendedWriter, p) if extendedWriter.callCount != 2 { t.Errorf("WriteText method of extending writer was not called: CallCount %d", extendedWriter.callCount) } } var prettyRelativeLinkTests = map[string]string{ "[[/hello.org][hello]]": `

hello

`, "[[hello.org][hello]]": `

hello

`, "[[file:/hello.org]]": `

/hello/

`, "[[file:hello.org]]": `

../hello/

`, "[[http://hello.org]]": `

http://hello.org

`, "[[/foo.png]]": `

/foo.png

`, "[[foo.png]]": `

../foo.png

`, "[[/foo.png][foo]]": `

foo

`, "[[foo.png][foo]]": `

foo

`, } func TestPrettyRelativeLinks(t *testing.T) { for org, expected := range prettyRelativeLinkTests { t.Run(org, func(t *testing.T) { writer := NewHTMLWriter() writer.PrettyRelativeLinks = true actual, err := New().Silent().Parse(strings.NewReader(org), "./prettyRelativeLinkTests.org").Write(writer) if err != nil { t.Errorf("%s\n got error: %s", org, err) } else if actual := strings.TrimSpace(actual); actual != expected { t.Errorf("%s:\n%s'", org, diff(actual, expected)) } }) } } var topLevelHLevelTests = map[struct { TopLevelHLevel int input string }]string{ {1, "* Top-level headline"}: "

\nTop-level headline\n

", {1, "** Second-level headline"}: "

\nSecond-level headline\n

", {1, "*** Third-level headline"}: "

\nThird-level headline\n

", {1, "**** Fourth-level headline"}: "

\nFourth-level headline\n

", {1, "***** Fifth-level headline"}: "
\nFifth-level headline\n
", {1, "****** Sixth-level headline"}: "
\nSixth-level headline\n
", {2, "* Top-level headline"}: "

\nTop-level headline\n

", {2, "** Second-level headline"}: "

\nSecond-level headline\n

", {2, "*** Third-level headline"}: "

\nThird-level headline\n

", {2, "**** Fourth-level headline"}: "
\nFourth-level headline\n
", {2, "***** Fifth-level headline"}: "
\nFifth-level headline\n
", {3, "* Top-level headline"}: "

\nTop-level headline\n

", {3, "** Second-level headline"}: "

\nSecond-level headline\n

", {3, "*** Third-level headline"}: "
\nThird-level headline\n
", {3, "**** Fourth-level headline"}: "
\nFourth-level headline\n
", {4, "* Top-level headline"}: "

\nTop-level headline\n

", {4, "** Second-level headline"}: "
\nSecond-level headline\n
", {4, "*** Third-level headline"}: "
\nThird-level headline\n
", {5, "* Top-level headline"}: "
\nTop-level headline\n
", {5, "** Second-level headline"}: "
\nSecond-level headline\n
", {6, "* Top-level headline"}: "
\nTop-level headline\n
", } func TestTopLevelHLevel(t *testing.T) { for org, expected := range topLevelHLevelTests { t.Run(org.input, func(t *testing.T) { writer := NewHTMLWriter() writer.TopLevelHLevel = org.TopLevelHLevel actual, err := New().Silent().Parse(strings.NewReader(org.input), "./topLevelHLevelTests.org").Write(writer) if err != nil { t.Errorf("TopLevelHLevel=%d %s\n got error: %s", org.TopLevelHLevel, org.input, err) } else if actual := strings.TrimSpace(actual); !strings.Contains(actual, expected) { t.Errorf("TopLevelHLevel=%d %s:\n%s'", org.TopLevelHLevel, org.input, diff(actual, expected)) } }) } }