public boolean parse()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/testng/TestNGReportParser.java [42:138]


  public boolean parse(@NotNull final File file, @Nullable final ParsingResult prevResult) throws ParsingException {
    if (prevResult != null) {
      myTestsToSkip = ((TestParsingResult)prevResult).getTests();
    }

    try {
      new TestNGXmlReportParser(new TestNGXmlReportParser.Callback() {

        @Override
        public void suiteFound(@Nullable final String suiteName) {
          if (suiteName == null) {
            myTestReporter.warning(TestMessages.getFileContainsUnnamedMessage(file, "suite"));
            return;
          }

          myTestReporter.openTestSuite(suiteName);
          ++myLoggedSuites;
          mySuites.push(suiteName);
        }

        @Override
        public void suiteSystemOutFound(@Nullable final String suiteName, @Nullable final String message) {
          if (mySuites.isEmpty() || !mySuites.peek().equals(suiteName)) {
            LOG.warn(TestMessages.getFailedToLogSuiteMessage("system out", suiteName));
            return;
          }
          if (message != null && message.length() > 0) {
            myTestReporter.info(TestMessages.getOutFromSuiteMessage("System out", suiteName, message));
          }
        }

        @Override
        public void suiteFinished(@Nullable final String suiteName) {
          if (mySuites.isEmpty() || !mySuites.peek().equals(suiteName)) {
            LOG.warn(TestMessages.getFailedToLogSuiteMessage("finish", suiteName));
            return;
          }
          myTestReporter.closeTestSuite();
          mySuites.pop();
        }

        @Override
        public void testFound(@NotNull TestData testData) {
          try {
            if (testSkipped()) return;
            if (testData.isConfig() && testData.getStatus() != TestData.Status.FAIL) return;
            String methodNameWithClass = (testData.getClassName() == null || testData.getMethodName() != null && testData.getMethodName().startsWith(testData.getClassName())
                                          ? ""
                                          : testData.getClassName() + ".") + testData.getMethodName();
            String methodParams = "";
            if (testData.getParams().size() > 0) {
              methodParams = "(" + StringUtil.join(testData.getParams(), ", ") + ")";
            }

            final String testName = methodNameWithClass + methodParams;
            myTestReporter.openTest(testName);

            switch (testData.getStatus()) {
              case PASS:
                break;
              case FAIL:
                myTestReporter.testFail(TestMessages.getFailureMessage(testData.getFailureType(), testData.getFailureMessage()), testData.getFailureStackTrace());
                break;
              case SKIP:
                myTestReporter.testIgnored(testData.getFailureMessage());
                break;
            }

            String msg = testData.getTestMessage();
            if (msg.length() > 0) {
              myTestReporter.testStdOutput(msg);
            }

            myTestReporter.closeTest(testData.getDuration());
          } finally {
            ++myLoggedTests;
          }
        }

        @Override
        public void unexpectedFormat(@NotNull final String msg) {
          myTestReporter.error(TestMessages.getFileExpectedFormatMessage(file, msg, "Ant TestNG Task"));
        }
      }, myDurationParser).parse(file);
      return true;
    } catch (IOException e) {
      myParsingException = new ParsingException(e);

      while (!mySuites.isEmpty()) {
        myTestReporter.closeTestSuite();
        mySuites.pop();
      }

      LOG.debug(TestMessages.getCouldNotCompletelyParseMessage(file, e, myLoggedTests));
    }
    return false;
  }