diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml
new file mode 100644
index 0000000..e1903bd
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml.cs b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml.cs
new file mode 100644
index 0000000..fc70acd
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/FocusDialog.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus;
+
+public partial class FocusDialog : UserControl
+{
+ public FocusDialog()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml
new file mode 100644
index 0000000..3d4c3e6
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml.cs b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml.cs
new file mode 100644
index 0000000..0d0025d
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/NormalDialog.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus;
+
+public partial class NormalDialog : UserControl
+{
+ public NormalDialog()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/Test.cs b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/Test.cs
new file mode 100644
index 0000000..a5edd8f
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/Test.cs
@@ -0,0 +1,40 @@
+using Avalonia.Controls;
+using Avalonia.Headless.XUnit;
+using Avalonia.Threading;
+using Avalonia.VisualTree;
+using Ursa.Controls;
+
+namespace HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus;
+
+public class Test
+{
+ [AvaloniaFact]
+ public void Normal_Dialog_Focus_On_Border()
+ {
+ var ursaWindow = new TestWindow();
+ ursaWindow.Show();
+ ursaWindow.InvokeNormalDialog();
+ Dispatcher.UIThread.RunJobs();
+ var dialog = ursaWindow.GetVisualDescendants().OfType().FirstOrDefault();
+ Assert.NotNull(dialog);
+ var border = dialog.GetVisualDescendants().OfType().FirstOrDefault(a=>a.Name == "PART_Border");
+ var text = dialog.GetVisualDescendants().OfType().FirstOrDefault();
+ Assert.True(border?.IsFocused);
+ Assert.False(text?.IsFocused);
+ }
+
+ [AvaloniaFact]
+ public void Focus_Dialog_Focus_On_Primary()
+ {
+ var ursaWindow = new TestWindow();
+ ursaWindow.Show();
+ ursaWindow.InvokeFocusDialog();
+ Dispatcher.UIThread.RunJobs();
+ var dialog = ursaWindow.GetVisualDescendants().OfType().FirstOrDefault();
+ Assert.NotNull(dialog);
+ var border = dialog.GetVisualDescendants().OfType().FirstOrDefault(a=>a.Name == "PART_Border");
+ var text = dialog.GetVisualDescendants().OfType().FirstOrDefault();
+ Assert.False(border?.IsFocused);
+ Assert.True(text?.IsFocused);
+ }
+}
\ No newline at end of file
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml
new file mode 100644
index 0000000..855ec1d
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml
@@ -0,0 +1,11 @@
+
+ Welcome to Avalonia!
+
diff --git a/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml.cs b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml.cs
new file mode 100644
index 0000000..90153ad
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/OverlayShared/Dialog_Primary_Focus/TestWindow.axaml.cs
@@ -0,0 +1,23 @@
+using Ursa.Controls;
+
+namespace HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus;
+
+public partial class TestWindow : UrsaWindow
+{
+ public TestWindow()
+ {
+ InitializeComponent();
+ }
+
+ public void InvokeNormalDialog()
+ {
+ OverlayDialog.ShowModal("Hello World",
+ options: new OverlayDialogOptions { TopLevelHashCode = GetHashCode() });
+ }
+
+ public void InvokeFocusDialog()
+ {
+ OverlayDialog.ShowModal("Hello World",
+ options: new OverlayDialogOptions { TopLevelHashCode = GetHashCode() });
+ }
+}
\ No newline at end of file