using AtomUI.Theme.Styling; using System.Collections.ObjectModel; using AtomUI.Controls.Data; using AtomUI.Controls.Primitives; using AtomUI.Desktop.Controls.Primitives; using AtomUI.Theme; using AtomUI.Theme.Schema; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Media; using Avalonia.Styling; using Avalonia.Threading; using Avalonia.VisualTree; using Shouldly; using Xunit; using AtomListBox = AtomUI.Desktop.Controls.ListBox; using AtomListBoxItem = AtomUI.Desktop.Controls.ListBoxItem; using AvaloniaWindow = Avalonia.Controls.Window; namespace AtomUI.Desktop.Controls.Tests.ListBox; public class ListBoxSemanticPartTests { private const string ItemClass = "semantic-item"; private const string ItemRoute = "> .semantic-item"; static ListBoxSemanticPartTests() { AvaloniaTestApp.EnsureInitialized(); } [Fact] public void Registered_Descriptor_Exposes_Only_The_Approved_Parts() { var registry = Application.Current.ShouldNotBeNull() .GetThemeManager().ShouldNotBeNull() .SemanticParts; registry.TryGetControl(typeof(AtomListBox), out var descriptor).ShouldBeTrue(); descriptor.ShouldNotBeNull(); descriptor.Parts.Select(static part => part.Name) .ShouldBe(["root", "item"]); AssertRoot(descriptor.Parts.Single(static part => part.Name == "root")); AssertPart(descriptor.Parts.Single(static part => part.Name == "item"), ItemClass, typeof(AtomListBoxItem), ItemRoute); } [Fact] public void Items_Produce_One_Item_Marker_Per_Container() { var listBox = new AtomListBox { ItemsSource = CreateItems("Olivia", "Liam", "Emma") }; ShowInWindow(listBox, () => { GetSemanticItems(listBox).Length.ShouldBe(3); }); } [Fact] public void Explicit_Item_Container_Receives_The_Semantic_Marker() { var view = new SemanticParts.SemanticRepairStylesView(); var listBox = view.FindControl("ListBox").ShouldNotBeNull(); var style = view.Styles.OfType