提交 ebf10a30 编写于 作者: J Joao Moreno

tree: getNodeLocation tests

上级 5731c047
......@@ -6,7 +6,7 @@
import 'vs/css!./tree';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IListOptions, List, IIdentityProvider, IMultipleSelectionController } from 'vs/base/browser/ui/list/listWidget';
import { TreeModel, ITreeNode, ITreeElement, getNodeLocation, ITreeModelOptions } from 'vs/base/browser/ui/tree/treeModel';
import { TreeModel, ITreeNode, ITreeElement, ITreeModelOptions } from 'vs/base/browser/ui/tree/treeModel';
import { Iterator, ISequence } from 'vs/base/common/iterator';
import { IVirtualDelegate, IRenderer, IListMouseEvent } from 'vs/base/browser/ui/list/list';
import { append, $ } from 'vs/base/browser/dom';
......@@ -184,7 +184,7 @@ export class Tree<T, TFilterData = void> implements IDisposable {
private onMouseClick(e: IListMouseEvent<ITreeNode<T, TFilterData>>): void {
const node = e.element;
const location = getNodeLocation(node);
const location = TreeModel.getNodeLocation(node);
this.model.toggleCollapsed(location);
}
......@@ -200,7 +200,7 @@ export class Tree<T, TFilterData = void> implements IDisposable {
}
const node = nodes[0];
const location = getNodeLocation(node);
const location = TreeModel.getNodeLocation(node);
const didChange = this.model.setCollapsed(location, true);
if (!didChange) {
......@@ -227,7 +227,7 @@ export class Tree<T, TFilterData = void> implements IDisposable {
}
const node = nodes[0];
const location = getNodeLocation(node);
const location = TreeModel.getNodeLocation(node);
const didChange = this.model.setCollapsed(location, false);
if (!didChange) {
......@@ -254,7 +254,7 @@ export class Tree<T, TFilterData = void> implements IDisposable {
}
const node = nodes[0];
const location = getNodeLocation(node);
const location = TreeModel.getNodeLocation(node);
this.model.toggleCollapsed(location);
}
......
......@@ -91,24 +91,24 @@ function getVisibleState(visibility: Visibility): boolean | undefined {
}
}
// TODO fix with visibility
export function getNodeLocation<T>(node: ITreeNode<T, any>): number[] {
const location = [];
while (node.parent) {
location.push(node.parent.children.indexOf(node));
node = node.parent;
}
return location.reverse();
}
export interface ITreeModelOptions<T, TFilterData = void> {
filter?: ITreeFilter<T, TFilterData>;
}
export class TreeModel<T, TFilterData = void> {
// TODO fix with visibility
static getNodeLocation<T>(node: ITreeNode<T, any>): number[] {
const location = [];
while (node.parent) {
location.push(node.parent.children.indexOf(node));
node = node.parent;
}
return location.reverse();
}
private root: IMutableTreeNode<T, TFilterData> = {
parent: undefined,
element: undefined,
......
......@@ -440,4 +440,31 @@ suite('TreeModel2', function () {
assert.deepEqual(toArray(list), [0, 1, 2, 3, 4, 5, 6, 7]);
});
suite('getNodeLocation', function () {
test('simple', function () {
const list = [] as ITreeNode<number>[];
const model = new TreeModel<number>(toSpliceable(list));
model.splice([0], 0, Iterator.fromArray([
{
element: 0, children: Iterator.fromArray([
{ element: 10 },
{ element: 11 },
{ element: 12 },
])
},
{ element: 1 },
{ element: 2 }
]));
assert.deepEqual(TreeModel.getNodeLocation(list[0]), [0]);
assert.deepEqual(TreeModel.getNodeLocation(list[1]), [0, 0]);
assert.deepEqual(TreeModel.getNodeLocation(list[2]), [0, 1]);
assert.deepEqual(TreeModel.getNodeLocation(list[3]), [0, 2]);
assert.deepEqual(TreeModel.getNodeLocation(list[4]), [1]);
assert.deepEqual(TreeModel.getNodeLocation(list[5]), [2]);
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册