gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package console
  4. import (
  5. "strings"
  6. "testing"
  7. "code.gitea.io/gitea/modules/markup"
  8. "code.gitea.io/gitea/modules/typesniffer"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestRenderConsole(t *testing.T) {
  12. cases := []struct {
  13. input string
  14. expected string
  15. }{
  16. {"\x1b[37m\x1b[40mnpm\x1b[0m \x1b[0m\x1b[32minfo\x1b[0m \x1b[0m\x1b[35mit worked if it ends with\x1b[0m ok", `<span class="term-fg37 term-bg40">npm</span> <span class="term-fg32">info</span> <span class="term-fg35">it worked if it ends with</span> ok`},
  17. {"\x1b[1;2m \x1b[123m 啊", `<span class="term-fg2"> 啊</span>`},
  18. {"\x1b[1;2m \x1b[123m \xef", `<span class="term-fg2"> �</span>`},
  19. {"\x1b[1;2m \x1b[123m \xef \xef", ``},
  20. {"\x1b[12", ``},
  21. {"\x1b[1", ``},
  22. {"\x1b[FOO\x1b[", ``},
  23. {"\x1b[mFOO\x1b[m", `FOO`},
  24. }
  25. var render Renderer
  26. for i, c := range cases {
  27. var buf strings.Builder
  28. st := typesniffer.DetectContentType([]byte(c.input))
  29. canRender := render.CanRender("test", st, []byte(c.input))
  30. if c.expected == "" {
  31. assert.False(t, canRender, "case %d: expected not to render", i)
  32. continue
  33. }
  34. assert.True(t, canRender)
  35. err := render.Render(markup.NewRenderContext(t.Context()), strings.NewReader(c.input), &buf)
  36. assert.NoError(t, err)
  37. assert.Equal(t, c.expected, buf.String())
  38. }
  39. }