Ejemplo n.º 1
0
		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");
				}
			}
		}
Ejemplo n.º 2
0
		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
			};
		}