Java tutorial
/******************************************************************************* * Copyright (c) 2004, 2008 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.java.ui.junit; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.ITypeHierarchy; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfigurationConstants; import org.eclipse.jdt.internal.junit.launcher.TestKindRegistry; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; import org.eclipse.mylyn.context.core.ContextCore; import org.eclipse.mylyn.context.core.IInteractionElement; import org.eclipse.mylyn.context.core.IInteractionRelation; import org.eclipse.mylyn.internal.java.ui.JavaStructureBridge; import org.eclipse.mylyn.internal.java.ui.JavaUiBridgePlugin; import org.eclipse.mylyn.internal.java.ui.search.JUnitReferencesProvider; /** * @author Mik Kersten */ public class InteractionContextTestUtil { public static void setupTestConfiguration(Set<IType> contextTestCases, ILaunchConfiguration configuration, IProgressMonitor pm) throws CoreException { String testKindId = TestKindRegistry.JUNIT3_TEST_KIND_ID; IJavaProject javaProject = null; for (IType type : contextTestCases) { IProjectNature nature = type.getJavaProject().getProject().getNature("org.eclipse.pde.PluginNature"); //$NON-NLS-1$ if (nature != null) { // HACK: might want another project javaProject = type.getJavaProject(); } } ILaunchConfigurationWorkingCopy workingCopy = configuration.getWorkingCopy(); if (javaProject != null) { workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, javaProject.getElementName()); } // HACK: only checks first type if (contextTestCases.size() > 0) { testKindId = TestKindRegistry.getContainerTestKindId(contextTestCases.iterator().next()); workingCopy.setAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_RUNNER_KIND, testKindId); // testKind = TestKindRegistry.getDefault().getKind(configuration);// contextTestCases.iterator().next()); } workingCopy.doSave(); } public static Set<IType> getTestCasesInContext() { Set<IType> testTypes = new HashSet<IType>(); List<IInteractionElement> interesting = ContextCore.getContextManager().getActiveContext().getInteresting(); AbstractContextStructureBridge bridge = ContextCore.getStructureBridge(JavaStructureBridge.CONTENT_TYPE); try { for (IInteractionElement element : interesting) { if (element.getContentType().equals(JavaStructureBridge.CONTENT_TYPE)) { Object javaElement = bridge.getObjectForHandle(element.getHandleIdentifier()); if (javaElement instanceof IType) { IType type = (IType) javaElement; if (isTestType(type)) { testTypes.add(type); } } for (IInteractionRelation relation : element.getRelations()) { if (relation.getRelationshipHandle().equals(JUnitReferencesProvider.ID)) { IInteractionElement target = relation.getTarget(); Object targetObject = bridge.getObjectForHandle(target.getHandleIdentifier()); if (targetObject instanceof IMethod) { IMethod testMethod = (IMethod) targetObject; if (isTestType((IType) testMethod.getParent())) { testTypes.add((IType) testMethod.getParent()); } } } } } } } catch (Exception e) { StatusHandler.log( new Status(IStatus.ERROR, JavaUiBridgePlugin.ID_PLUGIN, "Could not add all test types", e)); //$NON-NLS-1$ } return testTypes; } public static boolean isTestType(IType type) { ITypeHierarchy hierarchy; try { if (Flags.isAbstract(type.getFlags())) { return false; } } catch (JavaModelException e) { return false; } try { hierarchy = type.newSupertypeHierarchy(null); IType[] supertypes = hierarchy.getAllSuperclasses(type); for (IType supertype : supertypes) { if (supertype.getFullyQualifiedName().equals("junit.framework.TestCase")) { //$NON-NLS-1$ return true; } } } catch (JavaModelException e) { // ContextCorePlugin.log(e, "could not determine test type"); // ignore, hierarchy is probably inconsistent } return false; } }