test: dynamic form a11y failure.

This commit is contained in:
Dong Bin
2025-01-10 21:27:30 +08:00
parent d7572721a4
commit 47b39b9e74
3 changed files with 91 additions and 1 deletions

View File

@@ -0,0 +1,26 @@
<UserControl
x:Class="HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests.DynamicForm"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:accessibilityTests="clr-namespace:HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="accessibilityTests:DynamicFormViewModel"
mc:Ignorable="d">
<u:Form Name="form" ItemsSource="{Binding Items}">
<u:Form.Styles>
<Style x:DataType="accessibilityTests:FormTextViewModel" Selector="u|FormItem">
<Setter Property="Label" Value="{Binding Label}" />
</Style>
</u:Form.Styles>
<u:Form.ItemTemplate>
<DataTemplate DataType="accessibilityTests:FormTextViewModel">
<TextBox Text="{Binding Value}" />
</DataTemplate>
</u:Form.ItemTemplate>
</u:Form>
</UserControl>

View File

@@ -0,0 +1,31 @@
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests;
public partial class DynamicForm : UserControl
{
public DynamicForm()
{
InitializeComponent();
this.DataContext = new DynamicFormViewModel();
}
}
public partial class DynamicFormViewModel: ObservableObject
{
public ObservableCollection<FormTextViewModel> Items { get; set; } =
[
new() { Label = "_Name" },
new() { Label = "_Email" }
];
}
public partial class FormTextViewModel : ObservableObject
{
[ObservableProperty] private string? _label;
[ObservableProperty] private string? _value;
}

View File

@@ -2,13 +2,15 @@ using Avalonia.Controls;
using Avalonia.Headless; using Avalonia.Headless;
using Avalonia.Headless.XUnit; using Avalonia.Headless.XUnit;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.LogicalTree;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests; namespace HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests;
public class FormAccessibilityTests public class FormAccessibilityTests
{ {
[AvaloniaFact] [AvaloniaFact]
public void Form_Inner_Control_Accessible() public void Static_Form_Inner_Control_Accessible()
{ {
var window = new Window(); var window = new Window();
var form = new StaticForm(); var form = new StaticForm();
@@ -24,4 +26,35 @@ public class FormAccessibilityTests
Assert.False(form.NameBox.IsFocused); Assert.False(form.NameBox.IsFocused);
Assert.True(form.EmailBox.IsFocused); Assert.True(form.EmailBox.IsFocused);
} }
[AvaloniaFact]
public void Dynamic_Form_Inner_Control_Accessible()
{
var window = new Window();
var form = new DynamicForm();
window.Content = form;
window.Show();
var logicalChildren = form.form.GetLogicalChildren().ToList();
Assert.Equal(2, logicalChildren.Count);
var first = logicalChildren[0] as FormItem;
var second = logicalChildren[1] as FormItem;
Assert.NotNull(first);
Assert.NotNull(second);
var text1 = first.GetLogicalChildren().OfType<TextBox>().FirstOrDefault();
var text2 = second.GetLogicalChildren().OfType<TextBox>().FirstOrDefault();
Assert.NotNull(text1);
Assert.NotNull(text2);
Assert.False(text1.IsFocused);
Assert.False(text2.IsFocused);
window.KeyPressQwerty(PhysicalKey.N, RawInputModifiers.Alt);
Assert.True(text1.IsFocused);
Assert.False(text2.IsFocused);
window.KeyPressQwerty(PhysicalKey.E, RawInputModifiers.Alt);
Assert.False(text1.IsFocused);
Assert.True(text2.IsFocused);
}
} }