Merged r11706 and r11707 from trunk to 2.3-stable (#13644)
fix diff error in case of line_left out of range. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.3-stable@11709 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
bd5b7428d8
commit
655c50849d
|
@ -199,16 +199,20 @@ module Redmine
|
||||||
while starting < max && line_left[starting] == line_right[starting]
|
while starting < max && line_left[starting] == line_right[starting]
|
||||||
starting += 1
|
starting += 1
|
||||||
end
|
end
|
||||||
|
if (! "".respond_to?(:force_encoding)) && starting < line_left.size
|
||||||
while line_left[starting].ord.between?(128, 191) && starting > 0
|
while line_left[starting].ord.between?(128, 191) && starting > 0
|
||||||
starting -= 1
|
starting -= 1
|
||||||
end
|
end
|
||||||
|
end
|
||||||
ending = -1
|
ending = -1
|
||||||
while ending >= -(max - starting) && line_left[ending] == line_right[ending]
|
while ending >= -(max - starting) && line_left[ending] == line_right[ending]
|
||||||
ending -= 1
|
ending -= 1
|
||||||
end
|
end
|
||||||
|
if (! "".respond_to?(:force_encoding)) && ending > (-1 * line_left.size)
|
||||||
while line_left[ending].ord.between?(128, 191) && ending > -1
|
while line_left[ending].ord.between?(128, 191) && ending > -1
|
||||||
ending -= 1
|
ending -= 1
|
||||||
end
|
end
|
||||||
|
end
|
||||||
unless starting == 0 && ending == -1
|
unless starting == 0 && ending == -1
|
||||||
[starting, ending]
|
[starting, ending]
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-日本
|
||||||
|
+日本語
|
||||||
|
bbbb
|
|
@ -0,0 +1,7 @@
|
||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-日本
|
||||||
|
+にっぽん日本
|
||||||
|
bbbb
|
|
@ -244,6 +244,70 @@ DIFF
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_offset_range_ascii_1
|
||||||
|
raw = <<-DIFF
|
||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-abc
|
||||||
|
+abcd
|
||||||
|
bbbb
|
||||||
|
DIFF
|
||||||
|
diff = Redmine::UnifiedDiff.new(raw, :type => 'sbs')
|
||||||
|
assert_equal 1, diff.size
|
||||||
|
assert_equal 3, diff.first.size
|
||||||
|
assert_equal "abc<span></span>", diff.first[1].html_line_left
|
||||||
|
assert_equal "abc<span>d</span>", diff.first[1].html_line_right
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_offset_range_ascii_2
|
||||||
|
raw = <<-DIFF
|
||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-abc
|
||||||
|
+zabc
|
||||||
|
bbbb
|
||||||
|
DIFF
|
||||||
|
diff = Redmine::UnifiedDiff.new(raw, :type => 'sbs')
|
||||||
|
assert_equal 1, diff.size
|
||||||
|
assert_equal 3, diff.first.size
|
||||||
|
assert_equal "<span></span>abc", diff.first[1].html_line_left
|
||||||
|
assert_equal "<span>z</span>abc", diff.first[1].html_line_right
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_offset_range_japanese_1
|
||||||
|
ja1 = "\xe6\x97\xa5\xe6\x9c\xac<span></span>"
|
||||||
|
ja1.force_encoding('UTF-8') if ja1.respond_to?(:force_encoding)
|
||||||
|
ja2 = "\xe6\x97\xa5\xe6\x9c\xac<span>\xe8\xaa\x9e</span>"
|
||||||
|
ja2.force_encoding('UTF-8') if ja2.respond_to?(:force_encoding)
|
||||||
|
with_settings :repositories_encodings => '' do
|
||||||
|
diff = Redmine::UnifiedDiff.new(
|
||||||
|
read_diff_fixture('issue-13644-1.diff'), :type => 'sbs')
|
||||||
|
assert_equal 1, diff.size
|
||||||
|
assert_equal 3, diff.first.size
|
||||||
|
assert_equal ja1, diff.first[1].html_line_left
|
||||||
|
assert_equal ja2, diff.first[1].html_line_right
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_offset_range_japanese_2
|
||||||
|
ja1 = "<span></span>\xe6\x97\xa5\xe6\x9c\xac"
|
||||||
|
ja1.force_encoding('UTF-8') if ja1.respond_to?(:force_encoding)
|
||||||
|
ja2 = "<span>\xe3\x81\xab\xe3\x81\xa3\xe3\x81\xbd\xe3\x82\x93</span>\xe6\x97\xa5\xe6\x9c\xac"
|
||||||
|
ja2.force_encoding('UTF-8') if ja2.respond_to?(:force_encoding)
|
||||||
|
with_settings :repositories_encodings => '' do
|
||||||
|
diff = Redmine::UnifiedDiff.new(
|
||||||
|
read_diff_fixture('issue-13644-2.diff'), :type => 'sbs')
|
||||||
|
assert_equal 1, diff.size
|
||||||
|
assert_equal 3, diff.first.size
|
||||||
|
assert_equal ja1, diff.first[1].html_line_left
|
||||||
|
assert_equal ja2, diff.first[1].html_line_right
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def read_diff_fixture(filename)
|
def read_diff_fixture(filename)
|
||||||
|
|
Loading…
Reference in New Issue