ProSol.Html.TagsProvider/tests/TagsProvider_SingleTag_Tests.cs
Alexander Kozachenko 5598d0f898 refactoring #6 (#7)
refactoring #6

Co-authored-by: Alexander Kozachenko <119358312+Alex-Kozachenko@users.noreply.github.com>
Reviewed-on: #7
2023-12-08 01:46:37 +00:00

120 lines
3.5 KiB
C#

using ProSol.Html;
using ProSol.Html.Contracts.Data;
using ProSol.Messaging;
using ProSol.Messaging.Translating;
namespace ProSol.Html.Tests;
public class TagsProvider_SingleTag_Tests
{
private TagsProvider tagsProvider;
private DataSubscriber<ProcessedTag> processedTagsListener;
[SetUp]
public void Setup()
{
tagsProvider = new();
processedTagsListener = new();
tagsProvider
.Translate<TagsProviderMessage, ProcessedTag>(x => x.CurrentTag)
.Subscribe(processedTagsListener);
}
[Test]
public void Process_Single_Empty_Tag()
{
var html = "<main></main>";
tagsProvider.Process(html);
var result = processedTagsListener.Messages;
Assert.Multiple(() =>
{
Assert.That(result, Has.Length.EqualTo(1));
Assert.That(result[0].TagLength, Is.EqualTo(html.Length));
Assert.That(result[0].TextLength, Is.EqualTo(0));
});
Assert.Multiple(() =>
{
Assert.That(result[0].TagInfo.Name, Is.EqualTo("main"));
Assert.That(result[0].TagInfo.Attributes, Is.Empty);
});
}
[Test]
public void Process_Single_Filled_Tag()
{
var html = "<main>Lorem</main>";
tagsProvider.Process(html);
var result = processedTagsListener.Messages;
Assert.Multiple(() =>
{
Assert.That(result, Has.Length.EqualTo(1));
Assert.That(result[0].TagLength, Is.EqualTo(html.Length));
});
Assert.Multiple(() =>
{
Assert.That(result[0].TextLength, Is.EqualTo("Lorem".Length));
Assert.That(html[result[0].InnerTextRange], Is.EqualTo("Lorem"));
});
Assert.That(result[0].TagInfo.Name, Is.EqualTo("main"));
Assert.That(result[0].TagInfo.Attributes, Is.Empty);
}
[Test]
public void Process_Single_Filled_Attributed_Tag()
{
var html = "<main id='idmain' class='bar buzz' data-id=id data-value=\"value\">Lorem</main>";
tagsProvider.Process(html);
var result = processedTagsListener.Messages;
Assert.Multiple(() =>
{
Assert.That(result, Has.Length.EqualTo(1));
Assert.That(result[0].TagLength, Is.EqualTo(html.Length));
});
Assert.Multiple(() =>
{
Assert.That(result[0].TextLength, Is.EqualTo("Lorem".Length));
Assert.That(html[result[0].InnerTextRange], Is.EqualTo("Lorem"));
});
Assert.That(result[0].TagInfo.Name, Is.EqualTo("main"));
Assert.Multiple(() =>
{
Assert.That(result[0].TagInfo.Attributes["id"], Contains.Item("idmain"));
Assert.That(result[0].TagInfo.Attributes["class"], Contains.Item("bar"));
Assert.That(result[0].TagInfo.Attributes["class"], Contains.Item("buzz"));
Assert.That(result[0].TagInfo.Attributes["data-id"], Contains.Item("id"));
Assert.That(result[0].TagInfo.Attributes["data-value"], Contains.Item("value"));
});
}
[Test]
public void Process_MultipleTags_WithComment()
{
var html = "<div>\r\n<!-- <div> Ignored </div> -->\r\n</div>";
tagsProvider.Process(html);
var result = processedTagsListener.Messages;
Assert.Multiple(() =>
{
Assert.That(result, Has.Length.EqualTo(1));
Assert.That(result[0].TagLength, Is.EqualTo(html.Length));
});
}
}