private static void AssertAnswerWrongDecrementsNumDistractors(EvaluatorListerBridge bridge)
        {
            string correctFallacyText = bridge.Lister.Difficulty.requiredText;

            Assert.IsNotNull(correctFallacyText,
                             "correct fallacy text. Was lister populated?");
            string wrongFallacyText = correctFallacyText;

            foreach (string optionText in bridge.Lister.Difficulty.options)
            {
                if (optionText != correctFallacyText)
                {
                    wrongFallacyText = optionText;
                }
            }
            Assert.AreNotEqual(wrongFallacyText, correctFallacyText);

            Assert.AreEqual(2, bridge.Lister.Difficulty.numDistractors,
                            "Number of distractors before wrong.");
            bool correct = bridge.Evaluator.EvaluateFallacy(wrongFallacyText);

            Assert.IsFalse(correct,
                           "correctFallacyText=" + correctFallacyText);
            Assert.AreEqual(1, bridge.Lister.Difficulty.numDistractors,
                            "Number of distractors after wrong.");
        }
        public static void ConfigureRange_OutOfRange_Clamps()
        {
            EvaluatorListerBridge bridge = SetUpBridge();

            AssertAnswerRange_ChangesNumDistractors_And_EndsSession(bridge, 3, 99);
            Assert.AreEqual(15, bridge.Evaluator.Range.length,
                            "Range length");
        }
        public static void Answer_FifteenArguments_EndsSession()
        {
            EvaluatorListerBridge bridge = SetUpBridge();

            AssertAnswerRange_ChangesNumDistractors_And_EndsSession(bridge, 3, 18);
            Assert.AreEqual(15, bridge.Evaluator.Range.length,
                            "Range length");
        }
        private static void AssertAnswerCorrectIncrementsNumDistractors(EvaluatorListerBridge bridge)
        {
            string correctFallacyText = bridge.Lister.Difficulty.requiredText;

            Assert.IsNotNull(correctFallacyText,
                             "correct fallacy text. Was lister populated?");
            Assert.AreEqual(1, bridge.Lister.Difficulty.numDistractors,
                            "Number of distractors before correct.");
            bool correct = bridge.Evaluator.EvaluateFallacy(correctFallacyText);

            Assert.IsTrue(correct,
                          "correctFallacyText=" + correctFallacyText);
            Assert.AreEqual(2, bridge.Lister.Difficulty.numDistractors,
                            "Number of distractors after correct.");
        }
        private static EvaluatorListerBridge SetUpBridge()
        {
            EvaluatorListerBridge bridge = new EvaluatorListerBridge();

            bridge.Evaluator = new ArgumentEvaluator();
            bridge.Lister    = new TextLister();
            bridge.AddListeners();
            OptionDifficulty difficulty = bridge.Lister.Difficulty;

            difficulty.addDistractorsPerCorrect = 1;
            bridge.Lister.Difficulty            = difficulty;
            bridge.Lister.PopulatePossibleTexts(FallacyParserTests.ParseFromPrefab());
            bridge.Evaluator.Arguments = ArgumentParserTests.ParseFromPrefab();
            return(bridge);
        }
        private static void AssertAnswerRange_ChangesNumDistractors_And_EndsSession(
            EvaluatorListerBridge bridge, int argumentStart, int argumentEnd)
        {
            bridge.Evaluator.ConfigureRange(argumentStart, argumentEnd);
            argumentStart = bridge.Evaluator.Range.start;
            argumentEnd   = bridge.Evaluator.Range.end;

            bridge.Evaluator.StartArguments();
            Assert.AreEqual(argumentStart, bridge.Evaluator.Range.current,
                            "Current argument index");

            bool correct = true;

            for (int argumentIndex = argumentStart; argumentIndex < argumentEnd; ++argumentIndex)
            {
                if (correct)
                {
                    AssertAnswerCorrectIncrementsNumDistractors(bridge);
                }
                else
                {
                    AssertAnswerWrongDecrementsNumDistractors(bridge);
                }

                Assert.AreEqual(argumentIndex, bridge.Evaluator.Range.current,
                                "Current argument index");
                bridge.Evaluator.NextArgument();

                correct = !correct;
            }

            Assert.AreEqual(argumentEnd, bridge.Evaluator.Range.current,
                            "Current argument index after ended.");
            Assert.IsTrue(bridge.Evaluator.Range.ended,
                          "Session ended");
        }
        public static void Answer_ThreeArguments_EndsSession()
        {
            EvaluatorListerBridge bridge = SetUpBridge();

            AssertAnswerRange_ChangesNumDistractors_And_EndsSession(bridge, 0, 3);
        }