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;
}