using AcDream.App.Plugins; using AcDream.App.UI; namespace AcDream.App.Tests.Plugins; public class BufferedUiRegistryTests { [Fact] public void Drain_YieldsBufferedRegistrationsOnceThenEmpty() { var reg = new BufferedUiRegistry(); reg.AddMarkupPanel("a.xml", new object()); reg.AddMarkupPanel("b.xml", new object()); var drained = reg.Drain(); Assert.Equal(2, drained.Count); Assert.Equal("a.xml", drained[0].MarkupPath); Assert.Equal("b.xml", drained[1].MarkupPath); Assert.Empty(reg.Drain()); // consumed } [Fact] public void ScopedRegistrationTokenRemovesAnAlreadyMountedElement() { var registry = new BufferedUiRegistry(); IDisposable registration = registry.RegisterMarkupPanel( "plugin.xml", new object()); BufferedUiRegistry.Pending pending = Assert.Single(registry.Drain()); var root = new UiRoot(); var element = new UiPanel(); root.AddChild(element); registry.CompleteMount(pending, root, element); Assert.Contains(element, root.Children); Assert.Equal(1, registry.RegistrationCount); registration.Dispose(); Assert.DoesNotContain(element, root.Children); Assert.Equal(0, registry.RegistrationCount); } }