From 7b66bcb50d8ef37aa7cfe09ba353f66be1bad0fc Mon Sep 17 00:00:00 2001 From: Dale Bustad Date: Fri, 10 Mar 2023 00:33:30 -0800 Subject: [PATCH] test(integration-karma): template expressions --- .../scripts/karma-plugins/lwc.js | 4 ++++ .../template-expressions/errors/index.spec.js | 16 ++++++++++++++++ .../throwDuringCallChild.html | 3 +++ .../throwDuringCallChild/throwDuringCallChild.js | 7 +++++++ .../throwDuringCallParent.html | 3 +++ .../throwDuringCallParent.js | 8 ++++++++ .../undefinedMemberExpressionObjChild.html | 3 +++ .../undefinedMemberExpressionObjChild.js | 3 +++ .../undefinedMemberExpressionObjParent.html | 3 +++ .../undefinedMemberExpressionObjParent.js | 8 ++++++++ .../smoke-test/index.spec.js | 10 ++++++++++ .../smoke-test/x/test/test.html | 3 +++ .../smoke-test/x/test/test.js | 7 +++++++ 13 files changed, 78 insertions(+) create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/index.spec.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.html create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.html create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.html create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.html create mode 100644 packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/smoke-test/index.spec.js create mode 100644 packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.html create mode 100644 packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.js diff --git a/packages/@lwc/integration-karma/scripts/karma-plugins/lwc.js b/packages/@lwc/integration-karma/scripts/karma-plugins/lwc.js index b42f039536..dfffbc6c98 100644 --- a/packages/@lwc/integration-karma/scripts/karma-plugins/lwc.js +++ b/packages/@lwc/integration-karma/scripts/karma-plugins/lwc.js @@ -41,6 +41,9 @@ function createPreprocessor(config, emitter, logger) { .join('\n'); const outro = ancestorDirectories.map(() => `});`).join('\n'); + // TODO [#3370]: remove experimental template expression flag + const experimentalComplexExpressions = suiteDir.includes('template-expressions'); + const plugins = [ lwcRollupPlugin({ sourcemap: true, @@ -50,6 +53,7 @@ function createPreprocessor(config, emitter, logger) { }, enableLwcSpread: true, enableDynamicComponents: true, + experimentalComplexExpressions, disableSyntheticShadowSupport: DISABLE_SYNTHETIC_SHADOW_SUPPORT_IN_COMPILER, }), ]; diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/index.spec.js b/packages/@lwc/integration-karma/test/template-expressions/errors/index.spec.js new file mode 100644 index 0000000000..77903150f0 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/index.spec.js @@ -0,0 +1,16 @@ +import { createElement } from 'lwc'; + +import UndefinedMemberExpressionObjParent from 'x/undefinedMemberExpressionObjParent'; +import ThrowDuringCallParent from 'x/throwDuringCallParent'; + +it(`should handle member expression with undefined object`, () => { + const parent = createElement('x-parent', { is: UndefinedMemberExpressionObjParent }); + document.body.appendChild(parent); + expect(parent.caughtError).toContain('undefined'); +}); + +it(`should handle errors thrown during call expression`, () => { + const parent = createElement('x-parent', { is: ThrowDuringCallParent }); + document.body.appendChild(parent); + expect(parent.caughtError).toContain("I'm the Gingerbread man!"); +}); diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.html b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.html new file mode 100644 index 0000000000..0df4ddecff --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.js b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.js new file mode 100644 index 0000000000..139843beef --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.js @@ -0,0 +1,7 @@ +import { LightningElement } from 'lwc'; + +export default class Test extends LightningElement { + runRunAsFastAsYouCan() { + throw new Error("You can't catch me, I'm the Gingerbread man!"); + } +} diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.html b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.html new file mode 100644 index 0000000000..a7b6117c9e --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.js b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.js new file mode 100644 index 0000000000..4a3dafdb2a --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.js @@ -0,0 +1,8 @@ +import { LightningElement, api } from 'lwc'; + +export default class Parent extends LightningElement { + @api caughtError = null; + errorCallback(err) { + this.caughtError = err.message; + } +} diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.html b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.html new file mode 100644 index 0000000000..b53700e8b4 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.js b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.js new file mode 100644 index 0000000000..1d3c9666cb --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Test extends LightningElement {} diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.html b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.html new file mode 100644 index 0000000000..1d4db3b192 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.js b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.js new file mode 100644 index 0000000000..4a3dafdb2a --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.js @@ -0,0 +1,8 @@ +import { LightningElement, api } from 'lwc'; + +export default class Parent extends LightningElement { + @api caughtError = null; + errorCallback(err) { + this.caughtError = err.message; + } +} diff --git a/packages/@lwc/integration-karma/test/template-expressions/smoke-test/index.spec.js b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/index.spec.js new file mode 100644 index 0000000000..1c1d44a939 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/index.spec.js @@ -0,0 +1,10 @@ +import { createElement } from 'lwc'; + +import Test from 'x/test'; + +it(`should support call expressions`, () => { + const elm = createElement('x-test', { is: Test }); + document.body.appendChild(elm); + + expect(elm.shadowRoot.querySelector('div').getAttribute('foo')).toBe('bar'); +}); diff --git a/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.html b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.html new file mode 100644 index 0000000000..7ec1c634d0 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.js b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.js new file mode 100644 index 0000000000..e574f13ac7 --- /dev/null +++ b/packages/@lwc/integration-karma/test/template-expressions/smoke-test/x/test/test.js @@ -0,0 +1,7 @@ +import { LightningElement } from 'lwc'; + +export default class Test extends LightningElement { + bar() { + return 'bar'; + } +}