diff --git a/InkBlot.Tests/MultiDivertTest.cs b/InkBlot.Tests/MultiDivertTest.cs index b73baf6..2b71ada 100644 --- a/InkBlot.Tests/MultiDivertTest.cs +++ b/InkBlot.Tests/MultiDivertTest.cs @@ -59,4 +59,47 @@ public class MultiDivertTest : TestBase 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"])))) + ]); + } } \ No newline at end of file diff --git a/InkBlot/ParseHierarchy/MultiDivert.cs b/InkBlot/ParseHierarchy/MultiDivert.cs index af4c235..beb6e9d 100644 --- a/InkBlot/ParseHierarchy/MultiDivert.cs +++ b/InkBlot/ParseHierarchy/MultiDivert.cs @@ -58,6 +58,8 @@ public record TunnelListEndingReturnFromTunnel(Identifier? Divert); public record TunnelsAndDivertsList(Identifier[] TunnelIdentifiers, TunnelListEnding Ending) : IStoryNode { + private const string Sep = ", "; + public virtual bool Equals(TunnelsAndDivertsList? other) { return other is not null && Ending.Equals(other.Ending) && @@ -68,4 +70,9 @@ public record TunnelsAndDivertsList(Identifier[] TunnelIdentifiers, TunnelListEn { return HashCode.Combine(TunnelIdentifiers, Ending); } + + public override string ToString() + { + return $"TunnelsAndDivertsList({string.Join(Sep, TunnelIdentifiers.Select(i => i.ToString()))}, {Ending})"; + } } \ No newline at end of file