コード例 #1
0
		public async Task GradeSubmissionAsync_ClassJobHasCorrectFileContents()
		{
			var question = GetProgramQuestion();
			var classJobResult = GetClassJobResult(success: true);
			var submission = new CodeQuestionSubmission() { Contents = "Submission %" };
			var codeRunnerService = GetCodeRunnerService
			(
				classJobResult,
				job => job.FileContents == "Submission %%"
			);

			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);

			Assert.Equal(1.0, result.Score);
		}
コード例 #2
0
		public async Task GradeSubmissionAsync_ClassJobHasImportedClasses()
		{
			var question = GetProgramQuestion();
			var classJobResult = GetClassJobResult(success: true);
			var submission = new CodeQuestionSubmission() { Contents = "Submission" };
			var codeRunnerService = GetCodeRunnerService
			(
				classJobResult,
				job => job.ClassesToImport.Count == 1
					&& job.ClassesToImport[0] == "package.classToImport"
			);

			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);

			Assert.Equal(1.0, result.Score);
		}
コード例 #3
0
        public async Task GradeSubmissionAsync_ClassJobHasCorrectFileContents()
        {
            var question       = GetProgramQuestion();
            var classJobResult = GetClassJobResult(success: true);
            var submission     = new CodeQuestionSubmission()
            {
                Contents = "Submission %"
            };
            var codeRunnerService = GetCodeRunnerService
                                    (
                classJobResult,
                job => job.FileContents == "Submission %%"
                                    );

            var grader = new ProgramQuestionGrader(question, codeRunnerService);
            var result = await grader.GradeSubmissionAsync(submission);

            Assert.Equal(1.0, result.Score);
        }
コード例 #4
0
        public async Task GradeSubmissionAsync_CorrectSubmission_ValidTestDescription()
        {
            var question       = GetProgramQuestion();
            var classJobResult = GetClassJobResult(success: true);
            var submission     = new CodeQuestionSubmission()
            {
                Contents = "Submission"
            };
            var codeRunnerService = GetCodeRunnerService(classJobResult);

            var grader = new ProgramQuestionGrader(question, codeRunnerService);
            var result = await grader.GradeSubmissionAsync(submission);

            var codeQuestionResult = (CodeQuestionResult)result.Result;
            var testResult         = codeQuestionResult.TestResults.Single();

            Assert.Equal(1.0, result.Score);
            Assert.Empty(codeQuestionResult.Errors);
            Assert.Equal("Description", testResult.Description);
        }
コード例 #5
0
        public async Task GradeSubmissionAsync_ClassJobHasImportedClasses()
        {
            var question       = GetProgramQuestion();
            var classJobResult = GetClassJobResult(success: true);
            var submission     = new CodeQuestionSubmission()
            {
                Contents = "Submission"
            };
            var codeRunnerService = GetCodeRunnerService
                                    (
                classJobResult,
                job => job.ClassesToImport.Count == 1 &&
                job.ClassesToImport[0] == "package.classToImport"
                                    );

            var grader = new ProgramQuestionGrader(question, codeRunnerService);
            var result = await grader.GradeSubmissionAsync(submission);

            Assert.Equal(1.0, result.Score);
        }
コード例 #6
0
        public async Task GradeSubmissionAsync_ClassJobHasTests()
        {
            var question       = GetProgramQuestion();
            var classJobResult = GetClassJobResult(success: true);
            var submission     = new CodeQuestionSubmission()
            {
                Contents = "Submission %"
            };
            var codeRunnerService = GetCodeRunnerService
                                    (
                classJobResult,
                job => job.Tests.Count == 1 &&
                job.Tests[0].TestName == "test1" &&
                job.Tests[0].MethodBody == "ExpectedProgram.main(new String[] {\"One\",\"Two\"});" &&
                job.Tests[0].ReturnType == "void"
                                    );

            var grader = new ProgramQuestionGrader(question, codeRunnerService);
            var result = await grader.GradeSubmissionAsync(submission);

            Assert.Equal(1.0, result.Score);
        }
コード例 #7
0
        public async Task GradeSubmissionAsync_WrongMainMethodParameterTypes_Error()
        {
            var question   = GetProgramQuestion();
            var submission = new CodeQuestionSubmission()
            {
                Contents = "Submission"
            };

            var classJobResult = GetClassJobResult(success: false);

            classJobResult.ClassDefinition.Methods[0].ParameterTypes[0] = "double";

            var codeRunnerService = GetCodeRunnerService(classJobResult);
            var grader            = new ProgramQuestionGrader(question, codeRunnerService);
            var result            = await grader.GradeSubmissionAsync(submission);

            var codeQuestionResult     = (CodeQuestionResult)result.Result;
            var mainMethodMissingError = codeQuestionResult.Errors
                                         .Cast <MainMethodMissingError>()
                                         .Single();

            Assert.Equal(0.0, result.Score);
            Assert.Equal("ExpectedProgram", mainMethodMissingError.ClassName);
        }
コード例 #8
0
        public async Task GradeSubmissionAsync_MissingExpectedClass_Error()
        {
            var question   = GetProgramQuestion();
            var submission = new CodeQuestionSubmission()
            {
                Contents = "Submission"
            };

            var classJobResult = GetClassJobResult(success: false);

            classJobResult.TestsCompilationResult = null;
            classJobResult.ClassDefinition        = null;
            classJobResult.ClassCompilationResult = new CompilationResult()
            {
                Success = false,
                Errors  = Collections.CreateList
                          (
                    new CompileError()
                {
                    Message = "class ExpectedProgram should be declared in ExpectedProgram.java"
                }
                          )
            };

            var codeRunnerService = GetCodeRunnerService(classJobResult);
            var grader            = new ProgramQuestionGrader(question, codeRunnerService);
            var result            = await grader.GradeSubmissionAsync(submission);

            var codeQuestionResult        = (CodeQuestionResult)result.Result;
            var missingRequiredClassError = codeQuestionResult.Errors
                                            .Cast <MissingRequiredClassError>()
                                            .Single();

            Assert.Equal(0.0, result.Score);
            Assert.Equal("ExpectedProgram", missingRequiredClassError.RequiredClassName);
        }
コード例 #9
0
		public async Task GradeSubmissionAsync_CorrectSubmission_ValidTestDescription()
		{
			var question = GetProgramQuestion();
			var classJobResult = GetClassJobResult(success: true);
			var submission = new CodeQuestionSubmission() { Contents = "Submission" };
			var codeRunnerService = GetCodeRunnerService(classJobResult);

			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);
			var codeQuestionResult = (CodeQuestionResult)result.Result;
			var testResult = codeQuestionResult.TestResults.Single();

			Assert.Equal(1.0, result.Score);
			Assert.Equal(0, codeQuestionResult.Errors.Count);
			Assert.Equal("Description", testResult.Description);
		}
コード例 #10
0
		public async Task GradeSubmissionAsync_WrongMainMethodParameterTypes_Error()
		{
			var question = GetProgramQuestion();
			var submission = new CodeQuestionSubmission() { Contents = "Submission" };

			var classJobResult = GetClassJobResult(success: false);
			classJobResult.ClassDefinition.Methods[0].ParameterTypes[0] = "double";

			var codeRunnerService = GetCodeRunnerService(classJobResult);
			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);
			var codeQuestionResult = (CodeQuestionResult)result.Result;
			var mainMethodMissingError = codeQuestionResult.Errors
				 .Cast<MainMethodMissingError>()
				 .Single();

			Assert.Equal(0.0, result.Score);
			Assert.Equal("ExpectedProgram", mainMethodMissingError.ClassName);
		}
コード例 #11
0
		public async Task GradeSubmissionAsync_MissingExpectedClass_Error()
		{
			var question = GetProgramQuestion();
			var submission = new CodeQuestionSubmission() { Contents = "Submission" };

			var classJobResult = GetClassJobResult(success: false);
			classJobResult.TestsCompilationResult = null;
			classJobResult.ClassDefinition = null;
			classJobResult.ClassCompilationResult = new CompilationResult()
			{
				Success = false,
				Errors = Collections.CreateList
				(
					new CompileError()
					{
						Message = "class ExpectedProgram should be declared in ExpectedProgram.java"
					}
				)
			};

			var codeRunnerService = GetCodeRunnerService(classJobResult);
			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);
			var codeQuestionResult = (CodeQuestionResult)result.Result;
			var missingRequiredClassError = codeQuestionResult.Errors
				.Cast<MissingRequiredClassError>()
				.Single();

			Assert.Equal(0.0, result.Score);
			Assert.Equal("ExpectedProgram", missingRequiredClassError.RequiredClassName);
		}
コード例 #12
0
		public async Task GradeSubmissionAsync_ClassJobHasTests()
		{
			var question = GetProgramQuestion();
			var classJobResult = GetClassJobResult(success: true);
			var submission = new CodeQuestionSubmission() { Contents = "Submission %" };
			var codeRunnerService = GetCodeRunnerService
			(
				classJobResult,
				job => job.Tests.Count == 1
					&& job.Tests[0].TestName == "test1"
					&& job.Tests[0].MethodBody == "ExpectedProgram.main(new String[] {\"One\",\"Two\"});"
					&& job.Tests[0].ReturnType == "void"
			);

			var grader = new ProgramQuestionGrader(question, codeRunnerService);
			var result = await grader.GradeSubmissionAsync(submission);

			Assert.Equal(1.0, result.Score);
		}