diff --git a/railties/lib/rails/backtrace_cleaner.rb b/railties/lib/rails/backtrace_cleaner.rb index ffc5ef42aa84f..88df0ebbda6a4 100644 --- a/railties/lib/rails/backtrace_cleaner.rb +++ b/railties/lib/rails/backtrace_cleaner.rb @@ -1,14 +1,13 @@ module Rails class BacktraceCleaner < ActiveSupport::BacktraceCleaner ERB_METHOD_SIG = /:in `_run_erb_.*/ - + VENDOR_DIRS = %w( vendor/plugins vendor/gems vendor/rails ) MONGREL_DIRS = %w( lib/mongrel bin/mongrel ) RAILS_NOISE = %w( script/server ) RUBY_NOISE = %w( rubygems/custom_require benchmark.rb ) ALL_NOISE = VENDOR_DIRS + MONGREL_DIRS + RAILS_NOISE + RUBY_NOISE - def initialize super @@ -18,15 +17,14 @@ def initialize end end - # For installing the BacktraceCleaner in the test/unit module BacktraceFilterForTestUnit #:nodoc: def self.included(klass) klass.send :alias_method_chain, :filter_backtrace, :cleaning end - - def filter_backtrace_with_cleaning(backtrace) - backtrace = filter_backtrace_without_cleaning(backtrace) + + def filter_backtrace_with_cleaning(backtrace, prefix=nil) + backtrace = filter_backtrace_without_cleaning(backtrace, prefix) backtrace = backtrace.first.split("\n") if backtrace.size == 1 Rails.backtrace_cleaner.clean(backtrace) end diff --git a/railties/test/abstract_unit.rb b/railties/test/abstract_unit.rb index 516ab8523e38d..b6edc033911c5 100644 --- a/railties/test/abstract_unit.rb +++ b/railties/test/abstract_unit.rb @@ -9,6 +9,7 @@ require 'mocha' require 'stringio' require 'active_support' +require 'active_support/test_case' def uses_mocha(test_name) yield @@ -18,4 +19,4 @@ def uses_mocha(test_name) RAILS_ROOT.replace File.dirname(__FILE__) else RAILS_ROOT = File.dirname(__FILE__) -end +end \ No newline at end of file diff --git a/railties/test/backtrace_cleaner_test.rb b/railties/test/backtrace_cleaner_test.rb new file mode 100644 index 0000000000000..5955fd2856236 --- /dev/null +++ b/railties/test/backtrace_cleaner_test.rb @@ -0,0 +1,28 @@ +require 'abstract_unit' + +require 'initializer' +require 'rails/backtrace_cleaner' + +class TestWithBacktrace + include Test::Unit::Util::BacktraceFilter + include Rails::BacktraceFilterForTestUnit +end + +class BacktraceCleanerFilterTest < ActiveSupport::TestCase + def setup + @test = TestWithBacktrace.new + @backtrace = [ './test/rails/benchmark_test.rb', './test/rails/dependencies.rb', '/opt/local/lib/ruby/kernel.rb' ] + end + + test "test with backtrace should use the rails backtrace cleaner to clean" do + Rails.stubs(:backtrace_cleaner).returns(stub(:clean)) + Rails.backtrace_cleaner.expects(:clean).with(@backtrace, nil) + @test.filter_backtrace(@backtrace) + end + + test "filter backtrace should have the same arity as Test::Unit::Util::BacktraceFilter" do + assert_nothing_raised do + @test.filter_backtrace(@backtrace, '/opt/local/lib') + end + end +end \ No newline at end of file