Пример #1
0
        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());
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #11
0
 public async Task InterpretsBaseClassCorrectly()
 {
     var interpreter = new SkillFlowInterpreter();
     await interpreter.Interpret(string.Join(Environment.NewLine, "@scene test",
                                             "\t*then", "\t\t-> thing"));
 }