Sha256: 128ac616b7c10a479307e78a39e83ecf9ec4d95ec250a11bcafa1af998ccbabd

Contents?: true

Size: 1.73 KB

Versions: 46

Compression:

Stored size: 1.73 KB

Contents

require 'diff/lcs'
require 'diff/lcs/hunk'
require 'pp'

module RSpec
  module Expectations
    class Differ
      def initialize(ignore=nil)
      end

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

      def diff_as_object(actual,expected)
        actual = String === actual ? actual : PP.pp(actual,"")
        expected = String === expected ? expected : PP.pp(expected,"")
        diff_as_string(actual, expected)
      end

    protected

      def format
        :unified
      end

      def context_lines
        3
      end
    end

  end
end

Version data entries

46 entries across 46 versions & 6 rubygems

Version Path
horseman-0.0.4 vendor/ruby/1.9.1/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
horseman-0.0.3 vendor/ruby/1.9.1/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
horseman-0.0.2 vendor/ruby/1.9.1/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
nutshell-crm-0.0.6.alpha vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
rspec-expectations-2.8.0.rc2 lib/rspec/expectations/differ.rb
nutshell-crm-0.0.5 vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
nutshell-crm-0.0.4 vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
nutshell-crm-0.0.3 vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
nutshell-crm-0.0.2 vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
nutshell-crm-0.0.1 vendor/bundle/gems/rspec-expectations-2.7.0/lib/rspec/expectations/differ.rb
rspec-expectations-2.8.0.rc1 lib/rspec/expectations/differ.rb
rspec-expectations-2.7.0 lib/rspec/expectations/differ.rb
rspec-expectations-2.7.0.rc1 lib/rspec/expectations/differ.rb
messagebus_ruby_api-0.4.7 spec/ruby/1.9.1/gems/rspec-expectations-2.5.0/lib/rspec/expectations/differ.rb
messagebus_ruby_api-0.4.4 spec/ruby/1.9.1/gems/rspec-expectations-2.5.0/lib/rspec/expectations/differ.rb
rspec-expectations-2.6.0 lib/rspec/expectations/differ.rb
rspec-expectations-2.6.0.rc6 lib/rspec/expectations/differ.rb
rspec-expectations-2.6.0.rc4 lib/rspec/expectations/differ.rb
rspec-expectations-2.6.0.rc2 lib/rspec/expectations/differ.rb
rspec-expectations-2.5.0 lib/rspec/expectations/differ.rb