using System.Xml.Linq; using AtomUI.Controls; using Avalonia; using Avalonia.Controls; using Avalonia.Headless; using Avalonia.Styling; using Avalonia.Threading; using Avalonia.VisualTree; using Shouldly; using Xunit; using AvaloniaWindow = Avalonia.Controls.Window; namespace AtomUI.Desktop.Controls.Tests.Upload; public class UploadDropVisualContractTests { private static readonly XNamespace AvaloniaNamespace = "https://github.com/avaloniaui"; [Fact] public void Drop_Themes_Keep_The_Existing_Default_Visual_Contract() { var dropZoneTheme = XDocument.Load(GetRepoFile( "src/AtomUI.Desktop.Controls/Upload/Themes/UploadDropZoneTheme.axaml")); var dropAreaTheme = XDocument.Load(GetRepoFile( "src/AtomUI.Desktop.Controls/Upload/Themes/UploadDefaultDropAreaTheme.axaml")); var dropZoneTemplate = dropZoneTheme.Descendants(AvaloniaNamespace + "ControlTemplate").Single(); var dropZoneRoot = dropZoneTemplate.Elements().Single(); dropZoneRoot.Name.LocalName.ShouldBe("ContentPresenter"); ((string?)dropZoneRoot.Attribute("Name")).ShouldBe("PART_ContentPresenter"); ((string?)dropZoneRoot.Attribute("Content")).ShouldBe("{TemplateBinding Content}"); ((string?)dropZoneRoot.Attribute("ContentTemplate")).ShouldBe("{TemplateBinding ContentTemplate}"); ((string?)dropZoneRoot.Attribute("HorizontalContentAlignment")) .ShouldBe("{TemplateBinding HorizontalContentAlignment}"); ((string?)dropZoneRoot.Attribute("VerticalContentAlignment")) .ShouldBe("{TemplateBinding VerticalContentAlignment}"); var dropAreaTemplate = dropAreaTheme.Descendants(AvaloniaNamespace + "ControlTemplate").Single(); var frame = dropAreaTemplate.Elements().Single(); frame.Name.LocalName.ShouldBe("DashedBorder"); ((string?)frame.Attribute("Name")).ShouldBe("Frame"); ((string?)frame.Attribute("Background")).ShouldBe("{TemplateBinding Background}"); ((string?)frame.Attribute("BorderBrush")).ShouldBe("{TemplateBinding BorderBrush}"); ((string?)frame.Attribute("BorderThickness")).ShouldBe("{TemplateBinding BorderThickness}"); ((string?)frame.Attribute("CornerRadius")).ShouldBe("{TemplateBinding CornerRadius}"); ((string?)frame.Attribute("Padding")).ShouldBe("{TemplateBinding Padding}"); var stackPanel = frame.Elements().Single(); stackPanel.Name.LocalName.ShouldBe("StackPanel"); ((string?)stackPanel.Attribute("Orientation")).ShouldBe("Vertical"); stackPanel.Elements().Select(element => (element.Name.LocalName, (string?)element.Attribute("Name"))) .ShouldBe([ ("IconPresenter", "IconPresenter"), ("ContentPresenter", "HeaderContentPresenter"), ("ContentPresenter", "SubHeaderContentPresenter") ]); var source = File.ReadAllText(GetRepoFile( "src/AtomUI.Desktop.Controls/Upload/Themes/UploadDefaultDropAreaTheme.axaml")); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain(""); source.ShouldContain("