using System; using System.Diagnostics; using System.Linq; using Microsoft.Xna.Framework; using MLEM.Maths; using MLEM.Ui; using MLEM.Ui.Elements; using MLEM.Ui.Style; using NUnit.Framework; namespace Tests; public class UiTests : GameTestFixture { [Test] public void TestInvalidPanel() { var invalidPanel = new Panel(Anchor.Center, Vector2.Zero, Vector2.Zero) { SetWidthBasedOnChildren = true, SetHeightBasedOnChildren = true }; invalidPanel.AddChild(new Paragraph(Anchor.AutoRight, 1, "This is some test text!", true)); invalidPanel.AddChild(new VerticalSpace(1)); Assert.Throws(() => this.AddAndUpdate(invalidPanel, out _, out _)); } [Test] public void TestOddlyAlignedPanel() { var oddPanel = new Panel(Anchor.Center, Vector2.One, Vector2.Zero, true) {SetWidthBasedOnChildren = true}; oddPanel.AddChild(new Group(Anchor.TopCenter, new Vector2(100), false)); oddPanel.AddChild(new Group(Anchor.AutoRight, new Vector2(120), false)); this.AddAndUpdate(oddPanel, out _, out _); Assert.AreEqual(120 + 10, oddPanel.DisplayArea.Width); } [Test] public void TestComplexPanel() { var group = new Group(Anchor.TopLeft, Vector2.One, false); var panel = group.AddChild(new Panel(Anchor.Center, new Vector2(150, 150), Vector2.Zero, false, true, false) { ChildPadding = new Padding(5, 5, 5, 5) }); for (var i = 0; i < 5; i++) { var button = panel.AddChild(new Button(Anchor.AutoLeft, new Vector2(1)) { SetHeightBasedOnChildren = true, Padding = new Padding(0, 0, 0, 1), ChildPadding = new Padding(3) }); button.AddChild(new Group(Anchor.AutoLeft, new Vector2(0.5F, 30), false) { CanBeMoused = false }); } this.AddAndUpdate(group, out _, out _); // group has 1 panel with 1 scroll bar, and the panel's 10 children Assert.AreEqual(1, group.GetChildren().Count()); Assert.AreEqual(12, group.GetChildren(regardGrandchildren: true).Count()); // panel 1 scroll bar and 5 buttons, each button has 1 group, so 11 grandchildren Assert.AreEqual(6, panel.GetChildren().Count()); Assert.AreEqual(11, panel.GetChildren(regardGrandchildren: true).Count()); var testBtn = panel.GetChildren