override fun processServiceMessages()

in intellij-plugin/Edu-Python/src/com/jetbrains/edu/python/learning/run/PyTestEventsConverter.kt [28:72]


  override fun processServiceMessages(text: @Nls String, outputType: Key<*>, visitor: ServiceMessageVisitor): Boolean {
    val messages = mutableListOf<ServiceMessageBuilder>()
    val processor: (TestMessage) -> Unit = { message ->
      when (message) {
        is TestMessage.TextLine -> {
          messages += if (ProcessOutputType.isStdout(outputType)) {
            createTestStdOutMessage(message.text)
          } else {
            createTestStdErrMessage(message.text)
          }
        }
        is TestMessage.Ok -> {
          val nodeId = nextId++
          messages += createTestStartedMessage(nodeId, message.testName)
          messages += createTestFinishedMessage(nodeId, message.testName)
        }
        is TestMessage.Failed -> {
          val nodeId = nextId++
          messages += createTestStartedMessage(nodeId, message.testName)
          messages += createTestFailedMessage(nodeId, message)
          messages += createTestFinishedMessage(nodeId, message.testName)
        }
        else -> Unit
      }
    }

    if (!isStarted) {
      messages += createTestSuiteStartedMessage()
      isStarted = true
    }
    parser.processMessage(text, processor)
    if (getProcessFinishedMessage().toRegex() in text) {
      if (nextId == 2) {
        // `nextId == 2` means that converter didn't receive any test result
        val failedMessage = TestMessage.Failed(ROOT_SUITE_NAME, CheckResult.noTestsRun.message)
        messages += createTestFailedMessage(ROOT_SUIT_ID.toInt(), failedMessage)
      }
      messages += createTestSuiteFinishedMessage()
    }

    for (message in messages) {
      super.processServiceMessages(message.toString(), outputType, visitor)
    }
    return true
  }