using AngleSharp.Html.Parser; using XFESystem.Browser; using XFESystem.Desktop; namespace XFESystem.Browser.Tests; public sealed class RasterRenderYieldTests { [Theory] [InlineData("background:white;border-radius:12px")] [InlineData("background:linear-gradient(90deg,red,blue);border-radius:12px")] [InlineData("background:white;box-shadow:0 4px 12px black")] public void BoxRowsYieldWithoutPresentingWhenInteractiveInputBecomesPending(string css) { var page=new HtmlParser().ParseDocument("
"); var list=new BrowserLayoutEngine().Layout(page,new(80,80));var command=Assert.Single(list.Commands,c=>c.Decoration is not null); var canvas=new YieldCanvas(); Assert.Throws(()=>BrowserBoxRasterPainter.Paint(canvas,command,command.Bounds,new(0,0,80,80))); Assert.InRange(canvas.BlendCalls,3,80);Assert.Equal(0,canvas.Presents); } [Fact] public void RoundedClipForwardsPendingYieldToItsGradientDescendant() { var page=new HtmlParser().ParseDocument("
"); var list=new BrowserLayoutEngine().Layout(page,new(80,80));var canvas=new YieldCanvas(); Assert.Throws(()=>BrowserRasterPainter.Paint(canvas,new(0,0,80,80),list)); Assert.InRange(canvas.BlendCalls,3,80);Assert.Equal(0,canvas.Presents); } private sealed class YieldCanvas:IDesktopCoverageCanvas,IDesktopRenderYieldCanvas { public int Width=>80;public int Height=>80;public int BlendCalls;public int Presents; public bool RenderYieldRequested=>BlendCalls>=3; public void BlendCoverage(uint rgb,int x,int y,int width,int height,ReadOnlySpan source){BlendCalls++;} public void Fill(uint rgb,int x,int y,int width,int height){} public void Line(uint rgb,int x1,int y1,int x2,int y2){} public void Text(string text,uint rgb,int x,int y){} public void Present(){Presents++;} } }