mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-02 01:57:07 +02:00
Co-authored-by: AJCM-git <ajcm_mail@disroot.org> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
94 lines
3.4 KiB
C#
94 lines
3.4 KiB
C#
using System.Numerics;
|
|
using NUnit.Framework;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Shared.Input;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Map;
|
|
using Robust.Shared.Maths;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Robust.UnitTesting.Client.UserInterface.Controls;
|
|
|
|
[TestFixture]
|
|
[TestOf(typeof(TextEdit))]
|
|
public sealed class TextEditTest : RobustUnitTest
|
|
{
|
|
public override UnitTestProject Project => UnitTestProject.Client;
|
|
|
|
[OneTimeSetUp]
|
|
public void Setup()
|
|
{
|
|
IoCManager.Resolve<IUserInterfaceManagerInternal>().InitializeTesting();
|
|
}
|
|
|
|
// Regression test for https://github.com/space-wizards/RobustToolbox/issues/4953
|
|
// It was possible to move the cursor up/down if there was multi-line placeholder text.
|
|
[Test]
|
|
public void TestInvalidMoveInPlaceholder()
|
|
{
|
|
var textEdit = new TextEdit { Placeholder = new Rope.Leaf("Foo\nBar") };
|
|
textEdit.Arrange(new UIBox2(0, 0, 200, 200));
|
|
|
|
var click = new GUIBoundKeyEventArgs(EngineKeyFunctions.TextCursorDown, BoundKeyState.Down, new ScreenCoordinates(), true, Vector2.Zero, Vector2.Zero);
|
|
textEdit.KeyBindDown(click);
|
|
textEdit.KeyBindUp(click);
|
|
|
|
Assert.That(textEdit.CursorPosition.Index, Is.Zero);
|
|
}
|
|
|
|
// Regression test for https://github.com/space-wizards/RobustToolbox/issues/4957
|
|
// Moving left (with the arrow keys) in an empty TextEdit would cause an exception.
|
|
[Test]
|
|
public void TestEmptyMoveLeft()
|
|
{
|
|
var textEdit = new TextEdit();
|
|
textEdit.Arrange(new UIBox2(0, 0, 200, 200));
|
|
|
|
var click = new GUIBoundKeyEventArgs(EngineKeyFunctions.TextCursorLeft, BoundKeyState.Down, new ScreenCoordinates(), true, Vector2.Zero, Vector2.Zero);
|
|
textEdit.KeyBindDown(click);
|
|
textEdit.KeyBindUp(click);
|
|
}
|
|
|
|
[Test]
|
|
[Description("Check that the TextEdit MaxLines property works correctly")]
|
|
public void TestMaxLines()
|
|
{
|
|
// When the max lines value is 0 we are not limited, so we place an arbitrary ammount newlines
|
|
var textEdit = new TextEdit { MaxLines = 0 };
|
|
for (var i = 0; i < 100; i++)
|
|
{
|
|
var newline = new GUIBoundKeyEventArgs(
|
|
EngineKeyFunctions.TextNewline,
|
|
BoundKeyState.Down,
|
|
default, false, default, default);
|
|
|
|
textEdit.KeyBindDown(newline);
|
|
}
|
|
|
|
var ropeLength = Rope.CalcTotalLength(textEdit.TextRope) - 1;
|
|
using (Assert.EnterMultipleScope())
|
|
{
|
|
// check that the last value in the list is a newline
|
|
Assert.That(Rope.TryGetRuneAt(textEdit.TextRope, ropeLength, out var rune), Is.True);
|
|
Assert.That(rune.ToString(), Is.EqualTo("\n"));
|
|
}
|
|
|
|
// When the max lines value is 10 we are limited, so we try to place an arbitrary ammount newlines and fail
|
|
textEdit = new TextEdit { MaxLines = 10 };
|
|
for (var i = 0; i < 100; i++)
|
|
{
|
|
var newline = new GUIBoundKeyEventArgs(
|
|
EngineKeyFunctions.TextNewline,
|
|
BoundKeyState.Down,
|
|
default, false, default, default);
|
|
|
|
textEdit.KeyBindDown(newline);
|
|
}
|
|
|
|
// 0-indexed, if this asserts the TextRope ended up with more than 10 "items"
|
|
ropeLength = Rope.CalcTotalLength(textEdit.TextRope);
|
|
Assert.That(ropeLength > 9, Is.False);
|
|
}
|
|
}
|