-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix error backtrace formatting on Ruby 3.4+ #1771
base: main
Are you sure you want to change the base?
Conversation
# This cop supports unsafe autocorrection (--autocorrect-all). | ||
# Configuration parameters: EnforcedStyle, AllowModifiersOnSymbols. | ||
# SupportedStyles: inline, group | ||
Style/AccessModifierDeclarations: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The CI build was failing on several violations of this cop (unrelated to the code changes proposed in this pull request).
Mark the violations as TODO, so the CI build can pass.
@io.print options.inspect | ||
@io.print options.to_json |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In Ruby 3.4 the Hash#inspect
method produces a different format:
Ruby 3.4:
irb:001> { a: 1 }.inspect
=> "{a: 1}"
irb:002> { 'a' => 1 }.inspect
=> "{\"a\" => 1}"
irb:003> { 2 => 1 }.inspect
=> "{2 => 1}"
Ruby 3.3
irb:001> { a: 1 }.inspect
=> "{:a=>1}"
irb:002> { 'a' => 1 }.inspect
=> "{\"a\"=>1}"
irb:003> { 2 => 1 }.inspect
=> "{2=>1}"
Let's change the test to use to_json
instead of inspect
. This way the test expectations will be consistent across all versions of Ruby in the CI build matrix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good find. I know this is the issue mainly in the main branch with regards to errors, nice that to_json gives us a quick fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm unresolving this so we know to look here for documentation purposes as/when a v10 is cut.
For now as part of this PR can you add some notes here: https://github.com/cucumber/cucumber-ruby/blob/main/upgrading_notes/10.0.0.md - if you are confident in doing so. Or if you'd prefer I can do it once this PR is merged. I'm flexible.
Accomodate the new Ruby 3.4+ backtrace display format
79026d3
to
7559a86
Compare
7559a86
to
92684f6
Compare
Trying these fixes to make this cucumber-wire test pass. Unfortunately without success. Is it something what could be fixed on Cucumber side? Or does the cucumber-wire need medicine like this: diff --git a/features/handle_unexpected_response.feature b/features/handle_unexpected_response.feature
index 2d7747e..4e0aa8c 100644
--- a/features/handle_unexpected_response.feature
+++ b/features/handle_unexpected_response.feature
@@ -25,7 +27,7 @@ Feature: Handle unexpected response
| ["begin_scenario"] | ["yikes"] |
| ["step_matches",{"name_to_match":"we're all wired"}] | ["success",[{"id":"1", "args":[]}]] |
When I run `cucumber -f pretty`
- Then the output should contain:
+ Then the output should match:
"""
- undefined method `handle_yikes'
+ undefined method [`']handle_yikes'
""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Partially reviewed, probably won't have time this week. But this is near the top of my list.
Great work finding a good replacement!
@@ -72,8 +72,9 @@ module Glue | |||
end | |||
end | |||
|
|||
it 'attached the styring version on the object' do | |||
expect(@out.string).to include '{:a=>1, :b=>2, :c=>3}' | |||
it 'attached the string version on the object' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This feels either a bug that hasn't been remedied proper or this cuke isn't ever used
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've updated the test in 117688f to more accurately match the test description. Is that preferable?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry I never scrolled up. I can see this is in a heredoc which is why there was no utilised location edited. I'll re-review this when I get time.
@@ -87,16 +92,15 @@ module Glue | |||
|
|||
define_steps do | |||
When('{word} {word} {word}') do |subject, verb, complement| | |||
log "subject: #{subject}", "verb: #{verb}", "complement: #{complement}", subject: subject, verb: verb, complement: complement | |||
log "subject: #{subject}", "verb: #{verb}", "complement: #{complement}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we change this to be hard-coded. Aruba steps are designed to showcase simple examples and this has 3 parameter types for "I have no idea what reason...." So if this just becomes When('monkey eats banana')
then we can make the logger step also hard coded and the test showcasing that the logger having 3 items gets translated will be a bit easier to understand
Notwithstanding that, I'm not sure I agree that "is" what happens though. So I'll probably need to dig into this.
Description
Context
Cucumber performs filtering and formatting on error backtraces before displaying them in terminal output.
When running on Ruby 3.4, the backtrace filtering and formatting is not working. This is defect is caused by the new backtrace format introduced in Ruby 3.4.
See:
Change
Update the
Cucumber::Glue::InvokeInWorld
andCucumber::Formatter::BacktraceFilter
classes to support both styles of backtraces.Fixes #1770
Type of change
Checklist:
Your PR is ready for review once the following checklist is
complete. You can also add some checks if you want to.
bundle exec rubocop
reports no offenses