private Handler getSuiteHandler()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/testng/TestNGXmlReportParser.java [39:199]


  private Handler getSuiteHandler() {
    return new Handler() {

      @Override
      public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
        return reader.visitChildren(
          elementsPath(new Handler() {
            @Override
            public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
              final List<String> message = new ArrayList<String>();
              return reader.visitChildren(
                elementsPath(new TextHandler() {
                  @Override
                  public void setText(@NotNull final String text) {
                    message.add(text.trim());
                  }
                }, "line")
              ).than(new XmlAction() {
                @Override
                public void apply() {
                  myCallback.suiteSystemOutFound("TestNG", StringUtil.join(message, "\n"));
                }
              });
            }
          }, "reporter-output"),
          elementsPath(new Handler() {
            @Override
            public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
              final Suite suite = new Suite(reader.getAttribute("name"), SuiteSource.SUITE);
              if (suite.isValid(SuiteSource.SUITE)) {
                myCallback.suiteFound(suite.getName(SuiteSource.SUITE));
              }
              return reader.visitChildren(
                elementsPath(new Handler() {
                  @Override
                  public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                    suite.set(reader.getAttribute("name"), SuiteSource.TEST);
                    if (suite.isValid(SuiteSource.TEST)) {
                      myCallback.suiteFound(suite.getName(SuiteSource.TEST));
                    }
                    return reader.visitChildren(
                      elementsPath(new Handler() {
                        @Override
                        public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                          final String className = reader.getAttribute("name");
                          suite.set(className, SuiteSource.CLASS);
                          if (suite.isValid(SuiteSource.CLASS)) {
                            myCallback.suiteFound(suite.getName(SuiteSource.CLASS));
                          }

                          return reader.visitChildren(
                            elementsPath(new Handler() {
                              @Override
                              public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                                final TestData testData = new TestData();
                                testData.setClassName(className);
                                testData.setMethodName(reader.getAttribute("name"));
                                testData.setDuration(myDurationParser.parseTestDuration(reader.getAttribute("duration-ms")));
                                testData.setStatus(reader.getAttribute("status"));
                                testData.setConfig(reader.getAttribute("is-config"));
                                return reader.visitChildren(
                                  elementsPath(new Handler() {
                                    @Override
                                    public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                                      return reader.visitChildren(
                                        elementsPath(new Handler() {
                                          @Override
                                          public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                                            final String index = reader.getAttribute("index");
                                            return reader.visitChildren(
                                              elementsPath(new TextHandler() {
                                                @Override
                                                public void setText(@NotNull final String text) {
                                                  testData.addParam(index, text.trim());
                                                }
                                              }, "value"));
                                          }
                                        }, "param"));
                                    }
                                  }, "params"),
                                  elementsPath(new Handler() {
                                    @Override
                                    public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                                      return reader.visitChildren(
                                        elementsPath(new TextHandler() {
                                          @Override
                                          public void setText(@NotNull final String text) {
                                            testData.appendMessageLine(text.trim());
                                          }
                                        }, "line")
                                      );
                                    }
                                  }, "reporter-output"),
                                  elementsPath(new Handler() {
                                    @Override
                                    public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                                      testData.setFailureType(reader.getAttribute("class"));
                                      return reader.visitChildren(
                                        elementsPath(new TextHandler() {
                                          @Override
                                          public void setText(@NotNull final String text) {
                                            testData.setFailureMessage(text.trim());
                                          }
                                        }, "message"),
                                        elementsPath(new TextHandler() {
                                          @Override
                                          public void setText(@NotNull final String text) {
                                            testData.setFailureStackTrace(text.trim());
                                          }
                                        }, "short-stacktrace"),
                                        elementsPath(new TextHandler() {
                                          @Override
                                          public void setText(@NotNull final String text) {
                                            testData.setFailureStackTrace(text.trim());
                                          }
                                        }, "full-stacktrace")
                                      );
                                    }
                                  }, "exception")
                                ).than(new XmlAction() {
                                  @Override
                                  public void apply() {
                                      myCallback.testFound(testData);
                                  }
                                });
                              }
                            }, "test-method")
                          ).than(new XmlAction() {
                            @Override
                            public void apply() {
                              if (suite.isValid(SuiteSource.CLASS)) {
                                myCallback.suiteFinished(suite.remove(SuiteSource.CLASS));
                              }
                            }
                          });
                        }
                      }, "class")
                    ).than(new XmlAction() {
                      @Override
                      public void apply() {
                        if (suite.isValid(SuiteSource.TEST)) {
                          myCallback.suiteFinished(suite.remove(SuiteSource.TEST));
                        }
                      }
                    });
                  }
                }, "test")
              ).than(new XmlAction() {
                @Override
                public void apply() {
                  if (suite.isValid(SuiteSource.SUITE)) {
                    myCallback.suiteFinished(suite.remove(SuiteSource.SUITE));
                  }
                }
              });
            }
          }, "suite")
        );
      }
    };
  }