Files
inkblot/InkBlot.Tests/MultiDivertTest.cs
2025-03-01 18:11:17 +01:00

105 lines
3.2 KiB
C#

using InkBlot.ParseHierarchy;
using Shouldly;
namespace InkBlot.Tests;
public class MultiDivertTest : TestBase
{
private IStoryNode[] MyParseText(string text)
{
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)))
]);
}
[Fact]
public void TestTunnelWithDivert()
{
var storyNodes = MyParseText("-> tunnelName -> divertName");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList([new Identifier(["tunnelName"])],
new TunnelListEndingDivert(new Identifier(["divertName"]))))
]);
}
[Fact]
public void TestMultiTunnel()
{
var storyNodes = MyParseText("-> tunnelName1 -> tunnelName2 ->");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList(
[new Identifier(["tunnelName1"]), new Identifier(["tunnelName2"])],
new TunnelListEndingDivert(null)))
]);
}
[Fact]
public void TestMultiTunnelWithReturn()
{
var storyNodes = MyParseText("-> tunnelName1 -> tunnelName2 ->->");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList(
[new Identifier(["tunnelName1"]), new Identifier(["tunnelName2"])],
new TunnelListEndingReturnFromTunnel(null)))
]);
}
[Fact]
public void TestMultiTunnelWithReturnAndReplacement()
{
var storyNodes = MyParseText("-> tunnelName1 -> tunnelName2 ->-> replacementDivert");
storyNodes.ShouldBe([
new MultiDivert(new TunnelsAndDivertsList(
[new Identifier(["tunnelName1"]), new Identifier(["tunnelName2"])],
new TunnelListEndingReturnFromTunnel(new Identifier(["replacementDivert"]))))
]);
}
}