code.gitea.io/gitea@v1.19.3/modules/highlight/highlight_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package highlight 5 6 import ( 7 "strings" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func lines(s string) []string { 14 return strings.Split(strings.ReplaceAll(strings.TrimSpace(s), `\n`, "\n"), "\n") 15 } 16 17 func TestFile(t *testing.T) { 18 tests := []struct { 19 name string 20 code string 21 want []string 22 lexerName string 23 }{ 24 { 25 name: "empty.py", 26 code: "", 27 want: lines(""), 28 lexerName: "Python", 29 }, 30 { 31 name: "empty.js", 32 code: "", 33 want: lines(""), 34 lexerName: "JavaScript", 35 }, 36 { 37 name: "empty.yaml", 38 code: "", 39 want: lines(""), 40 lexerName: "YAML", 41 }, 42 { 43 name: "tags.txt", 44 code: "<>", 45 want: lines("<>"), 46 lexerName: "Plaintext", 47 }, 48 { 49 name: "tags.py", 50 code: "<>", 51 want: lines(`<span class="o"><</span><span class="o">></span>`), 52 lexerName: "Python", 53 }, 54 { 55 name: "eol-no.py", 56 code: "a=1", 57 want: lines(`<span class="n">a</span><span class="o">=</span><span class="mi">1</span>`), 58 lexerName: "Python", 59 }, 60 { 61 name: "eol-newline1.py", 62 code: "a=1\n", 63 want: lines(`<span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n`), 64 lexerName: "Python", 65 }, 66 { 67 name: "eol-newline2.py", 68 code: "a=1\n\n", 69 want: lines(` 70 <span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n 71 \n 72 `, 73 ), 74 lexerName: "Python", 75 }, 76 { 77 name: "empty-line-with-space.py", 78 code: strings.ReplaceAll(strings.TrimSpace(` 79 def: 80 a=1 81 82 b='' 83 {space} 84 c=2 85 `), "{space}", " "), 86 want: lines(` 87 <span class="n">def</span><span class="p">:</span>\n 88 <span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n 89 \n 90 <span class="n">b</span><span class="o">=</span><span class="sa"></span><span class="s1">'</span><span class="s1">'</span>\n 91 \n 92 <span class="n">c</span><span class="o">=</span><span class="mi">2</span>`, 93 ), 94 lexerName: "Python", 95 }, 96 } 97 98 for _, tt := range tests { 99 t.Run(tt.name, func(t *testing.T) { 100 out, lexerName, err := File(tt.name, "", []byte(tt.code)) 101 assert.NoError(t, err) 102 expected := strings.Join(tt.want, "\n") 103 actual := strings.Join(out, "\n") 104 assert.Equal(t, strings.Count(actual, "<span"), strings.Count(actual, "</span>")) 105 assert.EqualValues(t, expected, actual) 106 assert.Equal(t, tt.lexerName, lexerName) 107 }) 108 } 109 } 110 111 func TestPlainText(t *testing.T) { 112 tests := []struct { 113 name string 114 code string 115 want []string 116 }{ 117 { 118 name: "empty.py", 119 code: "", 120 want: lines(""), 121 }, 122 { 123 name: "tags.py", 124 code: "<>", 125 want: lines("<>"), 126 }, 127 { 128 name: "eol-no.py", 129 code: "a=1", 130 want: lines(`a=1`), 131 }, 132 { 133 name: "eol-newline1.py", 134 code: "a=1\n", 135 want: lines(`a=1\n`), 136 }, 137 { 138 name: "eol-newline2.py", 139 code: "a=1\n\n", 140 want: lines(` 141 a=1\n 142 \n 143 `), 144 }, 145 { 146 name: "empty-line-with-space.py", 147 code: strings.ReplaceAll(strings.TrimSpace(` 148 def: 149 a=1 150 151 b='' 152 {space} 153 c=2 154 `), "{space}", " "), 155 want: lines(` 156 def:\n 157 a=1\n 158 \n 159 b=''\n 160 \n 161 c=2`), 162 }, 163 } 164 165 for _, tt := range tests { 166 t.Run(tt.name, func(t *testing.T) { 167 out := PlainText([]byte(tt.code)) 168 expected := strings.Join(tt.want, "\n") 169 actual := strings.Join(out, "\n") 170 assert.EqualValues(t, expected, actual) 171 }) 172 } 173 }