public void TwoErrors_Should_ThrowTwoExceptions()
        {
            var exception = Assert.Throws <ParserExceptionList>(() =>
                                                                CsvGradeCaseGenerator.ConvertTextToGradeCases(@"""test """" test2 """, @"""test """" test2 """));

            exception.Exceptions.Should().HaveCount(2);
        }
        public void LongestWord_Should_Pass()
        {
            var results = CsvGradeCaseGenerator.ConvertToGradeCases(new[] { "method", "something", "love", "time" },
                                                                    new[] { "test method", "super long something", "I love dogs", "fun& time" });


            results.Should().HaveCount(4);
        }
        public void ExceptionSyntax_Should_SetException(string input, string outputstr, bool isException, string msg)
        {
            var result = CsvGradeCaseGenerator.ConvertTextToGradeCases(input, outputstr);

            var output = result.Single().ExpectedOutputs.Single();

            output.Exception.Should().Be(isException);
            output.ValueToMatch.Should().Be(msg);
        }
        public void HintSyntax_Should_NotChangeContent()
        {
            var result = CsvGradeCaseGenerator.ConvertToGradeCases(new[] { "1[did you handle one?],2[did you handle two?]" }, new[] { "1,2" });

            result.Should().HaveCount(1);

            result[0].ExpectedOutputs.Should().HaveCount(2);
            result[0].ExpectedOutputs.Select(p => p.Hint.Should().NotBeNullOrEmpty()).ToList();
            result[0].ExpectedOutputs.Select(p => int.TryParse(p, out var t).Should().BeTrue()).ToList();
        }
        public void NegationSyntax_Should_NotChangeContent()
        {
            var result = CsvGradeCaseGenerator.ConvertToGradeCases(new[] { "!1,!2" }, new[] { "1,2" });

            result.Should().HaveCount(1);

            result[0].ExpectedOutputs.Should().HaveCount(2);
            result[0].ExpectedOutputs.All(p => p.Negate).Should().BeTrue();
            result[0].ExpectedOutputs.All(p => int.TryParse(p, out var t)).Should().BeTrue();
        }
        public async Task Exception_Should_Do(string input, string output, bool pass, string message, string sourceCode)
        {
            var cases = CsvGradeCaseGenerator.ConvertTextToGradeCases(input, output);

            var results = await consoleAppGrader.Grade(sourceCode, cases);

            var caseResult = results.CaseResults.Single();

            caseResult.Pass.Should().Be(pass);
            caseResult.ErrorMessage.Should().Be(message);
        }
        public async Task JsonConvertTest()
        {
            references.Add(typeof(JsonConvert).Assembly.Location);


            var cases = CsvGradeCaseGenerator.ConvertTextToGradeCases("", "");

            var results = await consoleAppGrader.Grade(SourceCodeStrings.JsonConvertSource, cases, references);

            var caseResult = results.CaseResults.Single();

            caseResult.Pass.Should().Be(true, caseResult.ErrorMessage);
        }
        public void MessageWithQuotations()
        {
            model.CsvExpectedOutput = @"""test""[this is a message],""test2[test]""";

            var result = CsvGradeCaseGenerator.ConvertTextToGradeCases(model.CsvCases, model.CsvExpectedOutput);

            var ot = result.First().ExpectedOutputs;

            ot[0].ValueToMatch.Should().Be("test");
            ot[0].Hint.Should().Be("this is a message");
            ot[1].ValueToMatch.Should().Be("test2[test]");
            ot[1].Hint.Should().BeNullOrEmpty();
        }
        public void NegateWithQuotations()
        {
            model.CsvExpectedOutput = @"!""test"",""!test2""";


            var result = CsvGradeCaseGenerator.ConvertTextToGradeCases(model.CsvCases, model.CsvExpectedOutput);

            var ot = result.First().ExpectedOutputs;

            ot[0].ValueToMatch.Should().Be("test");
            ot[0].Negate.Should().BeTrue();
            ot[1].ValueToMatch.Should().Be("!test2");
            ot[1].Negate.Should().BeFalse();
        }
        public void QuotationTest()
        {
            var CsvCases          = @"""test"", ""test2 "",""test,test"", test3 , , "" "" ,test[hint] ";
            var CsvExpectedOutput = "";

            var result = CsvGradeCaseGenerator.ConvertTextToGradeCases(CsvCases, CsvExpectedOutput);

            var inp = result.First().Inputs;

            inp[0].Should().Be("test");
            inp[1].Should().Be("test2 ");
            inp[2].Should().Be("test,test");
            inp[3].Should().Be(" test3 ");
            inp[4].Should().Be(" ");
            inp[5].Should().Be(" ");
        }
        public void ExpectedOutput_Should_Fail(string expected)
        {
            var result = Assert.Throws <ParserExceptionList>(() => CsvGradeCaseGenerator.ConvertTextToGradeCases("", expected));

            result.Exceptions.Should().HaveCount(1);
        }
        public void InputWithoutOutput_Count_Should_BeTwo()
        {
            var result = CsvGradeCaseGenerator.ConvertToGradeCases(new string[0], new[] { "1,2", "1,2" });

            result.Should().HaveCount(2);
        }