]> source.dussan.org Git - redmine.git/commitdiff
Merged r17266 into 3.4-stable (#25299).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 7 Apr 2018 07:43:22 +0000 (07:43 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 7 Apr 2018 07:43:22 +0000 (07:43 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/3.4-stable@17267 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/wiki_formatting/markdown/formatter.rb
test/unit/lib/redmine/wiki_formatting/markdown_formatter_test.rb

index c959c3a067d1d0f6f7f1ef7c558f9d907a536f2d..c7611d977118853f6cbc570995caa8fecfd9a1a2 100644 (file)
@@ -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
index 3acf29d70c0c0b1d899c80a4dd98a7829d0e2c07..b67bd499913a2a068f4b7e5820c73a3e80ae66fa 100644 (file)
@@ -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