Commit b96993964a4855795abafa38ffc172aa6d7394c6

- fixed edgecase bug in diff-display
- made diff-display tests more as I like them

Commit diff

vendor/diff-display/Rakefile

 
1require 'rake'
2require 'rake/testtask'
3require 'rake/rdoctask'
4
5desc 'Default: run unit tests.'
6task :default => :test
7
8desc 'Test the resource_paths plugin.'
9Rake::TestTask.new(:test) do |t|
10 t.libs << 'lib'
11 t.pattern = 'test/**/*_test.rb'
12 t.verbose = true
13end
toggle raw diff

vendor/diff-display/lib/diff/display/unified.rb

 
304304 # process --> identify_block --> process_block --> process_line
305305 #
306306 def process(line)
307 return if ['++', '--'].include?(line[0,2])
308
307 return if is_extra_header_line?(line)
308
309309 if match = LINE_NUM_RE.match(line)
310310 identify_block
311311 add_separator unless @offset_changed.zero?
316316 end
317317
318318 new_line_type, line = LINE_TYPES[car(line)], cdr(line)
319
319
320320 # Add line to the buffer if it's the same diff line type
321321 # as the previous line
322322 #
355355 end
356356
357357 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
358366
359367 def identify_block
360368 if @prev_line_type.eql?(LINE_TYPES['-']) and @line_type.eql?(LINE_TYPES['+'])
378378
379379 def process_block(diff_line_type, new = false, old = false)
380380 push Block.send(diff_line_type)
381
382381 # 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
384383 process_line(@prev_buffer.first, @buffer.first)
385384 return
386385 end
387
388386 unroll_prev_buffer if old
389387 unroll_buffer if new
390388 end
toggle raw diff

vendor/diff-display/test/abstract_unit.rb

 
1require 'test/unit'
2require 'yaml'
3
14$:.unshift(File.dirname(__FILE__) + '/../lib')
25require 'diff/display/unified'
36
47module Kernel
58 def load_diffs(*diffs)
69 loaded_diffs = Hash.new({})
7 diff_path = 'diffs/'
10 diff_path = File.join(File.dirname(__FILE__), 'diffs')
811 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'))
1013 data = Diff::Display::Unified::Generator.run(diff)
1114 loaded_diffs[diff_name] = {:diff => diff, :data => data}
1215 end
1717 end
1818 alias_method :load_diff, :load_diffs
1919
20 def load_all_diffs(path = 'diffs')
20 def load_all_diffs(path = File.join(File.dirname(__FILE__), 'diffs'))
2121 load_diffs *Dir.glob(path + '/*.diff').map {|d| File.basename(d, '.*').intern}
2222 end
2323
toggle raw diff

vendor/diff-display/test/diff_display_unified_test.rb

 
1require File.dirname(__FILE__) + '/abstract_unit'
2
3class 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
33end
toggle raw diff

vendor/diff-display/test/diffs/edgecase1_diff.diff

 
1--- a/one.txt
2+++ b/one.txt
3@@ -193,7 +193,21 @@ module One
4 pre yada yada
5-
6+
7+ foo
8+ bar
9+ baz
10+
11 post yada yada
toggle raw diff

vendor/diff-display/test/parity_between_diff_and_data_test.rb

 
1require File.dirname(__FILE__) + '/abstract_unit'
2
3class 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
26end
toggle raw diff

vendor/diff-display/test/tc_diff_display_unified.rb

 
0require 'abstract_unit'
1require 'test/unit'
2require 'yaml'
3
4class 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
27end
toggle raw diff

vendor/diff-display/test/tc_parity_between_diff_and_data.rb

 
0require 'abstract_unit'
1require 'test/unit'
2require 'yaml'
3
4class 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
27end
toggle raw diff