private static void TestExerciseSlide(ExerciseSlide slide, IExecutionService executionService) { var solution = slide.Exercise.Solution.BuildSolution(slide.Exercise.EthalonSolution); if (solution.HasErrors) Assert.Fail("Template solution: " + slide.Exercise.EthalonSolution + "\n\n" + "source code: " + solution.SourceCode + "\n\n" + "solution has error in: " + slide.Info.UnitName + " - " + slide.Title + "\n" + "\terror: " + solution.ErrorMessage + "\n\n"); else { //ExperimentMethod(solution); Попытка научиться проводить тестирование, не отправляя на Ideon. var testName = TestContext.CurrentContext.Test.Name; var submition = executionService.Submit(solution.SourceCode, testName).Result; var output = submition.StdOut + "\n" + submition.StdErr; var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); var result = new RunSolutionResult { CompilationError = submition.CompilationErrorMessage, IsRightAnswer = isRightAnswer, ExpectedOutput = slide.Exercise.ExpectedOutput, ActualOutput = output }; if (!isRightAnswer) { Assert.Fail("mistake in: " + slide.Info.UnitName + " - " + slide.Title + "\n" + "\tActualOutput: " + result.ActualOutput + "\n" + "\tExpectedOutput: " + result.ExpectedOutput + "\n" + "\tCompilationError: " + result.CompilationError + "\n" + "\tSourceCode: " + solution.SourceCode + "\n\n"); } } }
private async Task<RunSolutionResult> CheckSolution(ExerciseSlide exerciseSlide, string code, IExecutionService executionService) { var exerciseBlock = exerciseSlide.Exercise; var solution = exerciseBlock.Solution.BuildSolution(code); if (solution.HasErrors) return new RunSolutionResult { IsCompileError = true, CompilationError = solution.ErrorMessage, ExecutionServiceName = "uLearn" }; if (solution.HasStyleIssues) return new RunSolutionResult { IsStyleViolation = true, CompilationError = solution.StyleMessage, ExecutionServiceName = "uLearn" }; var submissionDetails = await executionService.Submit(solution.SourceCode, GenerateSubmissionName(exerciseSlide)); if (submissionDetails == null) return new RunSolutionResult { IsCompillerFailure = true, CompilationError = "Ой-ой, штуковина, которая проверяет решения сломалась (или просто устала). Попробуйте отправить решение позже (когда она немного отдохнет).", ExecutionServiceName = executionService.Name }; var output = submissionDetails.GetOutput(); var expectedOutput = exerciseBlock.ExpectedOutput.NormalizeEoln(); var isRightAnswer = submissionDetails.IsSuccess && output.Equals(expectedOutput); return new RunSolutionResult { IsCompileError = submissionDetails.IsCompilationError, CompilationError = submissionDetails.CompilationErrorMessage, IsRightAnswer = isRightAnswer, ExpectedOutput = exerciseBlock.HideExpectedOutputOnError ? null : expectedOutput, ActualOutput = output, ExecutionServiceName = submissionDetails.ServiceName }; }