using AcDream.App.UI.Layout; namespace AcDream.App.Tests.UI.Layout; /// /// Dat-free conformance tests for the committed chat_21000006.json golden fixture. /// Verifies that LayoutImporter.ImportInfos correctly resolves the BaseElement / /// BaseLayoutId inheritance chain for the chat window (LayoutDesc 0x21000006). /// public class ChatLayoutConformanceTests { private static ElementInfo? Find(ElementInfo n, uint id) { if (n.Id == id) return n; foreach (var c in n.Children) { var f = Find(c, id); if (f is not null) return f; } return null; } [Fact] public void ChatFixture_ResolvesKnownElements() { var root = FixtureLoader.LoadChatInfos(); Assert.NotNull(Find(root, 0x10000011u)); // transcript Assert.NotNull(Find(root, 0x10000016u)); // input Assert.NotNull(Find(root, 0x10000012u)); // scrollbar track Assert.NotNull(Find(root, 0x10000014u)); // channel menu Assert.NotNull(Find(root, 0x10000019u)); // send button Assert.NotNull(Find(root, 0x1000046Fu)); // max/min button } [Fact] public void ChatFixture_ResolvedTypes_MatchRetailRegistry() { var root = FixtureLoader.LoadChatInfos(); Assert.Equal(6u, Find(root, 0x10000014u)!.Type); // Menu Assert.Equal(11u, Find(root, 0x10000012u)!.Type); // Scrollbar Assert.Equal(1u, Find(root, 0x10000019u)!.Type); // Button (Send) Assert.Equal(1u, Find(root, 0x1000046Fu)!.Type); // Button (Max/Min) Assert.Equal(12u, Find(root, 0x10000011u)!.Type); // Text/style-prototype (transcript) Assert.Equal(12u, Find(root, 0x10000016u)!.Type); // Text/style-prototype (input) } }