class TarkaMatchers::Formatters::Difference

Public Class Methods

difference(expected, actual) click to toggle source
# File lib/tarka_matchers/formatters/difference.rb, line 7
def self.difference expected, actual
        expected = expected.to_s
        actual = actual.to_s
        expected_line = "#{GREEN_F}Expected: #{BLACK_ON_GREEN}#{expected}#{RESET}"
        expected_length = expected.length
        actual_length = actual.length
        actual_line = "\n#{RESET}#{RED_F}  Actual: "

        longest = [expected,actual].sort_by(&:length).last 
        longest_length = longest.length
        expected = expected.split('')
        actual = actual.split('')
        correct = 0

        longest_length.times do |i|
                e = expected[i]
                a = actual[i]

                if expected_length <= i
                        expected_line << "#{WHITE_BLOCK}"
                        actual_line << "#{WHITE_ON_RED}#{a}"
                elsif actual_length <= i
                        actual_line << "#{RED_BLOCK}"
                elsif e != a
                        actual_line << "#{WHITE_ON_RED}#{a}"
                elsif e == a
                        correct += 1
                        actual_line << "#{BLACK_ON_GREEN}#{a}"
                end
        end
        identical = ((correct.to_f/longest_length) * 100).round 3
        "\n\n#{expected_line}#{actual_line}#{RESET}#{RED_F} - #{identical}% identical#{RESET}" 
end