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("