void (@NotNull SMTestProxy testProxy, @NotNull Node node) { // allow clients to omit sending 'testFinished' messages after 'testFailed'/'testIgnored' messages if (node.getState() != State.FINISHED && node.getState() != State.FAILED && node.getState() != State.IGNORED) { LOG.debug("onTestFinished: state != FINISHED && state != FAILED && state != IGNORED"); // Don't count the same test twice if 'testFailed' or 'testIgnored' message is followed by 'testFinished' message // which may happen if generated TeamCity messages adhere rules from // https://confluence.jetbrains.com/display/TCD10/Build+Script+Interaction+with+TeamCity // Anyway, this id-based converter already breaks TeamCity protocol by expecting messages with // non-standard TeamCity attributes: 'nodeId'/'parentNodeId' instead of 'name'. if (testProxy.isSuite()) { fireOnSuiteFinished(testProxy, node.getId()); } else { fireOnTestFinished(testProxy, node.getId()); } } }