Catch syntax errors in context and fail gracefully #495
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.
Reviving #267 with un-bitrotted code.
This catches three cases where errors in context functions would bomb execution:
_get
would try to execute functions from the context. If they fail, it returndust.log()
, which returnsundefined
.map()
would try to execute a callback, but the callback could throw.All of these now log an ERROR level, and call
setError()
on their chunk.The easiest way to see the effect is to introduce a syntax error into one of the test cases. The
dust.render()
callback will never be invoked, which cripples many Node-based implementations that use Dust rendering, since they just spin forever.I did introduce another change in this PR: if tests are expecting an error, they now pass if the expected value is contained within the error, instead of checking equality. This is because PhantomJS has different errors compared to a browser.