mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-02 18:17:09 +02:00
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
206 lines
7.4 KiB
C#
206 lines
7.4 KiB
C#
using NUnit.Framework;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Shared.Maths;
|
|
|
|
namespace Robust.UnitTesting.Client.UserInterface.Controls
|
|
{
|
|
[TestFixture]
|
|
[TestOf(typeof(LayoutContainer))]
|
|
public sealed class LayoutContainerTest : RobustUnitTest
|
|
{
|
|
public override UnitTestProject Project => UnitTestProject.Client;
|
|
|
|
[Test]
|
|
public void TestMarginLayoutBasic()
|
|
{
|
|
var control = new LayoutContainer {Size = (100, 100)};
|
|
var child = new Control();
|
|
|
|
LayoutContainer.SetMarginRight(child, 5);
|
|
LayoutContainer.SetMarginBottom(child, 5);
|
|
control.AddChild(child);
|
|
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(5, 5)));
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
|
|
LayoutContainer.SetMarginTop(child, 3);
|
|
LayoutContainer.SetMarginLeft(child, 3);
|
|
|
|
control.InvalidateArrange();
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(2, 2)));
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(3, 3)));
|
|
}
|
|
|
|
[Test]
|
|
public void TestAnchorLayoutBasic()
|
|
{
|
|
var control = new LayoutContainer {Size = new Vector2(100, 100)};
|
|
var child = new Control();
|
|
LayoutContainer.SetAnchorRight(child, 1);
|
|
LayoutContainer.SetAnchorBottom(child, 1);
|
|
control.AddChild(child);
|
|
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(100, 100)));
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
|
|
LayoutContainer.SetAnchorLeft(child, 0.5f);
|
|
control.InvalidateArrange();
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(50, 0)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(50, 100)));
|
|
LayoutContainer.SetAnchorTop(child, 0.5f);
|
|
control.InvalidateArrange();
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(50, 50)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(50, 50)));
|
|
}
|
|
|
|
[Test]
|
|
public void TestMarginLayoutMinimumSize()
|
|
{
|
|
var control = new LayoutContainer {Size = new Vector2(100, 100)};
|
|
var child = new Control
|
|
{
|
|
MinSize = new Vector2(50, 50),
|
|
};
|
|
|
|
LayoutContainer.SetMarginRight(child, 20);
|
|
LayoutContainer.SetMarginBottom(child, 20);
|
|
|
|
control.AddChild(child);
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(50, 50)));
|
|
}
|
|
|
|
[Test]
|
|
public void TestMarginAnchorLayout()
|
|
{
|
|
var control = new LayoutContainer {Size = new Vector2(100, 100)};
|
|
var child = new Control();
|
|
|
|
LayoutContainer.SetMarginRight(child, -10);
|
|
LayoutContainer.SetMarginBottom(child, -10);
|
|
LayoutContainer.SetMarginTop(child, 10);
|
|
LayoutContainer.SetMarginLeft(child, 10);
|
|
LayoutContainer.SetAnchorRight(child, 1);
|
|
LayoutContainer.SetAnchorBottom(child, 1);
|
|
|
|
control.AddChild(child);
|
|
control.InvalidateArrange();
|
|
control.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(10, 10)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(80, 80)));
|
|
}
|
|
|
|
// Test that a control grows its size instead of position by default. (GrowDirection.End)
|
|
[Test]
|
|
public void TestGrowEnd()
|
|
{
|
|
var parent = new LayoutContainer();
|
|
var child = new Control {SetSize = (100, 100)};
|
|
|
|
LayoutContainer.SetAnchorRight(child, 1);
|
|
|
|
parent.AddChild(child);
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
// Child should be at 0,0.
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
|
|
// Right margin should make the child not have enough space and grow left.
|
|
LayoutContainer.SetMarginRight(child, -100);
|
|
parent.InvalidateArrange();
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(100, 100)));
|
|
}
|
|
|
|
// Test GrowDirection.Begin
|
|
[Test]
|
|
public void TestGrowBegin()
|
|
{
|
|
var parent = new LayoutContainer();
|
|
var child = new Control {SetSize = (100, 100)};
|
|
|
|
LayoutContainer.SetGrowHorizontal(child, LayoutContainer.GrowDirection.Begin);
|
|
LayoutContainer.SetAnchorRight(child, 1);
|
|
|
|
parent.AddChild(child);
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
// Child should be at 0,0.
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
|
|
// Right margin should make the child not have enough space and grow left.
|
|
LayoutContainer.SetMarginRight(child, -100);
|
|
parent.InvalidateArrange();
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(-100, 0)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(100, 100)));
|
|
}
|
|
|
|
// Test GrowDirection.Both
|
|
[Test]
|
|
public void TestGrowBoth()
|
|
{
|
|
var parent = new LayoutContainer {MinSize = (100, 100)};
|
|
var child = new Control {SetSize = (100, 100)};
|
|
|
|
LayoutContainer.SetGrowHorizontal(child, LayoutContainer.GrowDirection.Both);
|
|
LayoutContainer.SetAnchorRight(child, 1);
|
|
|
|
parent.AddChild(child);
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
// Child should be at 0,0.
|
|
Assert.That(child.Position, Is.EqualTo(Vector2.Zero));
|
|
|
|
// Right margin should make the child not have enough space and grow left.
|
|
LayoutContainer.SetMarginRight(child, -100);
|
|
parent.InvalidateArrange();
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(-50, 0)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(100, 100)));
|
|
}
|
|
|
|
// Test that changing a grow direction updates the position correctly.
|
|
[Test]
|
|
public void TestGrowDirectionChange()
|
|
{
|
|
var parent = new LayoutContainer {MinSize = (100, 100)};
|
|
var child = new Control();
|
|
parent.AddChild(child);
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
// Child should be at -100,0.
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(0, 0)));
|
|
|
|
child.MinSize = (100, 100);
|
|
parent.InvalidateMeasure();
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(0, 0)));
|
|
Assert.That(child.Size, Is.EqualTo(new Vector2(100, 100)));
|
|
|
|
LayoutContainer.SetGrowHorizontal(child, LayoutContainer.GrowDirection.Begin);
|
|
parent.InvalidateArrange();
|
|
parent.Arrange(new UIBox2(0, 0, 100, 100));
|
|
|
|
Assert.That(child.Position, Is.EqualTo(new Vector2(-100, 0)));
|
|
}
|
|
}
|
|
}
|