Browse Source

revert fix and add failing unit test.

pull/4969/head
Dan Walmsley 6 years ago
parent
commit
d3c44a89c0
  1. 2
      src/Avalonia.Controls/TreeView.cs
  2. 44
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

2
src/Avalonia.Controls/TreeView.cs

@ -382,7 +382,7 @@ namespace Avalonia.Controls
ItemContainerGenerator.Index.ContainerFromItem(_selectedItem) :
ItemContainerGenerator.ContainerFromIndex(0);
return (result is {}, result); // SelectedItem may not be in the treeview.
return (true, result); // SelectedItem may not be in the treeview.
}
return (true, null);

44
tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

@ -675,6 +675,50 @@ namespace Avalonia.Controls.UnitTests
Assert.Same(node, focus.Current);
}
}
[Fact]
public void Keyboard_Navigation_Should_Not_Crash_If_Selected_Item_Is_not_In_Tree()
{
using (Application())
{
var focus = FocusManager.Instance;
var navigation = AvaloniaLocator.Current.GetService<IKeyboardNavigationHandler>();
var data = CreateTestTreeData();
var selectedNode = new Node { Value = "Out of Tree Selected Item" };
var target = new TreeView
{
Template = CreateTreeViewTemplate(),
Items = data,
SelectedItem = selectedNode
};
var button = new Button();
var root = new TestRoot
{
Child = new StackPanel
{
Children = { target, button },
}
};
CreateNodeDataTemplate(target);
ApplyTemplates(target);
ExpandAll(target);
var item = data[0].Children[0];
var node = target.ItemContainerGenerator.Index.ContainerFromItem(item);
Assert.NotNull(node);
target.SelectedItem = selectedNode;
node.Focus();
Assert.Same(node, focus.Current);
var next = KeyboardNavigationHandler.GetNext(node, NavigationDirection.Previous);
}
}
[Fact]
public void Pressing_SelectAll_Gesture_Should_Select_All_Nodes()

Loading…
Cancel
Save