Skip to content

Commit 5fd502d

Browse files
hdocsekHans Docsek
authored andcommitted
Add AccessKeyHandler tests for accelerators with more than one match
1 parent 34b846d commit 5fd502d

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

tests/Avalonia.Base.UnitTests/Input/AccessKeyHandlerTests.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using Avalonia.Controls;
3+
using Avalonia.Controls.Primitives;
34
using Avalonia.Input;
45
using Avalonia.UnitTests;
56
using Moq;
@@ -206,6 +207,56 @@ public void Should_Open_MainMenu_On_Alt_KeyUp()
206207
menu.Verify(x => x.Open(), Times.Once);
207208
}
208209

210+
[Fact]
211+
public void Should_Cycle_Focus_When_Accelerator_Has_More_Than_One_Match()
212+
{
213+
using (UnitTestApplication.Start(TestServices.RealFocus))
214+
{
215+
var fileMenuItem = new MenuItem{ Header = "_File", Focusable = true, IsVisible = true };
216+
var fileItemAccessText = new AccessText { Text = "_File" };
217+
fileMenuItem.AddLogicalChild(fileItemAccessText);
218+
219+
var findItemAccessText = new AccessText { Text = "_Find" };
220+
var findItem = new MenuItem{ Header = "_Find" ,Focusable = true, IsVisible = true };
221+
findItem.AddLogicalChild(findItemAccessText);
222+
223+
var root = new TestRoot
224+
{
225+
Child = new StackPanel
226+
{
227+
Children =
228+
{
229+
findItem,
230+
fileMenuItem
231+
}
232+
}
233+
};
234+
235+
var target = new AccessKeyHandler();
236+
237+
target.SetOwner(root);
238+
var focusManager = Assert.IsType<FocusManager>(root.FocusManager);
239+
240+
target.Register('F', fileItemAccessText);
241+
target.Register('F', findItemAccessText);
242+
243+
// focus first item
244+
KeyDown(root, Key.F, KeyModifiers.Alt);
245+
var focusedElement = Assert.IsType<MenuItem>(focusManager.GetFocusedElement());
246+
Assert.Same(fileMenuItem.Header, focusedElement.Header);
247+
248+
// focus next item
249+
KeyDown(root, Key.F, KeyModifiers.Alt);
250+
focusedElement = Assert.IsType<MenuItem>(focusManager.GetFocusedElement());
251+
Assert.Same(findItem.Header, focusedElement.Header);
252+
253+
// focus first item again
254+
KeyDown(root, Key.F, KeyModifiers.Alt);
255+
focusedElement = Assert.IsType<MenuItem>(focusManager.GetFocusedElement());
256+
Assert.Same(fileMenuItem.Header, focusedElement.Header);
257+
}
258+
}
259+
209260
private static void KeyDown(IInputElement target, Key key, KeyModifiers modifiers = KeyModifiers.None)
210261
{
211262
target.RaiseEvent(new KeyEventArgs

0 commit comments

Comments
 (0)