Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Prior to this change, all
IO
objects created byensure_io
would be flushed and closed when Ruby exits.This turned out to be a problem for the new
--publish
functionality if Cucumber raised an exception.One case where Cucumber will raise an exception (and not run anything) is when it's passed a non-existent feature file. It might also raise exceptions in other cases, for example when a feature file has syntax errors.
In those cases (where cucumber doesn't run anything), we don't want to publish any reports! However, since formatters (and their streams) are created before the exceptions described above are raised, it would already have registered the
at_exit
hooks that flush and close the streams (which in the case of--publish
will publish a report).The fix is to defer the registration of the
at_exit
hook which flushes and closes until we can be sure Cucumber isn't going to raise an error. If Cucumber raises an exception, theat_exit
hook won't have been registered.This change should preserve backwards compatibility.