private XmlHandler testResultsHandler()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/ctest/TestXmlReportParser.java [130:199]


  private XmlHandler testResultsHandler(@NotNull final TestData testData) {
    return elementsPath(new Handler() {
      public XmlReturn processElement(@NotNull XmlElementInfo reader) {
        return reader.visitChildren(
            elementsPath(new Handler() {
              public XmlReturn processElement(@NotNull XmlElementInfo reader) {
                final String type = reader.getAttribute("type");
                final String name = reader.getAttribute("name");
                final String[] value = new String[1];
                return reader.visitChildren(elementsPath(new TextHandler() {
                  public void setText(@NotNull String text) {
                    value[0] = text;
                  }
                }, "Value")).than(new XmlAction() {
                  public void apply() {
                    if (name == null) return;
                    switch (name) {
                      case "Execution Time":
                        testData.setDuration(myDurationParser.parseTestDuration(value[0]));
                        break;
                      case "Exit Code":
                        testData.setExitCode(value[0]);
                        break;
                      case "Exit Value":
                        try {
                          testData.setExitValue(Integer.parseInt(value[0]));
                        } catch (NumberFormatException ignored) {
                        }
                        break;
                      case "Pass Reason":
                      case "Fail Reason":
                        testData.setReason(value[0]);
                        break;
                      case "Completion Status":
                        testData.setCompletionStatus(value[0]);
                        break;
                      case "Command Line":
                        // don't do anything since it should already be in the FullCommandLine
                        break;
                      default: // explicit measurement
                        testData.addNamedMeasurement(name, type == null ? "" : type, value[0]); // Just for logging other measurements
                        break;
                    }
                  }
                });
              }
            }, "NamedMeasurement"),
            elementsPath(new Handler() {
              public XmlReturn processElement(@NotNull XmlElementInfo reader) {
                final String[] compression = new String[1];
                final String[] value = new String[1];
                return reader.visitChildren(elementsPath(new Handler() {
                  public XmlReturn processElement(@NotNull XmlElementInfo reader) {
                    compression[0] = reader.getAttribute("compression");
                    return reader.visitText(new TextHandler() {
                      public void setText(@NotNull String text) {
                        value[0] = text;
                      }
                    });
                  }
                }, "Value")).than(new XmlAction() {
                  public void apply() {
                    testData.setLog(value[0], compression[0]);
                  }
                });
              }
            }, "Measurement"));
      }
    }, "Results");
  }