public async Task TestStoryGenerates() { var interpreter = new SkillFlowInterpreter(); interpreter.AddCoreExtensions(); Story story = null; using (var reader = File.OpenRead("Examples/story.abc")) { story = await interpreter.Interpret(reader); } var expected = File.ReadAllLines("Examples/story.abc"); var actual = new string[] { }; var mem = new MemoryStream(); var context = new TextGeneratorContext(mem); var generator = new TextGenerator.TextGenerator(); await generator.Generate(story, context); mem.Position = 0; using (var reader = new StreamReader(mem)) { actual = reader.ReadToEnd().Split(context.LineEnding); } foreach (var set in expected.Zip(actual)) { Assert.Equal(set.First.Trim(), set.Second.Trim()); } }
public async Task ThrowOnBadGroupEndIndent() { var interpreter = new SkillFlowInterpreter(new SkillFlowInterpretationOptions { LineEnding = "\n" }); var exception = await Assert.ThrowsAsync <InvalidSkillFlowDefinitionException>(() => interpreter.Interpret("@test\n\t*then\n\t\tif !test {\n\t\t\tflag test\n@test2")); Assert.StartsWith("5: Unclosed group", exception.Message); }
public async Task ThrowsWhenUnableToFindInterpreters() { var interpreter = new SkillFlowInterpreter(); interpreter.TypedInterpreters.Remove(typeof(Story)); var exception = await Assert.ThrowsAsync <InvalidSkillFlowDefinitionException>(() => interpreter.Interpret("@scene test")); Assert.StartsWith("1: Unknown definition for Story", exception.Message); }
public async Task GeneratesScene(string text, string name) { var interpreter = new SkillFlowInterpreter(); var result = await interpreter.Interpret(text); var scene = Assert.IsType <Scene>(result.Scenes.Single().Value); Assert.Equal(name, scene.Name); }
public async Task TestStoryParse() { var interpreter = new SkillFlowInterpreter(); Story story = null; using (var stream = File.OpenRead("Examples/story.abc")) { story = await interpreter.Interpret(stream); } Assert.NotNull(story); Assert.Equal(22, story.Scenes.Count); }
public async Task MultilineAddsToCorrectComponent() { var interpreter = new SkillFlowInterpreter(); var story = await interpreter.Interpret(string.Join(Environment.NewLine, "@scene test", "\t*say", "\t\twibble", "\t\t||", "\t\ttest")); var scene = Assert.Single(story.Scenes).Value; Assert.Null(scene.Reprompt); Assert.Null(scene.Recap); Assert.NotNull(scene.Say); Assert.Equal(2, scene.Say.Content.Count); }
public async Task CommentsClearedOnAttachment() { var interpreter = new SkillFlowInterpreter(new SkillFlowInterpretationOptions { LineEnding = "\n" }); var result = await interpreter.Interpret("//This is a comment\n//This is another comment\n@test\n\t//This is for say\n\t*say\n\t\tTest say statement"); var scene = result.Scenes.First().Value; var say = scene.Say; var comment = Assert.Single(say.Comments); Assert.Equal("This is for say", comment); }
public async Task CommentsAreAttachedToComponent() { var interpreter = new SkillFlowInterpreter(new SkillFlowInterpretationOptions { LineEnding = "\n" }); var result = await interpreter.Interpret("//This is a comment\n//This is another comment\n@test"); var scene = result.Scenes.First().Value; Assert.Equal(2, scene.Comments.Length); Assert.Equal("This is a comment", scene.Comments.First()); Assert.Equal("This is another comment", scene.Comments.Skip(1).First()); }
public async Task CreatesConditionCorrectly() { var interpreter = new SkillFlowInterpreter(new SkillFlowInterpretationOptions { LineEnding = "\n" }); var result = await interpreter.Interpret("@test\n\t*then\n\t\tif !test {\n\t\t\tflag test\n\t\t\t}"); var instruction = Assert.Single(result.Scenes.First().Value.Instructions.Instructions); var ifInstruction = Assert.IsType <If>(instruction); var not = Assert.IsType <Not>(ifInstruction.Condition); var literal = Assert.IsType <Variable>(not.Condition); Assert.Equal("test", literal.Name); }
public async Task VariableAndStringCorrectly() { var interpreter = new SkillFlowInterpreter(new SkillFlowInterpretationOptions { LineEnding = "\n" }); var result = await interpreter.Interpret("@test\n\t*then\n\t\tif bottles == 'mage' {\n\t\t\tflag test\n\t\t\t}"); var instruction = Assert.Single(result.Scenes.First().Value.Instructions.Instructions); var ifInstruction = Assert.IsType <If>(instruction); var equal = Assert.IsType <Equal>(ifInstruction.Condition); var variable = Assert.IsType <Variable>(equal.Left); var text = Assert.IsType <LiteralValue>(equal.Right); Assert.Equal("bottles", variable.Name); Assert.Equal("mage", text.Value); }
public async Task InterpretsBaseClassCorrectly() { var interpreter = new SkillFlowInterpreter(); await interpreter.Interpret(string.Join(Environment.NewLine, "@scene test", "\t*then", "\t\t-> thing")); }