summaryrefslogtreecommitdiffstats
path: root/modules/base/tool_test.go
diff options
context:
space:
mode:
authorJonathan Tran <jonnytran@gmail.com>2021-01-12 22:45:19 -0500
committerGitHub <noreply@github.com>2021-01-12 22:45:19 -0500
commit81467e6f35f343b911c09f746deca869a48da4c8 (patch)
tree1b759007789bc0dbeeb543d54739ccf8b8dfb434 /modules/base/tool_test.go
parent9465e60504284699078e620f7c892a9685d91458 (diff)
downloadgitea-81467e6f35f343b911c09f746deca869a48da4c8.tar.gz
gitea-81467e6f35f343b911c09f746deca869a48da4c8.zip
Display SVG files as images instead of text (#14101)
* Change to display SVG files as images * Remove unsafe styles from SVG CSP * Add integration test to test SVG headers * Add config setting to disable SVG rendering * Add test for img tag when loading SVG image * Remove the Raw view button for svg files since we don't fully support this * Fix copyright year * Rename and move config setting * Add setting to cheat sheet in docs * Fix so that comment matches cheat sheet * Add allowing styles in CSP based on pull request feedback * Re-enable raw button since we show SVG styles now * Change so that SVG files are editable * Add UI to toggle between source and rendered image for SVGs * Change to show blame button for SVG images * Fix to update ctx data * Add test for DetectContentType when file is longer than sniffLen Co-authored-by: Jonathan Tran <jon@allspice.io> Co-authored-by: Kyle D <kdumontnu@gmail.com>
Diffstat (limited to 'modules/base/tool_test.go')
-rw-r--r--modules/base/tool_test.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/modules/base/tool_test.go b/modules/base/tool_test.go
index 0b708dafdb..cda1685da7 100644
--- a/modules/base/tool_test.go
+++ b/modules/base/tool_test.go
@@ -183,11 +183,63 @@ func TestIsLetter(t *testing.T) {
assert.False(t, IsLetter('$'))
}
+func TestDetectContentTypeLongerThanSniffLen(t *testing.T) {
+ // Pre-condition: Shorter than sniffLen detects SVG.
+ assert.Equal(t, "image/svg+xml", DetectContentType([]byte(`<!-- Comment --><svg></svg>`)))
+ // Longer than sniffLen detects something else.
+ assert.Equal(t, "text/plain; charset=utf-8", DetectContentType([]byte(`<!--
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
+Comment Comment Comment --><svg></svg>`)))
+}
+
func TestIsTextFile(t *testing.T) {
assert.True(t, IsTextFile([]byte{}))
assert.True(t, IsTextFile([]byte("lorem ipsum")))
}
+func TestIsSVGImageFile(t *testing.T) {
+ assert.True(t, IsSVGImageFile([]byte("<svg></svg>")))
+ assert.True(t, IsSVGImageFile([]byte(" <svg></svg>")))
+ assert.True(t, IsSVGImageFile([]byte(`<svg width="100"></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte("<svg/>")))
+ assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?><svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<!-- Comment -->
+ <svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<!-- Multiple -->
+ <!-- Comments -->
+ <svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<!-- Multiline
+ Comment -->
+ <svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
+ <!-- Comment -->
+ <svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
+ <!-- Multiple -->
+ <!-- Comments -->
+ <svg></svg>`)))
+ assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
+ <!-- Multline
+ Comment -->
+ <svg></svg>`)))
+ assert.False(t, IsSVGImageFile([]byte{}))
+ assert.False(t, IsSVGImageFile([]byte("svg")))
+ assert.False(t, IsSVGImageFile([]byte("<svgfoo></svgfoo>")))
+ assert.False(t, IsSVGImageFile([]byte("text<svg></svg>")))
+ assert.False(t, IsSVGImageFile([]byte("<html><body><svg></svg></body></html>")))
+ assert.False(t, IsSVGImageFile([]byte(`<script>"<svg></svg>"</script>`)))
+ assert.False(t, IsSVGImageFile([]byte(`<!-- <svg></svg> inside comment -->
+ <foo></foo>`)))
+ assert.False(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
+ <!-- <svg></svg> inside comment -->
+ <foo></foo>`)))
+}
+
func TestFormatNumberSI(t *testing.T) {
assert.Equal(t, "125", FormatNumberSI(int(125)))
assert.Equal(t, "1.3k", FormatNumberSI(int64(1317)))