Class: Spec::ShouldBase

Inherits:
Object show all
Defined in:
lib/spec/api/helper/diff.rb,
lib/spec/api/helper/should_base.rb

Direct Known Subclasses

HaveHelper, ShouldHelper, ShouldNegator

Instance Method Summary collapse

Instance Method Details

#default_message(expectation, expected = :no_expectation_specified) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/spec/api/helper/diff.rb', line 13

def default_message(expectation, expected=:no_expectation_specified)
  result = old_default_message(expectation, expected)
  if expected.is_a?(String)
    result << "\nDiff:" << diff_as_string(@target.to_s, expected)
  end
  result
end

#diff_as_string(data_old, data_new, format = :unified, context_lines = 3) ⇒ Object

This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/spec/api/helper/diff.rb', line 23

def diff_as_string(data_old, data_new, format=:unified, context_lines=3)
  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

#fail_with_message(message) ⇒ Object



26
27
28
# File 'lib/spec/api/helper/should_base.rb', line 26

def fail_with_message(message)
  Kernel::raise(Spec::Api::ExpectationNotMetError.new(message))
end

#old_default_messageObject



12
# File 'lib/spec/api/helper/diff.rb', line 12

alias old_default_message default_message