|
|
|
@ -118,313 +118,340 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
[Fact] |
|
|
|
public void Clicking_Item_Should_Select_It() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
|
|
|
|
Assert.NotNull(container); |
|
|
|
Assert.NotNull(container); |
|
|
|
|
|
|
|
_mouse.Click(container); |
|
|
|
_mouse.Click(container); |
|
|
|
|
|
|
|
Assert.Equal(item, target.SelectedItem); |
|
|
|
Assert.True(container.IsSelected); |
|
|
|
Assert.Equal(item, target.SelectedItem); |
|
|
|
Assert.True(container.IsSelected); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_WithControlModifier_Selected_Item_Should_Deselect_It() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
|
|
|
|
Assert.NotNull(container); |
|
|
|
Assert.NotNull(container); |
|
|
|
|
|
|
|
target.SelectedItem = item; |
|
|
|
target.SelectedItem = item; |
|
|
|
|
|
|
|
Assert.True(container.IsSelected); |
|
|
|
Assert.True(container.IsSelected); |
|
|
|
|
|
|
|
_mouse.Click(container, modifiers: KeyModifiers.Control); |
|
|
|
_mouse.Click(container, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Null(target.SelectedItem); |
|
|
|
Assert.False(container.IsSelected); |
|
|
|
Assert.Null(target.SelectedItem); |
|
|
|
Assert.False(container.IsSelected); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_WithControlModifier_Not_Selected_Item_Should_Select_It() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var item1 = tree[0].Children[1].Children[0]; |
|
|
|
var container1 = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item1); |
|
|
|
var item1 = tree[0].Children[1].Children[0]; |
|
|
|
var container1 = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item1); |
|
|
|
|
|
|
|
var item2 = tree[0].Children[1]; |
|
|
|
var container2 = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item2); |
|
|
|
var item2 = tree[0].Children[1]; |
|
|
|
var container2 = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item2); |
|
|
|
|
|
|
|
Assert.NotNull(container1); |
|
|
|
Assert.NotNull(container2); |
|
|
|
Assert.NotNull(container1); |
|
|
|
Assert.NotNull(container2); |
|
|
|
|
|
|
|
target.SelectedItem = item1; |
|
|
|
target.SelectedItem = item1; |
|
|
|
|
|
|
|
Assert.True(container1.IsSelected); |
|
|
|
Assert.True(container1.IsSelected); |
|
|
|
|
|
|
|
_mouse.Click(container2, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(item2, target.SelectedItem); |
|
|
|
Assert.False(container1.IsSelected); |
|
|
|
Assert.True(container2.IsSelected); |
|
|
|
_mouse.Click(container2, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(item2, target.SelectedItem); |
|
|
|
Assert.False(container1.IsSelected); |
|
|
|
Assert.True(container2.IsSelected); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_WithControlModifier_Selected_Item_Should_Deselect_And_Remove_From_SelectedItems() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var rootNode = tree[0]; |
|
|
|
|
|
|
|
var item1 = rootNode.Children[0]; |
|
|
|
var item2 = rootNode.Children.Last(); |
|
|
|
var item1 = rootNode.Children[0]; |
|
|
|
var item2 = rootNode.Children.Last(); |
|
|
|
|
|
|
|
var item1Container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item1); |
|
|
|
var item2Container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item2); |
|
|
|
var item1Container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item1); |
|
|
|
var item2Container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item2); |
|
|
|
|
|
|
|
ClickContainer(item1Container, KeyModifiers.Control); |
|
|
|
Assert.True(item1Container.IsSelected); |
|
|
|
ClickContainer(item1Container, KeyModifiers.Control); |
|
|
|
Assert.True(item1Container.IsSelected); |
|
|
|
|
|
|
|
ClickContainer(item2Container, KeyModifiers.Control); |
|
|
|
Assert.True(item2Container.IsSelected); |
|
|
|
ClickContainer(item2Container, KeyModifiers.Control); |
|
|
|
Assert.True(item2Container.IsSelected); |
|
|
|
|
|
|
|
Assert.Equal(new[] {item1, item2}, target.Selection.SelectedItems.OfType<Node>()); |
|
|
|
Assert.Equal(new[] { item1, item2 }, target.Selection.SelectedItems.OfType<Node>()); |
|
|
|
|
|
|
|
ClickContainer(item1Container, KeyModifiers.Control); |
|
|
|
Assert.False(item1Container.IsSelected); |
|
|
|
ClickContainer(item1Container, KeyModifiers.Control); |
|
|
|
Assert.False(item1Container.IsSelected); |
|
|
|
|
|
|
|
Assert.DoesNotContain(item1, target.Selection.SelectedItems.OfType<Node>()); |
|
|
|
Assert.DoesNotContain(item1, target.Selection.SelectedItems.OfType<Node>()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_WithShiftModifier_DownDirection_Should_Select_Range_Of_Items() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var rootNode = tree[0]; |
|
|
|
|
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children.Last(); |
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children.Last(); |
|
|
|
|
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
|
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
|
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
|
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_WithShiftModifier_UpDirection_Should_Select_Range_Of_Items() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var rootNode = tree[0]; |
|
|
|
|
|
|
|
var from = rootNode.Children.Last(); |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
var from = rootNode.Children.Last(); |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
|
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
|
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
|
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
|
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Clicking_First_Item_Of_SelectedItems_Should_Select_Only_It() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var rootNode = tree[0]; |
|
|
|
|
|
|
|
var from = rootNode.Children.Last(); |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
var from = rootNode.Children.Last(); |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
|
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
|
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
|
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
AssertChildrenSelected(target, rootNode); |
|
|
|
|
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
|
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
Assert.True(fromContainer.IsSelected); |
|
|
|
|
|
|
|
foreach (var child in rootNode.Children) |
|
|
|
{ |
|
|
|
if (child == from) |
|
|
|
foreach (var child in rootNode.Children) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
if (child == from) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(child); |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(child); |
|
|
|
|
|
|
|
Assert.False(container.IsSelected); |
|
|
|
Assert.False(container.IsSelected); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Setting_SelectedItem_Should_Set_Container_Selected() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); |
|
|
|
|
|
|
|
Assert.NotNull(container); |
|
|
|
Assert.NotNull(container); |
|
|
|
|
|
|
|
target.SelectedItem = item; |
|
|
|
target.SelectedItem = item; |
|
|
|
|
|
|
|
Assert.True(container.IsSelected); |
|
|
|
Assert.True(container.IsSelected); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Setting_SelectedItem_Should_Raise_SelectedItemChanged_Event() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
ExpandAll(target); |
|
|
|
|
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
var item = tree[0].Children[1].Children[0]; |
|
|
|
|
|
|
|
var called = false; |
|
|
|
target.SelectionChanged += (s, e) => |
|
|
|
{ |
|
|
|
Assert.Empty(e.RemovedItems); |
|
|
|
Assert.Equal(1, e.AddedItems.Count); |
|
|
|
Assert.Same(item, e.AddedItems[0]); |
|
|
|
called = true; |
|
|
|
}; |
|
|
|
var called = false; |
|
|
|
target.SelectionChanged += (s, e) => |
|
|
|
{ |
|
|
|
Assert.Empty(e.RemovedItems); |
|
|
|
Assert.Equal(1, e.AddedItems.Count); |
|
|
|
Assert.Same(item, e.AddedItems[0]); |
|
|
|
called = true; |
|
|
|
}; |
|
|
|
|
|
|
|
target.SelectedItem = item; |
|
|
|
Assert.True(called); |
|
|
|
target.SelectedItem = item; |
|
|
|
Assert.True(called); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -564,7 +591,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
[Fact] |
|
|
|
public void Keyboard_Navigation_Should_Move_To_Last_Selected_Node() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start(TestServices.RealFocus)) |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
var focus = FocusManager.Instance; |
|
|
|
var navigation = AvaloniaLocator.Current.GetService<IKeyboardNavigationHandler>(); |
|
|
|
@ -647,7 +674,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
[Fact] |
|
|
|
public void Pressing_SelectAll_Gesture_With_Downward_Range_Selected_Should_Select_All_Nodes() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
@ -694,7 +721,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
[Fact] |
|
|
|
public void Pressing_SelectAll_Gesture_With_Upward_Range_Selected_Should_Select_All_Nodes() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
@ -768,97 +795,106 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
[Fact] |
|
|
|
public void Right_Click_On_UnselectedItem_Should_Clear_Existing_Selection() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
var then = rootNode.Children[1]; |
|
|
|
var rootNode = tree[0]; |
|
|
|
var to = rootNode.Children[0]; |
|
|
|
var then = rootNode.Children[1]; |
|
|
|
|
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(rootNode); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var thenContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(then); |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(rootNode); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var thenContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(then); |
|
|
|
|
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
ClickContainer(fromContainer, KeyModifiers.None); |
|
|
|
ClickContainer(toContainer, KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(2, target.Selection.SelectedItems.Count); |
|
|
|
Assert.Equal(2, target.Selection.SelectedItems.Count); |
|
|
|
|
|
|
|
_mouse.Click(thenContainer, MouseButton.Right); |
|
|
|
_mouse.Click(thenContainer, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Shift_Right_Click_Should_Not_Select_Multiple() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children[1]; |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var rootNode = tree[0]; |
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children[1]; |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
|
|
|
|
_mouse.Click(fromContainer); |
|
|
|
_mouse.Click(toContainer, MouseButton.Right, modifiers: KeyModifiers.Shift); |
|
|
|
_mouse.Click(fromContainer); |
|
|
|
_mouse.Click(toContainer, MouseButton.Right, modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Ctrl_Right_Click_Should_Not_Select_Multiple() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new TreeView |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
var visualRoot = new TestRoot(); |
|
|
|
visualRoot.Child = target; |
|
|
|
|
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
CreateNodeDataTemplate(target); |
|
|
|
ApplyTemplates(target); |
|
|
|
target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
var rootNode = tree[0]; |
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children[1]; |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
var rootNode = tree[0]; |
|
|
|
var from = rootNode.Children[0]; |
|
|
|
var to = rootNode.Children[1]; |
|
|
|
var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(from); |
|
|
|
var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to); |
|
|
|
|
|
|
|
_mouse.Click(fromContainer); |
|
|
|
_mouse.Click(toContainer, MouseButton.Right, modifiers: KeyModifiers.Control); |
|
|
|
_mouse.Click(fromContainer); |
|
|
|
_mouse.Click(toContainer, MouseButton.Right, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
Assert.Equal(1, target.Selection.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -944,7 +980,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
public void Auto_Expanding_In_Style_Should_Not_Break_Range_Selection() |
|
|
|
{ |
|
|
|
/// Issue #2980.
|
|
|
|
using (UnitTestApplication.Start(TestServices.RealStyler)) |
|
|
|
using (Application()) |
|
|
|
{ |
|
|
|
var target = new DerivedTreeView |
|
|
|
{ |
|
|
|
@ -1183,12 +1219,12 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void ClickContainer(IControl container, KeyModifiers modifiers) |
|
|
|
private void ClickContainer(IControl container, KeyModifiers modifiers) |
|
|
|
{ |
|
|
|
_mouse.Click(container, modifiers: modifiers); |
|
|
|
} |
|
|
|
|
|
|
|
void AssertChildrenSelected(TreeView treeView, Node rootNode) |
|
|
|
private void AssertChildrenSelected(TreeView treeView, Node rootNode) |
|
|
|
{ |
|
|
|
foreach (var child in rootNode.Children) |
|
|
|
{ |
|
|
|
@ -1198,6 +1234,16 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private IDisposable Application() |
|
|
|
{ |
|
|
|
return UnitTestApplication.Start( |
|
|
|
TestServices.MockThreadingInterface.With( |
|
|
|
focusManager: new FocusManager(), |
|
|
|
keyboardDevice: () => new KeyboardDevice(), |
|
|
|
keyboardNavigation: new KeyboardNavigationHandler(), |
|
|
|
inputManager: new InputManager())); |
|
|
|
} |
|
|
|
|
|
|
|
private class Node : NotifyingBase |
|
|
|
{ |
|
|
|
private IAvaloniaList<Node> _children; |
|
|
|
|