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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }