summaryrefslogtreecommitdiffstats
path: root/test/unit
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2021-08-15 21:00:16 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2021-08-15 21:00:16 +0000
commitb7798e6e1c0c5db75b20a83a6ba4a96f83052392 (patch)
tree10c2d0bc89a404d43f38a41080ab9475241a2df1 /test/unit
parent5699253da6330447f7a7d3b4cf8a238f9d4608cf (diff)
downloadredmine-b7798e6e1c0c5db75b20a83a6ba4a96f83052392.tar.gz
redmine-b7798e6e1c0c5db75b20a83a6ba4a96f83052392.zip
Unify code block and add "data-language" attribute with the user-supplied language for Textile and Markdown formaters (#35104).
Patch by Martin Cizek. git-svn-id: http://svn.redmine.org/redmine/trunk@21183 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb12
-rw-r--r--test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb32
2 files changed, 35 insertions, 9 deletions
diff --git a/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb b/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb
index c1264f77b..5be1521a5 100644
--- a/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb
@@ -70,6 +70,7 @@ class Redmine::WikiFormatting::MarkdownFormatterTest < ActionView::TestCase
STR
assert_select_in @formatter.new(text).to_html, 'pre code.ruby.syntaxhl' do
assert_select 'span.k', :text => 'def'
+ assert_select "[data-language='ruby']"
end
end
@@ -79,7 +80,16 @@ class Redmine::WikiFormatting::MarkdownFormatterTest < ActionView::TestCase
test
~~~
STR
- assert_equal "<pre>test\n</pre>", @formatter.new(text).to_html
+ assert_equal "<pre><code data-language=\"foo\">test\n</code></pre>", @formatter.new(text).to_html
+ end
+
+ def test_should_preserve_code_block_language_in_data_language
+ text = <<~STR
+ ~~~c-k&r
+ test
+ ~~~
+ STR
+ assert_equal "<pre><code data-language=\"c-k&amp;r\">test\n</code></pre>", @formatter.new(text).to_html
end
def test_external_links_should_have_external_css_class
diff --git a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
index 5ee4defe1..3a8e0ad0f 100644
--- a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
@@ -596,12 +596,16 @@ class Redmine::WikiFormatting::TextileFormatterTest < ActionView::TestCase
end
def test_should_not_allow_arbitrary_class_attribute_on_offtags
- %w(code pre kbd).each do |tag|
- assert_html_output({"<#{tag} class=\"foo\">test</#{tag}>" => "<#{tag}>test</#{tag}>"}, false)
- assert_html_output({"<#{tag} class='foo'>test</#{tag}>" => "<#{tag}>test</#{tag}>"}, false)
- assert_html_output({"<#{tag} class=\"ruby foo\">test</#{tag}>" => "<#{tag}>test</#{tag}>"}, false)
- assert_html_output({"<#{tag} class='ruby foo'>test</#{tag}>" => "<#{tag}>test</#{tag}>"}, false)
- assert_html_output({"<#{tag} class=\"ruby \"foo\" bar\">test</#{tag}>" => "<#{tag}>test</#{tag}>"}, false)
+ {
+ "class=\"foo\"" => "data-language=\"foo\"",
+ "class='foo'" => "data-language=\"foo\"",
+ "class=\"ruby foo\"" => "data-language=\"ruby foo\"",
+ "class='ruby foo'" => "data-language=\"ruby foo\"",
+ "class=\"ruby \"foo\" bar\"" => "data-language=\"ruby \"",
+ }.each do |classattr, codeattr|
+ assert_html_output({"<code #{classattr}>test</code>" => "<code #{codeattr}>test</code>"}, false)
+ assert_html_output({"<pre #{classattr}>test</pre>" => "<pre>test</pre>"}, false)
+ assert_html_output({"<kbd #{classattr}>test</kbd>" => "<kbd>test</kbd>"}, false)
end
assert_html_output({"<notextile class=\"foo\">test</notextile>" => "test"}, false)
@@ -615,13 +619,25 @@ class Redmine::WikiFormatting::TextileFormatterTest < ActionView::TestCase
# language name is double-quoted
assert_html_output(
{"<code class=\"ruby\">test</code>" =>
- "<code class=\"ruby syntaxhl\"><span class=\"nb\">test</span></code>"},
+ "<code class=\"ruby syntaxhl\" data-language=\"ruby\"><span class=\"nb\">test</span></code>"},
false
)
# language name is single-quoted
assert_html_output(
{"<code class='ruby'>test</code>" =>
- "<code class=\"ruby syntaxhl\"><span class=\"nb\">test</span></code>"},
+ "<code class=\"ruby syntaxhl\" data-language=\"ruby\"><span class=\"nb\">test</span></code>"},
+ false
+ )
+ end
+
+ def test_should_preserve_code_language_class_attribute_in_data_language
+ assert_html_output(
+ {
+ "<code class=\"foolang\">unsupported language</code>" =>
+ "<code data-language=\"foolang\">unsupported language</code>",
+ "<code class=\"c-k&r\">special-char language</code>" =>
+ "<code data-language=\"c-k&#38;r\">special-char language</code>",
+ },
false
)
end