diff --git a/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml
new file mode 100644
index 0000000..9dbaba4
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml.cs b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml.cs
new file mode 100644
index 0000000..822ff72
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/DynamicForm.axaml.cs
@@ -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 Items { get; set; } =
+ [
+ new() { Label = "_Name" },
+ new() { Label = "_Email" }
+ ];
+}
+
+public partial class FormTextViewModel : ObservableObject
+{
+ [ObservableProperty] private string? _label;
+ [ObservableProperty] private string? _value;
+}
\ No newline at end of file
diff --git a/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/FormAccessibilityTests.cs b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/FormAccessibilityTests.cs
index e73e96e..f27102a 100644
--- a/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/FormAccessibilityTests.cs
+++ b/tests/HeadlessTest.Ursa/Controls/FormTests/AccessibilityTests/FormAccessibilityTests.cs
@@ -2,13 +2,15 @@ using Avalonia.Controls;
using Avalonia.Headless;
using Avalonia.Headless.XUnit;
using Avalonia.Input;
+using Avalonia.LogicalTree;
+using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls.FormTests.AccessibilityTests;
public class FormAccessibilityTests
{
[AvaloniaFact]
- public void Form_Inner_Control_Accessible()
+ public void Static_Form_Inner_Control_Accessible()
{
var window = new Window();
var form = new StaticForm();
@@ -24,4 +26,35 @@ public class FormAccessibilityTests
Assert.False(form.NameBox.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().FirstOrDefault();
+ var text2 = second.GetLogicalChildren().OfType().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);
+ }
}
\ No newline at end of file