gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package renderhelper
  4. import (
  5. "testing"
  6. repo_model "code.gitea.io/gitea/models/repo"
  7. "code.gitea.io/gitea/models/unittest"
  8. "code.gitea.io/gitea/modules/markup"
  9. "code.gitea.io/gitea/modules/markup/markdown"
  10. _ "code.gitea.io/gitea/modules/markup/orgmode"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestRepoFile(t *testing.T) {
  14. unittest.PrepareTestEnv(t)
  15. repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  16. t.Run("AutoLink", func(t *testing.T) {
  17. rctx := NewRenderContextRepoFile(t.Context(), repo1).WithMarkupType(markdown.MarkupName)
  18. rendered, err := markup.RenderString(rctx, `
  19. 65f1bf27bc3bf70f64657658635e66094edbcb4d
  20. #1
  21. @user2
  22. `)
  23. assert.NoError(t, err)
  24. assert.Equal(t,
  25. `<p><a href="/user2/repo1/commit/65f1bf27bc3bf70f64657658635e66094edbcb4d" rel="nofollow"><code>65f1bf27bc</code></a>
  26. #1
  27. <a href="/user2" rel="nofollow">@user2</a></p>
  28. `, rendered)
  29. })
  30. t.Run("AbsoluteAndRelative", func(t *testing.T) {
  31. rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{CurrentRefPath: "branch/main"}).
  32. WithMarkupType(markdown.MarkupName)
  33. rendered, err := markup.RenderString(rctx, `
  34. [/test](/test)
  35. [./test](./test)
  36. ![/image](/image)
  37. ![./image](./image)
  38. `)
  39. assert.NoError(t, err)
  40. assert.Equal(t,
  41. `<p><a href="/user2/repo1/src/branch/main/test" rel="nofollow">/test</a>
  42. <a href="/user2/repo1/src/branch/main/test" rel="nofollow">./test</a>
  43. <a href="/user2/repo1/src/branch/main/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/branch/main/image" alt="/image"/></a>
  44. <a href="/user2/repo1/src/branch/main/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/branch/main/image" alt="./image"/></a></p>
  45. `, rendered)
  46. })
  47. t.Run("WithCurrentRefPath", func(t *testing.T) {
  48. rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{CurrentRefPath: "/commit/1234"}).
  49. WithMarkupType(markdown.MarkupName)
  50. rendered, err := markup.RenderString(rctx, `
  51. [/test](/test)
  52. ![/image](/image)
  53. `)
  54. assert.NoError(t, err)
  55. assert.Equal(t, `<p><a href="/user2/repo1/src/commit/1234/test" rel="nofollow">/test</a>
  56. <a href="/user2/repo1/src/commit/1234/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/commit/1234/image" alt="/image"/></a></p>
  57. `, rendered)
  58. })
  59. t.Run("WithCurrentRefPathByTag", func(t *testing.T) {
  60. rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{
  61. CurrentRefPath: "/commit/1234",
  62. CurrentTreePath: "my-dir",
  63. }).
  64. WithMarkupType(markdown.MarkupName)
  65. rendered, err := markup.RenderString(rctx, `
  66. <img src="LINK">
  67. <video src="LINK">
  68. `)
  69. assert.NoError(t, err)
  70. assert.Equal(t, `<a href="/user2/repo1/src/commit/1234/my-dir/LINK" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/commit/1234/my-dir/LINK"/></a>
  71. <video src="/user2/repo1/media/commit/1234/my-dir/LINK">
  72. </video>`, rendered)
  73. })
  74. }
  75. func TestRepoFileOrgMode(t *testing.T) {
  76. unittest.PrepareTestEnv(t)
  77. repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  78. t.Run("Links", func(t *testing.T) {
  79. rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{
  80. CurrentRefPath: "/commit/1234",
  81. CurrentTreePath: "my-dir",
  82. }).WithRelativePath("my-dir/a.org")
  83. rendered, err := markup.RenderString(rctx, `
  84. [[https://google.com/]]
  85. [[ImageLink.svg][The Image Desc]]
  86. `)
  87. assert.NoError(t, err)
  88. assert.Equal(t, `<p>
  89. <a href="https://google.com/" rel="nofollow">https://google.com/</a>
  90. <a href="/user2/repo1/src/commit/1234/my-dir/ImageLink.svg" rel="nofollow">The Image Desc</a></p>
  91. `, rendered)
  92. })
  93. t.Run("CodeHighlight", func(t *testing.T) {
  94. rctx := NewRenderContextRepoFile(t.Context(), repo1, RepoFileOptions{}).WithRelativePath("my-dir/a.org")
  95. rendered, err := markup.RenderString(rctx, `
  96. #+begin_src c
  97. int a = 1;
  98. #+end_src
  99. `)
  100. assert.NoError(t, err)
  101. assert.Equal(t, `<div>
  102. <pre><code class="chroma language-c"><span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span></code></pre>
  103. </div>
  104. `, rendered)
  105. })
  106. }