tableofcontents_test.go - hugo - [fork] hugo port for 9front
 (HTM) git clone https://git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       tableofcontents_test.go (5588B)
       ---
            1 // Copyright 2019 The Hugo Authors. All rights reserved.
            2 //
            3 // Licensed under the Apache License, Version 2.0 (the "License");
            4 // you may not use this file except in compliance with the License.
            5 // You may obtain a copy of the License at
            6 // http://www.apache.org/licenses/LICENSE-2.0
            7 //
            8 // Unless required by applicable law or agreed to in writing, software
            9 // distributed under the License is distributed on an "AS IS" BASIS,
           10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           11 // See the License for the specific language governing permissions and
           12 // limitations under the License.
           13 
           14 package tableofcontents
           15 
           16 import (
           17         "testing"
           18 
           19         qt "github.com/frankban/quicktest"
           20         "github.com/gohugoio/hugo/common/collections"
           21 )
           22 
           23 var newTestTocBuilder = func() Builder {
           24         var b Builder
           25         b.AddAt(&Heading{Title: "Heading 1", ID: "h1-1"}, 0, 0)
           26         b.AddAt(&Heading{Title: "1-H2-1", ID: "1-h2-1"}, 0, 1)
           27         b.AddAt(&Heading{Title: "1-H2-2", ID: "1-h2-2"}, 0, 1)
           28         b.AddAt(&Heading{Title: "1-H3-1", ID: "1-h2-2"}, 0, 2)
           29         b.AddAt(&Heading{Title: "Heading 2", ID: "h1-2"}, 1, 0)
           30         return b
           31 }
           32 
           33 var newTestToc = func() *Fragments {
           34         return newTestTocBuilder().Build()
           35 }
           36 
           37 func TestToc(t *testing.T) {
           38         c := qt.New(t)
           39 
           40         toc := &Fragments{}
           41 
           42         toc.addAt(&Heading{Title: "Heading 1", ID: "h1-1"}, 0, 0)
           43         toc.addAt(&Heading{Title: "1-H2-1", ID: "1-h2-1"}, 0, 1)
           44         toc.addAt(&Heading{Title: "1-H2-2", ID: "1-h2-2"}, 0, 1)
           45         toc.addAt(&Heading{Title: "1-H3-1", ID: "1-h2-2"}, 0, 2)
           46         toc.addAt(&Heading{Title: "Heading 2", ID: "h1-2"}, 1, 0)
           47 
           48         tocHTML, _ := toc.ToHTML(1, -1, false)
           49         got := string(tocHTML)
           50         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
           51   <ul>
           52     <li><a href="#h1-1">Heading 1</a>
           53       <ul>
           54         <li><a href="#1-h2-1">1-H2-1</a></li>
           55         <li><a href="#1-h2-2">1-H2-2</a>
           56           <ul>
           57             <li><a href="#1-h2-2">1-H3-1</a></li>
           58           </ul>
           59         </li>
           60       </ul>
           61     </li>
           62     <li><a href="#h1-2">Heading 2</a></li>
           63   </ul>
           64 </nav>`, qt.Commentf(got))
           65 
           66         tocHTML, _ = toc.ToHTML(1, 1, false)
           67         got = string(tocHTML)
           68         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
           69   <ul>
           70     <li><a href="#h1-1">Heading 1</a></li>
           71     <li><a href="#h1-2">Heading 2</a></li>
           72   </ul>
           73 </nav>`, qt.Commentf(got))
           74 
           75         tocHTML, _ = toc.ToHTML(1, 2, false)
           76         got = string(tocHTML)
           77         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
           78   <ul>
           79     <li><a href="#h1-1">Heading 1</a>
           80       <ul>
           81         <li><a href="#1-h2-1">1-H2-1</a></li>
           82         <li><a href="#1-h2-2">1-H2-2</a></li>
           83       </ul>
           84     </li>
           85     <li><a href="#h1-2">Heading 2</a></li>
           86   </ul>
           87 </nav>`, qt.Commentf(got))
           88 
           89         tocHTML, _ = toc.ToHTML(2, 2, false)
           90         got = string(tocHTML)
           91         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
           92   <ul>
           93     <li><a href="#1-h2-1">1-H2-1</a></li>
           94     <li><a href="#1-h2-2">1-H2-2</a></li>
           95   </ul>
           96 </nav>`, qt.Commentf(got))
           97 
           98         tocHTML, _ = toc.ToHTML(1, -1, true)
           99         got = string(tocHTML)
          100         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
          101   <ol>
          102     <li><a href="#h1-1">Heading 1</a>
          103       <ol>
          104         <li><a href="#1-h2-1">1-H2-1</a></li>
          105         <li><a href="#1-h2-2">1-H2-2</a>
          106           <ol>
          107             <li><a href="#1-h2-2">1-H3-1</a></li>
          108           </ol>
          109         </li>
          110       </ol>
          111     </li>
          112     <li><a href="#h1-2">Heading 2</a></li>
          113   </ol>
          114 </nav>`, qt.Commentf(got))
          115 }
          116 
          117 func TestTocMissingParent(t *testing.T) {
          118         c := qt.New(t)
          119 
          120         toc := &Fragments{}
          121 
          122         toc.addAt(&Heading{Title: "H2", ID: "h2"}, 0, 1)
          123         toc.addAt(&Heading{Title: "H3", ID: "h3"}, 1, 2)
          124         toc.addAt(&Heading{Title: "H3", ID: "h3"}, 1, 2)
          125 
          126         tocHTML, _ := toc.ToHTML(1, -1, false)
          127         got := string(tocHTML)
          128         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
          129   <ul>
          130     <li>
          131       <ul>
          132         <li><a href="#h2">H2</a></li>
          133       </ul>
          134     </li>
          135     <li>
          136       <ul>
          137         <li>
          138           <ul>
          139             <li><a href="#h3">H3</a></li>
          140             <li><a href="#h3">H3</a></li>
          141           </ul>
          142         </li>
          143       </ul>
          144     </li>
          145   </ul>
          146 </nav>`, qt.Commentf(got))
          147 
          148         tocHTML, _ = toc.ToHTML(3, 3, false)
          149         got = string(tocHTML)
          150         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
          151   <ul>
          152     <li><a href="#h3">H3</a></li>
          153     <li><a href="#h3">H3</a></li>
          154   </ul>
          155 </nav>`, qt.Commentf(got))
          156 
          157         tocHTML, _ = toc.ToHTML(1, -1, true)
          158         got = string(tocHTML)
          159         c.Assert(got, qt.Equals, `<nav id="TableOfContents">
          160   <ol>
          161     <li>
          162       <ol>
          163         <li><a href="#h2">H2</a></li>
          164       </ol>
          165     </li>
          166     <li>
          167       <ol>
          168         <li>
          169           <ol>
          170             <li><a href="#h3">H3</a></li>
          171             <li><a href="#h3">H3</a></li>
          172           </ol>
          173         </li>
          174       </ol>
          175     </li>
          176   </ol>
          177 </nav>`, qt.Commentf(got))
          178 }
          179 
          180 func TestTocMisc(t *testing.T) {
          181         c := qt.New(t)
          182 
          183         c.Run("Identifiers", func(c *qt.C) {
          184                 toc := newTestToc()
          185                 c.Assert(toc.Identifiers, qt.DeepEquals, collections.SortedStringSlice{"1-h2-1", "1-h2-2", "1-h2-2", "h1-1", "h1-2"})
          186         })
          187 
          188         c.Run("HeadingsMap", func(c *qt.C) {
          189                 toc := newTestToc()
          190                 m := toc.HeadingsMap
          191                 c.Assert(m["h1-1"].Title, qt.Equals, "Heading 1")
          192                 c.Assert(m["doesnot exist"], qt.IsNil)
          193         })
          194 }
          195 
          196 func BenchmarkToc(b *testing.B) {
          197         newTocs := func(n int) []*Fragments {
          198                 var tocs []*Fragments
          199                 for range n {
          200                         tocs = append(tocs, newTestToc())
          201                 }
          202                 return tocs
          203         }
          204 
          205         b.Run("Build", func(b *testing.B) {
          206                 var builders []Builder
          207                 for i := 0; i < b.N; i++ {
          208                         builders = append(builders, newTestTocBuilder())
          209                 }
          210                 b.ResetTimer()
          211 
          212                 for i := 0; i < b.N; i++ {
          213                         b := builders[i]
          214                         b.Build()
          215                 }
          216         })
          217 
          218         b.Run("ToHTML", func(b *testing.B) {
          219                 tocs := newTocs(b.N)
          220                 b.ResetTimer()
          221                 for i := 0; i < b.N; i++ {
          222                         toc := tocs[i]
          223                         toc.ToHTML(1, -1, false)
          224                 }
          225         })
          226 }