| module Spec |
| module Runner |
| class BacktraceTweaker |
| |
| # Substitutes double slashes. |
| def clean_up_double_slashes(line) |
| line.gsub!('//','/') |
| end |
| end |
| |
| # Noisy backtracer cleans up all lines in backtrace |
| class NoisyBacktraceTweaker < BacktraceTweaker |
| def tweak_backtrace(error, spec_name) |
| return if error.backtrace.nil? |
| error.backtrace.each do |line| |
| clean_up_double_slashes(line) |
| end |
| end |
| end |
| |
| # Tweaks raised Exceptions to mask noisy (unneeded) parts of the backtrace |
| class QuietBacktraceTweaker < BacktraceTweaker |
| unless defined?(IGNORE_PATTERNS) |
| root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..')) |
| spec_files = Dir["#{root_dir}/lib/spec/*"].map do |path| |
| subpath = path[root_dir.length..-1] |
| /#{subpath}/ |
| end |
| IGNORE_PATTERNS = spec_files + [ |
| /\/lib\/ruby\//, |
| /bin\/spec:/, |
| /bin\/rcov:/, |
| /lib\/rspec_on_rails/, |
| /vendor\/rails/, |
| # TextMate's Ruby and RSpec plugins |
| /Ruby\.tmbundle\/Support\/tmruby.rb:/, |
| /RSpec\.tmbundle\/Support\/lib/, |
| /temp_textmate\./ |
| ] |
| end |
| |
| # Tweaks backtrace output by removing all lines that match ignored patters |
| def tweak_backtrace(error, spec_name) |
| return if error.backtrace.nil? |
| error.backtrace.collect! do |line| |
| clean_up_double_slashes(line) |
| IGNORE_PATTERNS.each do |ignore| |
| if line =~ ignore |
| line = nil |
| break |
| end |
| end |
| line |
| end |
| error.backtrace.compact! |
| end |
| end |
| end |
| end |