using AcDream.App.UI; namespace AcDream.App.Tests.UI; public class MarkupDocumentTests { private sealed class EditorBinding { public string Draft { get; private set; } = "initial"; public string Submitted { get; private set; } = string.Empty; public string Selected { get; private set; } = "First"; public int SelectedIndex { get; private set; } public IReadOnlyList Choices => ["First", "Second"]; public IReadOnlyList ChoiceColors => [0xFF0000u, 0x00FF00u]; public Action ChangeDraft => value => Draft = value; public Action SubmitDraft => value => Submitted = value; public Action SelectChoice => value => Selected = value; public Action SelectIndex => value => SelectedIndex = value; } [Fact] public void FieldAndMenuBindEditablePluginState() { const string xml = """ """; var binding = new EditorBinding(); UiNineSlicePanel panel = MarkupDocument.Build( xml, binding, _ => (1u, 32, 32)); UiField field = Assert.IsType(panel.Children[0]); UiMenu menu = Assert.IsType(panel.Children[1]); UiMarkupList list = Assert.IsType(panel.Children[2]); field.SetText("named profile"); field.OnSubmit?.Invoke(field.Text); menu.OnSelect?.Invoke("Second"); list.OnEvent(new UiEvent { Type = UiEventType.MouseDown, Data2 = 19, }); Assert.Equal("named profile", binding.Draft); Assert.Equal("named profile", binding.Submitted); Assert.Equal("Second", binding.Selected); Assert.Equal(1, binding.SelectedIndex); Assert.Equal(2, menu.Items.Count); Assert.Equal([0xFF0000u, 0x00FF00u], list.ItemColorsSource()); Assert.False(menu.OpenUpward); } [Fact] public void ControlIdAndNameBecomeStablePluginControlNames() { const string xml = """