public CheckTaskResponse CheckCode(CheckTaskRequest request, ConfigurationPaths paths) { CheckTaskResponse answer = new CheckTaskResponse() { Id = request.Id, Result = true }; if (request.Code == null) { answer.Message = "Please, enter your code"; answer.Result = false; return(answer); } Compiler = new CodeCompiler(); try { Compiler.CreateCs(paths.CsFilePath, "test", request.Code); ProcessResultModel result = Compiler.CompileProgram(paths.CompilerPath, paths.CsFilePath); if (result.ExitCode != 0) { answer.Result = false; answer.Message = result.Result.Substring(371, result.Result.Length - 371); return(answer); } SetTests(request.Id, paths); //answer.Message = "Running tests: \n"; for (int i = 0; i < TestValues.Length && i < TestResults.Length; i++) { var res = RunTest(TestValues[i], TestResults[i], paths.CsFilePath); answer.Message += "\nTest № " + (i + 1).ToString(); if (res.ExitCode != 0) { answer.Result = false; } answer.Message += res.Result; } Compiler.DeleteFiles(paths.CsFilePath); } catch (Exception e) { answer.Result = false; answer.Message = e.Message; return(answer); } return(answer); }
// Running test on users code public ProcessResultModel RunTest(string testValues, string expectation, string programPath) { var runExe = Compiler.RunExe(programPath, testValues); ProcessResultModel result = new ProcessResultModel() { Result = runExe.Result.Trim() }; if (result.Result.CompareTo(expectation) == 0) { result.ExitCode = 0; result.Result = " Passed\nTest Values: " + testValues + "\nExpected Output: " + expectation + "\nOutput: " + runExe.Result + "\n"; } else { result.ExitCode = 1; result.Result = " Didn't Pass\nTest Values: " + testValues + "\nExpected Output: " + expectation + "\nOutput: " + runExe.Result + "\n"; } return(result); }