public ExerciseBuilder(string langId, string prelude) : base(false) { this.prelude = prelude; Exercise = new ExerciseBlock(); Exercise.ValidatorName = "cs"; Exercise.LangId = langId; }
public ExerciseSlide( List<SlideBlock> blocks, SlideInfo slideInfo, string title, Guid id) : base(blocks, slideInfo, title, id) { Exercise = blocks.OfType<ExerciseBlock>().Single(); MaxScore = Exercise.MaxScore; }
public ExerciseSlide( List<SlideBlock> blocks, SlideInfo slideInfo, string title, string id) : base(blocks, slideInfo, title, id) { MaxScore = 5; Exercise = blocks.OfType<ExerciseBlock>().SingleOrDefault(); }
protected bool Equals(ExerciseBlock other) { return(Equals(ExerciseInitialCode, other.ExerciseInitialCode) && Equals(ExpectedOutput, other.ExpectedOutput) && Equals(HintsMd, other.HintsMd)); }
public static System.Web.WebPages.HelperResult Block(ExerciseBlock block, BlockRenderContext context) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { ExerciseBlockData data = context.GetBlockData(block) ?? new ExerciseBlockData(); var action = data.CanSkip ? "$('#ShowSolutionsAlert').modal('show')" : string.Format("window.location='{0}'", data.AcceptedSolutionUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<textarea id=\"secretCodeExercise\" class=\"hide\">"); WebViewPage.WriteTo(@__razor_helper_writer, block.ExerciseInitialCode.EnsureEnoughLines(4)); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</textarea>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<textarea class=\"code code-exercise\" data-lang=\""); WebViewPage.WriteTo(@__razor_helper_writer, block.LangId); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">"); WebViewPage.WriteTo(@__razor_helper_writer, data.LatestAcceptedSolution ?? block.ExerciseInitialCode.EnsureEnoughLines(4)); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</textarea>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<script>\r\n\t\tfunction cleanUserCode() {\r\n\t\t\tvar $secretCodeExercise = $(\'#secretC" + "odeExercise\');\r\n\t\t\t$(\'.code-exercise\')[0].codeMirrorEditor.setValue($secretCodeE" + "xercise.text());\r\n\t\t}\r\n\t</script>\r\n"); if (data.ShowControls) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"solution-control btn-group ctrl-group\">\r\n\t\t\t<button type=\"button\" c" + "lass=\"run-solution-button btn btn-primary no-rounds "); WebViewPage.WriteTo(@__razor_helper_writer, data.IsLti ? "run-solution-button-lti" : ""); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" data-url=\""); WebViewPage.WriteTo(@__razor_helper_writer, data.RunSolutionUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\tRun\r\n\t\t\t</button>\r\n\r\n"); if (!data.DebugView) { var e = ((ExerciseSlide)context.Slide).Exercise.HintsMd; WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t<button id=\"GetHintButton\" type=\"button\" class=\"btn btn-default hints-btn\"\r\n\t" + "\t\t\t data-course-id=\""); WebViewPage.WriteTo(@__razor_helper_writer, context.Course.Id); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" data-slide-index=\""); WebViewPage.WriteTo(@__razor_helper_writer, context.Slide.Index); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" data-hints-count=\""); WebViewPage.WriteTo(@__razor_helper_writer, e.Count); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\"\r\n\t\t\t\t data-url=\""); WebViewPage.WriteTo(@__razor_helper_writer, data.GetHintUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\t\tGet hint\r\n\t\t\t\t</button>\r\n"); if (!data.IsLti) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t<button type=\"button\" class=\"btn btn-default giveup-btn\" onclick=\""); WebViewPage.WriteTo(@__razor_helper_writer, action); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\t\t\tShow solutions\r\n\t\t\t\t\t</button>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t<button type=\"button\" class=\"btn btn-default reset-btn no-rounds\" onclick=\" c" + "leanUserCode() \">\r\n\t\t\t\t\tReset\r\n\t\t\t\t</button>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t</div>\r\n"); WebViewPage.WriteTo(@__razor_helper_writer, RunErrors()); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"panel-group ctrl-group\" id=\"hints-accordion\">\r\n\t\t\t<div id=\"hints-pl" + "ace\"></div>\r\n\t\t</div>\r\n"); if (!data.IsLti) { WebViewPage.WriteTo(@__razor_helper_writer, YouWillLoseScoresDialog(data)); } } if (data.DebugView) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div>\r\n\t\t\t<h3>Подсказки</h3>\r\n\t\t\t<ol>\r\n"); foreach (var hint in block.HintsMd) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t<li>\r\n\t\t\t\t\t\t"); WebViewPage.WriteTo(@__razor_helper_writer, MvcHtmlString.Create(hint.RenderMd(context.BaseUrl))); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t\t</li>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t</ol>\r\n\t\t</div>\r\n"); } }); }
private static RunSolutionResult GetRunResult(ExerciseBlock exercise, string code) { var buildResult = exercise.Solution.BuildSolution(code); if (buildResult.HasErrors) return new RunSolutionResult { IsCompileError = true, CompilationError = buildResult.ErrorMessage, ExecutionServiceName = "uLearn" }; if (buildResult.HasStyleIssues) return new RunSolutionResult { IsStyleViolation = true, CompilationError = buildResult.StyleMessage, ExecutionServiceName = "uLearn" }; var solution = buildResult.SourceCode; var submission = new RunnerSubmition { Code = solution, Id = Utils.NewNormalizedGuid(), Input = "", NeedRun = true }; var result = SandboxRunner.Run(submission); return new RunSolutionResult { IsRightAnswer = result.Verdict == Verdict.Ok && result.GetOutput().NormalizeEoln() == exercise.ExpectedOutput.NormalizeEoln(), ActualOutput = result.GetOutput().NormalizeEoln(), CompilationError = result.CompilationOutput, ExecutionServiceName = "this", IsCompileError = result.Verdict == Verdict.CompilationError, ExpectedOutput = exercise.ExpectedOutput.NormalizeEoln() }; }
protected bool Equals(ExerciseBlock other) { return Equals(ExerciseInitialCode, other.ExerciseInitialCode) && Equals(ExpectedOutput, other.ExpectedOutput) && Equals(HintsMd, other.HintsMd); }
public static System.Web.WebPages.HelperResult Block(ExerciseBlock block, BlockRenderContext context, HtmlHelper Html) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<div class=\"exercise\">\r\n"); ExerciseBlockData data = context.GetBlockData(block) ?? new ExerciseBlockData(context.Course.Id, context.Slide as ExerciseSlide) { IsGuest = context.IsGuest, IsLti = context.IsLti }; var manualCheckingId = context.ManualChecking != null ? (int?)context.ManualChecking.Id : null; if (Html != null) { WebViewPage.WriteTo(@__razor_helper_writer, Html.Action("Submission", "Exercise", new { courseId = context.Course.Id, slideId = context.Slide.Id, submissionId = context.VersionId, manualCheckingId = manualCheckingId, isLti = data.IsLti, instructorView = manualCheckingId != null })); } else { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t<div class=\"exercise__submission\">\r\n\t\t\t\t\t<textarea class=\"code code-exercise " + "hidden\" data-lang=\""); WebViewPage.WriteTo(@__razor_helper_writer, block.LangId); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">"); WebViewPage.WriteTo(@__razor_helper_writer, block.ExerciseInitialCode.EnsureEnoughLines(4)); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</textarea>\r\n\t\t\t\t\t<div class=\"loading-spinner\">\r\n\t\t\t\t\t\t<img src=\"/Content/loading" + ".gif\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t"); WebViewPage.WriteTo(@__razor_helper_writer, ExerciseControls(new ExerciseControlsModel(context.Course.Id, (ExerciseSlide)context.Slide) { IsCodeEditableAndSendable = true, DebugView = data.DebugView, RunSolutionUrl = data.RunSolutionUrl, })); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\r\n\t\t\t\t\t"); WebViewPage.WriteTo(@__razor_helper_writer, RunErrors()); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t</div>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\r\n\r\n"); if (data.DebugView) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<div>\r\n\t\t\t\t<h3>Подсказки</h3>\r\n\t\t\t\t<ol>\r\n"); foreach (var hint in data.Block.HintsMd) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t"); WebViewPage.WriteTo(@__razor_helper_writer, MvcHtmlString.Create(hint.RenderMd(context.BaseUrl))); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t\t\t</li>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t</ol>\r\n\t\t\t\t<h3>Комментарий после решения</h3>\r\n\t\t\t\t<p>"); WebViewPage.WriteTo(@__razor_helper_writer, data.Block.CommentAfterExerciseIsSolved); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</p>\r\n\t\t\t</div>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n"); if (context.ManualChecking != null) { var checking = (ManualExerciseChecking)context.ManualChecking; WebViewPage.WriteTo(@__razor_helper_writer, Html.Partial("~/Views/Exercise/_ExerciseScoreForm.cshtml", new ExerciseScoreFormModel(context.Course.Id, (ExerciseSlide) context.Slide, checking, context.GroupId, context.VersionId == null || checking.Submission.Id == context.VersionId))); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</div>\r\n"); }); }
private static RunSolutionResult GetRunResult(ExerciseBlock exercise, string code) { var buildResult = exercise.BuildSolution(code); if (buildResult.HasErrors) return new RunSolutionResult { IsCompileError = true, ErrorMessage = buildResult.ErrorMessage, ExecutionServiceName = "uLearn" }; if (buildResult.HasStyleIssues) return new RunSolutionResult { IsStyleViolation = true, ErrorMessage = buildResult.StyleMessage, ExecutionServiceName = "uLearn" }; var result = SandboxRunner.Run(exercise.CreateSubmition(Utils.NewNormalizedGuid(), code)); return new RunSolutionResult { IsRightAnswer = result.Verdict == Verdict.Ok && result.GetOutput().NormalizeEoln() == exercise.ExpectedOutput.NormalizeEoln(), ActualOutput = result.GetOutput().NormalizeEoln(), ErrorMessage = result.CompilationOutput, ExecutionServiceName = "this", IsCompileError = result.Verdict == Verdict.CompilationError, ExpectedOutput = exercise.ExpectedOutput.NormalizeEoln(), SubmissionId = 0, }; }
public static System.Web.WebPages.HelperResult Block(ExerciseBlock block, BlockRenderContext context) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { ExerciseBlockData data = context.GetBlockData(block) ?? new ExerciseBlockData(); var action = data.CanSkip ? "$('#ShowSolutionsAlert').modal('show')" : string.Format("window.location='{0}'", data.AcceptedSolutionUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<textarea id=\"secretCodeExercise\" class=\'hide\'>"); WebViewPage.WriteTo(@__razor_helper_writer, block.ExerciseInitialCode.EnsureEnoughLines(4)); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</textarea>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<div class=\"sphere-engine-tm\">Powered by <a target=\"blank\" href=\"http://sphere-e" + "ngine.com\">Sphere Engine™</a> and <a target=\"blank\" href=\"http://codemirror.net/" + "\">CodeMirror</a></div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<textarea class=\'code code-exercise\' data-lang=\""); WebViewPage.WriteTo(@__razor_helper_writer, block.LangId); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">"); WebViewPage.WriteTo(@__razor_helper_writer, data.LatestAcceptedSolution ?? block.ExerciseInitialCode.EnsureEnoughLines(4)); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</textarea>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<script>\r\n\t\tfunction cleanUserCode() {\r\n\t\t\tvar $secretCodeExercise = $(\'#secretC" + "odeExercise\');\r\n\t\t\t$(\'.code-exercise\')[0].codeMirrorEditor.setValue($secretCodeE" + "xercise.text());\r\n\t\t}\r\n\t</script>\r\n"); if (data.ShowControls) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"solution-control btn-group ctrl-group\">\r\n\t\t\t<button type=\"button\" c" + "lass=\"run-solution-button btn btn-primary no-rounds "); WebViewPage.WriteTo(@__razor_helper_writer, data.IsLti ? "run-solution-button-lti" : ""); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" data-url=\""); WebViewPage.WriteTo(@__razor_helper_writer, data.RunSolutionUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\tRun\r\n\t\t\t</button>\r\n\r\n"); var e = ((ExerciseSlide)context.Slide).Exercise.HintsMd; WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<button id=\"GetHintButton\" type=\"button\" class=\"btn btn-default hints-btn\" onc" + "lick=\" showHintForUser(\'"); WebViewPage.WriteTo(@__razor_helper_writer, context.Course.Id); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\', \'"); WebViewPage.WriteTo(@__razor_helper_writer, context.Slide.Index); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\', \'"); WebViewPage.WriteTo(@__razor_helper_writer, e.Count); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\') \" data-url=\""); WebViewPage.WriteTo(@__razor_helper_writer, data.GetHintUrl); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\tGet hint\r\n\t\t\t</button>\r\n"); if (!data.IsLti) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t<button type=\"button\" class=\"btn btn-default giveup-btn\" onclick=\""); WebViewPage.WriteTo(@__razor_helper_writer, action); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">\r\n\t\t\t\t\tShow solutions\r\n\t\t\t\t</button>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<button type=\"button\" class=\"btn btn-default reset-btn no-rounds\" onclick=\" cl" + "eanUserCode() \">\r\n\t\t\t\tReset\r\n\t\t\t</button>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"run-result run-service-error\">\r\n\t\t\t<div class=\"run-verdict label-wa" + "rning\">Ошибка сервера :(</div>\r\n\t\t\t<pre class=\"no-rounds\"><code class=\"run-detai" + "ls\"></code></pre>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"run-result run-compile-error\">\r\n\t\t\t<div class=\"run-verdict label-da" + "nger\">Ошибка компиляции</div>\r\n\t\t\t<pre class=\"no-rounds\"><code class=\"run-detail" + "s\"></code></pre>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, @" <div class=""run-result run-style-error""> <div class=""run-verdict label-danger"">Нарушение стилевых требований</div> <pre class=""no-rounds""><code class=""run-details""></code></pre> <div> <small>В некоторых ситуациях стилевые проверки тут могут быть жестче, чем необходимо в реальной жизни.</small> </div> </div> "); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"run-result run-wa\">\r\n\t\t\t<div class=\"run-verdict label-danger\">Невер" + "ный результат</div>\r\n\t\t\t<div class=\"diff-table tablesorter\"></div>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"run-result run-wa-no-diff\">\r\n\t\t\t<div class=\"run-verdict label-dange" + "r\">Неверный результат</div>\r\n\t\t\t<pre class=\"no-rounds\"><code class=\"run-details\"" + "></code></pre>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"run-result run-success\">\r\n\t\t\t<div class=\"run-verdict label-success " + "clearfix\">Успех!</div>\r\n\t\t\t<pre class=\"no-rounds\"><code class=\"run-details\"></co" + "de></pre>\r\n\t\t</div>\r\n"); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div class=\"panel-group ctrl-group\" id=\"hints-accordion\">\r\n\t\t\t<div id=\"hints-pl" + "ace\"></div>\r\n\t\t</div>\r\n"); if (!data.IsLti) { WebViewPage.WriteTo(@__razor_helper_writer, Alert(data)); } } else { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t<div>\r\n\t\t\t<h3>Подсказки</h3>\r\n\t\t\t<ol>\r\n"); foreach (var hint in block.HintsMd) { WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t\t\t<li>\r\n\t\t\t\t\t\t"); WebViewPage.WriteTo(@__razor_helper_writer, MvcHtmlString.Create(hint.RenderMd(context.BaseUrl))); WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t\t</li>\r\n"); } WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t</ol>\r\n\t\t</div>\r\n"); } }); }