mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Append link to bad code to backtrace when exception is SyntaxError
This commit is contained in:
parent
9ed0cf51b4
commit
6af07c27ae
3 changed files with 47 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
* Append link to bad code to backtrace when exception is SyntaxError.
|
||||
|
||||
*Boris Kuznetsov*
|
||||
|
||||
* Swapped the parameters of assert_equal in `assert_select` so that the
|
||||
proper values were printed correctly
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@ module ActionDispatch
|
|||
def initialize(env, exception)
|
||||
@env = env
|
||||
@exception = original_exception(exception)
|
||||
|
||||
expand_backtrace if exception.is_a?(SyntaxError) || exception.try(:original_exception).try(:is_a?, SyntaxError)
|
||||
end
|
||||
|
||||
def rescue_template
|
||||
|
@ -104,5 +106,11 @@ module ActionDispatch
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
def expand_backtrace
|
||||
@exception.backtrace.unshift(
|
||||
@exception.to_s.split("\n")
|
||||
).flatten!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -43,6 +43,19 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
|
|||
raise ActionController::UrlGenerationError, "No route matches"
|
||||
when "/parameter_missing"
|
||||
raise ActionController::ParameterMissing, :missing_param_key
|
||||
when "/original_syntax_error"
|
||||
eval 'broke_syntax =' # `eval` need for raise native SyntaxError at runtime
|
||||
when "/syntax_error_into_view"
|
||||
begin
|
||||
eval 'broke_syntax ='
|
||||
rescue Exception => e
|
||||
template = ActionView::Template.new(File.read(__FILE__),
|
||||
__FILE__,
|
||||
ActionView::Template::Handlers::Raw.new,
|
||||
{})
|
||||
raise ActionView::Template::Error.new(template, e)
|
||||
end
|
||||
|
||||
else
|
||||
raise "puke!"
|
||||
end
|
||||
|
@ -242,4 +255,26 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
|
|||
get "/", {}, env
|
||||
assert_operator((output.rewind && output.read).lines.count, :>, 10)
|
||||
end
|
||||
|
||||
test 'display backtrace when error type is SyntaxError' do
|
||||
@app = DevelopmentApp
|
||||
|
||||
get '/original_syntax_error', {}, {'action_dispatch.backtrace_cleaner' => ActiveSupport::BacktraceCleaner.new}
|
||||
|
||||
assert_response 500
|
||||
assert_select '#Application-Trace' do
|
||||
assert_select 'pre code', /\(eval\):1: syntax error, unexpected/
|
||||
end
|
||||
end
|
||||
|
||||
test 'display backtrace when error type is SyntaxError wrapped by ActionView::Template::Error' do
|
||||
@app = DevelopmentApp
|
||||
|
||||
get '/syntax_error_into_view', {}, {'action_dispatch.backtrace_cleaner' => ActiveSupport::BacktraceCleaner.new}
|
||||
|
||||
assert_response 500
|
||||
assert_select '#Application-Trace' do
|
||||
assert_select 'pre code', /\(eval\):1: syntax error, unexpected/
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue