From ec3ede424d547c8d72193955867e28a0b1194c87 Mon Sep 17 00:00:00 2001 From: mattia Date: Sat, 1 Mar 2025 18:11:17 +0100 Subject: [PATCH] feat: all cases of multidivert base structure --- InkBlot.Tests/MultiDivertTest.cs | 43 +++++++++++++++++++++++++++ InkBlot/ParseHierarchy/MultiDivert.cs | 7 +++++ 2 files changed, 50 insertions(+) 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