Files
RobustToolbox/Robust.UnitTesting/Shared/Utility/FormattedMessage_Test.cs
T
E F RandGitHub 2a8887d0b4 Rich text redux (#2213)
* Shared/Utility: Define new FormattedMessage core types

* Shared/Utility: Move MarkupParser to a new namespace, update to new FormattedText

* Shared/Serialization: Temporary fix for FormattedMessageSerializer

* Scripting/ScriptInstanceShared: Move to new FormattedMessage.Builder

* Shared/Utility: Add a FormattedMessage loader to the .Builder

* Server/Scripting: Port SciptHost to FormattedMessage.Builder

* UserInterface/RichTextEntry: NOP out almost everything

not gonna bother fixing it until more groundwork is laid

* Shared/Utility: Expand Utility.Extensions a bit

strictly for pesonal reasons

* Client/UserInterface: Add the base TextLayout engine

* Client/Graphics: Add a Font Library manager

* Graphics/TextLayout: Finish up implementing the TextLayout engine

* Utility/FormattedMessage: Add yet another hack to keep the serializer in service

* Commands/Debug: Use FormattedMessage.Builder

* Console/Completions: Use FormattedMessage.Builder

* Utility/FormattedMessage: Add `AddMessage` methods

* Console/ScriptConsole: Use FormattedMessage.Builder

* Client/Log: Use FormattedMessage.Builder

* CustomControls/DebugConsole: Use FormattedMessage.Builder

* Controls/OutputPanel: Use FormattedMessage.Builder, NOP `Draw` pending rewrite

* Controls/RichTextLabel: Use FormattedMessage.Builder, NOP `Draw` pending rewrite

* UnitTesting: Update FormattedMessage/Markup Tests

They will NOT pass yet, but I don't care; it compiles.

* Utility/FormattedMessage: Fix some off-by-one Builder bugs

* Utility/FormattedMessage: Continue cleanup, test compliance

* Utility/FormattedMessage: Work around https://github.com/dotnet/roslyn/issues/57870

* Utility/FormattedMessage: Move ISectionable from TextLayout, implement it for FormattedMessage

* UserInterface/TextLayout: Add a `postcreate` function to set up new `TIn`s

Apparently Roslyn isn't big-brained enough to understand that a
closure of type `Func<T>` means that `var n = new(); return n;` requires
`new()` to return a `T`.

Ironically, it's significantly less cbt to add this than to convert
that big tuple in `Layout` in to a class or struct of some sort
(to initialize the `List<>`s).

* UserInterface/TextLayout: Throw if `Meta` isn't recognized

TODO warning go brrr

* Graphics/FontLibrary: Add a `DummyVariant`

* UserInterface/UITheme: Move to FontLibraries

* UserInterface/TextLayout: Move to an un-nested `ImmutableArray`

* UserInterface/RichTextEntry: Go ahead. Draw.

* Markup/Basic: Add extension & helpers for FormattedMessage.Builder

* Markup/Basic: Add `EscapeText` back in

A forgotten casualty of the great Markup separation of 2021

* Graphics/FontLibrary: Clean up bit magic, ensure that at least one font is picked

* Graphics/FontLibrary: Add diagnostics to the "no fonts" exception

* UserInterface/TextLayout: Scrap `Word`, return to `Offset`

* UserInterface/TextLayout: A whole bunch of hard-fought bugfixes

* Utility/FormattedMessage: Add a static, empty FormattedMessage

* Utility/FormattedMessage: Fix. Bugs.

* UserInterface/RichTextEntry: Bug fixin'

* UserInterface: CSS teim

* Markup/Basic: Add an optional "default" style to use

* Utility/FormattedMessage: I'm surprised I only made this mistake once.

* Log/DebugConsoleLogHandler: work around lack of a default style
2021-12-12 14:35:26 -08:00

67 lines
2.0 KiB
C#

using NUnit.Framework;
using Robust.Shared.Maths;
using Robust.Shared.Utility;
using Robust.Shared.Utility.Markup;
namespace Robust.UnitTesting.Shared.Utility
{
[Parallelizable(ParallelScope.All)]
[TestFixture]
[TestOf(typeof(Basic))]
public class MarkupBasic_Test
{
[Test]
public static void TestParseMarkup()
{
var msg = new Basic();
msg.AddMarkup("foo[color=#aabbcc]bar[/color]baz");
Assert.That(msg.Render().Sections, NUnit.Framework.Is.EquivalentTo(new[]
{
new Section { Content="foo" },
new Section { Content="bar", Color=unchecked ((int) 0xFFAABBCC) },
new Section { Content="baz" }
}));
}
[Test]
public static void TestParseMarkupColorName()
{
var msg = new Basic();
msg.AddMarkup("foo[color=orange]bar[/color]baz");
Assert.That(msg.Render().Sections, NUnit.Framework.Is.EquivalentTo(new[]
{
new Section { Content="foo" },
new Section { Content="bar", Color=Color.Orange.ToArgb() },
new Section { Content="baz" }
}));
}
[Test]
[TestCase("foo[color=#aabbcc bar")]
[TestCase("foo[color #aabbcc] bar")]
[TestCase("foo[stinky] bar")]
public static void TestParsePermissiveMarkup(string text)
{
var msg = new Basic();
msg.AddMarkupPermissive(text);
Assert.That(
msg.Render().ToString(),
NUnit.Framework.Is.EqualTo(text));
}
[Test]
[TestCase("Foo")]
[TestCase("[color=#FF000000]Foo[/color]")]
[TestCase("[color=#00FF00FF]Foo[/color]bar")]
public static void TestToMarkup(string text)
{
var message = new Basic();
message.AddMarkup(text);
Assert.That(message.Render().ToMarkup(), NUnit.Framework.Is.EqualTo(text));
}
}
}