|
1 |
| -import { Object as EmberObject, A } from '@ember/-internals/runtime'; |
2 |
| -import { get, set, tracked, nativeDescDecorator as descriptor } from '@ember/-internals/metal'; |
| 1 | +import { Object as EmberObject, A, MutableArray } from '@ember/-internals/runtime'; |
| 2 | +import { |
| 3 | + get, |
| 4 | + set, |
| 5 | + tracked, |
| 6 | + nativeDescDecorator as descriptor, |
| 7 | + notifyPropertyChange, |
| 8 | +} from '@ember/-internals/metal'; |
3 | 9 | import Service, { inject } from '@ember/service';
|
4 | 10 | import { moduleFor, RenderingTestCase, strip, runTask } from 'internal-test-helpers';
|
5 | 11 |
|
@@ -169,6 +175,61 @@ moduleFor(
|
169 | 175 | this.assertText('1, 2, 3, 4');
|
170 | 176 | }
|
171 | 177 |
|
| 178 | + '@test custom ember array properties rerender when updated'() { |
| 179 | + let CustomArray = EmberObject.extend(MutableArray, { |
| 180 | + init() { |
| 181 | + this._super(...arguments); |
| 182 | + this._vals = [1, 2, 3]; |
| 183 | + }, |
| 184 | + |
| 185 | + objectAt(index) { |
| 186 | + return this._vals[index]; |
| 187 | + }, |
| 188 | + |
| 189 | + replace(start, deleteCount, items = []) { |
| 190 | + this._vals.splice(start, deleteCount, ...items); |
| 191 | + notifyPropertyChange(this, '[]'); |
| 192 | + }, |
| 193 | + |
| 194 | + join() { |
| 195 | + return this._vals.join(...arguments); |
| 196 | + }, |
| 197 | + |
| 198 | + get length() { |
| 199 | + return this._vals.length; |
| 200 | + }, |
| 201 | + }); |
| 202 | + |
| 203 | + let NumListComponent = Component.extend({ |
| 204 | + numbers: tracked({ initializer: () => CustomArray.create() }), |
| 205 | + |
| 206 | + addNumber() { |
| 207 | + this.numbers.pushObject(4); |
| 208 | + }, |
| 209 | + }); |
| 210 | + |
| 211 | + this.registerComponent('num-list', { |
| 212 | + ComponentClass: NumListComponent, |
| 213 | + template: strip` |
| 214 | + <button {{action this.addNumber}}> |
| 215 | + {{join this.numbers}} |
| 216 | + </button> |
| 217 | + `, |
| 218 | + }); |
| 219 | + |
| 220 | + this.registerHelper('join', ([value]) => { |
| 221 | + return value.join(', '); |
| 222 | + }); |
| 223 | + |
| 224 | + this.render('<NumList />'); |
| 225 | + |
| 226 | + this.assertText('1, 2, 3'); |
| 227 | + |
| 228 | + runTask(() => this.$('button').click()); |
| 229 | + |
| 230 | + this.assertText('1, 2, 3, 4'); |
| 231 | + } |
| 232 | + |
172 | 233 | '@test nested getters update when dependent properties are invalidated'(assert) {
|
173 | 234 | let computeCount = 0;
|
174 | 235 |
|
|
0 commit comments