in intellij-plugin/educational-core/src/com/jetbrains/edu/learning/checker/OutputTaskCheckerBase.kt [35:80]
override fun check(indicator: ProgressIndicator): CheckResult {
indicator.text = EduCoreBundle.message("progress.text.output.checker.executing.tests")
val possibleError = envChecker.getEnvironmentError(project, task)
if (possibleError != null) {
return possibleError
}
val testFolders = getTestFolders(project, task)
for ((index, testFolder) in testFolders.withIndex()) {
val inputVirtualFile = testFolder.findChild(task.inputFileName)
if (inputVirtualFile == null) LOG.info("No \"input.txt\" file found for task ${task.name}")
val outputVirtualFile = testFolder.findChild(task.outputFileName)
if (outputVirtualFile == null) {
if (inputVirtualFile == null) LOG.info("No \"output.txt\" file found for task ${task.name}")
continue
}
val inputDocument = inputVirtualFile?.let { getDocument(it) }
val input = runReadAction { inputDocument?.text }
val outputDocument = getDocument(outputVirtualFile)
val testNumber = index + 1
indicator.text2 = EduCoreBundle.message("progress.details.running.test", testNumber, testFolders.size)
val result = withRegistryKeyOff(RUN_WITH_PTY) {
codeExecutor.execute(project, task, indicator, input)
}
val actualOutput = when (result) {
is Ok -> CheckUtils.postProcessOutput(result.value)
is Err -> return result.error
}
createLatestOutputFile(testFolder, actualOutput)
val expectedOutput = runReadAction { outputDocument.text }
if (compareOutputs(expectedOutput, actualOutput)) {
val diff = CheckResultDiff(expected = expectedOutput, actual = actualOutput)
return CheckResult(CheckStatus.Failed, getIncorrectMessage(testFolder.name), diff = diff)
}
}
return processCorrectCheckResult()
}