// Copyright 2024 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package markdown import ( "strings" "testing" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/test" "github.com/stretchr/testify/assert" ) const nl = "\n" func TestMathRender(t *testing.T) { setting.Markdown.MathCodeBlockOptions = setting.MarkdownMathCodeBlockOptions{ParseInlineDollar: true, ParseInlineParentheses: true} testcases := []struct { testcase string expected string }{ { "$a$", `
a
a
a
b
a
b
a
.
.$a$
` + nl, }, { `$a a$b b$`, `$a a$b b$
` + nl, }, { `a a$b b`, `a a$b b
` + nl, }, { `a$b $a a$b b$`, `a$b $a a$b b$
` + nl, }, { "a$x$", `a$x$
` + nl, }, { "$x$a", `$x$a
` + nl, }, { "$a$ ($b$) [$c$] {$d$}", `a
(b
) [$c$] {$d$}
a
a
test
test a
foo x=\$
bar
\text{$b$}
ab
c
a b
c
ab
c xy
z
\alpha
`,
},
{
"indent-1",
`
\[
\alpha
\]
`,
`
\alpha
`,
},
{
"indent-2-mismatch",
`
\[
a
b
c
d
\]
`,
`
a
b
c
d
`,
},
{
"indent-2",
`
\[
a
b
c
\]
`,
`
a
b
c
`,
},
{
"indent-0-oneline",
`$$ x $$
foo`,
` x
foo
`, }, { "indent-3-oneline", ` $$ x $$ x
foo
`, }, { "quote-block", ` > \[ > a > \] > \[ > b > \] `, ``, }, { "list-block", ` 1. a \[ x \] 2. b`, `a
b
x
[x]
` + nl, }, } for _, test := range testcases { t.Run(test.name, func(t *testing.T) { res, err := RenderString(markup.NewTestRenderContext(), strings.ReplaceAll(test.testcase, "a
$a$
`, `$a$`) setting.Markdown.MathCodeBlockOptions.ParseInlineDollar = true test(t, `a
(a)
`, `\(a\)`) setting.Markdown.MathCodeBlockOptions.ParseInlineParentheses = true test(t, `a
$$ a $$
`, ` $$ a $$ `) setting.Markdown.MathCodeBlockOptions.ParseBlockDollar = true test(t, `
a
`, `
$$
a
$$
`)
// ParseBlockSquareBrackets
test(t, `[ a ]
`, ` \[ a \] `) setting.Markdown.MathCodeBlockOptions.ParseBlockSquareBrackets = true test(t, `
a
`, `
\[
a
\]
`)
}