105 lines
3.2 KiB
C#
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"]))))
|
|
]);
|
|
}
|
|
} |