Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
### Added
- Moved the version definition to `lib/cucumber/core/version.rb` and updated the gemspec to use `Cucumber::Core::VERSION`

### Changed
- Add additional parameters (`message` and `exception`), conditionally to the message generated by a pending or skipped
test step (If it is defined in the invocating step definition) ([#348](https://github.com/cucumber/cucumber-ruby-core/pull/348))

## [20.0.0] - 2026-10-09
### Changed
- **BREAKING CHANGE:** `Cucumber::Core::Test::Runner` now takes a retry policy instead of a maximum number of attempts, and
Expand Down
17 changes: 13 additions & 4 deletions lib/cucumber/core/test/result/pending.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,19 @@ def to_sym
end

def to_message
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::PENDING,
duration: duration.to_message_duration
)
if message
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::PENDING,
duration: duration.to_message_duration,
message: message,
exception: exception_sub_message
)
else
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::PENDING,
duration: duration.to_message_duration
)
end
end
end
end
Expand Down
12 changes: 11 additions & 1 deletion lib/cucumber/core/test/result/raisable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module Result
class Raisable < StandardError
attr_reader :message, :duration

def initialize(message = '', duration = UnknownDuration.new, backtrace = nil)
def initialize(message = nil, duration = UnknownDuration.new, backtrace = nil)
@message = message
@duration = duration
super(message)
Expand Down Expand Up @@ -39,6 +39,16 @@ def with_filtered_backtrace(filter)

filter.new(dup).exception
end

private

def exception_sub_message
Cucumber::Messages::Exception.new(
type: self.class,
message: message,
stack_trace: backtrace&.join("\n")
)
end
end
end
end
Expand Down
17 changes: 13 additions & 4 deletions lib/cucumber/core/test/result/skipped.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,19 @@ def to_sym
end

def to_message
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::SKIPPED,
duration: duration.to_message_duration
)
if message
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::SKIPPED,
duration: duration.to_message_duration,
message: message,
exception: exception_sub_message
)
else
Cucumber::Messages::TestStepResult.new(
status: Cucumber::Messages::TestStepResultStatus::SKIPPED,
duration: duration.to_message_duration
)
end
end
end
end
Expand Down
9 changes: 1 addition & 8 deletions lib/cucumber/core/test/runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def to_test_step_finished_envelope(test_step, step_result)
result_message = Cucumber::Messages::TestStepResult.new(
status: result_message.status,
duration: result_message.duration,
message: to_error_message(message_element),
message: result_message.message,
exception: to_exception_object(result, message_element)
)
end
Expand All @@ -128,13 +128,6 @@ def to_test_step_finished_envelope(test_step, step_result)
)
end

def to_error_message(message_element)
<<~ERROR_MESSAGE
#{message_element.message} (#{message_element.class})
#{message_element.backtrace}
ERROR_MESSAGE
end

def to_exception_object(result, message_element)
return unless result.failed?

Expand Down
Loading