autoid_test.go (3800B)
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 goldmark 15 16 import ( 17 "strings" 18 "testing" 19 20 "github.com/gohugoio/hugo/markup/goldmark/goldmark_config" 21 22 qt "github.com/frankban/quicktest" 23 ) 24 25 func TestSanitizeAnchorName(t *testing.T) { 26 c := qt.New(t) 27 28 // Tests generated manually on github.com 29 tests := ` 30 God is good: 神真美好 31 Number 32 32 Question? 33 1+2=3 34 Special !"#$%&(parens)=?´* chars 35 Resumé 36 One-Hyphen 37 Multiple--Hyphens 38 Trailing hyphen- 39 Many spaces here 40 Forward/slash 41 Backward\slash 42 Under_score 43 Nonbreaking Space 44 Tab Space 45 ` 46 47 expect := ` 48 god-is-good-神真美好 49 number-32 50 question 51 123 52 special-parens-chars 53 resumé 54 one-hyphen 55 multiple--hyphens 56 trailing-hyphen- 57 many---spaces--here 58 forwardslash 59 backwardslash 60 under_score 61 nonbreakingspace 62 tabspace 63 ` 64 65 tests, expect = strings.TrimSpace(tests), strings.TrimSpace(expect) 66 67 testlines, expectlines := strings.Split(tests, "\n"), strings.Split(expect, "\n") 68 69 testlines = append(testlines, "Trailing Space ") 70 expectlines = append(expectlines, "trailing-space") 71 72 if len(testlines) != len(expectlines) { 73 panic("test setup failed") 74 } 75 76 for i, input := range testlines { 77 input := input 78 expect := expectlines[i] 79 c.Run(input, func(c *qt.C) { 80 b := []byte(input) 81 got := string(sanitizeAnchorName(b, goldmark_config.AutoHeadingIDTypeGitHub)) 82 c.Assert(got, qt.Equals, expect) 83 c.Assert(sanitizeAnchorNameString(input, goldmark_config.AutoHeadingIDTypeGitHub), qt.Equals, expect) 84 c.Assert(string(b), qt.Equals, input) 85 }) 86 } 87 } 88 89 func TestSanitizeAnchorNameAsciiOnly(t *testing.T) { 90 c := qt.New(t) 91 92 c.Assert(sanitizeAnchorNameString("god is神真美好 good", goldmark_config.AutoHeadingIDTypeGitHubAscii), qt.Equals, "god-is-good") 93 c.Assert(sanitizeAnchorNameString("Resumé", goldmark_config.AutoHeadingIDTypeGitHubAscii), qt.Equals, "resume") 94 } 95 96 func TestSanitizeAnchorNameBlackfriday(t *testing.T) { 97 c := qt.New(t) 98 c.Assert(sanitizeAnchorNameString("Let's try this, shall we?", goldmark_config.AutoHeadingIDTypeBlackfriday), qt.Equals, "let-s-try-this-shall-we") 99 } 100 101 func BenchmarkSanitizeAnchorName(b *testing.B) { 102 input := []byte("God is good: 神真美好") 103 b.ResetTimer() 104 for i := 0; i < b.N; i++ { 105 result := sanitizeAnchorName(input, goldmark_config.AutoHeadingIDTypeGitHub) 106 if len(result) != 24 { 107 b.Fatalf("got %d", len(result)) 108 } 109 } 110 } 111 112 func BenchmarkSanitizeAnchorNameAsciiOnly(b *testing.B) { 113 input := []byte("God is good: 神真美好") 114 b.ResetTimer() 115 for i := 0; i < b.N; i++ { 116 result := sanitizeAnchorName(input, goldmark_config.AutoHeadingIDTypeGitHubAscii) 117 if len(result) != 12 { 118 b.Fatalf("got %d", len(result)) 119 } 120 } 121 } 122 123 func BenchmarkSanitizeAnchorNameBlackfriday(b *testing.B) { 124 input := []byte("God is good: 神真美好") 125 b.ResetTimer() 126 for i := 0; i < b.N; i++ { 127 result := sanitizeAnchorName(input, goldmark_config.AutoHeadingIDTypeBlackfriday) 128 if len(result) != 24 { 129 b.Fatalf("got %d", len(result)) 130 } 131 } 132 } 133 134 func BenchmarkSanitizeAnchorNameString(b *testing.B) { 135 input := "God is good: 神真美好" 136 b.ResetTimer() 137 for i := 0; i < b.N; i++ { 138 result := sanitizeAnchorNameString(input, goldmark_config.AutoHeadingIDTypeGitHub) 139 if len(result) != 24 { 140 b.Fatalf("got %d", len(result)) 141 } 142 } 143 }