private void EthalonSolutionForSingleFileExercises(ExerciseSlide slide) { var exercise = (SingleFileExerciseBlock)slide.Exercise; var solution = exercise.BuildSolution(exercise.EthalonSolution); if (solution.HasErrors) { FailOnError(slide, solution, exercise.EthalonSolution); return; } if (solution.HasStyleIssues) { Console.WriteLine("Style issue: " + solution.StyleMessage); } var result = SandboxRunner.Run(exercise.CreateSubmition( slide.Id.ToString(), exercise.EthalonSolution), settings); var output = result.GetOutput().NormalizeEoln(); var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); if (!isRightAnswer) { ReportSlideError(slide, "ActualOutput: " + output.NormalizeEoln() + "\n" + "ExpectedOutput: " + slide.Exercise.ExpectedOutput.NormalizeEoln() + "\n" + "CompilationError: " + result.CompilationOutput + "\n" + "SourceCode: " + solution.SourceCode + "\n\n"); } }
public void EthalonSolutions_for_Exercises(ExerciseSlide slide) { var solution = slide.Exercise.Solution.BuildSolution(slide.Exercise.EthalonSolution); if (solution.HasErrors) { FailOnError(slide, solution); } else { var submission = new RunnerSubmition() { Code = solution.SourceCode, Id = slide.Id, Input = "", NeedRun = true }; var result = SandboxRunner.Run(submission); var output = result.GetOutput().NormalizeEoln(); var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); if (!isRightAnswer) { Assert.Fail("mistake in: " + slide.Info.UnitName + " - " + slide.Title + "\n" + "\tActualOutput: " + output + "\n" + "\tExpectedOutput: " + slide.Exercise.ExpectedOutput.NormalizeEoln() + "\n" + "\tCompilationError: " + result.CompilationOutput + "\n" + "\tSourceCode: " + solution.SourceCode + "\n\n"); } } }
private static void InitialCodeIsNotSolutionForProjExercise(ExerciseSlide slide) { var exercise = slide.Exercise as ProjectExerciseBlock; var directoryName = Path.Combine(exercise.SlideFolderPath.FullName, exercise.ExerciseDir); var excluded = (exercise.PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList(); var exerciseDir = new DirectoryInfo(directoryName); var bytes = exerciseDir.ToZip(excluded, new[] { new FileContent { Path = exercise.CsprojFileName, Data = ProjModifier.ModifyCsproj(exerciseDir.GetFile(exercise.CsprojFileName), proj => ProjModifier.PrepareForChecking(proj, exercise, excluded)) } }); var result = SandboxRunner.Run(new ProjRunnerSubmission { Id = slide.Id.ToString(), ZipFileData = bytes, ProjectFileName = exercise.CsprojFileName, Input = "", NeedRun = true }); Console.WriteLine("Result = " + result); Assert.AreEqual(Verdict.Ok, result.Verdict); Assert.AreNotEqual("", result.Output); }
private void InitialCodeIsNotSolutionForProjExercise(ExerciseSlide slide) { var exercise = (ProjectExerciseBlock)slide.Exercise; var directoryName = Path.Combine(exercise.SlideFolderPath.FullName, exercise.ExerciseDir); var excluded = (exercise.PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList(); var exerciseDir = new DirectoryInfo(directoryName); var bytes = exerciseDir.ToZip(excluded, new[] { new FileContent { Path = exercise.CsprojFileName, Data = ProjModifier.ModifyCsproj(exerciseDir.GetFile(exercise.CsprojFileName), proj => ProjModifier.PrepareForChecking(proj, exercise, excluded)) } }); var result = SandboxRunner.Run(new ProjRunnerSubmission { Id = slide.Id.ToString(), ZipFileData = bytes, ProjectFileName = exercise.CsprojFileName, Input = "", NeedRun = true }); var isOk = result.Verdict.IsOneOf(Verdict.Ok, Verdict.MemoryLimit, Verdict.TimeLimit); if (!isOk) { ReportSlideError(slide, "Exercise initial code verdict is not OK. RunResult = " + result); } else if (result.Verdict == Verdict.Ok && result.Output == "") { ReportSlideError(slide, "Exercise initial code (available to students) is solution!"); } }
private static void EthalonSolutionForSingleFileExercises(ExerciseSlide slide) { var exercise = (SingleFileExerciseBlock)slide.Exercise; var solution = exercise.BuildSolution(exercise.EthalonSolution); if (solution.HasErrors) { FailOnError(slide, solution, exercise.EthalonSolution); return; } var result = SandboxRunner.Run(exercise.CreateSubmition( slide.Id.ToString(), exercise.EthalonSolution), new SandboxRunnerSettings()); var output = result.GetOutput().NormalizeEoln(); var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); if (!isRightAnswer) { Assert.Fail("mistake in: " + slide.Info.Unit.Title + " - " + slide.Title + "\n" + "\tActualOutput: " + output.NormalizeEoln() + "\n" + "\tExpectedOutput: " + slide.Exercise.ExpectedOutput.NormalizeEoln() + "\n" + "\tCompilationError: " + result.CompilationOutput + "\n" + "\tSourceCode: " + solution.SourceCode + "\n\n"); } }
private static void FailOnError(ExerciseSlide slide, SolutionBuildResult solution, string ethalonSolution) { Assert.Fail($@"Template solution: {ethalonSolution} source code: {solution.SourceCode} solution has error in: {slide.Info.Unit.Title} - {slide.Title} error: {solution.ErrorMessage}"); }
private static void FailOnError(ExerciseSlide slide, SolutionBuildResult solution) { Assert.Fail(@"Template solution: {0} source code: {1} solution has error in: {2} - {3} error: {4}", slide.Exercise.EthalonSolution, solution.SourceCode, slide.Info.UnitName, slide.Title, solution.ErrorMessage); }
public void EthalonSolutionsForExercises(ExerciseSlide slide) { if (slide.Exercise is ProjectExerciseBlock) { InitialCodeIsNotSolutionForProjExercise(slide); } else { EthalonSolutionForSingleFileExercises(slide); } }
private void EthalonSolutionsForExercises(ExerciseSlide slide) { if (slide.Exercise is ProjectExerciseBlock) InitialCodeIsNotSolutionForProjExercise(slide); else EthalonSolutionForSingleFileExercises(slide); }
private static void EthalonSolutionForSingleFileExercises(ExerciseSlide slide) { var exercise = (SingleFileExerciseBlock)slide.Exercise; var solution = exercise.BuildSolution(exercise.EthalonSolution); if (solution.HasErrors) { FailOnError(slide, solution, exercise.EthalonSolution); return; } var result = SandboxRunner.Run(exercise.CreateSubmition( slide.Id.ToString(), exercise.EthalonSolution), new SandboxRunnerSettings()); var output = result.GetOutput().NormalizeEoln(); var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); if (!isRightAnswer) { Assert.Fail("mistake in: " + slide.Info.UnitName + " - " + slide.Title + "\n" + "\tActualOutput: " + output.NormalizeEoln() + "\n" + "\tExpectedOutput: " + slide.Exercise.ExpectedOutput.NormalizeEoln() + "\n" + "\tCompilationError: " + result.CompilationOutput + "\n" + "\tSourceCode: " + solution.SourceCode + "\n\n"); } }
public void EthalonSolutions_for_Exercises(ExerciseSlide slide) { var solution = slide.Exercise.Solution.BuildSolution(slide.Exercise.EthalonSolution); if (solution.HasErrors) FailOnError(slide, solution); else { var submission = new RunnerSubmition() { Code = solution.SourceCode, Id = slide.Id, Input = "", NeedRun = true }; var result = SandboxRunner.Run(submission); var output = result.GetOutput().NormalizeEoln(); var isRightAnswer = output.NormalizeEoln().Equals(slide.Exercise.ExpectedOutput.NormalizeEoln()); if (!isRightAnswer) { Assert.Fail("mistake in: " + slide.Info.UnitName + " - " + slide.Title + "\n" + "\tActualOutput: " + output + "\n" + "\tExpectedOutput: " + slide.Exercise.ExpectedOutput.NormalizeEoln() + "\n" + "\tCompilationError: " + result.CompilationOutput + "\n" + "\tSourceCode: " + solution.SourceCode + "\n\n"); } } }
private void FailOnError(ExerciseSlide slide, SolutionBuildResult solution, string ethalonSolution) { ReportSlideError(slide, $@"Template solution: {ethalonSolution} source code: {solution.SourceCode} error: {solution.ErrorMessage}"); }
private static void FailOnError(ExerciseSlide slide, SolutionBuildResult solution, string ethalonSolution) { Assert.Fail($@"Template solution: {ethalonSolution} source code: {solution.SourceCode} solution has error in: {slide.Info.UnitName} - {slide.Title} error: {solution.ErrorMessage}"); }
private void InitialCodeIsNotSolutionForProjExercise(ExerciseSlide slide) { var exercise = (ProjectExerciseBlock)slide.Exercise; var directoryName = Path.Combine(exercise.SlideFolderPath.FullName, exercise.ExerciseDir); var excluded = (exercise.PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList(); var exerciseDir = new DirectoryInfo(directoryName); var bytes = exerciseDir.ToZip(excluded, new[] { new FileContent { Path = exercise.CsprojFileName, Data = ProjModifier.ModifyCsproj(exerciseDir.GetFile(exercise.CsprojFileName), proj => ProjModifier.PrepareForChecking(proj, exercise, excluded)) } }); var result = SandboxRunner.Run(new ProjRunnerSubmission { Id = slide.Id.ToString(), ZipFileData = bytes, ProjectFileName = exercise.CsprojFileName, Input = "", NeedRun = true }); var isOk = result.Verdict.IsOneOf(Verdict.Ok, Verdict.MemoryLimit, Verdict.TimeLimit); if (!isOk) ReportSlideError(slide, "Exercise initial code verdict is not OK. RunResult = " + result); else if (result.Verdict == Verdict.Ok && result.Output == "") ReportSlideError(slide, "Exercise initial code (available to students) is solution!"); }