private XmlHandler failureAndReasonHandler()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/nUnit/NUnitXmlReportParser.java [157:199]


  private XmlHandler failureAndReasonHandler(final String name, final boolean ignored, final boolean failed, final boolean failOnFailure) {
    return elementsPatternPath(new Handler() {
      @Override
      public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
        final FailureDetails details = new FailureDetails();
        return reader.visitChildren(
          elementsPath(new TextHandler() {
            public void setText(@NotNull final String text) {
              details.message = text.trim();
            }
          }, "message"),
          elementsPath(new TextHandler() {
            @Override
            public void setText(@NotNull final String text) {
              details.stackTrace = text.trim();
            }
          }, "stack-trace")
        ).than(new XmlAction() {
          @Override
          public void apply() {
            final String msg = getMessage();
            if (ignored) {
              myCallback.warning("suite " + name + " ignored" + msg);
            } else if (failed) {
              final String err = "suite " + name + " failure" + msg;
              if (failOnFailure) {
                myCallback.failure(err);
              } else {
                myCallback.warning(err);
              }
            } else if (isNotEmpty(msg)) {
              myCallback.message("suite " + name + msg);
            }
          }

          private String getMessage() {
            if (isEmpty(details.message) && isEmpty(details.stackTrace)) return "";
            return ": " + details.message + (isEmpty(details.stackTrace) ? "" : "\n" + details.stackTrace);
          }
        });
      }
    }, "failure|reason");
  }