diff --git a/src/vs/base/browser/ui/tree/indexTreeModel.ts b/src/vs/base/browser/ui/tree/indexTreeModel.ts index 28f3129cad7a13c5afea9d8bcd5eec8b8a385115..b57ffece854597a9cf1dee9574af99b8d456d8c8 100644 --- a/src/vs/base/browser/ui/tree/indexTreeModel.ts +++ b/src/vs/base/browser/ui/tree/indexTreeModel.ts @@ -89,14 +89,11 @@ export class IndexTreeModel implements ITreeModel r + node.revealedCount, 0); this._updateAncestorsRevealedCount(parentNode, revealedCount - visibleDeleteCount); - - if (revealed) { - this.list.splice(listIndex, visibleDeleteCount, treeListElementsToInsert); - } + this.list.splice(listIndex, visibleDeleteCount, treeListElementsToInsert); } if (deletedNodes.length > 0 && onDidDeleteNode) { diff --git a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts index 75e64172640bf09e27019f3bf4f0c6e14b260ce9..4fc0edf0f12b08d43f898866fd71e116b69ffc6a 100644 --- a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts +++ b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts @@ -114,4 +114,30 @@ suite('ObjectTreeModel', function () { model.setCollapsed(0, false); assert.deepEqual(toArray(list), [0, 1, 2]); }); + + test('setChildren on expanded, unrevealed node', () => { + const list = [] as ITreeNode[]; + const model = new ObjectTreeModel(toSpliceable(list)); + + model.setChildren(null, [ + { + element: 1, collapsed: true, children: [ + { element: 11, collapsed: false } + ] + }, + { element: 2 } + ]); + + assert.deepEqual(toArray(list), [1, 2]); + + model.setChildren(11, [ + { element: 111 }, + { element: 112 } + ]); + + assert.deepEqual(toArray(list), [1, 2]); + + model.setCollapsed(1, false); + assert.deepEqual(toArray(list), [1, 11, 111, 112, 2]); + }); }); \ No newline at end of file