Browse Source
* Implement IToggleProvider on MenuItemAutomationPeer * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>pull/21551/head
committed by
GitHub
2 changed files with 146 additions and 4 deletions
@ -0,0 +1,95 @@ |
|||
using Avalonia.Automation; |
|||
using Avalonia.Automation.Peers; |
|||
using Avalonia.Automation.Provider; |
|||
using Avalonia.UnitTests; |
|||
using Xunit; |
|||
|
|||
namespace Avalonia.Controls.UnitTests.Automation; |
|||
|
|||
public class MenuItemAutomationPeerTests : ScopedTestBase |
|||
{ |
|||
private static IToggleProvider GetProvider(MenuItem menuItem) |
|||
{ |
|||
var provider = ControlAutomationPeer.CreatePeerForElement(menuItem).GetProvider<IToggleProvider>(); |
|||
Assert.NotNull(provider); |
|||
return provider; |
|||
} |
|||
|
|||
[Fact] |
|||
public void Toggle_Provider_Is_Not_Exposed_When_ToggleType_None() |
|||
{ |
|||
var peer = ControlAutomationPeer.CreatePeerForElement(new MenuItem()); |
|||
|
|||
Assert.Null(peer.GetProvider<IToggleProvider>()); |
|||
} |
|||
|
|||
[Theory] |
|||
[InlineData(MenuItemToggleType.CheckBox)] |
|||
[InlineData(MenuItemToggleType.Radio)] |
|||
public void Toggle_Provider_Is_Exposed_For_Checkable_Items(MenuItemToggleType toggleType) |
|||
{ |
|||
var peer = ControlAutomationPeer.CreatePeerForElement(new MenuItem { ToggleType = toggleType }); |
|||
|
|||
Assert.NotNull(peer.GetProvider<IToggleProvider>()); |
|||
} |
|||
|
|||
[Fact] |
|||
public void ToggleState_Reflects_IsChecked() |
|||
{ |
|||
var menuItem = new MenuItem { ToggleType = MenuItemToggleType.CheckBox }; |
|||
var provider = GetProvider(menuItem); |
|||
|
|||
Assert.Equal(ToggleState.Off, provider.ToggleState); |
|||
menuItem.IsChecked = true; |
|||
Assert.Equal(ToggleState.On, provider.ToggleState); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Toggle_Flips_CheckBox_Item() |
|||
{ |
|||
var menuItem = new MenuItem { ToggleType = MenuItemToggleType.CheckBox }; |
|||
var provider = GetProvider(menuItem); |
|||
|
|||
provider.Toggle(); |
|||
Assert.True(menuItem.IsChecked); |
|||
|
|||
provider.Toggle(); |
|||
Assert.False(menuItem.IsChecked); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Toggle_Checks_But_Does_Not_Uncheck_Radio_Item() |
|||
{ |
|||
var menuItem = new MenuItem { ToggleType = MenuItemToggleType.Radio }; |
|||
var provider = GetProvider(menuItem); |
|||
|
|||
provider.Toggle(); |
|||
Assert.True(menuItem.IsChecked); |
|||
|
|||
provider.Toggle(); |
|||
Assert.True(menuItem.IsChecked); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Toggle_Raises_ToggleState_PropertyChanged() |
|||
{ |
|||
var menuItem = new MenuItem { ToggleType = MenuItemToggleType.CheckBox }; |
|||
var peer = ControlAutomationPeer.CreatePeerForElement(menuItem); |
|||
var provider = GetProvider(menuItem); |
|||
|
|||
var raised = 0; |
|||
peer.PropertyChanged += (_, e) => |
|||
{ |
|||
if (e.Property == TogglePatternIdentifiers.ToggleStateProperty) |
|||
{ |
|||
Assert.Equal(ToggleState.Off, e.OldValue); |
|||
Assert.Equal(ToggleState.On, e.NewValue); |
|||
raised++; |
|||
} |
|||
}; |
|||
|
|||
provider.Toggle(); |
|||
|
|||
Assert.Equal(1, raised); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue