public boolean parse()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/nUnit/NUnitReportParser.java [41:135]


  public boolean parse(@NotNull final File file, @Nullable final ParsingResult prevResult) throws ParsingException {
    if (prevResult != null) {
      myTestsToSkip = ((TestParsingResult) prevResult).getTests();
    }
    try {
      new NUnitXmlReportParser(new NUnitXmlReportParser.Callback() {
        public void suiteFound(@Nullable final String suiteName) {
          if (suiteName == null) {
            myTestReporter.warning("File " + file + " contains unnamed suite");
            return;
          }

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

        public void suiteFinished(@Nullable final String suiteName) {
          if (mySuites.isEmpty() || !mySuites.peek().equals(suiteName)) {
            LOG.warn("Failed to log suite finish for not-opened suite " + suiteName);
            return;
          }
          myTestReporter.closeTestSuite();
          mySuites.pop();
        }

        public void testFound(@NotNull final TestData testData) {
          try {
            if (testSkipped()) return;

            final String testName = testData.getName();

            if (testName == null) {
              myTestReporter.warning("File " + file + " contains unnamed test");
              return;
            }

            myTestReporter.openTest(testName);

            final String output = testData.getOutput();
            if (StringUtil.isNotEmpty(output)) {
              myTestReporter.testStdOutput(output);
            }

            final String message = testData.getMessage();
            if (testData.isIgnored()) {
              myTestReporter.testIgnored(StringUtil.emptyIfNull(message));
            } else if (testData.isSuccess()) {
              if (!StringUtil.isEmptyOrSpaces(message)) {
                myTestReporter.testStdOutput(message);
              }
            } else {
              myTestReporter.testFail(message, testData.getFailureStackTrace());
            }
            myTestReporter.closeTest(testData.getDuration());
          } finally {
            ++myLoggedTests;
          }
        }

        @Override
        public void failure(@NotNull final String msg) {
          myTestReporter.failure(file + ": " + msg);
        }

        @Override
        public void error(@NotNull final String msg) {
          myTestReporter.error(file + ": " + msg);
        }

        @Override
        public void warning(@NotNull final String msg) {
          myTestReporter.warning(file + ": " + msg);
        }

        @Override
        public void message(@NotNull final String msg) {
          myTestReporter.info(file + ": " + msg);
        }
      }).parse(file);
      return true;
    } catch (IOException e) {
      myParsingException = new ParsingException(e);

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

      LOG.debug("Couldn't completely parse " + file
                + " report, exception occurred: " + e + ", " + myLoggedTests + " tests logged");
    }

    return false;
  }