diff options
author | Bjørn Erik Pedersen <[email protected]> | 2019-08-16 15:55:03 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2019-11-06 19:09:08 +0100 |
commit | 5f6b6ec68936ebbbf590894c02a1a3ecad30735f (patch) | |
tree | f6c91e225a3f24f51af1bde5cfb5b88515d0665d /helpers/content_test.go | |
parent | 366ee4d8da1c2b0c1751e9bf6d54638439735296 (diff) | |
download | hugo-5f6b6ec68936ebbbf590894c02a1a3ecad30735f.tar.gz hugo-5f6b6ec68936ebbbf590894c02a1a3ecad30735f.zip |
Prepare for Goldmark
This commmit prepares for the addition of Goldmark as the new Markdown renderer in Hugo.
This introduces a new `markup` package with some common interfaces and each implementation in its own package.
See #5963
Diffstat (limited to 'helpers/content_test.go')
-rw-r--r-- | helpers/content_test.go | 235 |
1 files changed, 5 insertions, 230 deletions
diff --git a/helpers/content_test.go b/helpers/content_test.go index 7500c2ac1..7f82abc9d 100644 --- a/helpers/content_test.go +++ b/helpers/content_test.go @@ -19,11 +19,13 @@ import ( "strings" "testing" + "github.com/spf13/afero" + + "github.com/gohugoio/hugo/common/loggers" + "github.com/spf13/viper" qt "github.com/frankban/quicktest" - "github.com/miekg/mmark" - "github.com/russross/blackfriday" ) const tstHTMLContent = "<!DOCTYPE html><html><head><script src=\"http://two/foobar.js\"></script></head><body><nav><ul><li hugo-nav=\"section_0\"></li><li hugo-nav=\"section_1\"></li></ul></nav><article>content <a href=\"http://two/foobar\">foobar</a>. Follow up</article><p>This is some text.<br>And some more.</p></body></html>" @@ -108,7 +110,7 @@ func TestNewContentSpec(t *testing.T) { cfg.Set("buildExpired", true) cfg.Set("buildDrafts", true) - spec, err := NewContentSpec(cfg) + spec, err := NewContentSpec(cfg, loggers.NewErrorLogger(), afero.NewMemMapFs()) c.Assert(err, qt.IsNil) c.Assert(spec.summaryLength, qt.Equals, 32) @@ -202,233 +204,6 @@ func TestTruncateWordsByRune(t *testing.T) { } } -func TestGetHTMLRendererFlags(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - renderer := c.getHTMLRenderer(blackfriday.HTML_USE_XHTML, ctx) - flags := renderer.GetFlags() - if flags&blackfriday.HTML_USE_XHTML != blackfriday.HTML_USE_XHTML { - t.Errorf("Test flag: %d was not found amongs set flags:%d; Result: %d", blackfriday.HTML_USE_XHTML, flags, flags&blackfriday.HTML_USE_XHTML) - } -} - -func TestGetHTMLRendererAllFlags(t *testing.T) { - c := newTestContentSpec() - - type data struct { - testFlag int - } - - allFlags := []data{ - {blackfriday.HTML_USE_XHTML}, - {blackfriday.HTML_FOOTNOTE_RETURN_LINKS}, - {blackfriday.HTML_USE_SMARTYPANTS}, - {blackfriday.HTML_SMARTYPANTS_QUOTES_NBSP}, - {blackfriday.HTML_SMARTYPANTS_ANGLED_QUOTES}, - {blackfriday.HTML_SMARTYPANTS_FRACTIONS}, - {blackfriday.HTML_HREF_TARGET_BLANK}, - {blackfriday.HTML_NOFOLLOW_LINKS}, - {blackfriday.HTML_NOREFERRER_LINKS}, - {blackfriday.HTML_SMARTYPANTS_DASHES}, - {blackfriday.HTML_SMARTYPANTS_LATEX_DASHES}, - } - defaultFlags := blackfriday.HTML_USE_XHTML - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Config.AngledQuotes = true - ctx.Config.Fractions = true - ctx.Config.HrefTargetBlank = true - ctx.Config.NofollowLinks = true - ctx.Config.NoreferrerLinks = true - ctx.Config.LatexDashes = true - ctx.Config.PlainIDAnchors = true - ctx.Config.SmartDashes = true - ctx.Config.Smartypants = true - ctx.Config.SmartypantsQuotesNBSP = true - renderer := c.getHTMLRenderer(defaultFlags, ctx) - actualFlags := renderer.GetFlags() - var expectedFlags int - //OR-ing flags together... - for _, d := range allFlags { - expectedFlags |= d.testFlag - } - if expectedFlags != actualFlags { - t.Errorf("Expected flags (%d) did not equal actual (%d) flags.", expectedFlags, actualFlags) - } -} - -func TestGetHTMLRendererAnchors(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.DocumentID = "testid" - ctx.Config.PlainIDAnchors = false - - actualRenderer := c.getHTMLRenderer(0, ctx) - headerBuffer := &bytes.Buffer{} - footnoteBuffer := &bytes.Buffer{} - expectedFootnoteHref := []byte("href=\"#fn:testid:href\"") - expectedHeaderID := []byte("<h1 id=\"id:testid\"></h1>\n") - - actualRenderer.Header(headerBuffer, func() bool { return true }, 1, "id") - actualRenderer.FootnoteRef(footnoteBuffer, []byte("href"), 1) - - if !bytes.Contains(footnoteBuffer.Bytes(), expectedFootnoteHref) { - t.Errorf("Footnote anchor prefix not applied. Actual:%s Expected:%s", footnoteBuffer.String(), expectedFootnoteHref) - } - - if !bytes.Equal(headerBuffer.Bytes(), expectedHeaderID) { - t.Errorf("Header Id Postfix not applied. Actual:%s Expected:%s", headerBuffer.String(), expectedHeaderID) - } -} - -func TestGetMmarkHTMLRenderer(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.DocumentID = "testid" - ctx.Config.PlainIDAnchors = false - actualRenderer := c.getMmarkHTMLRenderer(0, ctx) - - headerBuffer := &bytes.Buffer{} - footnoteBuffer := &bytes.Buffer{} - expectedFootnoteHref := []byte("href=\"#fn:testid:href\"") - expectedHeaderID := []byte("<h1 id=\"id\"></h1>") - - actualRenderer.FootnoteRef(footnoteBuffer, []byte("href"), 1) - actualRenderer.Header(headerBuffer, func() bool { return true }, 1, "id") - - if !bytes.Contains(footnoteBuffer.Bytes(), expectedFootnoteHref) { - t.Errorf("Footnote anchor prefix not applied. Actual:%s Expected:%s", footnoteBuffer.String(), expectedFootnoteHref) - } - - if bytes.Equal(headerBuffer.Bytes(), expectedHeaderID) { - t.Errorf("Header Id Postfix applied. Actual:%s Expected:%s", headerBuffer.String(), expectedHeaderID) - } -} - -func TestGetMarkdownExtensionsMasksAreRemovedFromExtensions(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Config.Extensions = []string{"headerId"} - ctx.Config.ExtensionsMask = []string{"noIntraEmphasis"} - - actualFlags := getMarkdownExtensions(ctx) - if actualFlags&blackfriday.EXTENSION_NO_INTRA_EMPHASIS == blackfriday.EXTENSION_NO_INTRA_EMPHASIS { - t.Errorf("Masked out flag {%v} found amongst returned extensions.", blackfriday.EXTENSION_NO_INTRA_EMPHASIS) - } -} - -func TestGetMarkdownExtensionsByDefaultAllExtensionsAreEnabled(t *testing.T) { - type data struct { - testFlag int - } - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Config.Extensions = []string{""} - ctx.Config.ExtensionsMask = []string{""} - allExtensions := []data{ - {blackfriday.EXTENSION_NO_INTRA_EMPHASIS}, - {blackfriday.EXTENSION_TABLES}, - {blackfriday.EXTENSION_FENCED_CODE}, - {blackfriday.EXTENSION_AUTOLINK}, - {blackfriday.EXTENSION_STRIKETHROUGH}, - // {blackfriday.EXTENSION_LAX_HTML_BLOCKS}, - {blackfriday.EXTENSION_SPACE_HEADERS}, - // {blackfriday.EXTENSION_HARD_LINE_BREAK}, - // {blackfriday.EXTENSION_TAB_SIZE_EIGHT}, - {blackfriday.EXTENSION_FOOTNOTES}, - // {blackfriday.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK}, - {blackfriday.EXTENSION_HEADER_IDS}, - // {blackfriday.EXTENSION_TITLEBLOCK}, - {blackfriday.EXTENSION_AUTO_HEADER_IDS}, - {blackfriday.EXTENSION_BACKSLASH_LINE_BREAK}, - {blackfriday.EXTENSION_DEFINITION_LISTS}, - } - - actualFlags := getMarkdownExtensions(ctx) - for _, e := range allExtensions { - if actualFlags&e.testFlag != e.testFlag { - t.Errorf("Flag %v was not found in the list of extensions.", e) - } - } -} - -func TestGetMarkdownExtensionsAddingFlagsThroughRenderingContext(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Config.Extensions = []string{"definitionLists"} - ctx.Config.ExtensionsMask = []string{""} - - actualFlags := getMarkdownExtensions(ctx) - if actualFlags&blackfriday.EXTENSION_DEFINITION_LISTS != blackfriday.EXTENSION_DEFINITION_LISTS { - t.Errorf("Masked out flag {%v} found amongst returned extensions.", blackfriday.EXTENSION_DEFINITION_LISTS) - } -} - -func TestGetMarkdownRenderer(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Content = []byte("testContent") - actualRenderedMarkdown := c.markdownRender(ctx) - expectedRenderedMarkdown := []byte("<p>testContent</p>\n") - if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) { - t.Errorf("Actual rendered Markdown (%s) did not match expected markdown (%s)", actualRenderedMarkdown, expectedRenderedMarkdown) - } -} - -func TestGetMarkdownRendererWithTOC(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{RenderTOC: true, Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Content = []byte("testContent") - actualRenderedMarkdown := c.markdownRender(ctx) - expectedRenderedMarkdown := []byte("<nav>\n</nav>\n\n<p>testContent</p>\n") - if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) { - t.Errorf("Actual rendered Markdown (%s) did not match expected markdown (%s)", actualRenderedMarkdown, expectedRenderedMarkdown) - } -} - -func TestGetMmarkExtensions(t *testing.T) { - //TODO: This is doing the same just with different marks... - type data struct { - testFlag int - } - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Config.Extensions = []string{"tables"} - ctx.Config.ExtensionsMask = []string{""} - allExtensions := []data{ - {mmark.EXTENSION_TABLES}, - {mmark.EXTENSION_FENCED_CODE}, - {mmark.EXTENSION_AUTOLINK}, - {mmark.EXTENSION_SPACE_HEADERS}, - {mmark.EXTENSION_CITATION}, - {mmark.EXTENSION_TITLEBLOCK_TOML}, - {mmark.EXTENSION_HEADER_IDS}, - {mmark.EXTENSION_AUTO_HEADER_IDS}, - {mmark.EXTENSION_UNIQUE_HEADER_IDS}, - {mmark.EXTENSION_FOOTNOTES}, - {mmark.EXTENSION_SHORT_REF}, - {mmark.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK}, - {mmark.EXTENSION_INCLUDE}, - } - - actualFlags := getMmarkExtensions(ctx) - for _, e := range allExtensions { - if actualFlags&e.testFlag != e.testFlag { - t.Errorf("Flag %v was not found in the list of extensions.", e) - } - } -} - -func TestMmarkRender(t *testing.T) { - c := newTestContentSpec() - ctx := &RenderingContext{Cfg: c.Cfg, Config: c.BlackFriday} - ctx.Content = []byte("testContent") - actualRenderedMarkdown := c.mmarkRender(ctx) - expectedRenderedMarkdown := []byte("<p>testContent</p>\n") - if !bytes.Equal(actualRenderedMarkdown, expectedRenderedMarkdown) { - t.Errorf("Actual rendered Markdown (%s) did not match expected markdown (%s)", actualRenderedMarkdown, expectedRenderedMarkdown) - } -} - func TestExtractTOCNormalContent(t *testing.T) { content := []byte("<nav>\n<ul>\nTOC<li><a href=\"#") |