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