提交 bf1716bc 编写于 作者: A Andrew White

Merge pull request #18769 from gsamokovarov/exception-wrapper-windows-paths

Show proper traces on Windows for the error pages
......@@ -87,8 +87,7 @@ def self.status_code_for_exception(class_name)
def source_extracts
backtrace.map do |trace|
file, line = trace.split(":")
line_number = line.to_i
file, line_number = extract_file_and_line_number(trace)
{
code: source_fragment(file, line_number),
......@@ -139,6 +138,13 @@ def source_fragment(path, line)
end
end
def extract_file_and_line_number(trace)
# Split by the first colon followed by some digits, which works for both
# Windows and Unix path styles.
file, line = trace.match(/^(.+?):(\d+).*$/, &:captures) || trace
[file, line.to_i]
end
def expand_backtrace
@exception.backtrace.unshift(
@exception.to_s.split("\n")
......
......@@ -34,6 +34,23 @@ def backtrace
assert_equal [ code: 'foo', line_number: 42 ], wrapper.source_extracts
end
test '#source_extracts works with Windows paths' do
exc = TestError.new("c:/path/to/rails/app/controller.rb:27:in 'index':")
wrapper = ExceptionWrapper.new({}, exc)
wrapper.expects(:source_fragment).with('c:/path/to/rails/app/controller.rb', 27).returns('nothing')
assert_equal [ code: 'nothing', line_number: 27 ], wrapper.source_extracts
end
test '#source_extracts works with non standard backtrace' do
exc = TestError.new('invalid')
wrapper = ExceptionWrapper.new({}, exc)
wrapper.expects(:source_fragment).with('invalid', 0).returns('nothing')
assert_equal [ code: 'nothing', line_number: 0 ], wrapper.source_extracts
end
test '#application_trace returns traces only from the application' do
exception = TestError.new(caller.prepend("lib/file.rb:42:in `index'"))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册