Class: Spec::Expectations::Differs::Default
- Defined in:
- lib/spec/runner/differs/default.rb
Instance Method Summary collapse
- #diff_as_hash(target, expected) ⇒ Object
- #diff_as_object(target, expected) ⇒ Object
-
#diff_as_string(data_new, data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool).
-
#initialize(options) ⇒ Default
constructor
A new instance of Default.
Constructor Details
#initialize(options) ⇒ Default
Returns a new instance of Default.
9 10 11 |
# File 'lib/spec/runner/differs/default.rb', line 9 def initialize() @options = end |
Instance Method Details
#diff_as_hash(target, expected) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/spec/runner/differs/default.rb', line 49 def diff_as_hash(target, expected) contains_hash = false contains_array = false extra_expected_keys = expected.keys - target.keys extra_target_keys = target.keys - expected.keys o = "\n" o << "Expected hash contains keys that target hash does not: " << extra_expected_keys.inspect << "\n" if !extra_expected_keys.empty? o << "Target hash contains keys that expected hash does not: " << extra_target_keys.inspect << "\n" if !extra_target_keys.empty? expected.delete_if do |key, value| contains_hash = true if value.is_a?(Hash) contains_array = true if value.is_a?(Array) target[key] == value end expected.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key| o << "Expected the key #{key.inspect} to be #{expected[key].inspect}, but was #{target[key].inspect}\n" end o << "\n" if contains_hash || contains_array o << diff_as_object(target, expected) else o end end |
#diff_as_object(target, expected) ⇒ Object
45 46 47 |
# File 'lib/spec/runner/differs/default.rb', line 45 def diff_as_object(target,expected) diff_as_string(PP.pp(target,""), PP.pp(expected,"")) end |
#diff_as_string(data_new, data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
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 41 42 43 |
# File 'lib/spec/runner/differs/default.rb', line 14 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 } output = "" diffs = Diff::LCS.diff(data_old, data_new) 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" end |