コード例 #1
0
 public async Task <CodeJobResult> ExecuteClassJob([FromBody] ClassJob job)
 {
     return(await _codeRunnerService.ExecuteClassJobAsync(job));
 }
コード例 #2
0
        /// <summary>
        /// Generates a specific question given a generated question and a seed.
        /// </summary>
        public async Task <QuestionGenerationResult> GenerateQuestionAsync(
            GeneratedQuestionTemplate question,
            int seed)
        {
            var classJob = CreateQuestionGeneratorClassJob(question, seed);

            var classJobResult = await _codeRunnerService.ExecuteClassJobAsync(classJob);

            if (!classJobResult.ClassCompilationResult.Success)
            {
                return(new QuestionGenerationResult
                       (
                           error: "Failed to compile question generator. Compilation errors: \n"
                           + string.Join(
                               "\n",
                               classJobResult.ClassCompilationResult.Errors.Select(error => error.FullError))
                       ));
            }

            if (!classJobResult.ClassDefinition.Methods.Any(
                    m => m.IsStatic &&
                    m.IsPublic &&
                    m.ReturnType.EndsWith("Question") &&
                    m.Name == "generateQuestion" &&
                    m.ParameterTypes.Count == 1 &&
                    m.ParameterTypes.Single() == "int"))
            {
                return(new QuestionGenerationResult
                       (
                           error: "The QuestionGenerator class must have a method with the following signature: \n"
                           + "public static Question generateQuestion(int seed)"
                       ));
            }

            if (!classJobResult.TestsCompilationResult.Success)
            {
                return(new QuestionGenerationResult
                       (
                           error: "Failed to compile question generator. Compilation errors: \n"
                           + string.Join(
                               "\n",
                               classJobResult.TestsCompilationResult.Errors.Select(error => error.FullError))
                       ));
            }

            if (!classJobResult.TestResults[0].Completed)
            {
                return(new QuestionGenerationResult
                       (
                           error: "An exception was encountered when calling QuestionGenerator.generateQuestion: \n"
                           + classJobResult.TestResults[0].Exception
                       ));
            }

            return(new QuestionGenerationResult
                   (
                       classJobResult.TestResults[0].ReturnValue,
                       classJob.FileContents,
                       classJob.LineNumberOffset,
                       seed
                   ));
        }