/******************************************************************************* * Copyright (c) 2004, 2014 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.java.tests; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.commons.sdk.util.UiTestUtil; import org.eclipse.mylyn.context.core.ContextCore; import org.eclipse.mylyn.context.core.IInteractionElement; import org.eclipse.mylyn.context.sdk.java.AbstractJavaContextTest; import org.eclipse.mylyn.internal.context.core.ContextCorePlugin; import org.eclipse.mylyn.internal.context.ui.actions.AbstractInterestManipulationAction; import org.eclipse.mylyn.internal.resources.ui.ResourceInteractionMonitor; import org.eclipse.mylyn.internal.resources.ui.ResourceStructureBridge; import org.eclipse.mylyn.monitor.core.InteractionEvent; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; /** * @author Mik Kersten * @author Shawn Minto */ public class InterestManipulationTest extends AbstractJavaContextTest { private IInteractionElement method; private IInteractionElement clazz; private IInteractionElement cu; private IMethod javaMethod; private IType javaType; private ICompilationUnit javaCu; private IPackageFragment javaPackage; private IWorkbenchPart part; private ResourceInteractionMonitor resourceMonitor; @Override protected void setUp() throws Exception { super.setUp(); javaMethod = type1.createMethod("void testDecrement() { }", null, true, null); javaType = (IType) javaMethod.getParent(); javaCu = (ICompilationUnit) javaType.getParent(); javaPackage = (IPackageFragment) javaCu.getParent(); part = UiTestUtil.openResourceNavigator(); resourceMonitor = new ResourceInteractionMonitor(); } @Override protected void tearDown() throws Exception { monitor.dispose(); super.tearDown(); } public void testDecrementNonJavaProject() throws CoreException, InvocationTargetException, InterruptedException { IFile file = nonJavaProject.getProject().getFile("foo.txt"); file.create(null, true, null); ResourceStructureBridge bridge = new ResourceStructureBridge(); resourceMonitor.selectionChanged(part, new StructuredSelection(file)); IInteractionElement fileElement = ContextCore.getContextManager().getElement(bridge.getHandleIdentifier(file)); IInteractionElement projectElement = ContextCore.getContextManager().getElement( new ResourceStructureBridge().getHandleIdentifier(nonJavaProject.getProject())); assertTrue(fileElement.getInterest().isInteresting()); assertTrue(projectElement.getInterest().isInteresting()); assertTrue(ContextCorePlugin.getContextManager().manipulateInterestForElement(projectElement, false, false, false, "test")); projectElement = ContextCore.getContextManager().getElement( new ResourceStructureBridge().getHandleIdentifier(nonJavaProject.getProject())); fileElement = ContextCore.getContextManager().getElement(bridge.getHandleIdentifier(file)); assertFalse(projectElement.getInterest().isInteresting()); assertFalse(fileElement.getInterest().isInteresting()); } public void testDecrementAcrossBridges() throws CoreException, InvocationTargetException, InterruptedException { monitor.selectionChanged(part, new StructuredSelection(javaMethod)); method = ContextCore.getContextManager().getElement(javaMethod.getHandleIdentifier()); IFile file = project.getProject().getFile("foo.txt"); file.create(null, true, null); // IFile file = (IFile)javaCu.getAdapter(IResource.class); ResourceStructureBridge bridge = new ResourceStructureBridge(); resourceMonitor.selectionChanged(part, new StructuredSelection(file)); IInteractionElement fileElement = ContextCore.getContextManager().getElement(bridge.getHandleIdentifier(file)); IInteractionElement projectElement = ContextCore.getContextManager().getElement( javaCu.getJavaProject().getHandleIdentifier()); assertTrue(fileElement.getInterest().isInteresting()); assertTrue(method.getInterest().isInteresting()); assertTrue(ContextCorePlugin.getContextManager().manipulateInterestForElement(projectElement, false, false, false, "test")); fileElement = ContextCore.getContextManager().getElement(bridge.getHandleIdentifier(file)); assertFalse(fileElement.getInterest().isInteresting()); // TODO: re-enable, fails in AllTests // assertFalse(method.getInterest().isInteresting()); } public void testDecrementInterestOfCompilationUnit() throws JavaModelException { monitor.selectionChanged(part, new StructuredSelection(javaMethod)); monitor.selectionChanged(part, new StructuredSelection(javaCu)); method = ContextCore.getContextManager().getElement(javaMethod.getHandleIdentifier()); clazz = ContextCore.getContextManager().getElement(javaType.getHandleIdentifier()); cu = ContextCore.getContextManager().getElement(javaCu.getHandleIdentifier()); IInteractionElement packageNode = ContextCore.getContextManager().getElement(javaPackage.getHandleIdentifier()); assertTrue(method.getInterest().isInteresting()); assertTrue(clazz.getInterest().isInteresting()); assertTrue(cu.getInterest().isInteresting()); assertTrue(ContextCorePlugin.getContextManager().manipulateInterestForElement(packageNode, false, false, false, "test")); method = ContextCore.getContextManager().getElement(javaMethod.getHandleIdentifier()); clazz = ContextCore.getContextManager().getElement(javaType.getHandleIdentifier()); cu = ContextCore.getContextManager().getElement(javaCu.getHandleIdentifier()); packageNode = ContextCore.getContextManager().getElement(javaPackage.getHandleIdentifier()); assertFalse(packageNode.getInterest().isInteresting()); assertFalse(cu.getInterest().isInteresting()); assertFalse(clazz.getInterest().isInteresting()); assertFalse(method.getInterest().isInteresting()); } public void testManipulation() throws JavaModelException { InterestManipulationAction action = new InterestManipulationAction(); IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); IMethod m1 = type1.createMethod("void m22() { }", null, true, null); StructuredSelection sm1 = new StructuredSelection(m1); monitor.selectionChanged(part, sm1); IInteractionElement node = ContextCore.getContextManager().getElement(m1.getHandleIdentifier()); assertFalse(node.getInterest().isLandmark()); assertNotNull(ContextCore.getContextManager().getActiveElement()); action.changeInterestForSelected(true); assertTrue(node.getInterest().isLandmark()); action.changeInterestForSelected(true); assertEquals((scaling.getForcedLandmark()) + scaling.get(InteractionEvent.Kind.SELECTION), node.getInterest() .getValue()); action.changeInterestForSelected(false); node = ContextCore.getContextManager().getElement(m1.getHandleIdentifier()); assertFalse(node.getInterest().isLandmark()); assertTrue(node.getInterest().isInteresting()); action.changeInterestForSelected(false); assertFalse(node.getInterest().isInteresting()); assertEquals(node.getInterest().getValue(), -scaling.get(InteractionEvent.Kind.SELECTION)); action.changeInterestForSelected(false); assertEquals(node.getInterest().getValue(), -scaling.get(InteractionEvent.Kind.SELECTION)); } class InterestManipulationAction extends AbstractInterestManipulationAction { @Override protected boolean isIncrement() { return true; } public void changeInterestForSelected(boolean increment) { assertTrue(ContextCorePlugin.getContextManager().manipulateInterestForElement( ContextCore.getContextManager().getActiveElement(), increment, false, true, "")); } } }