public void TestLoadTwisonDataWithOptionsIsValid()
        {
            var allOptions = new TwisonLoaderOptions()
            {
                trimPassages = true,
                removeLinkTextFromPassages = true,
                collapseNewLines           = true,
                maxNewLineChain            = 1
            };
            var story = new TwisonLoader(allOptions).Load(ExampleStory);

            Assert.AreEqual(story.passages.Count, 5);
            Assert.NotNull(story.startNodePassage);
            foreach (var passage in story.passages)
            {
                Assert.False(string.IsNullOrWhiteSpace(passage.name));
                Assert.False(string.IsNullOrWhiteSpace(passage.text));
                foreach (var link in passage.links)
                {
                    Assert.False(string.IsNullOrWhiteSpace(link.name));
                    Assert.False(string.IsNullOrWhiteSpace(link.link));
                    Assert.NotNull(link.passage);
                }
            }
        }
        public void TestCreateRuntime()
        {
            var story   = new TwisonLoader().Load(ExampleStory);
            var tracker = new TwisonTagFilterBehaviour();
            var runtime = new TwisonRuntime(story, tracker, true);

            Assert.AreEqual(runtime.FindByName("Dialog.VillagerGeneric1.Hello"), runtime.Active);
        }
        public void TestLoadTwisonData()
        {
            var story = new TwisonLoader().Load(ExampleStory);

            Assert.AreEqual(story.passages.Count, 5);
            Assert.NotNull(story.startNodePassage);
            foreach (var link in story.passages.SelectMany(passage => passage.links))
            {
                Assert.NotNull(link.passage);
            }
        }
        public void TestLoadTwisonDataAndPruneAndFilterPassages()
        {
            var story = new TwisonLoader(new TwisonLoaderOptions()
            {
                trimPassages = true,
                removeLinkTextFromPassages = true
            }).Load(ExampleStory);

            var cleanedPassage = story.passages.First(i => i.name == "Dialog.VillagerGeneric1.Hello");

            Assert.AreEqual(cleanedPassage.text, "Greetings stranger~\n\nWhat brings you here?\n\n\n\n\n\n...");
        }
        public void TestLoadTwisonDataCollapseNewLinesMultiNewlLine()
        {
            var story = new TwisonLoader(new TwisonLoaderOptions()
            {
                trimPassages = true,
                removeLinkTextFromPassages = true,
                collapseNewLines           = true,
                maxNewLineChain            = 2
            }).Load(ExampleStory);

            var cleanedPassage = story.passages.First(i => i.name == "Dialog.VillagerGeneric1.Hello");

            Assert.AreEqual(cleanedPassage.text, "Greetings stranger~\n\nWhat brings you here?\n\n...");
        }
        public void TestFilteredLinksBehaviour()
        {
            var story   = new TwisonLoader().Load(ExampleStory);
            var tracker = new TwisonTagFilterBehaviour();
            var runtime = new TwisonRuntime(story, tracker, true);

            // Before seeing restricted tag, cannot see link
            Assert.False(runtime.Links.Any(i => i.name == "North forest"));

            // Act
            Assert.True(runtime.GoToPassage("Rumors"));
            Assert.True(runtime.GoToPassage("Goblins"));
            Assert.True(runtime.GoToPreviousPassage());
            Assert.True(runtime.GoToPreviousPassage());
            Assert.AreEqual(runtime.Active.name, "Dialog.VillagerGeneric1.Hello");

            // Assert: After seeing tag, can see link
            Assert.True(runtime.Links.Any(i => i.name == "North forest"));
        }