package org.jnario.ui.handler; import org.eclipse.jdt.internal.junit.model.TestCaseElement; import org.eclipse.jdt.internal.junit.model.TestElement; import org.eclipse.jdt.internal.junit.model.TestSuiteElement; import org.eclipse.jdt.junit.model.ITestCaseElement; import org.eclipse.jdt.junit.model.ITestElement; import org.eclipse.jdt.junit.model.ITestElementContainer; import org.eclipse.jdt.junit.model.ITestSuiteElement; import org.eclipse.jdt.junit.runners.IRunnerUIHandler; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.StyledString; import org.eclipse.ui.part.ViewPart; import org.jnario.util.Strings; @SuppressWarnings("restriction") public abstract class AbstractJnarioRunnerUIHandler implements IRunnerUIHandler { protected abstract Action getAction(ViewPart part, ITestElement element); public boolean contextMenuAboutToShow(ViewPart part, ITestElement element, IMenuManager menu) { if (element instanceof TestCaseElement || element instanceof TestSuiteElement) { menu.add(getAction(part, element)); return true; } return false; } public boolean handleDoubleClick(ViewPart part, ITestElement element) { if (element instanceof TestCaseElement || element instanceof TestSuiteElement) { Action action = getAction(part, element); if (action.isEnabled()) { action.run(); return true; } } return false; } public String getSimpleLabel(ViewPart part, ITestElement element) { if (element instanceof ITestCaseElement) return ((ITestCaseElement) element).getTestMethodName(); if (element instanceof ITestSuiteElement) { String baseName = AbstractJnarioOpenTestAction.extractTestName((TestElement)element); if (isAllPendingOrIgnored((TestSuiteElement) element, false)) { return Strings.markAsIgnored(new StringBuilder(baseName)).toString(); } else if (isAllPendingOrIgnored((TestSuiteElement) element, true)) { return Strings.markAsPending(new StringBuilder(baseName)).toString(); } return baseName; } return "unknown"; } private boolean isAllPendingOrIgnored(ITestElementContainer element, boolean includePending) { if (element.getChildren().length == 0) { return false; } for (ITestElement child : element.getChildren()) { if (child instanceof TestCaseElement) { if (!((TestCaseElement) child).isIgnored()) { return false; } else if(!includePending && Strings.isMarkedAsPending(((TestCaseElement) child).getTestName())) { return false; } } else if (child instanceof ITestElementContainer) { if (!isAllPendingOrIgnored((ITestElementContainer) child, includePending)) { return false; } } else { return false; } } return true; } public StyledString getStyledLabel(ViewPart part, ITestElement element, int layout) { return null; } }