Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

163 lines (128 sloc) 5.283 kb
require File.dirname(__FILE__) + '/helper'
class BacktraceTest < Test::Unit::TestCase
should "parse a backtrace into lines" do
array = [
"app/models/user.rb:13:in `magic'",
"app/controllers/users_controller.rb:8:in `index'"
]
backtrace = Airbrake::Backtrace.parse(array)
line = backtrace.lines.first
assert_equal '13', line.number
assert_equal 'app/models/user.rb', line.file
assert_equal 'magic', line.method
line = backtrace.lines.last
assert_equal '8', line.number
assert_equal 'app/controllers/users_controller.rb', line.file
assert_equal 'index', line.method
end
should "parse a windows backtrace into lines" do
array = [
"C:/Program Files/Server/app/models/user.rb:13:in `magic'",
"C:/Program Files/Server/app/controllers/users_controller.rb:8:in `index'"
]
backtrace = Airbrake::Backtrace.parse(array)
line = backtrace.lines.first
assert_equal '13', line.number
assert_equal 'C:/Program Files/Server/app/models/user.rb', line.file
assert_equal 'magic', line.method
line = backtrace.lines.last
assert_equal '8', line.number
assert_equal 'C:/Program Files/Server/app/controllers/users_controller.rb', line.file
assert_equal 'index', line.method
end
should "be equal with equal lines" do
one = build_backtrace_array
two = one.dup
assert_equal Airbrake::Backtrace.parse(one), Airbrake::Backtrace.parse(two)
end
should "parse massive one-line exceptions into multiple lines" do
original_backtrace = Airbrake::Backtrace.
parse(["one:1:in `one'\n two:2:in `two'\n three:3:in `three`"])
expected_backtrace = Airbrake::Backtrace.
parse(["one:1:in `one'", "two:2:in `two'", "three:3:in `three`"])
assert_equal expected_backtrace, original_backtrace
end
context "with a project root" do
setup do
@project_root = '/some/path'
Airbrake.configure {|config| config.project_root = @project_root }
end
teardown do
reset_config
end
should "filter out the project root" do
backtrace_with_root = Airbrake::Backtrace.parse(
["#{@project_root}/app/models/user.rb:7:in `latest'",
"#{@project_root}/app/controllers/users_controller.rb:13:in `index'",
"/lib/something.rb:41:in `open'"],
:filters => default_filters)
backtrace_without_root = Airbrake::Backtrace.parse(
["[PROJECT_ROOT]/app/models/user.rb:7:in `latest'",
"[PROJECT_ROOT]/app/controllers/users_controller.rb:13:in `index'",
"/lib/something.rb:41:in `open'"])
assert_equal backtrace_without_root, backtrace_with_root
end
end
context "with a project root equals to a part of file name" do
setup do
# Heroku-like
@project_root = '/app'
Airbrake.configure {|config| config.project_root = @project_root }
end
teardown do
reset_config
end
should "filter out the project root" do
backtrace_with_root = Airbrake::Backtrace.parse(
["#{@project_root}/app/models/user.rb:7:in `latest'",
"#{@project_root}/app/controllers/users_controller.rb:13:in `index'",
"/lib/something.rb:41:in `open'"],
:filters => default_filters)
backtrace_without_root = Airbrake::Backtrace.parse(
["[PROJECT_ROOT]/app/models/user.rb:7:in `latest'",
"[PROJECT_ROOT]/app/controllers/users_controller.rb:13:in `index'",
"/lib/something.rb:41:in `open'"])
assert_equal backtrace_without_root, backtrace_with_root
end
end
context "with a blank project root" do
setup do
Airbrake.configure {|config| config.project_root = '' }
end
teardown do
reset_config
end
should "not filter line numbers with respect to any project root" do
backtrace = ["/app/models/user.rb:7:in `latest'",
"/app/controllers/users_controller.rb:13:in `index'",
"/lib/something.rb:41:in `open'"]
backtrace_with_root =
Airbrake::Backtrace.parse(backtrace, :filters => default_filters)
backtrace_without_root =
Airbrake::Backtrace.parse(backtrace)
assert_equal backtrace_without_root, backtrace_with_root
end
end
should "remove notifier trace" do
inside_notifier = ['lib/airbrake.rb:13:in `voodoo`']
outside_notifier = ['users_controller:8:in `index`']
without_inside = Airbrake::Backtrace.parse(outside_notifier)
with_inside = Airbrake::Backtrace.parse(inside_notifier + outside_notifier,
:filters => default_filters)
assert_equal without_inside, with_inside
end
should "run filters on the backtrace" do
filters = [lambda { |line| line.sub('foo', 'bar') }]
input = Airbrake::Backtrace.parse(["foo:13:in `one'", "baz:14:in `two'"],
:filters => filters)
expected = Airbrake::Backtrace.parse(["bar:13:in `one'", "baz:14:in `two'"])
assert_equal expected, input
end
def build_backtrace_array
["app/models/user.rb:13:in `magic'",
"app/controllers/users_controller.rb:8:in `index'"]
end
def default_filters
Airbrake::Configuration::DEFAULT_BACKTRACE_FILTERS
end
end
Jump to Line
Something went wrong with that request. Please try again.