TestRunSessionInfo.java
package com.codeaffine.extras.jdt.internal.junitstatus;
import static java.util.Objects.requireNonNull;
import static org.eclipse.jdt.junit.model.ITestElement.Result.UNDEFINED;
import org.eclipse.jdt.junit.model.ITestCaseElement;
import org.eclipse.jdt.junit.model.ITestElement;
import org.eclipse.jdt.junit.model.ITestElement.ProgressState;
import org.eclipse.jdt.junit.model.ITestElement.Result;
import org.eclipse.jdt.junit.model.ITestElementContainer;
import org.eclipse.jdt.junit.model.ITestRunSession;
public class TestRunSessionInfo {
public static boolean isTestFailed( Result testResult ) {
return Result.ERROR.equals( testResult ) || Result.FAILURE.equals( testResult );
}
private final ITestRunSession testRunSession;
private final Object lock;
private boolean countersInitialized;
private int totalTestCount;
private int failedTestCount;
private int executedTestCount;
public TestRunSessionInfo( ITestElement testElement ) {
requireNonNull( testElement, "testElement" );
this.testRunSession = testElement.getTestRunSession();
this.lock = new Object();
}
public String getName() {
return testRunSession.getTestRunName();
}
public int getTotalTestCount() {
synchronized( lock ) {
initializeCounters();
return totalTestCount;
}
}
public int getFailedTestCount() {
synchronized( lock ) {
initializeCounters();
return failedTestCount;
}
}
public int getExecutedTestCount() {
synchronized( lock ) {
initializeCounters();
return executedTestCount;
}
}
public TestRunState getTestRunState() {
TestRunState result;
if( testRunSession.getProgressState() == ProgressState.STOPPED ) {
result = TestRunState.STOPPED;
} else {
if( getFailedTestCount() > 0 ) {
result = TestRunState.FAILED;
} else {
result = TestRunState.SUCCESS;
}
}
return result;
}
public void incExecutedTestCount() {
synchronized( lock ) {
initializeCounters();
executedTestCount++;
}
}
public void incFailedTestCount() {
synchronized( lock ) {
initializeCounters();
failedTestCount++;
}
}
public boolean equalsSession( ITestElement testElement ) {
return testElement != null && testElement.getTestRunSession().equals( testRunSession );
}
private void initializeCounters() {
if( !countersInitialized ) {
countersInitialized = true;
collectCounters( testRunSession );
if( executedTestCount > 0 ) {
executedTestCount--;
}
if( failedTestCount > 0 ) {
failedTestCount--;
}
}
}
private void collectCounters( ITestElementContainer testElementContainer ) {
ITestElement[] children = testElementContainer.getChildren();
for( ITestElement child : children ) {
if( child instanceof ITestElementContainer ) {
collectCounters( ( ITestElementContainer )child );
}
if( child instanceof ITestCaseElement ) {
updateCounters( ( ITestCaseElement )child );
}
}
}
private void updateCounters( ITestCaseElement testElement ) {
Result testResult = testElement.getTestResult( false );
if( !UNDEFINED.equals( testResult ) ) {
executedTestCount++;
}
if( isTestFailed( testResult ) ) {
failedTestCount++;
}
totalTestCount++;
}
}