Sha256: 1efb87917bdd3909919acf12d1cd3c63de2312f03807024186c9782dd038d0f0

Contents?: true

Size: 1.75 KB

Versions: 5

Compression:

Stored size: 1.75 KB

Contents

begin
  require 'rubygems'
  require 'diff/lcs/hunk'
rescue LoadError
  raise "You must gem install diff-lcs to use this feature"
end

module Spec
  class ShouldBase
    unless defined?(RSPEC_TESTING)
      alias old_default_message default_message
      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
    end

    # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
    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  
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rspec-0.5.12 lib/spec/api/helper/diff.rb
rspec-0.5.14 lib/spec/api/helper/diff.rb
rspec-0.5.16 lib/spec/api/helper/diff.rb
rspec-0.5.15 lib/spec/api/helper/diff.rb
rspec-0.5.13 lib/spec/api/helper/diff.rb