Browse Source

Added failing unit test for #277.

pull/1048/head
Steven Kirk 9 years ago
parent
commit
bb11b302b8
  1. 43
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs
  2. 6
      tests/Avalonia.UnitTests/TestServices.cs
  3. 1
      tests/Avalonia.UnitTests/UnitTestApplication.cs

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

@ -315,6 +315,49 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(new[] { "NewChild1" }, ExtractItemHeader(target, 1));
}
[Fact]
public void Keyboard_Navigation_Should_Move_To_Last_Selected_Node()
{
using (UnitTestApplication.Start(TestServices.RealFocus))
{
var focus = FocusManager.Instance;
var navigation = AvaloniaLocator.Current.GetService<IKeyboardNavigationHandler>();
var data = CreateTestTreeData();
var target = new TreeView
{
Template = CreateTreeViewTemplate(),
Items = data,
DataTemplates = CreateNodeDataTemplate(),
};
var button = new Button();
var root = new TestRoot
{
Child = new StackPanel
{
Children = { target, button },
}
};
ApplyTemplates(target);
var item = data[0].Children[0];
var node = target.ItemContainerGenerator.Index.ContainerFromItem(item);
Assert.NotNull(node);
node.Focus();
Assert.Same(node, focus.Current);
navigation.Move(focus.Current, NavigationDirection.Next);
Assert.Same(button, focus.Current);
navigation.Move(focus.Current, NavigationDirection.Next);
Assert.Same(node, focus.Current);
}
}
private void ApplyTemplates(TreeView tree)
{
tree.ApplyTemplate();

6
tests/Avalonia.UnitTests/TestServices.cs

@ -50,6 +50,7 @@ namespace Avalonia.UnitTests
public static readonly TestServices RealFocus = new TestServices(
focusManager: new FocusManager(),
keyboardDevice: () => new KeyboardDevice(),
keyboardNavigation: new KeyboardNavigationHandler(),
inputManager: new InputManager());
public static readonly TestServices RealLayoutManager = new TestServices(
@ -63,6 +64,7 @@ namespace Avalonia.UnitTests
IFocusManager focusManager = null,
IInputManager inputManager = null,
Func<IKeyboardDevice> keyboardDevice = null,
IKeyboardNavigationHandler keyboardNavigation = null,
ILayoutManager layoutManager = null,
IRuntimePlatform platform = null,
Func<IRenderRoot, IRenderLoop, IRenderer> renderer = null,
@ -79,6 +81,7 @@ namespace Avalonia.UnitTests
FocusManager = focusManager;
InputManager = inputManager;
KeyboardDevice = keyboardDevice;
KeyboardNavigation = keyboardNavigation;
LayoutManager = layoutManager;
Platform = platform;
Renderer = renderer;
@ -96,6 +99,7 @@ namespace Avalonia.UnitTests
public IInputManager InputManager { get; }
public IFocusManager FocusManager { get; }
public Func<IKeyboardDevice> KeyboardDevice { get; }
public IKeyboardNavigationHandler KeyboardNavigation { get; }
public ILayoutManager LayoutManager { get; }
public IRuntimePlatform Platform { get; }
public Func<IRenderRoot, IRenderLoop, IRenderer> Renderer { get; }
@ -113,6 +117,7 @@ namespace Avalonia.UnitTests
IFocusManager focusManager = null,
IInputManager inputManager = null,
Func<IKeyboardDevice> keyboardDevice = null,
IKeyboardNavigationHandler keyboardNavigation = null,
ILayoutManager layoutManager = null,
IRuntimePlatform platform = null,
Func<IRenderRoot, IRenderLoop, IRenderer> renderer = null,
@ -131,6 +136,7 @@ namespace Avalonia.UnitTests
focusManager: focusManager ?? FocusManager,
inputManager: inputManager ?? InputManager,
keyboardDevice: keyboardDevice ?? KeyboardDevice,
keyboardNavigation: keyboardNavigation ?? KeyboardNavigation,
layoutManager: layoutManager ?? LayoutManager,
platform: platform ?? Platform,
renderer: renderer ?? Renderer,

1
tests/Avalonia.UnitTests/UnitTestApplication.cs

@ -49,6 +49,7 @@ namespace Avalonia.UnitTests
.BindToSelf<IGlobalStyles>(this)
.Bind<IInputManager>().ToConstant(Services.InputManager)
.Bind<IKeyboardDevice>().ToConstant(Services.KeyboardDevice?.Invoke())
.Bind<IKeyboardNavigationHandler>().ToConstant(Services.KeyboardNavigation)
.Bind<ILayoutManager>().ToConstant(Services.LayoutManager)
.Bind<IRuntimePlatform>().ToConstant(Services.Platform)
.Bind<IRendererFactory>().ToConstant(new RendererFactory(Services.Renderer))

Loading…
Cancel
Save