feat: multidivert; more tests
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Text;
|
||||
using InkBlot.ParseHierarchy;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace InkBlot.Tests;
|
||||
@@ -22,4 +23,20 @@ internal static class Helpers
|
||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
|
||||
return loggerFactory;
|
||||
}
|
||||
}
|
||||
|
||||
public class TestBase
|
||||
{
|
||||
protected (Story, Diagnostic[]) ParseText(string inkInput)
|
||||
{
|
||||
// parse the story
|
||||
var fileReader = new InMemoryFileReader([
|
||||
("main.ink", inkInput)
|
||||
]);
|
||||
using var loggerFactory = Helpers.GetLoggerFactory();
|
||||
var (story, diagnosticsEnumerable) = InkBlotParser.Parse(fileReader, loggerFactory, "main.ink");
|
||||
var diagnostics = diagnosticsEnumerable.ToArray();
|
||||
|
||||
return (story, diagnostics);
|
||||
}
|
||||
}
|
||||
@@ -3,22 +3,60 @@ using Shouldly;
|
||||
|
||||
namespace InkBlot.Tests;
|
||||
|
||||
public class MultiDivertTest
|
||||
public class MultiDivertTest : TestBase
|
||||
{
|
||||
[Fact]
|
||||
public void TestThreadDivert()
|
||||
private IStoryNode[] MyParseText(string text)
|
||||
{
|
||||
var fileReader = new InMemoryFileReader([
|
||||
("main.ink", "<- threadName")
|
||||
]);
|
||||
var tokensStream = InkBlotParser.GetTokenStream(fileReader, "main.ink");
|
||||
tokensStream.Fill();
|
||||
var tokens = tokensStream.GetTokens();
|
||||
using var loggerFactory = Helpers.GetLoggerFactory();
|
||||
var (story, diagnostics) = InkBlotParser.Parse(fileReader, loggerFactory, "main.ink");
|
||||
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)))
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user