From 3ddfb5c34a3f7d7ad9d092a87b1cfebbc2ab5b07 Mon Sep 17 00:00:00 2001 From: matthewianmorgan Date: Mon, 1 Feb 2021 04:05:37 +1000 Subject: [PATCH] fix(core): ObservableArray splice with start only (#9159) --- .../__tests__/observable/observable-array.ts | 47 +++++++++++++++++++ packages/core/data/observable-array/index.ts | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 packages/core/__tests__/observable/observable-array.ts diff --git a/packages/core/__tests__/observable/observable-array.ts b/packages/core/__tests__/observable/observable-array.ts new file mode 100644 index 000000000..8e2e5df06 --- /dev/null +++ b/packages/core/__tests__/observable/observable-array.ts @@ -0,0 +1,47 @@ +import { ObservableArray } from '@nativescript/core/data/observable-array'; +import { assert } from 'chai'; + +describe('observable-array', () => { + describe('splice', () => { + it('removes an item', () => { + const _array = new ObservableArray(); + + _array.push(1); + _array.push(2); + + _array.splice(0, 1); + + assert.equal(2, _array.getItem(0)); + }); + + it('replaces an item', () => { + const _array = new ObservableArray(); + + _array.push(1); + _array.push(2); + + _array.splice(0, 1, 3); + + assert.equal(3, _array.getItem(0)); + }); + + it('empties on start zero and no delete count', () => { + const _array = new ObservableArray(); + + _array.push(1); + + _array.splice(0); + assert.equal(0, _array.length); + }); + + it('empties on length set to zero', () => { + const _array = new ObservableArray(); + + _array.push(1); + _array.push(2); + + _array.length = 0; + assert.equal(0, _array.length); + }); + }); +}); diff --git a/packages/core/data/observable-array/index.ts b/packages/core/data/observable-array/index.ts index 12f7351d9..5dafad024 100644 --- a/packages/core/data/observable-array/index.ts +++ b/packages/core/data/observable-array/index.ts @@ -246,7 +246,7 @@ export class ObservableArray extends Observable { */ splice(start: number, deleteCount?: number, ...items: any): T[] { const length = this._array.length; - const result = this._array.splice(start, deleteCount, ...items); + const result = arguments.length === 1 ? this._array.splice(start) : this._array.splice(start, deleteCount, ...items); this.notify(>{ eventName: CHANGE,