package org.erlide.test_support.ui.suites;
import java.util.List;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.erlide.test_support.ui.suites.TestCaseData.FailLocations;
import org.erlide.test_support.ui.suites.TestCaseData.FailReason;
import org.erlide.test_support.ui.suites.TestCaseData.TestState;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.google.common.collect.Lists;
class TestResultsContentProvider implements ITreeContentProvider {
private static final String[] NO_RESULTS_MSG = new String[] {
"No test results available." };
private static final Object[] NO_CHILDREN = new Object[] {};
private List<OtpErlangObject> myEvents;
@Override
@SuppressWarnings("unchecked")
public void inputChanged(final Viewer viewer, final Object oldInput,
final Object newInput) {
myEvents = (List<OtpErlangObject>) newInput;
}
@Override
public void dispose() {
myEvents = null;
}
@Override
public Object[] getElements(final Object inputElement) {
if (myEvents.isEmpty()) {
return NO_RESULTS_MSG;
}
return myEvents.toArray();
}
// TODO group after test suite
@Override
public Object[] getChildren(final Object parentElement) {
if (parentElement instanceof TestCaseData) {
final TestCaseData data = (TestCaseData) parentElement;
if (data.getState() == TestState.FAILED) {
final List<Object> result = Lists.newArrayList();
result.add(data.getFailStack());
if (!data.getFailLocations().isEmpty()) {
result.add(data.getFailLocations());
}
return result.toArray();
}
} else if (parentElement instanceof FailLocations) {
final FailLocations locs = (FailLocations) parentElement;
return locs.getLocations().toArray();
} else if (parentElement instanceof FailReason) {
final FailReason stack = (FailReason) parentElement;
return stack.getStackItems().toArray();
}
return NO_CHILDREN;
}
@Override
public Object getParent(final Object element) {
return null;
}
@Override
public boolean hasChildren(final Object element) {
return getChildren(element).length > 0;
}
}