| |   |
| 304 | 304 | # process --> identify_block --> process_block --> process_line |
| 305 | 305 | # |
| 306 | 306 | def process(line) |
| 307 | | return if ['++', '--'].include?(line[0,2]) |
| 308 | | |
| 307 | return if is_extra_header_line?(line) |
| 308 | |
| 309 | 309 | if match = LINE_NUM_RE.match(line) |
| 310 | 310 | identify_block |
| 311 | 311 | add_separator unless @offset_changed.zero? |
| … | … | |
| 316 | 316 | end |
| 317 | 317 | |
| 318 | 318 | new_line_type, line = LINE_TYPES[car(line)], cdr(line) |
| 319 | | |
| 319 | |
| 320 | 320 | # Add line to the buffer if it's the same diff line type |
| 321 | 321 | # as the previous line |
| 322 | 322 | # |
| … | … | |
| 355 | 355 | end |
| 356 | 356 | |
| 357 | 357 | protected |
| 358 | |
| 359 | def is_extra_header_line?(line) |
| 360 | return true if ['++', '--'].include?(line[0,2]) |
| 361 | return true if line =~ /^(new|delete) file mode [0-9]+$/ |
| 362 | return true if line =~ /^diff \-\-git/ |
| 363 | return true if line =~ /^index \w+\.\.\w+ [0-9]+$/ |
| 364 | false |
| 365 | end |
| 358 | 366 | |
| 359 | 367 | def identify_block |
| 360 | 368 | if @prev_line_type.eql?(LINE_TYPES['-']) and @line_type.eql?(LINE_TYPES['+']) |
| … | … | |
| 378 | 378 | |
| 379 | 379 | def process_block(diff_line_type, new = false, old = false) |
| 380 | 380 | push Block.send(diff_line_type) |
| 381 | | |
| 382 | 381 | # Mod block |
| 383 | | if diff_line_type.eql?(:mod) and @prev_buffer.size & @buffer.size == 1 |
| 382 | if diff_line_type.eql?(:mod) && @prev_buffer.size && @buffer.size == 1 |
| 384 | 383 | process_line(@prev_buffer.first, @buffer.first) |
| 385 | 384 | return |
| 386 | 385 | end |
| 387 | | |
| 388 | 386 | unroll_prev_buffer if old |
| 389 | 387 | unroll_buffer if new |
| 390 | 388 | end |
| toggle raw diff |
--- a/vendor/diff-display/lib/diff/display/unified.rb
+++ b/vendor/diff-display/lib/diff/display/unified.rb
@@ -304,8 +304,8 @@ module Diff #:nodoc:#
# process --> identify_block --> process_block --> process_line
#
def process(line)
- return if ['++', '--'].include?(line[0,2])
-
+ return if is_extra_header_line?(line)
+
if match = LINE_NUM_RE.match(line)
identify_block
add_separator unless @offset_changed.zero?
@@ -316,7 +316,7 @@ module Diff #:nodoc:#
end
new_line_type, line = LINE_TYPES[car(line)], cdr(line)
-
+
# Add line to the buffer if it's the same diff line type
# as the previous line
#
@@ -355,6 +355,14 @@ module Diff #:nodoc:#
end
protected
+
+ def is_extra_header_line?(line)
+ return true if ['++', '--'].include?(line[0,2])
+ return true if line =~ /^(new|delete) file mode [0-9]+$/
+ return true if line =~ /^diff \-\-git/
+ return true if line =~ /^index \w+\.\.\w+ [0-9]+$/
+ false
+ end
def identify_block
if @prev_line_type.eql?(LINE_TYPES['-']) and @line_type.eql?(LINE_TYPES['+'])
@@ -370,13 +378,11 @@ module Diff #:nodoc:#
def process_block(diff_line_type, new = false, old = false)
push Block.send(diff_line_type)
-
# Mod block
- if diff_line_type.eql?(:mod) and @prev_buffer.size & @buffer.size == 1
+ if diff_line_type.eql?(:mod) && @prev_buffer.size && @buffer.size == 1
process_line(@prev_buffer.first, @buffer.first)
return
end
-
unroll_prev_buffer if old
unroll_buffer if new
end |
| |   |
| 1 | require 'test/unit' |
| 2 | require 'yaml' |
| 3 | |
| 1 | 4 | $:.unshift(File.dirname(__FILE__) + '/../lib') |
| 2 | 5 | require 'diff/display/unified' |
| 3 | 6 | |
| 4 | 7 | module Kernel |
| 5 | 8 | def load_diffs(*diffs) |
| 6 | 9 | loaded_diffs = Hash.new({}) |
| 7 | | diff_path = 'diffs/' |
| 10 | diff_path = File.join(File.dirname(__FILE__), 'diffs') |
| 8 | 11 | diffs.each do |diff_name| |
| 9 | | diff = IO.readlines(diff_path + diff_name.id2name + '.diff') |
| 12 | diff = IO.readlines(File.join(diff_path, diff_name.id2name + '.diff')) |
| 10 | 13 | data = Diff::Display::Unified::Generator.run(diff) |
| 11 | 14 | loaded_diffs[diff_name] = {:diff => diff, :data => data} |
| 12 | 15 | end |
| … | … | |
| 17 | 17 | end |
| 18 | 18 | alias_method :load_diff, :load_diffs |
| 19 | 19 | |
| 20 | | def load_all_diffs(path = 'diffs') |
| 20 | def load_all_diffs(path = File.join(File.dirname(__FILE__), 'diffs')) |
| 21 | 21 | load_diffs *Dir.glob(path + '/*.diff').map {|d| File.basename(d, '.*').intern} |
| 22 | 22 | end |
| 23 | 23 | |
| toggle raw diff |
--- a/vendor/diff-display/test/abstract_unit.rb
+++ b/vendor/diff-display/test/abstract_unit.rb
@@ -1,12 +1,15 @@
+require 'test/unit'
+require 'yaml'
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
require 'diff/display/unified'
module Kernel
def load_diffs(*diffs)
loaded_diffs = Hash.new({})
- diff_path = 'diffs/'
+ diff_path = File.join(File.dirname(__FILE__), 'diffs')
diffs.each do |diff_name|
- diff = IO.readlines(diff_path + diff_name.id2name + '.diff')
+ diff = IO.readlines(File.join(diff_path, diff_name.id2name + '.diff'))
data = Diff::Display::Unified::Generator.run(diff)
loaded_diffs[diff_name] = {:diff => diff, :data => data}
end
@@ -14,7 +17,7 @@ module Kernel
end
alias_method :load_diff, :load_diffs
- def load_all_diffs(path = 'diffs')
+ def load_all_diffs(path = File.join(File.dirname(__FILE__), 'diffs'))
load_diffs *Dir.glob(path + '/*.diff').map {|d| File.basename(d, '.*').intern}
end
|
| |   |
| 1 | require File.dirname(__FILE__) + '/abstract_unit' |
| 2 | |
| 3 | class DisplayUnifiedTest < Test::Unit::TestCase |
| 4 | |
| 5 | def setup |
| 6 | @diffs = load_all_diffs |
| 7 | @diffs_with_inline_changes = load_diffs :inline_changes |
| 8 | end |
| 9 | |
| 10 | def test_parity_of_diffs_and_data_objects |
| 11 | @diffs.keys.each do |d| |
| 12 | assert_equal(@diffs[d][:data].normalize_diff_object, |
| 13 | @diffs[d][:diff].normalize_diff, |
| 14 | "Data object and diff file for #{d} don't match") |
| 15 | end |
| 16 | end |
| 17 | |
| 18 | def test_parity_of_inline_changes |
| 19 | @diffs_with_inline_changes.keys.each do |d| |
| 20 | assert_equal(@diffs[d][:data].data_inline_line_numbers, |
| 21 | @diffs[d][:diff].diff_inline_line_numbers, |
| 22 | "Inline change line numbers don't match up for #{d}") |
| 23 | end |
| 24 | end |
| 25 | |
| 26 | # def test_edgecase |
| 27 | # diff = load_diff(:edgecase1_diff)[:edgecase1_diff] |
| 28 | # assert_equal(diff[:data].normalize_diff_object, |
| 29 | # diff[:diff].normalize_diff, |
| 30 | # "Data object and diff file for #{diff} don't match") |
| 31 | # end |
| 32 | |
| 33 | end |
| toggle raw diff |
--- /dev/null
+++ b/vendor/diff-display/test/diff_display_unified_test.rb
@@ -0,0 +1,33 @@
+require File.dirname(__FILE__) + '/abstract_unit'
+
+class DisplayUnifiedTest < Test::Unit::TestCase
+
+ def setup
+ @diffs = load_all_diffs
+ @diffs_with_inline_changes = load_diffs :inline_changes
+ end
+
+ def test_parity_of_diffs_and_data_objects
+ @diffs.keys.each do |d|
+ assert_equal(@diffs[d][:data].normalize_diff_object,
+ @diffs[d][:diff].normalize_diff,
+ "Data object and diff file for #{d} don't match")
+ end
+ end
+
+ def test_parity_of_inline_changes
+ @diffs_with_inline_changes.keys.each do |d|
+ assert_equal(@diffs[d][:data].data_inline_line_numbers,
+ @diffs[d][:diff].diff_inline_line_numbers,
+ "Inline change line numbers don't match up for #{d}")
+ end
+ end
+
+ # def test_edgecase
+ # diff = load_diff(:edgecase1_diff)[:edgecase1_diff]
+ # assert_equal(diff[:data].normalize_diff_object,
+ # diff[:diff].normalize_diff,
+ # "Data object and diff file for #{diff} don't match")
+ # end
+
+end |
| |   |
| 1 | require File.dirname(__FILE__) + '/abstract_unit' |
| 2 | |
| 3 | class ParityBetweenDiffAndDataTest < Test::Unit::TestCase |
| 4 | |
| 5 | def setup |
| 6 | @diffs = load_all_diffs |
| 7 | @diffs_with_inline_changes = load_diffs :inline_changes |
| 8 | end |
| 9 | |
| 10 | def test_parity_of_diffs_and_data_objects |
| 11 | @diffs.keys.each do |d| |
| 12 | assert_equal(@diffs[d][:data].normalize_diff_object, |
| 13 | @diffs[d][:diff].normalize_diff, |
| 14 | "Data object and diff file for #{d} don't match") |
| 15 | end |
| 16 | end |
| 17 | |
| 18 | def test_parity_of_inline_changes |
| 19 | @diffs_with_inline_changes.keys.each do |d| |
| 20 | assert_equal(@diffs[d][:data].data_inline_line_numbers, |
| 21 | @diffs[d][:diff].diff_inline_line_numbers, |
| 22 | "Inline change line numbers don't match up for #{d}") |
| 23 | end |
| 24 | end |
| 25 | |
| 26 | end |
| toggle raw diff |
--- /dev/null
+++ b/vendor/diff-display/test/parity_between_diff_and_data_test.rb
@@ -0,0 +1,26 @@
+require File.dirname(__FILE__) + '/abstract_unit'
+
+class ParityBetweenDiffAndDataTest < Test::Unit::TestCase
+
+ def setup
+ @diffs = load_all_diffs
+ @diffs_with_inline_changes = load_diffs :inline_changes
+ end
+
+ def test_parity_of_diffs_and_data_objects
+ @diffs.keys.each do |d|
+ assert_equal(@diffs[d][:data].normalize_diff_object,
+ @diffs[d][:diff].normalize_diff,
+ "Data object and diff file for #{d} don't match")
+ end
+ end
+
+ def test_parity_of_inline_changes
+ @diffs_with_inline_changes.keys.each do |d|
+ assert_equal(@diffs[d][:data].data_inline_line_numbers,
+ @diffs[d][:diff].diff_inline_line_numbers,
+ "Inline change line numbers don't match up for #{d}")
+ end
+ end
+
+end |
| |   |
| 0 | | require 'abstract_unit' |
| 1 | | require 'test/unit' |
| 2 | | require 'yaml' |
| 3 | | |
| 4 | | class TestDiffDisplay < Test::Unit::TestCase |
| 5 | | |
| 6 | | def setup |
| 7 | | @diffs = load_all_diffs |
| 8 | | @diffs_with_inline_changes = load_diffs :inline_changes |
| 9 | | end |
| 10 | | |
| 11 | | def test_parity_of_diffs_and_data_objects |
| 12 | | @diffs.keys.each do |d| |
| 13 | | assert_equal(@diffs[d][:data].normalize_diff_object, |
| 14 | | @diffs[d][:diff].normalize_diff, |
| 15 | | "Data object and diff file for #{d} don't match") |
| 16 | | end |
| 17 | | end |
| 18 | | |
| 19 | | def test_parity_of_inline_changes |
| 20 | | @diffs_with_inline_changes.keys.each do |d| |
| 21 | | assert_equal(@diffs[d][:data].data_inline_line_numbers, |
| 22 | | @diffs[d][:diff].diff_inline_line_numbers, |
| 23 | | "Inline change line numbers don't match up for #{d}") |
| 24 | | end |
| 25 | | end |
| 26 | | |
| 27 | | end |
| toggle raw diff |
--- a/vendor/diff-display/test/tc_diff_display_unified.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'abstract_unit'
-require 'test/unit'
-require 'yaml'
-
-class TestDiffDisplay < Test::Unit::TestCase
-
- def setup
- @diffs = load_all_diffs
- @diffs_with_inline_changes = load_diffs :inline_changes
- end
-
- def test_parity_of_diffs_and_data_objects
- @diffs.keys.each do |d|
- assert_equal(@diffs[d][:data].normalize_diff_object,
- @diffs[d][:diff].normalize_diff,
- "Data object and diff file for #{d} don't match")
- end
- end
-
- def test_parity_of_inline_changes
- @diffs_with_inline_changes.keys.each do |d|
- assert_equal(@diffs[d][:data].data_inline_line_numbers,
- @diffs[d][:diff].diff_inline_line_numbers,
- "Inline change line numbers don't match up for #{d}")
- end
- end
-
-end |
| |   |
| 0 | | require 'abstract_unit' |
| 1 | | require 'test/unit' |
| 2 | | require 'yaml' |
| 3 | | |
| 4 | | class TestDiffDisplay < Test::Unit::TestCase |
| 5 | | |
| 6 | | def setup |
| 7 | | @diffs = load_all_diffs |
| 8 | | @diffs_with_inline_changes = load_diffs :inline_changes |
| 9 | | end |
| 10 | | |
| 11 | | def test_parity_of_diffs_and_data_objects |
| 12 | | @diffs.keys.each do |d| |
| 13 | | assert_equal(@diffs[d][:data].normalize_diff_object, |
| 14 | | @diffs[d][:diff].normalize_diff, |
| 15 | | "Data object and diff file for #{d} don't match") |
| 16 | | end |
| 17 | | end |
| 18 | | |
| 19 | | def test_parity_of_inline_changes |
| 20 | | @diffs_with_inline_changes.keys.each do |d| |
| 21 | | assert_equal(@diffs[d][:data].data_inline_line_numbers, |
| 22 | | @diffs[d][:diff].diff_inline_line_numbers, |
| 23 | | "Inline change line numbers don't match up for #{d}") |
| 24 | | end |
| 25 | | end |
| 26 | | |
| 27 | | end |
| toggle raw diff |
--- a/vendor/diff-display/test/tc_parity_between_diff_and_data.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'abstract_unit'
-require 'test/unit'
-require 'yaml'
-
-class TestDiffDisplay < Test::Unit::TestCase
-
- def setup
- @diffs = load_all_diffs
- @diffs_with_inline_changes = load_diffs :inline_changes
- end
-
- def test_parity_of_diffs_and_data_objects
- @diffs.keys.each do |d|
- assert_equal(@diffs[d][:data].normalize_diff_object,
- @diffs[d][:diff].normalize_diff,
- "Data object and diff file for #{d} don't match")
- end
- end
-
- def test_parity_of_inline_changes
- @diffs_with_inline_changes.keys.each do |d|
- assert_equal(@diffs[d][:data].data_inline_line_numbers,
- @diffs[d][:diff].diff_inline_line_numbers,
- "Inline change line numbers don't match up for #{d}")
- end
- end
-
-end |