Beispiel #1
0
        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");
            }
        }
Beispiel #2
0
        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");
                }
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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!");
            }
        }
Beispiel #5
0
        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");
            }
        }
Beispiel #6
0
       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}");
       }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 public void EthalonSolutionsForExercises(ExerciseSlide slide)
 {
     if (slide.Exercise is ProjectExerciseBlock)
     {
         InitialCodeIsNotSolutionForProjExercise(slide);
     }
     else
     {
         EthalonSolutionForSingleFileExercises(slide);
     }
 }
Beispiel #9
0
		private void EthalonSolutionsForExercises(ExerciseSlide slide)
		{
			if (slide.Exercise is ProjectExerciseBlock)
				InitialCodeIsNotSolutionForProjExercise(slide);
			else
				EthalonSolutionForSingleFileExercises(slide);
		}
Beispiel #10
0
		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");
			}
		}
Beispiel #11
0
		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");
			}
		}
Beispiel #12
0
		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);
		}
Beispiel #13
0
		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");
				}
			}
		}
Beispiel #14
0
        private void FailOnError(ExerciseSlide slide, SolutionBuildResult solution, string ethalonSolution)
        {
            ReportSlideError(slide, $@"Template solution: {ethalonSolution}
source code: {solution.SourceCode}
error: {solution.ErrorMessage}");
        }
Beispiel #15
0
		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}");
		}
Beispiel #16
0
		private void FailOnError(ExerciseSlide slide, SolutionBuildResult solution, string ethalonSolution)
		{
			ReportSlideError(slide, $@"Template solution: {ethalonSolution}
source code: {solution.SourceCode}
error: {solution.ErrorMessage}");
		}
Beispiel #17
0
		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!");
		}
Beispiel #18
0
		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);
		}