diff --git a/packages/@glimmer/integration-tests/test/helpers/dynamic-helpers-test.ts b/packages/@glimmer/integration-tests/test/helpers/dynamic-helpers-test.ts index a3682c47af..7b6dedc217 100644 --- a/packages/@glimmer/integration-tests/test/helpers/dynamic-helpers-test.ts +++ b/packages/@glimmer/integration-tests/test/helpers/dynamic-helpers-test.ts @@ -1,4 +1,11 @@ -import { RenderTest, test, jitSuite, GlimmerishComponent, defineSimpleHelper } from '../..'; +import { + RenderTest, + test, + jitSuite, + GlimmerishComponent, + defineSimpleHelper, + defineComponent, +} from '../..'; class DynamicHelpersResolutionModeTest extends RenderTest { static suiteName = 'dynamic helpers in resolution mode'; @@ -35,6 +42,41 @@ class DynamicHelpersResolutionModeTest extends RenderTest { /The `x\.foo` property path was used in a template for the `.*` component without using `this`/ ); } + + @test + 'Can use a dynamic helper with nested helpers'() { + const foo = defineSimpleHelper(() => 'world!'); + const bar = defineSimpleHelper((value: string) => 'Hello, ' + value); + const Bar = defineComponent( + { foo }, + '{{this.bar (foo)}}', + class extends GlimmerishComponent { + bar = bar; + } + ); + + this.renderComponent(Bar); + this.assertHTML('Hello, world!'); + this.assertStableRerender(); + } + + @test + 'Can use a dynamic helper with nested dynamic helpers'() { + const foo = defineSimpleHelper(() => 'world!'); + const bar = defineSimpleHelper((value: string) => 'Hello, ' + value); + const Bar = defineComponent( + {}, + '{{this.bar (this.foo)}}', + class extends GlimmerishComponent { + foo = foo; + bar = bar; + } + ); + + this.renderComponent(Bar); + this.assertHTML('Hello, world!'); + this.assertStableRerender(); + } } jitSuite(DynamicHelpersResolutionModeTest); diff --git a/packages/@glimmer/integration-tests/test/modifiers/dynamic-modifiers-test.ts b/packages/@glimmer/integration-tests/test/modifiers/dynamic-modifiers-test.ts index 06755fe12e..b22a48ba5f 100644 --- a/packages/@glimmer/integration-tests/test/modifiers/dynamic-modifiers-test.ts +++ b/packages/@glimmer/integration-tests/test/modifiers/dynamic-modifiers-test.ts @@ -5,6 +5,8 @@ import { defineSimpleModifier, syntaxErrorFor, GlimmerishComponent, + defineSimpleHelper, + defineComponent, } from '../..'; class DynamicModifiersResolutionModeTest extends RenderTest { @@ -131,6 +133,45 @@ class DynamicModifiersResolutionModeTest extends RenderTest { this.registerComponent('TemplateOnly', 'Bar', '
'); }, syntaxErrorFor('You attempted to invoke a path (`{{#x.foo}}`) as a modifier, but x was not in scope. Try adding `this` to the beginning of the path', '{{x.foo}}', 'an unknown module', 1, 5)); } + + @test + 'Can use a dynamic modifier with a nested helper'() { + const foo = defineSimpleHelper(() => 'Hello, world!'); + const bar = defineSimpleModifier( + (element: Element, value: string) => (element.innerHTML = value) + ); + const Bar = defineComponent( + { foo }, + '', + class extends GlimmerishComponent { + bar = bar; + } + ); + + this.renderComponent(Bar); + this.assertHTML('