feat: multidivert; more tests

This commit is contained in:
mattia
2025-03-01 18:03:42 +01:00
parent 6ee8051004
commit 43745e75e7
11 changed files with 276 additions and 212 deletions

View File

@@ -1,4 +1,5 @@
using System.Text;
using InkBlot.ParseHierarchy;
using Microsoft.Extensions.Logging;
namespace InkBlot.Tests;
@@ -22,4 +23,20 @@ internal static class Helpers
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
return loggerFactory;
}
}
public class TestBase
{
protected (Story, Diagnostic[]) ParseText(string inkInput)
{
// parse the story
var fileReader = new InMemoryFileReader([
("main.ink", inkInput)
]);
using var loggerFactory = Helpers.GetLoggerFactory();
var (story, diagnosticsEnumerable) = InkBlotParser.Parse(fileReader, loggerFactory, "main.ink");
var diagnostics = diagnosticsEnumerable.ToArray();
return (story, diagnostics);
}
}

View File

@@ -3,22 +3,60 @@ using Shouldly;
namespace InkBlot.Tests;
public class MultiDivertTest
public class MultiDivertTest : TestBase
{
[Fact]
public void TestThreadDivert()
private IStoryNode[] MyParseText(string text)
{
var fileReader = new InMemoryFileReader([
("main.ink", "<- threadName")
]);
var tokensStream = InkBlotParser.GetTokenStream(fileReader, "main.ink");
tokensStream.Fill();
var tokens = tokensStream.GetTokens();
using var loggerFactory = Helpers.GetLoggerFactory();
var (story, diagnostics) = InkBlotParser.Parse(fileReader, loggerFactory, "main.ink");
var (story, diagnostics) = ParseText(text);
diagnostics.ShouldBe([]);
var storyNodes = story.StoryNodes.ToArray();
return storyNodes;
}
[Fact]
public void TestThreadDivert()
{
var storyNodes = MyParseText("<- threadName");
storyNodes.ShouldBe([new MultiDivert(new ThreadDivert(new Identifier(["threadName"])))]);
}
[Fact]
public void TestSimpleDivert()
{
var storyNodes = MyParseText("-> divertName");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList([], new TunnelListEndingDivert(new Identifier(["divertName"]))))
]);
}
[Fact]
public void TestReturnFromTunnel()
{
var storyNodes = MyParseText("->->");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList([], new TunnelListEndingReturnFromTunnel(null)))
]);
}
[Fact]
public void TestDivertFromTunnel()
{
var storyNodes = MyParseText("->-> divertName");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList([],
new TunnelListEndingReturnFromTunnel(new Identifier(["divertName"]))))
]);
}
[Fact]
public void TestTunnel()
{
var storyNodes = MyParseText("-> tunnelName ->");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList([new Identifier(["tunnelName"])],
new TunnelListEndingDivert(null)))
]);
}
}