fix: fix breadcrumb insertion issue.

This commit is contained in:
rabbitism
2024-11-01 12:01:38 +08:00
parent 474eb9326f
commit 1ca4a5a10a
3 changed files with 46 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ using System.Collections.ObjectModel;
using Avalonia.Controls;
using Avalonia.Headless.XUnit;
using Avalonia.LogicalTree;
using Avalonia.VisualTree;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls;
@@ -34,11 +35,11 @@ public class BreadcrumbTests
var item1 = new TextBlock();
var item2 = new TextBlock();
breadcrumb.Items.Add(item1);
var firstItem = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().FirstOrDefault();
var firstItem = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(firstItem);
Assert.Contains(":last", firstItem.Classes);
breadcrumb.Items.Add(item2);
var lastItem = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().LastOrDefault();
var lastItem = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(lastItem);
Assert.Contains(":last", lastItem.Classes);
Assert.DoesNotContain(":last", firstItem.Classes);
@@ -54,16 +55,38 @@ public class BreadcrumbTests
var items = new ObservableCollection<string>();
breadcrumb.ItemsSource = items;
items.Add("Item 1");
var item1 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().FirstOrDefault();
var item1 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(item1);
Assert.Contains(":last", item1.Classes);
items.Add("Item 2");
var item2 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().LastOrDefault();
var item2 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(item2);
Assert.Contains(":last", item2.Classes);
Assert.DoesNotContain(":last", item1.Classes);
}
[AvaloniaFact]
public void BreadcrumbItem_FromItemsSource_Should_Have_Correct_PseudoClasses_When_Insert()
{
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.GetVisualDescendants().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(item1);
Assert.Contains(":last", item1.Classes);
items.Insert(0, "Item 2");
var item2 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(item2);
Assert.Contains(":last", item2.Classes);
var newItem1 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().FirstOrDefault();
Assert.NotNull(newItem1);
Assert.DoesNotContain(":last", newItem1.Classes);
}
[AvaloniaFact]
public void Bulk_Added_BreadcrumbItem_Should_Have_Correct_PseudoClasses()
{
@@ -77,8 +100,8 @@ public class BreadcrumbTests
"Item 2"
};
breadcrumb.ItemsSource = items;
var item1 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().FirstOrDefault();
var item2 = breadcrumb.GetLogicalChildren().OfType<BreadcrumbItem>().LastOrDefault();
var item1 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().FirstOrDefault();
var item2 = breadcrumb.GetVisualDescendants().OfType<BreadcrumbItem>().LastOrDefault();
Assert.NotNull(item1);
Assert.NotNull(item2);
Assert.Contains(":last", item2.Classes);