blob: 6e89df4be1aae7c66f871fe7cac3f95d5f77fd1b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.mylyn.commons.sdk.util.UiTestUtil;
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.sdk.java.AbstractJavaContextTest;
import org.eclipse.mylyn.context.ui.AbstractContextUiBridge;
import org.eclipse.mylyn.context.ui.ContextUi;
import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
import org.eclipse.mylyn.internal.context.ui.IContextUiPreferenceContstants;
import org.eclipse.mylyn.internal.java.ui.ActiveFoldingEditorTracker;
import org.eclipse.mylyn.internal.java.ui.JavaStructureBridge;
import org.eclipse.mylyn.internal.java.ui.JavaUiBridgePlugin;
import org.eclipse.mylyn.monitor.core.InteractionEvent;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
/**
* @author Mik Kersten
*/
public class JavaEditorManagerTest extends AbstractJavaContextTest {
private IWorkbenchPage page;
private IViewPart view;
@Override
protected void setUp() throws Exception {
super.setUp();
page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
assertNotNull(page);
view = PackageExplorerPart.openInActivePerspective();
assertNotNull(view);
assertTrue(ContextUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(IContextUiPreferenceContstants.AUTO_MANAGE_EDITORS));
ContextUiPlugin.getDefault()
.getPreferenceStore()
.setValue(IContextUiPreferenceContstants.AUTO_MANAGE_EDITOR_CLOSE_WARNING, false);
UiTestUtil.closeWelcomeView();
UiTestUtil.closeAllEditors();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
UiTestUtil.closeAllEditors();
ContextUiPlugin.getDefault()
.getPreferenceStore()
.setValue(
IContextUiPreferenceContstants.AUTO_MANAGE_EDITOR_CLOSE_WARNING,
ContextUiPlugin.getDefault()
.getPreferenceStore()
.getDefaultBoolean(IContextUiPreferenceContstants.AUTO_MANAGE_EDITOR_CLOSE_WARNING));
}
public void testInterestCapturedForResourceOnFocus() throws CoreException, InvocationTargetException,
InterruptedException {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false);
ContextCore.getContextManager().setContextCapturePaused(true);
IType typeA = project.createType(p1, "TypeAa.java", "public class TypeD{ }");
IType typeB = project.createType(p1, "TypeBb.java", "public class TypeC{ }");
IFile fileA = (IFile) typeA.getAdapter(IResource.class);
IFile fileB = (IFile) typeB.getAdapter(IResource.class);
AbstractContextStructureBridge structureBridge = ContextCore.getStructureBridge(fileA);
IInteractionElement elementA = ContextCore.getContextManager().getElement(
structureBridge.getHandleIdentifier(fileA));
IInteractionElement elementB = ContextCore.getContextManager().getElement(
structureBridge.getHandleIdentifier(fileB));
assertFalse(elementA.getInterest().isInteresting());
assertFalse(elementB.getInterest().isInteresting());
ContextCore.getContextManager().setContextCapturePaused(false);
elementA = ContextCore.getContextManager().getElement(structureBridge.getHandleIdentifier(fileA));
assertFalse(elementA.getInterest().isInteresting());
IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), fileA, true);
elementA = ContextCore.getContextManager().getElement(structureBridge.getHandleIdentifier(fileA));
float selectionFactor = ContextCore.getCommonContextScaling().get(InteractionEvent.Kind.SELECTION);
// TODO: should use selectionFactor test instead
assertTrue(elementA.getInterest().isInteresting());
assertTrue(elementA.getInterest().getValue() <= selectionFactor);
// assertEquals(selectionFactor, elementA.getInterest().getValue());
IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), fileB, true);
IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), fileA, true);
elementA = ContextCore.getContextManager().getElement(structureBridge.getHandleIdentifier(fileA));
// TODO: punting on decay
// assertEquals(selectionFactor-decayFactor*2, elementA.getInterest().getValue());
assertTrue(elementA.getInterest().getValue() > 1 && elementA.getInterest().getValue() < 2);
// MylarContextManager.getScalingFactors().getDecay().setValue(decayFactor);
}
public void testEditorTrackerListenerRegistration() throws JavaModelException {
ActiveFoldingEditorTracker tracker = JavaUiBridgePlugin.getDefault().getEditorTracker();
assertTrue(tracker.getEditorListenerMap().isEmpty());
AbstractContextUiBridge bridge = ContextUi.getUiBridge(JavaStructureBridge.CONTENT_TYPE);
IMethod m1 = type1.createMethod("void m111() { }", null, true, null);
monitor.selectionChanged(view, new StructuredSelection(m1));
int numListeners = ContextCorePlugin.getContextManager().getListeners().size();
IInteractionElement element = ContextCore.getContextManager().getElement(type1.getHandleIdentifier());
bridge.open(element);
assertEquals(numListeners + 1, ContextCorePlugin.getContextManager().getListeners().size());
assertEquals(1, page.getEditorReferences().length);
assertEquals(1, tracker.getEditorListenerMap().size());
UiTestUtil.closeAllEditors();
assertEquals(numListeners, ContextCorePlugin.getContextManager().getListeners().size());
assertEquals(0, page.getEditorReferences().length);
assertEquals(0, tracker.getEditorListenerMap().size());
}
public void testAutoCloseWithDecay() throws JavaModelException, InvocationTargetException, InterruptedException {
ContextUiPlugin.getEditorStateParticipant().closeAllEditors();
assertEquals(0, page.getEditorReferences().length);
// create and open types
AbstractContextUiBridge bridge = ContextUi.getUiBridge(JavaStructureBridge.CONTENT_TYPE);
IMethod m1 = type1.createMethod("void m111() { }", null, true, null);
monitor.selectionChanged(view, new StructuredSelection(m1));
IInteractionElement element = ContextCore.getContextManager().getElement(type1.getHandleIdentifier());
bridge.open(element);
IType typeA = project.createType(p1, "TypeA.java", "public class TypeA{ }");
monitor.selectionChanged(view, new StructuredSelection(typeA));
IInteractionElement elementA = ContextCore.getContextManager().getElement(typeA.getHandleIdentifier());
bridge.open(elementA);
// opening editors can cause selection events on e4
context.reset();
assertEquals(2, page.getEditorReferences().length);
// process a number of events to trigger decay
for (int i = 0; i < 1 / (scaling.getDecay()) * 3; i++) {
ContextCore.getContextManager().processInteractionEvent(mockSelection());
}
element = ContextCore.getContextManager().getElement(type1.getHandleIdentifier());
elementA = ContextCore.getContextManager().getElement(typeA.getHandleIdentifier());
assertFalse(element.getInterest().isInteresting());
assertFalse(elementA.getInterest().isInteresting());
// create new type
IType typeB = project.createType(p1, "TypeB.java", "public class TypeB{ }");
monitor.selectionChanged(view, new StructuredSelection(typeB));
IInteractionElement elementB = ContextCore.getContextManager().getElement(typeB.getHandleIdentifier());
bridge.open(elementB);
// make type interesting
monitor.selectionChanged(view, new StructuredSelection(typeB));
assertEquals(1, page.getEditorReferences().length);
}
}