From e68b9d00a6e05b3a941f63ffb696f91e554ac5ec Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 18 Oct 2024 20:33:49 +0200 Subject: Adding upstream version 9.0.3. Signed-off-by: Daniel Baumann --- modules/highlight/highlight_test.go | 196 ++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 modules/highlight/highlight_test.go (limited to 'modules/highlight/highlight_test.go') diff --git a/modules/highlight/highlight_test.go b/modules/highlight/highlight_test.go new file mode 100644 index 0000000..0127854 --- /dev/null +++ b/modules/highlight/highlight_test.go @@ -0,0 +1,196 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package highlight + +import ( + "html/template" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func lines(s string) (out []template.HTML) { + // "" => [], "a" => ["a"], "a\n" => ["a\n"], "a\nb" => ["a\n", "b"] (each line always includes EOL "\n" if it exists) + out = make([]template.HTML, 0) + s = strings.ReplaceAll(strings.ReplaceAll(strings.TrimSpace(s), "\n", ""), `\n`, "\n") + for { + if p := strings.IndexByte(s, '\n'); p != -1 { + out = append(out, template.HTML(s[:p+1])) + s = s[p+1:] + } else { + break + } + } + if s != "" { + out = append(out, template.HTML(s)) + } + return out +} + +func TestFile(t *testing.T) { + tests := []struct { + name string + code string + want []template.HTML + lexerName string + }{ + { + name: "empty.py", + code: "", + want: lines(""), + lexerName: "Python", + }, + { + name: "empty.js", + code: "", + want: lines(""), + lexerName: "JavaScript", + }, + { + name: "empty.yaml", + code: "", + want: lines(""), + lexerName: "YAML", + }, + { + name: "tags.txt", + code: "<>", + want: lines("<>"), + lexerName: "Text", + }, + { + name: "tags.py", + code: "<>", + want: lines(`<>`), + lexerName: "Python", + }, + { + name: "eol-no.py", + code: "a=1", + want: lines(`a=1`), + lexerName: "Python", + }, + { + name: "eol-newline1.py", + code: "a=1\n", + want: lines(`a=1\n`), + lexerName: "Python", + }, + { + name: "eol-newline2.py", + code: "a=1\n\n", + want: lines(` +a=1\n +\n + `, + ), + lexerName: "Python", + }, + { + name: "empty-line-with-space.py", + code: strings.ReplaceAll(strings.TrimSpace(` +def: + a=1 + +b='' +{space} +c=2 + `), "{space}", " "), + want: lines(` +def:\n + a=1\n +\n +b=''\n + \n +c=2`, + ), + lexerName: "Python", + }, + { + name: "DOS.PAS", + code: "", + want: lines(""), + lexerName: "ObjectPascal", + }, + { + name: "test.fs", + code: "module Crypt = let generateCryptTable: array =", + want: lines(`module Crypt = let generateCryptTable: array<uint32> =`), + lexerName: "FSharp", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out, lexerName, err := File(tt.name, "", []byte(tt.code)) + require.NoError(t, err) + assert.EqualValues(t, tt.want, out) + assert.Equal(t, tt.lexerName, lexerName) + }) + } +} + +func TestPlainText(t *testing.T) { + tests := []struct { + name string + code string + want []template.HTML + }{ + { + name: "empty.py", + code: "", + want: lines(""), + }, + { + name: "tags.py", + code: "<>", + want: lines("<>"), + }, + { + name: "eol-no.py", + code: "a=1", + want: lines(`a=1`), + }, + { + name: "eol-newline1.py", + code: "a=1\n", + want: lines(`a=1\n`), + }, + { + name: "eol-newline2.py", + code: "a=1\n\n", + want: lines(` +a=1\n +\n + `), + }, + { + name: "empty-line-with-space.py", + code: strings.ReplaceAll(strings.TrimSpace(` +def: + a=1 + +b='' +{space} +c=2 + `), "{space}", " "), + want: lines(` +def:\n + a=1\n +\n +b=''\n + \n +c=2`), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := PlainText([]byte(tt.code)) + assert.EqualValues(t, tt.want, out) + }) + } +} -- cgit v1.2.3