XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
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($"<style>:root{{{theme}--ink:#123456;--label:'Theme'}}span{{color:var(--ink)}}#Override{{--ink:#654321}}#A::before{{content:var(--label);color:var(--ink)}}</style><div id=Parent><span id=A>A</span><span id=Override><b id=Child>B</b></span><span id=C>C</span></div>");
        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("<style>:root{--ink:#123456;--bad:var(--missing)}#A{--ink:initial;color:var(--ink,red)}#B{--ink:inherit;color:var(--ink)}</style><i id=A>A</i><i id=B>B</i><i id=C>C</i>");
        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"));
    }
}