Sha256: 5beecfbf3a6352a1bf58e07629a7df26298d71db959f8e6bf74c39d94135a196

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

require 'ripper'
require 'ruby2ruby'

module SourceAssertions
  def assert_source_equal(expected, actual)

    expected_sexp = if expected.instance_of? String then
                      Ripper::sexp expected
                    else
                      expected
                    end
    actual_sexp = if actual.instance_of? String then
                    Ripper::sexp actual
                  else
                    actual
                  end

    message = "
    Expected: #{expected}
    but got:  #{actual}"
    assert_sexp_with_ident(expected_sexp, actual_sexp, message)
    assert_equal(1, 1) #just getting the correct assertion count
  end

  def is_terminal(sexp)
    sexp == :@ident || sexp == :@int || sexp == :@ivar || :@tstring_content
  end

  def assert_sexp_with_ident(expected, actual, message)
    if is_terminal expected[0]
      if expected[-1].instance_of? Array
        if actual[-1].instance_of? Array
          if actual[-1].length == 2
            if expected[-1].length == 2
              return assert_sexp_with_ident(expected[1..-2], actual[1..-2], message)
            end
          end
        end
      end
    end

    expected.each_index do |i|
      if expected[i].instance_of? Array
        if actual[i].instance_of? Array
          assert_sexp_with_ident(expected[i], actual[i], message)
        else
          refute(true, message || "the arrays differ at index #{i}. Actual was an element but an array was expected")
        end
      else
        if expected[i] != actual[i]
          assert_equal(expected[i], actual[i], message || "the arrays differ at index #{i}")
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
maroon-0.8.0 Test/assertions.rb
maroon-0.7.1 Test/assertions.rb
maroon-0.7.0 Test/assertions.rb