Browse Source

Get CheckBox automation tests passing on macOS.

ui-automation-test
Steven Kirk 5 years ago
parent
commit
812bf2665e
  1. 8
      native/Avalonia.Native/src/OSX/automation.mm
  2. 34
      tests/Avalonia.IntegrationTests.Win32/CheckBoxTests.cs
  3. 9
      tests/Avalonia.IntegrationTests.Win32/ElementExtensions.cs
  4. 12
      tests/Avalonia.IntegrationTests.Win32/TestAppFixture.cs

8
native/Avalonia.Native/src/OSX/automation.mm

@ -194,7 +194,7 @@ private:
switch (_peer->ToggleProvider_GetToggleState()) {
case 0: return [NSNumber numberWithBool:NO];
case 1: return [NSNumber numberWithBool:YES];
default: return [NSNumber numberWithInt:-1];
default: return [NSNumber numberWithInt:2];
}
}
else if (_peer->IsValueProvider())
@ -314,6 +314,10 @@ private:
{
_peer->ExpandCollapseProvider_Expand();
}
else if (_peer->IsToggleProvider())
{
_peer->ToggleProvider_Toggle();
}
return YES;
}
@ -357,7 +361,7 @@ private:
}
else if (selector == @selector(accessibilityPerformPress))
{
return _peer->IsInvokeProvider() || _peer->IsExpandCollapseProvider();
return _peer->IsInvokeProvider() || _peer->IsExpandCollapseProvider() || _peer->IsToggleProvider();
}
else if (selector == @selector(accessibilityPerformIncrement) ||
selector == @selector(accessibilityPerformDecrement) ||

34
tests/Avalonia.IntegrationTests.Win32/CheckBoxTests.cs

@ -6,7 +6,7 @@ namespace Avalonia.IntegrationTests.Win32
[Collection("Default")]
public class CheckBoxTests
{
private AppiumDriver<AppiumWebElement> _session;
private readonly AppiumDriver<AppiumWebElement> _session;
public CheckBoxTests(TestAppFixture fixture)
{
@ -22,14 +22,11 @@ namespace Avalonia.IntegrationTests.Win32
{
var checkBox = _session.FindElementByAccessibilityId("UncheckedCheckBox");
Assert.Equal("Unchecked", checkBox.Text);
Assert.False(checkBox.Selected);
Assert.Equal("0", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal("Unchecked", checkBox.GetName());
Assert.Equal(false, checkBox.GetIsChecked());
checkBox.Click();
Assert.True(checkBox.Selected);
Assert.Equal("1", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal(true, checkBox.GetIsChecked());
}
[Fact]
@ -37,14 +34,11 @@ namespace Avalonia.IntegrationTests.Win32
{
var checkBox = _session.FindElementByAccessibilityId("CheckedCheckBox");
Assert.Equal("Checked", checkBox.Text);
Assert.True(checkBox.Selected);
Assert.Equal("1", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal("Checked", checkBox.GetName());
Assert.Equal(true, checkBox.GetIsChecked());
checkBox.Click();
Assert.False(checkBox.Selected);
Assert.Equal("0", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal(false, checkBox.GetIsChecked());
}
[Fact]
@ -52,21 +46,17 @@ namespace Avalonia.IntegrationTests.Win32
{
var checkBox = _session.FindElementByAccessibilityId("ThreeStateCheckBox");
Assert.Equal("ThreeState", checkBox.Text);
Assert.Equal("2", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal("ThreeState", checkBox.GetName());
Assert.Null(checkBox.GetIsChecked());
checkBox.Click();
Assert.False(checkBox.Selected);
Assert.Equal("0", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal(false, checkBox.GetIsChecked());
checkBox.Click();
Assert.True(checkBox.Selected);
Assert.Equal("1", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Equal(true, checkBox.GetIsChecked());
checkBox.Click();
Assert.Equal("2", checkBox.GetAttribute("Toggle.ToggleState"));
Assert.Null(checkBox.GetIsChecked());
}
}
}

9
tests/Avalonia.IntegrationTests.Win32/ElementExtensions.cs

@ -8,6 +8,15 @@ namespace Avalonia.IntegrationTests.Win32
{
public static string GetName(this AppiumWebElement element) => GetAttribute(element, "Name", "title");
public static bool? GetIsChecked(this AppiumWebElement element) =>
GetAttribute(element, "Toggle.ToggleState", "value") switch
{
"0" => false,
"1" => true,
"2" => null,
_ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.")
};
public static string GetAttribute(AppiumWebElement element, string windows, string macOS)
{
return element.GetAttribute(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? windows : macOS);

12
tests/Avalonia.IntegrationTests.Win32/TestAppFixture.cs

@ -52,7 +52,17 @@ namespace Avalonia.IntegrationTests.Win32
public AppiumDriver<AppiumWebElement> Session { get; }
public void Dispose() => Session.Close();
public void Dispose()
{
try
{
Session.Close();
}
catch
{
// Closing the session currently seems to crash the mac2 driver.
}
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]

Loading…
Cancel
Save