Class: RSpec::Expectations::Differ
- Inherits:
-
Object
- Object
- RSpec::Expectations::Differ
- Defined in:
- lib/rspec/expectations/differ.rb
Instance Method Summary collapse
- #diff_as_object(actual, expected) ⇒ Object
-
#diff_as_string(data_new, data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool).
Instance Method Details
#diff_as_object(actual, expected) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rspec/expectations/differ.rb', line 42 def diff_as_object(actual, expected) actual_as_string = object_to_string(actual) expected_as_string = object_to_string(expected) diff = diff_as_string(actual_as_string, expected_as_string) if diff.empty? "#{actual}.==(#{expected}) returned false even though the diff " \ "between #{actual} and #{expected} is empty. Check the " \ "implementation of #{actual}.==." else color_diff diff end end |
#diff_as_string(data_new, data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/rspec/expectations/differ.rb', line 9 def diff_as_string(data_new, data_old) data_old = data_old.split(/\n/).map! { |e| e.chomp } data_new = data_new.split(/\n/).map! { |e| e.chomp } diffs = Diff::LCS.diff(data_old, data_new) output = "" return output if diffs.empty? oldhunk = hunk = nil file_length_difference = 0 diffs.each do |piece| begin hunk = Diff::LCS::Hunk.new( data_old, data_new, piece, context_lines, file_length_difference ) file_length_difference = hunk.file_length_difference next unless oldhunk # Hunks may overlap, which is why we need to be careful when our # diff includes lines of context. Otherwise, we might print # redundant lines. if (context_lines > 0) and hunk.overlaps?(oldhunk) hunk.unshift(oldhunk) else output << oldhunk.diff(format) end ensure oldhunk = hunk output << "\n" end end #Handle the last remaining hunk output << oldhunk.diff(format) << "\n" color_diff output end |