feat: add headless tests.

This commit is contained in:
rabbitism
2024-11-13 00:58:18 +08:00
parent 27a3e5fb41
commit 05cc27e308
7 changed files with 119 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
mc:Ignorable="d" d:DesignWidth="800"
d:DesignHeight="450"
x:Class="HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus.FocusDialog">
<TextBox Text="Hello" u:FocusHelper.DialogFocusHint="True"></TextBox>
</UserControl>

View File

@@ -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();
}
}

View File

@@ -0,0 +1,9 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800"
d:DesignHeight="450"
x:Class="HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus.NormalDialog">
<TextBox Text="Hello"></TextBox>
</UserControl>

View File

@@ -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();
}
}

View File

@@ -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<DefaultDialogControl>().FirstOrDefault();
Assert.NotNull(dialog);
var border = dialog.GetVisualDescendants().OfType<Border>().FirstOrDefault(a=>a.Name == "PART_Border");
var text = dialog.GetVisualDescendants().OfType<TextBox>().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<DefaultDialogControl>().FirstOrDefault();
Assert.NotNull(dialog);
var border = dialog.GetVisualDescendants().OfType<Border>().FirstOrDefault(a=>a.Name == "PART_Border");
var text = dialog.GetVisualDescendants().OfType<TextBox>().FirstOrDefault();
Assert.False(border?.IsFocused);
Assert.True(text?.IsFocused);
}
}

View File

@@ -0,0 +1,11 @@
<u:UrsaWindow xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
mc:Ignorable="d" d:DesignWidth="800"
d:DesignHeight="450"
x:Class="HeadlessTest.Ursa.Controls.OverlayShared.Dialog_Primary_Focus.TestWindow"
Title="TestWindow">
Welcome to Avalonia!
</u:UrsaWindow>

View File

@@ -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<NormalDialog, object>("Hello World",
options: new OverlayDialogOptions { TopLevelHashCode = GetHashCode() });
}
public void InvokeFocusDialog()
{
OverlayDialog.ShowModal<FocusDialog, object>("Hello World",
options: new OverlayDialogOptions { TopLevelHashCode = GetHashCode() });
}
}