Sha256: 541eb76d89c72569d29e370a5e2ddb28637ce99bd50358e3e6f1e2ffc9f7b679

Contents?: true

Size: 1.83 KB

Versions: 41

Compression:

Stored size: 1.83 KB

Contents

# Exception extension that tweaks Exception backtraces:
#
# * The line of the failing .feature line is appended to the backtrace
# * The line that calls #cucumber_instance_exec is replaced with the StepDefinition's regexp
# * Non intersting lines are stripped out
#
# The result is that backtraces look like this:
#
#   features/step_definitions/the_step_definition.rb:in `/some step/'
#   features/the_feature_file.feature:41:in `Given some step'
#
# or if the exception is raised in the tested code:
#
#   lib/myapp/some_file.rb:in `/some_method/'
#   lib/myapp/some_other_file.rb:in `/some_other_method/'
#   features/step_definitions/the_step_definition.rb:in `/some step/'
#   features/the_feature_file.feature:41:in `Given some step'
#
# All backtrace munging can be turned off with the <tt>--backtrace</tt> switch
#
class Exception
  CUCUMBER_FILTER_PATTERNS = [
    /vendor\/rails|lib\/cucumber|lib\/rspec|gems\//
  ]

  INSTANCE_EXEC_OFFSET = (Cucumber::RUBY_1_9 || Cucumber::JRUBY) ? -3 : -4

  def self.cucumber_full_backtrace=(v)
    @@cucumber_full_backtrace = v
  end
  self.cucumber_full_backtrace = false

  # Strips the backtrace from +line+ and down
  def self.cucumber_strip_backtrace!(backtrace, instance_exec_invocation_line, pseudo_method)
    return if @@cucumber_full_backtrace

    instance_exec_pos = backtrace.index(instance_exec_invocation_line)
    if instance_exec_pos
      replacement_line = instance_exec_pos + INSTANCE_EXEC_OFFSET
      backtrace[replacement_line].gsub!(/`.*'/, "`#{pseudo_method}'") if pseudo_method
      backtrace[replacement_line+1..-1] = nil

      backtrace.compact!
    else
      # This happens with rails, because they screw up the backtrace
      # before we get here (injecting erb stacktrace and such)
    end

    backtrace.reject! do |line|
      CUCUMBER_FILTER_PATTERNS.detect{|p| line =~ p}
    end
  end
end

Version data entries

41 entries across 41 versions & 4 rubygems

Version Path
aslakhellesoy-cucumber-0.1.100.1 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.100.2 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.100.3 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.100.4 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.100.5 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.16.5 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.1 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.10 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.11 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.12 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.13 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.14 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.15 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.17 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.18 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.19 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.2 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.20 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.21 lib/cucumber/core_ext/exception.rb
aslakhellesoy-cucumber-0.1.99.22 lib/cucumber/core_ext/exception.rb