using AngleSharp.Dom;
using AngleSharp.Html.Parser;
namespace XFESystem.Browser.Tests;
public sealed class CssPropertySharingTests
{
[Fact]
public void LargeInheritedThemeIsSharedButOverridesAndOldLayoutsStayIsolated()
{
string theme = string.Concat(Enumerable.Range(0, 500).Select(i => $"--theme-{i}:#{i:X6};"));
var page = new HtmlParser().ParseDocument($"
ABC
");
var engine = new BrowserLayoutEngine();
var before = engine.Layout(page, new(800, 600));
CssComputedStyle Style(BrowserDisplayList list, string id) => list.GetComputedStyle(page.GetElementById(id)!)!;
var inherited = Style(before, "Parent").CustomProperties;
Assert.Same(inherited, Style(before, "A").CustomProperties);
Assert.Same(inherited, Style(before, "C").CustomProperties);
Assert.NotSame(inherited, Style(before, "Override").CustomProperties);
Assert.Same(Style(before, "Override").CustomProperties, Style(before, "Child").CustomProperties);
Assert.Equal(502, inherited.Count);
Assert.Equal("#123456", Style(before, "A").GetPropertyValue("--ink"));
Assert.Equal("rgb(101, 67, 33)", Style(before, "Child").GetPropertyValue("color"));
Assert.Contains(before.Commands, command => command.Text == "Theme" && command.Color == 0x123456);
page.GetElementById("Parent")!.SetAttribute("style", "--ink:#abcdef");
var after = engine.Layout(page, new(800, 600));
Assert.Equal("#123456", Style(before, "A").GetPropertyValue("--ink"));
Assert.Equal("#abcdef", Style(after, "A").GetPropertyValue("--ink"));
Assert.Equal("#654321", Style(after, "Override").GetPropertyValue("--ink"));
}
[Fact]
public void ResetInvalidAndInheritedCustomPropertiesDoNotMutateSiblings()
{
var page = new HtmlParser().ParseDocument("ABC");
var layout = new BrowserLayoutEngine().Layout(page, new(800, 600));
var a = layout.GetComputedStyle(page.GetElementById("A")!)!;
var b = layout.GetComputedStyle(page.GetElementById("B")!)!;
var c = layout.GetComputedStyle(page.GetElementById("C")!)!;
Assert.Equal("rgb(255, 0, 0)", a.GetPropertyValue("color"));
Assert.False(a.Properties.ContainsKey("--ink"));
Assert.False(c.Properties.ContainsKey("--bad"));
Assert.Equal("#123456", b.GetPropertyValue("--ink"));
Assert.Equal("#123456", c.GetPropertyValue("--ink"));
}
}