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"])))) ]); } }