gitech

Форк
0
/
highlight_test.go 
183 строки · 3.6 Кб
1
// Copyright 2021 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
package highlight
5

6
import (
7
	"html/template"
8
	"strings"
9
	"testing"
10

11
	"github.com/stretchr/testify/assert"
12
)
13

14
func lines(s string) (out []template.HTML) {
15
	// "" => [], "a" => ["a"], "a\n" => ["a\n"], "a\nb" => ["a\n", "b"] (each line always includes EOL "\n" if it exists)
16
	out = make([]template.HTML, 0)
17
	s = strings.ReplaceAll(strings.ReplaceAll(strings.TrimSpace(s), "\n", ""), `\n`, "\n")
18
	for {
19
		if p := strings.IndexByte(s, '\n'); p != -1 {
20
			out = append(out, template.HTML(s[:p+1]))
21
			s = s[p+1:]
22
		} else {
23
			break
24
		}
25
	}
26
	if s != "" {
27
		out = append(out, template.HTML(s))
28
	}
29
	return out
30
}
31

32
func TestFile(t *testing.T) {
33
	tests := []struct {
34
		name      string
35
		code      string
36
		want      []template.HTML
37
		lexerName string
38
	}{
39
		{
40
			name:      "empty.py",
41
			code:      "",
42
			want:      lines(""),
43
			lexerName: "Python",
44
		},
45
		{
46
			name:      "empty.js",
47
			code:      "",
48
			want:      lines(""),
49
			lexerName: "JavaScript",
50
		},
51
		{
52
			name:      "empty.yaml",
53
			code:      "",
54
			want:      lines(""),
55
			lexerName: "YAML",
56
		},
57
		{
58
			name:      "tags.txt",
59
			code:      "<>",
60
			want:      lines("&lt;&gt;"),
61
			lexerName: "Plaintext",
62
		},
63
		{
64
			name:      "tags.py",
65
			code:      "<>",
66
			want:      lines(`<span class="o">&lt;</span><span class="o">&gt;</span>`),
67
			lexerName: "Python",
68
		},
69
		{
70
			name:      "eol-no.py",
71
			code:      "a=1",
72
			want:      lines(`<span class="n">a</span><span class="o">=</span><span class="mi">1</span>`),
73
			lexerName: "Python",
74
		},
75
		{
76
			name:      "eol-newline1.py",
77
			code:      "a=1\n",
78
			want:      lines(`<span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n`),
79
			lexerName: "Python",
80
		},
81
		{
82
			name: "eol-newline2.py",
83
			code: "a=1\n\n",
84
			want: lines(`
85
<span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n
86
\n
87
			`,
88
			),
89
			lexerName: "Python",
90
		},
91
		{
92
			name: "empty-line-with-space.py",
93
			code: strings.ReplaceAll(strings.TrimSpace(`
94
def:
95
    a=1
96

97
b=''
98
{space}
99
c=2
100
			`), "{space}", "    "),
101
			want: lines(`
102
<span class="n">def</span><span class="p">:</span>\n
103
    <span class="n">a</span><span class="o">=</span><span class="mi">1</span>\n
104
\n
105
<span class="n">b</span><span class="o">=</span><span class="sa"></span><span class="s1">&#39;</span><span class="s1">&#39;</span>\n
106
    \n
107
<span class="n">c</span><span class="o">=</span><span class="mi">2</span>`,
108
			),
109
			lexerName: "Python",
110
		},
111
	}
112

113
	for _, tt := range tests {
114
		t.Run(tt.name, func(t *testing.T) {
115
			out, lexerName, err := File(tt.name, "", []byte(tt.code))
116
			assert.NoError(t, err)
117
			assert.EqualValues(t, tt.want, out)
118
			assert.Equal(t, tt.lexerName, lexerName)
119
		})
120
	}
121
}
122

123
func TestPlainText(t *testing.T) {
124
	tests := []struct {
125
		name string
126
		code string
127
		want []template.HTML
128
	}{
129
		{
130
			name: "empty.py",
131
			code: "",
132
			want: lines(""),
133
		},
134
		{
135
			name: "tags.py",
136
			code: "<>",
137
			want: lines("&lt;&gt;"),
138
		},
139
		{
140
			name: "eol-no.py",
141
			code: "a=1",
142
			want: lines(`a=1`),
143
		},
144
		{
145
			name: "eol-newline1.py",
146
			code: "a=1\n",
147
			want: lines(`a=1\n`),
148
		},
149
		{
150
			name: "eol-newline2.py",
151
			code: "a=1\n\n",
152
			want: lines(`
153
a=1\n
154
\n
155
			`),
156
		},
157
		{
158
			name: "empty-line-with-space.py",
159
			code: strings.ReplaceAll(strings.TrimSpace(`
160
def:
161
    a=1
162

163
b=''
164
{space}
165
c=2
166
			`), "{space}", "    "),
167
			want: lines(`
168
def:\n
169
    a=1\n
170
\n
171
b=&#39;&#39;\n
172
    \n
173
c=2`),
174
		},
175
	}
176

177
	for _, tt := range tests {
178
		t.Run(tt.name, func(t *testing.T) {
179
			out := PlainText([]byte(tt.code))
180
			assert.EqualValues(t, tt.want, out)
181
		})
182
	}
183
}
184

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.