From f5320ce3b50663e1b414a96161dd19387ee13ef9 Mon Sep 17 00:00:00 2001 From: Michael Rawlings Date: Wed, 27 Nov 2019 13:55:16 -0800 Subject: [PATCH] allow empty <@catch> to swallow errors (#1456) --- src/core-tags/core/await/renderer.js | 6 ++++-- .../render/fixtures/await-error-empty-catch/expected.html | 1 + .../fixtures/await-error-empty-catch/template.marko | 8 ++++++++ .../fixtures/await-error-empty-catch/vdom-expected.html | 1 + test/render/fixtures/await-error-no-catch/template.marko | 7 +++++++ test/render/fixtures/await-error-no-catch/test.js | 8 ++++++++ test/render/index.test.js | 4 +++- 7 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 test/render/fixtures/await-error-empty-catch/expected.html create mode 100644 test/render/fixtures/await-error-empty-catch/template.marko create mode 100644 test/render/fixtures/await-error-empty-catch/vdom-expected.html create mode 100644 test/render/fixtures/await-error-no-catch/template.marko create mode 100644 test/render/fixtures/await-error-no-catch/test.js diff --git a/src/core-tags/core/await/renderer.js b/src/core-tags/core/await/renderer.js index 46120f1c3..5d03b82d7 100644 --- a/src/core-tags/core/await/renderer.js +++ b/src/core-tags/core/await/renderer.js @@ -186,8 +186,10 @@ module.exports = function awaitTag(input, out) { } if (err) { - if (errorRenderer) { - errorRenderer(asyncOut, err); + if (input.catch) { + if (errorRenderer) { + errorRenderer(asyncOut, err); + } } else { asyncOut.error(err); } diff --git a/test/render/fixtures/await-error-empty-catch/expected.html b/test/render/fixtures/await-error-empty-catch/expected.html new file mode 100644 index 000000000..9c9e66b80 --- /dev/null +++ b/test/render/fixtures/await-error-empty-catch/expected.html @@ -0,0 +1 @@ +BEFORE AFTER \ No newline at end of file diff --git a/test/render/fixtures/await-error-empty-catch/template.marko b/test/render/fixtures/await-error-empty-catch/template.marko new file mode 100644 index 000000000..eed7fe079 --- /dev/null +++ b/test/render/fixtures/await-error-empty-catch/template.marko @@ -0,0 +1,8 @@ +--- +BEFORE + + <@then|testData|>Success! + <@catch/> + +AFTER +--- \ No newline at end of file diff --git a/test/render/fixtures/await-error-empty-catch/vdom-expected.html b/test/render/fixtures/await-error-empty-catch/vdom-expected.html new file mode 100644 index 000000000..ba3fd84c6 --- /dev/null +++ b/test/render/fixtures/await-error-empty-catch/vdom-expected.html @@ -0,0 +1 @@ +"BEFORE AFTER" diff --git a/test/render/fixtures/await-error-no-catch/template.marko b/test/render/fixtures/await-error-no-catch/template.marko new file mode 100644 index 000000000..4a1f29fbc --- /dev/null +++ b/test/render/fixtures/await-error-no-catch/template.marko @@ -0,0 +1,7 @@ +--- +BEFORE + + <@then|testData|>Success! + +AFTER +--- \ No newline at end of file diff --git a/test/render/fixtures/await-error-no-catch/test.js b/test/render/fixtures/await-error-no-catch/test.js new file mode 100644 index 000000000..aed3f880a --- /dev/null +++ b/test/render/fixtures/await-error-no-catch/test.js @@ -0,0 +1,8 @@ +var expect = require("chai").expect; + +exports.templateData = {}; + +exports.checkError = function(e) { + var message = e.toString(); + expect(message).to.contain("Something went wrong"); +}; diff --git a/test/render/index.test.js b/test/render/index.test.js index 0cd8a300f..c0fd27d43 100644 --- a/test/render/index.test.js +++ b/test/render/index.test.js @@ -78,9 +78,11 @@ async function runRenderTest(fixture) { let e; try { - isVDOM + let template = isVDOM ? browser.require(templatePath) : marko.load(templatePath, loadOptions); + let templateData = Object.assign({}, main.templateData || {}); + await template.render(templateData); } catch (_e) { e = _e; let errorFile = path.join(dir, "error.txt");