summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2018-04-07 07:43:22 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2018-04-07 07:43:22 +0000
commit7d0cbd0d9b83b82e80108fd036fa49e452334735 (patch)
tree6a771e8901792e7661de1b2b7355c1b6939eac59
parentb21ec884351f41f3321411fed939fb88578d1fef (diff)
Merged r17266 into 3.4-stable (#25299).
git-svn-id: http://svn.redmine.org/redmine/branches/3.4-stable@17267 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--lib/redmine/wiki_formatting/markdown/formatter.rb14
-rw-r--r--test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb56
2 files changed, 62 insertions, 8 deletions
diff --git a/lib/redmine/wiki_formatting/markdown/formatter.rb b/lib/redmine/wiki_formatting/markdown/formatter.rb
index c959c3a06..c7611d977 100644
--- a/lib/redmine/wiki_formatting/markdown/formatter.rb
+++ b/lib/redmine/wiki_formatting/markdown/formatter.rb
@@ -94,15 +94,13 @@ module Redmine
i = 0
l = 1
inside_pre = false
- @text.split(/(^(?:.+\r?\n\r?(?:\=+|\-+)|#+.+|~~~.*)\s*$)/).each do |part|
+ @text.split(/(^(?:.+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part|
level = nil
- if part =~ /\A~{3,}(\S+)?\s*$/
- if $1
- if !inside_pre
- inside_pre = true
- end
- else
- inside_pre = !inside_pre
+ if part =~ /\A(~{3,}|`{3,})(\S+)?\s*$/
+ if !inside_pre
+ inside_pre = true
+ elsif !$2
+ inside_pre = false
end
elsif inside_pre
# nop
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 3acf29d70..b67bd4999 100644
--- a/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb
@@ -98,5 +98,61 @@ STR
assert_equal "<p>This is a list:</p>\n\n<ul>\n<li>One</li>\n<li>Two</li>\n</ul>", @formatter.new(text).to_html.strip
end
+ STR_WITH_PRE = [
+ # 0
+"# Title
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.",
+ # 1
+"## Heading 2
+
+~~~ruby
+ def foo
+ end
+>>>>>>> .merge-right.r17266
+~~~
+
+Morbi facilisis accumsan orci non pharetra.
+
+```
+Pre Content:
+
+## Inside pre
+
+<tag> inside pre block
+
+Morbi facilisis accumsan orci non pharetra.
+```",
+ # 2
+"### Heading 3
+
+Nulla nunc nisi, egestas in ornare vel, posuere ac libero."]
+
+ def test_get_section_should_ignore_pre_content
+ text = STR_WITH_PRE.join("\n\n")
+
+ assert_section_with_hash STR_WITH_PRE[1..2].join("\n\n"), text, 2
+ assert_section_with_hash STR_WITH_PRE[2], text, 3
+ end
+
+ def test_update_section_should_not_escape_pre_content_outside_section
+ text = STR_WITH_PRE.join("\n\n")
+ replacement = "New text"
+
+ assert_equal [STR_WITH_PRE[0..1], "New text"].flatten.join("\n\n"),
+ @formatter.new(text).update_section(3, replacement)
+ end
+
+ private
+
+ def assert_section_with_hash(expected, text, index)
+ result = @formatter.new(text).get_section(index)
+
+ assert_kind_of Array, result
+ assert_equal 2, result.size
+ assert_equal expected, result.first, "section content did not match"
+ assert_equal Digest::MD5.hexdigest(expected), result.last, "section hash did not match"
+ end
+
end
end