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

XFESystem

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

公开
关注 0 Fork 0 Star 0
UTF-8
using AngleSharp.Html.Parser;

namespace XFESystem.Browser.Tests;

public sealed class CssCommentStreamingTests
{
    [Theory]
    [InlineData("/* { }; fake{color:red} */#A{width:137px;color:blue/* ; } */;height:29px}")]
    [InlineData("@media(min-width:600px){/* } ; */#A{wi/* join */dth:137px;color:blue;height:29px}}")]
    [InlineData("#A/* } */{width:137px;/* ; } */color:blue;height:29px}/*unterminated { ;")]
    [InlineData("#A{font-family:'text /*not a comment*/ ; {}';width:137px;color:blue;height:29px}")]
    public void OriginalCommentsAndQuotedDelimitersKeepExactCascadeAndGeometry(string css)
    {
        var page=new HtmlParser().ParseDocument("<div id=A>Visible</div>");var target=page.GetElementById("A")!;
        var result=new BrowserLayoutEngine().Layout(page,new(800,600),[new(css)]);
        Assert.Equal(137,result.GetBoundingClientRect(target).Width);Assert.Equal(29,result.GetBoundingClientRect(target).Height);
        Assert.Equal("rgb(0, 0, 255)",result.GetComputedStyle(target)!.GetPropertyValue("color"));
    }

    [Fact]
    public void LargeLicenseCommentDoesNotRequireAWholeStylesheetStringOrCharacterArray()
    {
        var page=new HtmlParser().ParseDocument("<div id=A>Visible</div>");var target=page.GetElementById("A")!;
        var engine=new BrowserLayoutEngine();var viewport=new BrowserViewport(800,600);
        engine.Layout(page,viewport,[new("#A{width:137px;height:29px}")]);
        var sheets=new[]{new BrowserStyleSheet("/*"+new string('x',232950)+"*/#A{width:137px;height:29px}")};
        long before=GC.GetAllocatedBytesForCurrentThread();var result=engine.Layout(page,viewport,sheets);
        long allocated=GC.GetAllocatedBytesForCurrentThread()-before;
        Assert.Equal(137,result.GetBoundingClientRect(target).Width);
        Assert.True(allocated<131072,$"Small-rule parse allocated {allocated} bytes for a comment-only large prefix.");
    }
}