diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/tracked-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/tracked-test.js index 48a1f0d5352..9d94158fb1e 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/tracked-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/tracked-test.js @@ -1,4 +1,10 @@ -import { Object as EmberObject, A, ArrayProxy, PromiseProxyMixin } from '@ember/-internals/runtime'; +import { + Object as EmberObject, + A, + ArrayProxy, + MutableArray, + PromiseProxyMixin, +} from '@ember/-internals/runtime'; import { computed, get, @@ -580,6 +586,84 @@ moduleFor( this.assertText('1'); } + + '@test getters update when native array is updated'() { + class ChildrenComponent extends GlimmerishComponent { + get countAlias() { + return get(this, 'args.children.length'); + } + + addChild() { + this.args.children.pushObject({ id: '1' }); + } + } + + this.registerComponent('child-count', { + ComponentClass: ChildrenComponent, + template: '', + }); + + this.render('', { + children: A(), + }); + + this.assertText('0'); + + runTask(() => this.$('button').click()); + + this.assertText('1'); + } + + '@test getters update when MutableArray is updated'() { + let ArrayOfChildren = EmberObject.extend(MutableArray, { + _content: null, + + init() { + this._content = A(); + this._length = 0; + }, + + addObject(obj) { + this._content.pushObject(obj); + }, + + objectAt(idx) { + return this._content[idx]; + }, + + get length() { + return this._length; + }, + set length(value) { + this._length = value; + }, + }); + + class ChildrenComponent extends GlimmerishComponent { + get countAlias() { + return get(this, 'args.children.length'); + } + + addChild() { + this.args.children.addObject({ id: '1' }); + } + } + + this.registerComponent('child-count', { + ComponentClass: ChildrenComponent, + template: '', + }); + + this.render('', { + children: ArrayOfChildren.create(), + }); + + this.assertText('0'); + + runTask(() => this.$('button').click()); + + this.assertText('1'); + } } );