using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using Xunit; using ytLive.Models; using ytLive.Services; namespace ytLive.Tests; [Collection("RealApp")] public sealed class TextOverlayRendererTests { private readonly RealAppHost _app; public TextOverlayRendererTests(RealAppHost app) => _app = app; [Fact] public void Raster_IsCached_And_PreviewBitmap_Uses_The_Same_Transparent_Pixels() { _app.Run(() => { var source = new Source { Type = SourceType.TextOverlay, TextContent = "Cached text", Width = 220, Height = 70, TextFontSize = 36, TextColor = "#80FFFFFF", TextBold = true, TextUnderline = true, }; var renderer = new TextOverlayRenderer(); renderer.UpdatePreview(source); var first = Assert.IsType(renderer.RenderFrame(source)); var preview = Assert.IsType(source.VideoImageSource); var pixels = new byte[first.BgraPixels.Length]; preview.CopyPixels(pixels, first.Stride, 0); Assert.Equal(first.BgraPixels, pixels); Assert.Contains(first.BgraPixels.Where((_, index) => index % 4 == 3), alpha => alpha > 0); Assert.Contains(first.BgraPixels.Where((_, index) => index % 4 == 3), alpha => alpha == 0); renderer.UpdatePreview(source); Assert.Same(first, renderer.RenderFrame(source)); Assert.Same(preview, source.VideoImageSource); source.TextContent = "Changed"; renderer.UpdatePreview(source); Assert.NotSame(first, renderer.RenderFrame(source)); Assert.NotSame(preview, source.VideoImageSource); }); } }