markup/goldmark: Improve TOC tests - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f4575e5f29a04fd8613014d91b6bc63e83d37e69
 (DIR) parent 0851c175ad1d84dc3464b080379401452b951860
 (HTM) Author: Joe Mooring <joe.mooring@veriphor.com>
       Date:   Fri,  9 Feb 2024 11:45:47 -0800
       
       markup/goldmark: Improve TOC tests
       
       Diffstat:
         M markup/goldmark/convert_test.go     |       9 ---------
         A markup/goldmark/toc_integration_te… |     266 +++++++++++++++++++++++++++++++
         D markup/goldmark/toc_test.go         |     131 -------------------------------
       
       3 files changed, 266 insertions(+), 140 deletions(-)
       ---
 (DIR) diff --git a/markup/goldmark/convert_test.go b/markup/goldmark/convert_test.go
       @@ -615,15 +615,6 @@ unsafe = true
                return testconfig.GetTestConfig(nil, cfg)
        }
        
       -func safeConf() config.AllProvider {
       -        cfg := config.FromTOMLConfigString(`
       -[markup]
       -[markup.goldmark.renderer]
       -unsafe = false
       -`)
       -        return testconfig.GetTestConfig(nil, cfg)
       -}
       -
        func TestConvertCJK(t *testing.T) {
                c := qt.New(t)
        
 (DIR) diff --git a/markup/goldmark/toc_integration_test.go b/markup/goldmark/toc_integration_test.go
       @@ -0,0 +1,266 @@
       +// Copyright 2021 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +package goldmark_test
       +
       +import (
       +        "testing"
       +
       +        "github.com/gohugoio/hugo/hugolib"
       +)
       +
       +func TestTableOfContents(t *testing.T) {
       +        t.Parallel()
       +
       +        files := `
       +-- config.toml --
       +disableKinds = ['home','rss','section','sitemap','taxonomy','term']
       +enableEmoji = false
       +
       +[markup.tableOfContents]
       +startLevel = 2
       +endLevel = 4
       +ordered = false
       +
       +[markup.goldmark.extensions]
       +strikethrough = false
       +
       +[markup.goldmark.extensions.typographer]
       +disable = true
       +
       +[markup.goldmark.parser]
       +autoHeadingID = false
       +autoHeadingIDType = 'github'
       +
       +[markup.goldmark.renderer]
       +unsafe = false
       +xhtml = false
       +-- layouts/_default/single.html --
       +{{ .TableOfContents }}
       +-- content/p1.md --
       +---
       +title: p1 (basic)
       +---
       +# Title
       +## Section 1
       +### Section 1.1
       +### Section 1.2
       +#### Section 1.2.1
       +##### Section 1.2.1.1
       +-- content/p2.md --
       +---
       +title: p2 (markdown)
       +---
       +## Some *emphasized* text
       +## Some ` + "`" + `inline` + "`" + ` code
       +## Something to escape A < B && C > B
       +---
       +-- content/p3.md --
       +---
       +title: p3 (image)
       +---
       +## An image ![kitten](a.jpg)
       +-- content/p4.md --
       +---
       +title: p4 (raw html)
       +---
       +## Some <span>raw</span> HTML
       +-- content/p5.md --
       +---
       +title: p5 (typographer)
       +---
       +## Some "typographer" markup
       +-- content/p6.md --
       +---
       +title: p6 (strikethrough)
       +---
       +## Some ~~deleted~~ text
       +-- content/p7.md --
       +---
       +title: p7 (emoji)
       +---
       +## A :snake: emoji
       +`
       +
       +        b := hugolib.Test(t, files)
       +
       +        // basic
       +        b.AssertFileContentExact("public/p1/index.html", `<nav id="TableOfContents">
       +  <ul>
       +    <li><a href="#">Section 1</a>
       +      <ul>
       +        <li><a href="#">Section 1.1</a></li>
       +        <li><a href="#">Section 1.2</a>
       +          <ul>
       +            <li><a href="#">Section 1.2.1</a></li>
       +          </ul>
       +        </li>
       +      </ul>
       +    </li>
       +  </ul>
       +</nav>`)
       +
       +        // markdown
       +        b.AssertFileContent("public/p2/index.html", `<nav id="TableOfContents">
       +<li><a href="#">Some <em>emphasized</em> text</a></li>
       +<li><a href="#">Some <code>inline</code> code</a></li>
       +<li><a href="#">Something to escape A &lt; B &amp;&amp; C &gt; B</a></li>
       +`)
       +
       +        // image
       +        b.AssertFileContent("public/p3/index.html", `
       +<li><a href="#">An image <img src="a.jpg" alt="kitten"></a></li>
       +`)
       +
       +        // raw html
       +        b.AssertFileContent("public/p4/index.html", `
       +<li><a href="#">Some <!-- raw HTML omitted -->raw<!-- raw HTML omitted --> HTML</a></li>
       +`)
       +
       +        // typographer
       +        b.AssertFileContent("public/p5/index.html", `
       +<li><a href="#">Some &quot;typographer&quot; markup</a></li>
       +`)
       +
       +        // strikethrough
       +        b.AssertFileContent("public/p6/index.html", `
       +<li><a href="#">Some ~~deleted~~ text</a></li>
       +        `)
       +
       +        // emoji
       +        b.AssertFileContent("public/p7/index.html", `
       +<li><a href="#">A :snake: emoji</a></li>
       +                `)
       +}
       +
       +func TestTableOfContentsAdvanced(t *testing.T) {
       +        t.Parallel()
       +
       +        files := `
       +-- config.toml --
       +disableKinds = ['home','rss','section','sitemap','taxonomy','term']
       +enableEmoji = true
       +
       +[markup.tableOfContents]
       +startLevel = 2
       +endLevel = 3
       +ordered = true
       +
       +[markup.goldmark.extensions]
       +strikethrough = true
       +
       +[markup.goldmark.extensions.typographer]
       +disable = false
       +
       +[markup.goldmark.parser]
       +autoHeadingID = true
       +autoHeadingIDType = 'github'
       +
       +[markup.goldmark.renderer]
       +unsafe = true
       +xhtml = true
       +-- layouts/_default/single.html --
       +{{ .TableOfContents }}
       +-- content/p1.md --
       +---
       +title: p1 (basic)
       +---
       +# Title
       +## Section 1
       +### Section 1.1
       +### Section 1.2
       +#### Section 1.2.1
       +##### Section 1.2.1.1
       +-- content/p2.md --
       +---
       +title: p2 (markdown)
       +---
       +## Some *emphasized* text
       +## Some ` + "`" + `inline` + "`" + ` code
       +## Something to escape A < B && C > B
       +---
       +-- content/p3.md --
       +---
       +title: p3 (image)
       +---
       +## An image ![kitten](a.jpg)
       +-- content/p4.md --
       +---
       +title: p4 (raw html)
       +---
       +## Some <span>raw</span> HTML
       +-- content/p5.md --
       +---
       +title: p5 (typographer)
       +---
       +## Some "typographer" markup
       +-- content/p6.md --
       +---
       +title: p6 (strikethrough)
       +---
       +## Some ~~deleted~~ text
       +-- content/p7.md --
       +---
       +title: p7 (emoji)
       +---
       +## A :snake: emoji
       +`
       +
       +        b := hugolib.Test(t, files)
       +
       +        // basic
       +        b.AssertFileContentExact("public/p1/index.html", `<nav id="TableOfContents">
       +  <ol>
       +    <li><a href="#section-1">Section 1</a>
       +      <ol>
       +        <li><a href="#section-11">Section 1.1</a></li>
       +        <li><a href="#section-12">Section 1.2</a></li>
       +      </ol>
       +    </li>
       +  </ol>
       +</nav>`)
       +
       +        // markdown
       +        b.AssertFileContent("public/p2/index.html", `<nav id="TableOfContents">
       +<li><a href="#some-emphasized-text">Some <em>emphasized</em> text</a></li>
       +<li><a href="#some-inline-code">Some <code>inline</code> code</a></li>
       +<li><a href="#something-to-escape-a--b--c--b">Something to escape A &lt; B &amp;&amp; C &gt; B</a></li>
       +`)
       +
       +        // image
       +        b.AssertFileContent("public/p3/index.html", `
       +<li><a href="#an-image-kittenajpg">An image <img src="a.jpg" alt="kitten" /></a></li>
       +`)
       +
       +        // raw html
       +        b.AssertFileContent("public/p4/index.html", `
       +<li><a href="#some-spanrawspan-html">Some <span>raw</span> HTML</a></li>
       +`)
       +
       +        // typographer
       +        b.AssertFileContent("public/p5/index.html", `
       +<li><a href="#some-typographer-markup">Some &ldquo;typographer&rdquo; markup</a></li>
       +`)
       +
       +        // strikethrough
       +        // TODO failing test
       +        //         b.AssertFileContent("public/p6/index.html", `
       +        // <li><a href="#ome-deleted-text">Some <del>deleted</del> text</a></li>
       +        //         `)
       +
       +        // emoji
       +        // TODO failing test
       +        //         b.AssertFileContent("public/p7/index.html", `
       +        // <li><a href="#a-snake-emoji">A &#x1f40d; emoji</a></li>
       +        //                 `)
       +}
 (DIR) diff --git a/markup/goldmark/toc_test.go b/markup/goldmark/toc_test.go
       @@ -1,131 +0,0 @@
       -// Copyright 2024 The Hugo Authors. All rights reserved.
       -//
       -// Licensed under the Apache License, Version 2.0 (the "License");
       -// you may not use this file except in compliance with the License.
       -// You may obtain a copy of the License at
       -// http://www.apache.org/licenses/LICENSE-2.0
       -//
       -// Unless required by applicable law or agreed to in writing, software
       -// distributed under the License is distributed on an "AS IS" BASIS,
       -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       -// See the License for the specific language governing permissions and
       -// limitations under the License.
       -
       -package goldmark_test
       -
       -import (
       -        "strings"
       -        "testing"
       -
       -        "github.com/gohugoio/hugo/common/loggers"
       -        "github.com/gohugoio/hugo/config/testconfig"
       -        "github.com/gohugoio/hugo/markup/converter/hooks"
       -        "github.com/gohugoio/hugo/markup/goldmark"
       -
       -        "github.com/gohugoio/hugo/markup/converter"
       -
       -        qt "github.com/frankban/quicktest"
       -)
       -
       -var nopGetRenderer = func(t hooks.RendererType, id any) any { return nil }
       -
       -func TestToc(t *testing.T) {
       -        c := qt.New(t)
       -
       -        content := `
       -# Header 1
       -
       -## First h2---now with typography!
       -
       -Some text.
       -
       -### H3
       -
       -Some more text.
       -
       -## Second h2
       -
       -And then some.
       -
       -### Second H3
       -
       -#### First H4
       -
       -`
       -        p, err := goldmark.Provider.New(
       -                converter.ProviderConfig{
       -                        Conf:   testconfig.GetTestConfig(nil, nil),
       -                        Logger: loggers.NewDefault(),
       -                })
       -        c.Assert(err, qt.IsNil)
       -        conv, err := p.New(converter.DocumentContext{})
       -        c.Assert(err, qt.IsNil)
       -        b, err := conv.Convert(converter.RenderContext{Src: []byte(content), RenderTOC: true, GetRenderer: nopGetRenderer})
       -        c.Assert(err, qt.IsNil)
       -        tocHTML := b.(converter.TableOfContentsProvider).TableOfContents().ToHTML(2, 3, false)
       -        got := string(tocHTML)
       -        c.Assert(got, qt.Equals, `<nav id="TableOfContents">
       -  <ul>
       -    <li><a href="#first-h2---now-with-typography">First h2&mdash;now with typography!</a>
       -      <ul>
       -        <li><a href="#h3">H3</a></li>
       -      </ul>
       -    </li>
       -    <li><a href="#second-h2">Second h2</a>
       -      <ul>
       -        <li><a href="#second-h3">Second H3</a></li>
       -      </ul>
       -    </li>
       -  </ul>
       -</nav>`, qt.Commentf(got))
       -}
       -
       -func TestEscapeToc(t *testing.T) {
       -        c := qt.New(t)
       -
       -        safeP, _ := goldmark.Provider.New(
       -                converter.ProviderConfig{
       -                        Conf:   safeConf(),
       -                        Logger: loggers.NewDefault(),
       -                })
       -        unsafeP, _ := goldmark.Provider.New(
       -                converter.ProviderConfig{
       -                        Conf:   unsafeConf(),
       -                        Logger: loggers.NewDefault(),
       -                })
       -        safeConv, _ := safeP.New(converter.DocumentContext{})
       -        unsafeConv, _ := unsafeP.New(converter.DocumentContext{})
       -
       -        content := strings.Join([]string{
       -                "# A < B & C > D",
       -                "# A < B & C > D <div>foo</div>",
       -                "# *EMPHASIS*",
       -                "# `echo codeblock`",
       -        }, "\n")
       -        // content := ""
       -        b, err := safeConv.Convert(converter.RenderContext{Src: []byte(content), RenderTOC: true, GetRenderer: nopGetRenderer})
       -        c.Assert(err, qt.IsNil)
       -        tocHTML := b.(converter.TableOfContentsProvider).TableOfContents().ToHTML(1, 2, false)
       -        got := string(tocHTML)
       -        c.Assert(got, qt.Equals, `<nav id="TableOfContents">
       -  <ul>
       -    <li><a href="#a--b--c--d">A &lt; B &amp; C &gt; D</a></li>
       -    <li><a href="#a--b--c--d-divfoodiv">A &lt; B &amp; C &gt; D <!-- raw HTML omitted -->foo<!-- raw HTML omitted --></a></li>
       -    <li><a href="#emphasis"><em>EMPHASIS</em></a></li>
       -    <li><a href="#echo-codeblock"><code>echo codeblock</code></a></li>
       -  </ul>
       -</nav>`, qt.Commentf(got))
       -
       -        b, err = unsafeConv.Convert(converter.RenderContext{Src: []byte(content), RenderTOC: true, GetRenderer: nopGetRenderer})
       -        c.Assert(err, qt.IsNil)
       -        tocHTML = b.(converter.TableOfContentsProvider).TableOfContents().ToHTML(1, 2, false)
       -        got = string(tocHTML)
       -        c.Assert(got, qt.Equals, `<nav id="TableOfContents">
       -  <ul>
       -    <li><a href="#a--b--c--d">A &lt; B &amp; C &gt; D</a></li>
       -    <li><a href="#a--b--c--d-divfoodiv">A &lt; B &amp; C &gt; D <div>foo</div></a></li>
       -    <li><a href="#emphasis"><em>EMPHASIS</em></a></li>
       -    <li><a href="#echo-codeblock"><code>echo codeblock</code></a></li>
       -  </ul>
       -</nav>`, qt.Commentf(got))
       -}