override fun check()

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()
  }