public void TestGetName_AppropriatelyPrintsError_NoNameSpecified()
        {
            _input.Push("");
            const string expected = "Alkeeros";

            _input.Push(expected);

            var name = _menu.GetName();

            Assert.AreEqual(expected, name);

            var outputs      = _output.GetOutputs();
            var clearIndices = _output.GetClearIndices();

            Assert.AreEqual(3, outputs.Length);

            //0 and 2 index are the prompt
            Assert.AreEqual(NameInputMenu.NameRequiredErrorMessage + "\n", outputs[1].Message);
            Assert.AreEqual(MockOutputMessageType.Error, outputs[1].Type);

            Assert.AreEqual(1, clearIndices.Length);
            Assert.AreEqual(2, clearIndices[0]);
        }
        public void CorrectlyPrintsCurscenes()
        {
            //Arrange
            ColorString[] firstSceneLines =
            {
                new ColorString("There once was a man named Gold Roger"),
                new ColorString("He had fame, wealth, and power beyond your wildest dreams"),
                new ColorString("Before they hung him from the gallows,"),
                new ColorString("These were the words he said:")
            };

            SingleScene firstScene = new SingleScene(firstSceneLines);

            ColorString[] secondSceneLines =
            {
                new ColorString("If you want my treasure, you can have it!"),
                new ColorString("I left everything I had in that place")
            };

            SingleScene secondScene = new SingleScene(secondSceneLines);

            SingleScene[] scenes =
            {
                firstScene,
                secondScene
            };

            Cutscene cutscene = new Cutscene(scenes);

            //Act
            cutscene.ExecuteCutscene(_input, _output, (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1), (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1));

            //Assert
            MockOutputMessage[] outputs = _output.GetOutputs();

            int expectedNumberOfLines = firstSceneLines.Length + secondSceneLines.Length;

            Assert.AreEqual(expectedNumberOfLines, outputs.Length);

            int[] clearIndices = _output.GetClearIndices();
            Assert.AreEqual(scenes.Length, clearIndices.Length);

            int nextClearIndex = firstSceneLines.Length;

            Assert.AreEqual(nextClearIndex, clearIndices[0]);

            nextClearIndex += secondSceneLines.Length;
            Assert.AreEqual(nextClearIndex, clearIndices[1]);
        }
        public void BattleManagerCorrectlyIdentifiesBellInIntro()
        {
            List <Bell> bells = GetBells(BellType.Copper, BellType.Silver);

            _humanFighter.SetMove(_runawayMove);
            _enemy.SetMove(_doNothingMove);

            _battleManager.Battle(_humanTeam, _enemyTeam, bells.Cast <TerrainInteractable>().ToList());

            MockOutputMessage[] outputs = _output.GetOutputs();

            int bellIntroIndex = 1 + _enemyTeam.Fighters.Count; //"time for a battle" and then each "encountered ____"

            foreach (Bell bell in bells)
            {
                MockOutputMessage output = outputs[bellIntroIndex];

                Assert.AreEqual($"There is a {bell.DisplayName} on the field\n", output.Message);

                bellIntroIndex++;
            }

            Assert.AreEqual(bellIntroIndex, _output.GetClearIndices()[1]);
        }
        public void GetInput_ReturnsInputIfValidTextSpecified([Values("fight", "item", "run")] string input)
        {
            _menuInput.Push(input);
            MenuSelection ret = _menu.GetInput();

            var outputs      = _menuOutput.GetOutputs();
            var clearIndices = _menuOutput.GetClearIndices();

            Assert.AreEqual(_fullMenuPromptLength, outputs.Length);

            TestMenuOutput(outputs, 0, clearIndices, 0);

            Assert.AreEqual(input, ret.Description);
        }