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")); } }