committed by
GitHub
6 changed files with 146 additions and 0 deletions
@ -0,0 +1,63 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Automation; |
||||
|
using Avalonia.Automation.Peers; |
||||
|
using Avalonia.Automation.Provider; |
||||
|
|
||||
|
namespace Avalonia.Controls.Automation.Peers |
||||
|
{ |
||||
|
public class RadioButtonAutomationPeer : ToggleButtonAutomationPeer, ISelectionItemProvider |
||||
|
{ |
||||
|
public RadioButtonAutomationPeer(RadioButton owner) : base(owner) |
||||
|
{ |
||||
|
owner.PropertyChanged += (a, e) => |
||||
|
{ |
||||
|
if (e.Property == RadioButton.IsCheckedProperty) |
||||
|
{ |
||||
|
RaiseToggleStatePropertyChangedEvent((bool?)e.OldValue, (bool?)e.NewValue); |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
override protected string GetClassNameCore() |
||||
|
{ |
||||
|
return "RadioButton"; |
||||
|
} |
||||
|
|
||||
|
override protected AutomationControlType GetAutomationControlTypeCore() |
||||
|
{ |
||||
|
return AutomationControlType.RadioButton; |
||||
|
} |
||||
|
|
||||
|
public bool IsSelected => ((RadioButton)Owner).IsChecked == true; |
||||
|
|
||||
|
public ISelectionProvider? SelectionContainer => null; |
||||
|
|
||||
|
public void AddToSelection() |
||||
|
{ |
||||
|
if (((RadioButton)Owner).IsChecked != true) |
||||
|
throw new InvalidOperationException("Operation cannot be performed"); |
||||
|
} |
||||
|
|
||||
|
public void RemoveFromSelection() |
||||
|
{ |
||||
|
if (((RadioButton)Owner).IsChecked == true) |
||||
|
throw new InvalidOperationException("Operation cannot be performed"); |
||||
|
} |
||||
|
|
||||
|
public void Select() |
||||
|
{ |
||||
|
if (!IsEnabled()) |
||||
|
throw new InvalidOperationException("Element is disabled thus it cannot be selected"); |
||||
|
|
||||
|
((RadioButton)Owner).IsChecked = true; |
||||
|
} |
||||
|
|
||||
|
internal virtual void RaiseToggleStatePropertyChangedEvent(bool? oldValue, bool? newValue) |
||||
|
{ |
||||
|
RaisePropertyChangedEvent( |
||||
|
SelectionItemPatternIdentifiers.IsSelectedProperty, |
||||
|
oldValue == true, |
||||
|
newValue == true); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
using Avalonia.Automation.Provider; |
||||
|
|
||||
|
namespace Avalonia.Automation |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Contains values used as identifiers by <see cref="ISelectionItemProvider"/>.
|
||||
|
/// </summary>
|
||||
|
public static class SelectionItemPatternIdentifiers |
||||
|
{ |
||||
|
/// <summary>Indicates the element is currently selected.</summary>
|
||||
|
public static AutomationProperty IsSelectedProperty { get; } = new AutomationProperty(); |
||||
|
|
||||
|
/// <summary>Indicates the element is currently selected.</summary>
|
||||
|
public static AutomationProperty SelectionContainerProperty { get; } = new AutomationProperty(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,48 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using OpenQA.Selenium.Appium; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.IntegrationTests.Appium |
||||
|
{ |
||||
|
[Collection("Default")] |
||||
|
public class RadioButtonTests |
||||
|
{ |
||||
|
private readonly AppiumDriver<AppiumWebElement> _session; |
||||
|
|
||||
|
public RadioButtonTests(TestAppFixture fixture) |
||||
|
{ |
||||
|
_session = fixture.Session; |
||||
|
|
||||
|
var tabs = _session.FindElementByAccessibilityId("MainTabs"); |
||||
|
tabs.FindElementByName("RadioButton").Click(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
[Fact] |
||||
|
public void RadioButton_IsChecked_True_When_Clicked() |
||||
|
{ |
||||
|
var button = _session.FindElementByAccessibilityId("BasicRadioButton"); |
||||
|
Assert.False(button.GetIsChecked()); |
||||
|
button.Click(); |
||||
|
Assert.True(button.GetIsChecked()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void ThreeState_RadioButton_IsChecked_False_When_Other_ThreeState_RadioButton_Checked() |
||||
|
{ |
||||
|
var button1 = _session.FindElementByAccessibilityId("ThreeStatesRadioButton1"); |
||||
|
var button2 = _session.FindElementByAccessibilityId("ThreeStatesRadioButton2"); |
||||
|
Assert.True(button1.GetIsChecked()); |
||||
|
Assert.False(button2.GetIsChecked()); |
||||
|
button2.Click(); |
||||
|
Assert.False(button1.GetIsChecked()); |
||||
|
Assert.True(button2.GetIsChecked()); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue