1. fix #427.
2. add headless test for this fix.
This commit is contained in:
rabbitism
2024-10-08 20:58:40 +08:00
parent d0e57ba6ed
commit 8bd1962b15
9 changed files with 192 additions and 3 deletions

View File

@@ -0,0 +1,10 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:semi="https://irihi.tech/semi"
xmlns:u-semi="https://irihi.tech/ursa/themes/semi"
x:Class="HeadlessTest.Ursa.App">
<Application.Styles>
<semi:SemiTheme />
<u-semi:SemiTheme/>
</Application.Styles>
</Application>

View File

@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace HeadlessTest.Ursa;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -0,0 +1,66 @@
using System.Collections.ObjectModel;
using Avalonia.Controls;
using Avalonia.Headless.XUnit;
using Avalonia.LogicalTree;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls;
public class BreadcrumbTests
{
[AvaloniaFact]
public void BreadcrumbItem_Should_Have_Correct_PseudoClasses()
{
var window = new Window();
var breadcrumb = new Breadcrumb();
window.Content = breadcrumb;
window.Show();
var item1 = new BreadcrumbItem();
var item2 = new BreadcrumbItem();
breadcrumb.Items.Add(item1);
Assert.Contains(":last", item1.Classes);
breadcrumb.Items.Add(item2);
Assert.Contains(":last", item2.Classes);
Assert.DoesNotContain(":last", item1.Classes);
}
[AvaloniaFact]
public void Generated_BreadcrumbItem_Should_Have_Correct_PseudoClasses()
{
var window = new Window();
var breadcrumb = new Breadcrumb();
window.Content = breadcrumb;
window.Show();
var item1 = new TextBlock();
var item2 = new TextBlock();
breadcrumb.Items.Add(item1);
var firstItem = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(firstItem);
Assert.Contains(":last", firstItem.Classes);
breadcrumb.Items.Add(item2);
var lastItem = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(lastItem);
Assert.Contains(":last", lastItem.Classes);
Assert.DoesNotContain(":last", firstItem.Classes);
}
[AvaloniaFact]
public void BreadcrumbItem_FromItemsSource_Should_Have_Correct_PseudoClasses()
{
var window = new Window();
var breadcrumb = new Breadcrumb();
window.Content = breadcrumb;
window.Show();
var items = new ObservableCollection<string>();
breadcrumb.ItemsSource = items;
items.Add("Item 1");
var item1 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(item1);
Assert.Contains(":last", item1.Classes);
items.Add("Item 2");
var item2 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(item2);
Assert.Contains(":last", item2.Classes);
Assert.DoesNotContain(":last", item1.Classes);
}
}

View File

@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Headless.XUnit" Version="11.1.3" />
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
<PackageReference Include="Semi.Avalonia" Version="11.1.0.4" />
<PackageReference Include="xunit" Version="2.5.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"/>
</ItemGroup>
<ItemGroup>
<Using Include="Xunit"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj" />
<ProjectReference Include="..\..\src\Ursa.Themes.Semi\Ursa.Themes.Semi.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Headless;
using HeadlessTest.Ursa;
[assembly: AvaloniaTestApplication(typeof(TestAppBuilder))]
namespace HeadlessTest.Ursa;
public class TestAppBuilder
{
public static AppBuilder BuildAvaloniaApp() =>
AppBuilder.Configure<App>().UseHeadless(new AvaloniaHeadlessPlatformOptions());
}

View File

@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
<PackageReference Include="xunit" Version="2.5.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"/>
</ItemGroup>
<ItemGroup>
<Using Include="Xunit"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj" />
</ItemGroup>
</Project>