using System.Text; using InkBlot.ParseHierarchy; using Microsoft.Extensions.Logging; namespace InkBlot.Tests; /// /// A file reader where the contents are directly provided as strings. /// /// A map between file names and their contents. internal class InMemoryFileReader((string, string)[] filesToContents) : IFileReader { public Stream GetContents(string filename) { return new MemoryStream(Encoding.UTF8.GetBytes(filesToContents.First(e => e.Item1 == filename).Item2)); } } internal static class Helpers { public static ILoggerFactory GetLoggerFactory() { var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); return loggerFactory; } } public class TestBase { protected static (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); } }