|
@@ -118,313 +118,340 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Clicking_Item_Should_Select_It()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_WithControlModifier_Selected_Item_Should_Deselect_It()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_WithControlModifier_Not_Selected_Item_Should_Select_It()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_WithControlModifier_Selected_Item_Should_Deselect_And_Remove_From_SelectedItems()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_WithShiftModifier_DownDirection_Should_Select_Range_Of_Items()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_WithShiftModifier_UpDirection_Should_Select_Range_Of_Items()
|
|
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]
|
|
[Fact]
|
|
|
public void Clicking_First_Item_Of_SelectedItems_Should_Select_Only_It()
|
|
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]
|
|
[Fact]
|
|
|
public void Setting_SelectedItem_Should_Set_Container_Selected()
|
|
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]
|
|
[Fact]
|
|
|
public void Setting_SelectedItem_Should_Raise_SelectedItemChanged_Event()
|
|
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]
|
|
[Fact]
|
|
@@ -564,7 +591,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Keyboard_Navigation_Should_Move_To_Last_Selected_Node()
|
|
public void Keyboard_Navigation_Should_Move_To_Last_Selected_Node()
|
|
|
{
|
|
{
|
|
|
- using (UnitTestApplication.Start(TestServices.RealFocus))
|
|
|
|
|
|
|
+ using (Application())
|
|
|
{
|
|
{
|
|
|
var focus = FocusManager.Instance;
|
|
var focus = FocusManager.Instance;
|
|
|
var navigation = AvaloniaLocator.Current.GetService<IKeyboardNavigationHandler>();
|
|
var navigation = AvaloniaLocator.Current.GetService<IKeyboardNavigationHandler>();
|
|
@@ -647,7 +674,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Pressing_SelectAll_Gesture_With_Downward_Range_Selected_Should_Select_All_Nodes()
|
|
public void Pressing_SelectAll_Gesture_With_Downward_Range_Selected_Should_Select_All_Nodes()
|
|
|
{
|
|
{
|
|
|
- using (UnitTestApplication.Start())
|
|
|
|
|
|
|
+ using (Application())
|
|
|
{
|
|
{
|
|
|
var tree = CreateTestTreeData();
|
|
var tree = CreateTestTreeData();
|
|
|
var target = new TreeView
|
|
var target = new TreeView
|
|
@@ -694,7 +721,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Pressing_SelectAll_Gesture_With_Upward_Range_Selected_Should_Select_All_Nodes()
|
|
public void Pressing_SelectAll_Gesture_With_Upward_Range_Selected_Should_Select_All_Nodes()
|
|
|
{
|
|
{
|
|
|
- using (UnitTestApplication.Start())
|
|
|
|
|
|
|
+ using (Application())
|
|
|
{
|
|
{
|
|
|
var tree = CreateTestTreeData();
|
|
var tree = CreateTestTreeData();
|
|
|
var target = new TreeView
|
|
var target = new TreeView
|
|
@@ -768,97 +795,106 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Right_Click_On_UnselectedItem_Should_Clear_Existing_Selection()
|
|
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]
|
|
[Fact]
|
|
|
public void Shift_Right_Click_Should_Not_Select_Multiple()
|
|
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]
|
|
[Fact]
|
|
|
public void Ctrl_Right_Click_Should_Not_Select_Multiple()
|
|
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]
|
|
[Fact]
|
|
@@ -944,7 +980,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
public void Auto_Expanding_In_Style_Should_Not_Break_Range_Selection()
|
|
public void Auto_Expanding_In_Style_Should_Not_Break_Range_Selection()
|
|
|
{
|
|
{
|
|
|
/// Issue #2980.
|
|
/// Issue #2980.
|
|
|
- using (UnitTestApplication.Start(TestServices.RealStyler))
|
|
|
|
|
|
|
+ using (Application())
|
|
|
{
|
|
{
|
|
|
var target = new DerivedTreeView
|
|
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);
|
|
_mouse.Click(container, modifiers: modifiers);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void AssertChildrenSelected(TreeView treeView, Node rootNode)
|
|
|
|
|
|
|
+ private void AssertChildrenSelected(TreeView treeView, Node rootNode)
|
|
|
{
|
|
{
|
|
|
foreach (var child in rootNode.Children)
|
|
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 class Node : NotifyingBase
|
|
|
{
|
|
{
|
|
|
private IAvaloniaList<Node> _children;
|
|
private IAvaloniaList<Node> _children;
|