using System.Text; using NUnit.Framework; namespace RTLTMPro.Tests { public class RichTextFixerTests { [Test] public void FindTag_FindsSimpleOpeningTag() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(13, tag.End); } [Test] public void FindTag_FindsOpeningTagWithSpaceInside() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(14, tag.End); } [Test] public void FindTag_FindsOpeningTagWithValue() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(17, tag.End); } [Test] public void FindTag_ProducesTheSameHash_ForOpeningTagsWithDifferentValues() { // Arrange var text1 = new FastStringBuilder("text text"); var text2 = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text1, 0, out var tag1); RichTextFixer.FindTag(text2, 0, out var tag2); // Assert Assert.AreEqual(tag1.HashCode, tag2.HashCode); } [Test] public void FindTag_FindsSimpleSelfContainedTag() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.SelfContained, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(14, tag.End); } [Test] public void FindTag_FindsSelfContainedTagWithValue() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.SelfContained, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(18, tag.End); } [Test] public void FindTag_ProducesTheSameHash_ForSelfContainedTagsWithDifferentValues() { // Arrange var text1 = new FastStringBuilder("text text"); var text2 = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text1, 0, out var tag1); RichTextFixer.FindTag(text2, 0, out var tag2); // Assert Assert.AreEqual(tag1.HashCode, tag2.HashCode); } [Test] public void FindTag_FindsClosingTag() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(RichTextFixer.TagType.Closing, tag.Type); Assert.AreEqual(5, tag.Start); Assert.AreEqual(14, tag.End); } [Test] public void FindTag_ProducesTheSameHash_ForSameOpeningAndClosingTag() { // Arrange var text1 = new FastStringBuilder("text text"); var text2 = new FastStringBuilder("text text"); // Act RichTextFixer.FindTag(text1, 0, out var tag1); RichTextFixer.FindTag(text2, 0, out var tag2); // Assert Assert.AreEqual(tag1.HashCode, tag2.HashCode); } [Test] public void FindTag_ReturnsZero_WhenNoTagIsFound() { // Arrange var text = new FastStringBuilder("text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(0, tag.Start); Assert.AreEqual(0, tag.End); Assert.AreEqual(RichTextFixer.TagType.None, tag.Type); Assert.AreEqual(0, tag.HashCode); } [Test] public void FindTag_StartFromTheProvidedStartPosition() { // Arrange var text = new FastStringBuilder(" text"); // Act RichTextFixer.FindTag(text, 6, out var tag); // Assert Assert.AreEqual(0, tag.Start); Assert.AreEqual(0, tag.End); Assert.AreEqual(RichTextFixer.TagType.None, tag.Type); Assert.AreEqual(0, tag.HashCode); } [Test] public void FindTag_OpeningTagWithAttributes() { // Arrange var text = new FastStringBuilder("test text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(5, tag.Start); Assert.AreEqual(30, tag.End); Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); } [Test] public void FindTag_IgnoreTagWithoutClosingChar() { // Arrange var text = new FastStringBuilder("test text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(20, tag.Start); Assert.AreEqual(22, tag.End); Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); } [Test] public void FindTag_IgnoreTagStartingWithSpace() { // Arrange var text = new FastStringBuilder("test < my invalid tag> text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(0, tag.Start); Assert.AreEqual(0, tag.End); Assert.AreEqual(RichTextFixer.TagType.None, tag.Type); } // prevent regression for issue #56 [Test] public void FindTag_SpriteWithIdTag() { // Arrange var text = new FastStringBuilder("test text"); // Act RichTextFixer.FindTag(text, 0, out var tag); // Assert Assert.AreEqual(5, tag.Start); Assert.AreEqual(14, tag.End); Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type); } [Test] public void Fix_Reverses_SelfContainedTags() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.Fix(text); // Assert Assert.AreEqual("text >/deniatnoc-fles< text", text.ToString()); } [Test] public void Fix_Reverses_OpenTag_ThatDoesntHaveClosingTag() { // Arrange var text = new FastStringBuilder("text text"); // Act RichTextFixer.Fix(text); // Assert Assert.AreEqual("text >nepo< text", text.ToString()); } [Test] public void Fix_Reverses_SimpleOpenAndClosingTag() { // Arrange var text = new FastStringBuilder("text text "); // Act RichTextFixer.Fix(text); // Assert Assert.AreEqual("text >nepo/< text >nepo<", text.ToString()); } [Test] public void Fix_Reverses_SimpleOpenAndClosingTagWithValue() { // Arrange var text = new FastStringBuilder("text text "); // Act RichTextFixer.Fix(text); // Assert Assert.AreEqual("text >nepo/< text >431=nepo<", text.ToString()); } } }