mfgames-cil/tests/MfGames.Markdown.Tests/HeadingLevelTransformerTests.cs
D. Moonfire edf6289dee
All checks were successful
deploy / deploy (push) Successful in 12m9s
feat: added a Markdown heading level transformer
2024-04-18 23:56:05 -05:00

94 lines
2.2 KiB
C#

using MfGames.Markdown.Exceptions;
using MfGames.TestSetup;
using Xunit;
using Xunit.Abstractions;
namespace MfGames.Markdown.Tests;
/// <summary>
/// Tests the functionality of HeadingLevelTransformer.
/// </summary>
public class HeadingLevelTransformerTests : TestBase<TestContext>
{
public HeadingLevelTransformerTests(ITestOutputHelper output)
: base(output) { }
[Fact]
public void MakeShallow()
{
string input = string.Join("\n", "### Heading 3", "", "Paragraph", "");
string expected = string.Join("\n", "# Heading 3", "", "Paragraph", "");
HeadingLevelTransformer transformer = new(-2);
string? output = transformer.Transform(input);
Assert.Equal(expected, output);
}
[Fact]
public void ThreeLevels()
{
string input = string.Join(
"\n",
"# Heading 1",
"",
"## Heading 2",
"",
"### Heading 3",
"",
"Paragraph",
""
);
string expected = string.Join(
"\n",
"## Heading 1",
"",
"### Heading 2",
"",
"#### Heading 3",
"",
"Paragraph",
""
);
HeadingLevelTransformer transformer = new(1);
string? output = transformer.Transform(input);
Assert.Equal(expected, output);
}
[Fact]
public void TooDeep()
{
string input = string.Join("\n", "###### Heading 1", "", "Paragraph", "");
HeadingLevelTransformer transformer = new(5);
var exception = Assert.Throws<MarkdownHeaderOutOfRangeException>(
() => transformer.Transform(input)
);
Assert.Equal(6, exception.OldLevel);
Assert.Equal(11, exception.NewLevel);
}
[Fact]
public void TooShallow()
{
string input = string.Join("\n", "# Heading 1", "", "Paragraph", "");
HeadingLevelTransformer transformer = new(-1);
var exception = Assert.Throws<MarkdownHeaderOutOfRangeException>(
() => transformer.Transform(input)
);
Assert.Equal(1, exception.OldLevel);
Assert.Equal(0, exception.NewLevel);
}
}