blob: 4d27fb208072adc416bdad12bb5dc99da2c1e7d5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.IWorkingSetManager;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.XMLMemento;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.internal.ClosePerspectiveAction;
import org.eclipse.ui.internal.SaveableHelper;
import org.eclipse.ui.internal.WorkbenchPage;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IActionSetDescriptor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.tests.PerspectiveState;
import org.eclipse.ui.tests.harness.util.CallHistory;
import org.eclipse.ui.tests.harness.util.EmptyPerspective;
import org.eclipse.ui.tests.harness.util.FileUtil;
import org.eclipse.ui.tests.harness.util.UITestCase;
public class IWorkbenchPageTest extends UITestCase {
private IWorkbenchPage fActivePage;
private IWorkbenchWindow fWin;
private IProject proj;
public IWorkbenchPageTest(String testName) {
super(testName);
}
protected void doSetUp() throws Exception {
super.doSetUp();
fWin = openTestWindow();
fActivePage = fWin.getActivePage();
}
protected void doTearDown() throws Exception {
super.doTearDown();
if (proj != null) {
FileUtil.deleteProject(proj);
proj = null;
}
}
/**
* Tests the new working set API.
*
* @since 3.2
*/
public void testWorkingSets1() {
IWorkbenchPage page = fActivePage;
IWorkingSet[] sets = page.getWorkingSets();
assertNotNull(sets);
assertEquals(0, sets.length);
IWorkingSetManager manager = page.getWorkbenchWindow().getWorkbench()
.getWorkingSetManager();
IWorkingSet set1 = null, set2 = null;
try {
set1 = manager.createWorkingSet("w1", new IAdaptable[0]);
manager.addWorkingSet(set1);
set2 = manager.createWorkingSet("w2", new IAdaptable[0]);
manager.addWorkingSet(set2);
page.setWorkingSets(new IWorkingSet[] {set1});
sets = page.getWorkingSets();
assertNotNull(sets);
assertEquals(1, sets.length);
assertEquals(set1, sets[0]);
page.setWorkingSets(new IWorkingSet[0]);
sets = page.getWorkingSets();
assertNotNull(sets);
assertEquals(0, sets.length);
page.setWorkingSets(new IWorkingSet[] {set1, set2});
sets = page.getWorkingSets();
assertNotNull(sets);
assertEquals(2, sets.length);
Set realSet = new HashSet(Arrays.asList(sets));
assertTrue(realSet.contains(set1));
assertTrue(realSet.contains(set2));
page.setWorkingSets(new IWorkingSet[0]);
sets = page.getWorkingSets();
assertNotNull(sets);
assertEquals(0, sets.length);
}
finally {
if (set1 != null)
manager.removeWorkingSet(set1);
if (set2 != null)
manager.removeWorkingSet(set2);
}
}
/**
* Tests the new working set API.
*
* @since 3.2
*/
public void testWorkingSets2() {
fActivePage.setWorkingSets(null);
IWorkingSet [] sets = fActivePage.getWorkingSets();
assertNotNull(sets);
assertEquals(0, sets.length);
}
/**
* Tests the working set listeners.
*
* @since 3.2
*/
public void testWorkingSets3() {
IWorkingSetManager manager = fActivePage.getWorkbenchWindow().getWorkbench()
.getWorkingSetManager();
IWorkingSet set1 = null;
final IWorkingSet [][] sets = new IWorkingSet[1][];
sets[0] = new IWorkingSet[0];
IPropertyChangeListener listener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
IWorkingSet [] oldSets = (IWorkingSet[]) event.getOldValue();
assertTrue(Arrays.equals(sets[0], oldSets));
sets[0] = (IWorkingSet[]) event.getNewValue();
}};
try {
set1 = manager.createWorkingSet("w1", new IAdaptable[0]);
manager.addWorkingSet(set1);
fActivePage.addPropertyChangeListener(listener);
fActivePage.setWorkingSets(new IWorkingSet[] { set1 });
fActivePage.setWorkingSets(new IWorkingSet[] { });
fActivePage.setWorkingSets(new IWorkingSet[] { set1 });
sets[0] = fActivePage.getWorkingSets();
assertNotNull(sets[0]);
assertEquals(1, sets[0].length);
assertEquals(set1, sets[0][0]);
} finally {
fActivePage.removePropertyChangeListener(listener);
if (set1 != null)
manager.removeWorkingSet(set1);
}
}
/**
* Test the VIEW_VISIBLE parameter for showView, opening the view in the
* stack that does not contain the active view. Ensures that the created
* view is not the active part but is the top part in its stack.
*/
public void testView_VISIBLE2() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID3);
IViewPart createdPart = page.showView(MockViewPart.ID2, null,
IWorkbenchPage.VIEW_VISIBLE);
IViewPart[] stack = page.getViewStack(createdPart);
assertEquals(2, stack.length);
assertEquals(createdPart, stack[0]);
assertEquals(page.findView(MockViewPart.ID), stack[1]);
assertTrue(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* openEditor(IEditorInput input, String editorId, boolean activate)
*/
public void testOpenEditor4() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
final String id = MockEditorPart.ID1;
IEditorInput input = new FileEditorInput(FileUtil.createFile(
"test.mock1", proj));
MockPartListener listener = new MockPartListener();
fActivePage.addPartListener(listener);
CallHistory callTrace = listener.getCallHistory();
/*
javadoc: The editor type is determined by mapping editorId to an editor extension
registered with the workbench.
javadoc: If activate == true the editor will be activated
*/
//open an editor with activation
// Start with a view active in order to verify that the editor gets activated
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
callTrace.clear();
IEditorPart editor = IDE.openEditor(fActivePage, input, id, true);
assertEquals(editor.getEditorInput(), input);
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(callTrace.contains("partActivated"), true);
//we need another editor so that the editor under test can receive events.
//otherwise, events will be ignored.
IEditorPart extra = IDE.openEditor(fActivePage, FileUtil.createFile(
"aaaaa", proj));
//close the first editor after the second has opened; necessary for
//test to work with fix to PR 7743
fActivePage.closeEditor(editor, false);
// Start with a view active in order to verify that the editor does not get activated
// (note: regardless of the activate=false flag, the editor would always be activated
// if it is being opened in the same stack as the active editor. Making a view active
// initially tests the function of the activate flag)
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
callTrace.clear();
//open an editor without activation
editor = IDE.openEditor(fActivePage, input, id, false);
assertEquals(editor.getEditorInput(), input);
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(callTrace.contains("partActivated"), false);
assertEquals(callTrace.contains("partBroughtToTop"), true);
fActivePage.activate(extra);
/*
javadoc: If this page already has an editor open on the target object that editor is brought to the front
*/
//open the editor under test second time without activation
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
callTrace.clear();
assertEquals(IDE.openEditor(fActivePage, input, id, false), editor);
assertEquals(callTrace.contains("partBroughtToTop"), true);
assertEquals(callTrace.contains("partActivated"), false);
//activate the other editor
fActivePage.activate(extra);
/*
javadoc: If activate == true the editor will be activated
*/
//open the editor under test second time with activation
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
callTrace.clear();
assertEquals(IDE.openEditor(fActivePage, input, id, true), editor);
assertEquals(callTrace.contains("partBroughtToTop"), true);
assertEquals(callTrace.contains("partActivated"), true);
/*
javadoc: If activate == false but another editor in the same stack was active, the
new editor will be activated regardless.
*/
// Close the old editor
fActivePage.closeEditor(editor, false);
// Ensure another editor in the stack is active
fActivePage.activate(extra);
callTrace.clear();
// Verify that the editor is still activated
IDE.openEditor(fActivePage, input, id, false);
assertEquals(callTrace.contains("partBroughtToTop"), true);
assertEquals(callTrace.contains("partActivated"), true);
}
/**
* tests both of the following:
* setEditorAreaVisible()
* isEditorAreaVisible()
*/
public void testGet_SetEditorAreaVisible() throws Throwable {
fActivePage.setEditorAreaVisible(true);
assertTrue(fActivePage.isEditorAreaVisible() == true);
fActivePage.setEditorAreaVisible(false);
assertTrue(fActivePage.isEditorAreaVisible() == false);
}
/**
* openEditor(IWorkbenchPage page, IFile input)
*/
public void testOpenEditor() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
/*
javadoc: 1. The workbench editor registry is consulted to determine if an editor extension has been
registered for the file type. If so, an instance of the editor extension is opened on the file
*/
IFile file = FileUtil.createFile("test.mock1", proj);
IEditorPart editor = IDE.openEditor(fActivePage, file);
boolean foundEditor = hasEditor(editor);
assertEquals(foundEditor, true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(editor.getSite().getId(), fWorkbench.getEditorRegistry()
.getDefaultEditor(file.getName()).getId());
/*
javadoc: 2. Next, the native operating system will be consulted to determine if a native editor exists for
the file type. If so, a new process is started and the native editor is opened on the file.
*/
//can not be tested
/*
* javadoc: 3. If all else fails the file will be opened in a default
* text editor.
*/
file = FileUtil.createFile("a.null and void", proj);
editor = IDE.openEditor(fActivePage, file);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(editor.getSite().getId(),
"org.eclipse.ui.DefaultTextEditor");
// open another editor to take the focus away from the first editor
IDE.openEditor(fActivePage, FileUtil.createFile("test.mock2", proj));
/*
javadoc: If this page already has an editor open on the target object that editor is activated
*/
//open the editor second time.
assertEquals(editor, IDE.openEditor(fActivePage, file));
assertEquals(editor, fActivePage.getActiveEditor());
}
/**
* openEditor(IWorkbenchPage page, IFile input, String editorID)
*/
public void testOpenEditor2() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
final IFile file = FileUtil.createFile("asfasdasdf", proj);
final String id = MockEditorPart.ID1;
/*
javadoc: The editor type is determined by mapping editorId to an editor extension registered with the workbench.
*/
IEditorPart editor = IDE.openEditor(fActivePage, file, id);
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
//open another editor to take the focus away from the first editor
IDE.openEditor(fActivePage, FileUtil.createFile("test.mock2", proj));
/*
javadoc: If this page already has an editor open on the target object that editor is activated
*/
//open the first editor second time.
assertEquals(IDE.openEditor(fActivePage, file, id), editor);
assertEquals(fActivePage.getActiveEditor(), editor);
}
/**
* openEditor(IEditorInput input,String editorId)
*/
public void testOpenEditor3() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
final String id = MockEditorPart.ID1;
IEditorInput input = new FileEditorInput(FileUtil.createFile(
"test.mock1", proj));
/*
javadoc: The editor type is determined by mapping editorId to an editor extension registered with the workbench
*/
IEditorPart editor = IDE.openEditor(fActivePage, input, id);
assertEquals(editor.getEditorInput(), input);
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
//open another editor to take the focus away from the first editor
IDE.openEditor(fActivePage, FileUtil.createFile("test.mock2", proj));
/*
javadoc: If this page already has an editor open on the target object that editor is activated
*/
//open the first editor second time.
assertEquals(IDE.openEditor(fActivePage, input, id), editor);
assertEquals(fActivePage.getActiveEditor(), editor);
}
/**
* openEditor(IMarker marker)
*/
public void testOpenEditor5() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
IMarker marker = FileUtil.createFile("aa.mock2", proj).createMarker(
IMarker.TASK);
CallHistory callTrace;
/*
javadoc: the cursor and selection state of the editor is then updated from information
recorded in the marker.
*/
//open the registered editor for the marker resource
IEditorPart editor = IDE.openEditor(fActivePage, marker);
callTrace = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), MockEditorPart.ID2);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(callTrace.contains("gotoMarker"), true);
fActivePage.closeEditor(editor, false);
/*
javadoc: If the marker contains an EDITOR_ID_ATTR attribute the attribute value will be used to
determine the editor type to be opened
*/
marker.setAttribute(IDE.EDITOR_ID_ATTR, MockEditorPart.ID1);
editor = IDE.openEditor(fActivePage, marker);
callTrace = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), MockEditorPart.ID1);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(callTrace.contains("gotoMarker"), true);
//do not close the editor this time
/*
javdoc: If this page already has an editor open on the target object that editor is activated
*/
callTrace.clear();
assertEquals(IDE.openEditor(fActivePage, marker), editor);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(callTrace.contains("gotoMarker"), true);
fActivePage.closeEditor(editor, false);
}
/**
* openEditor(IMarker marker, boolean activate)
*/
public void testOpenEditor6() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
IMarker marker = FileUtil.createFile("aa.mock2", proj).createMarker(
IMarker.TASK);
MockPartListener listener = new MockPartListener();
fActivePage.addPartListener(listener);
CallHistory listenerCall = listener.getCallHistory();
CallHistory editorCall;
//we need another editor so that the editor under test can receive events.
//otherwise, events will be ignored.
IEditorPart extra = IDE.openEditor(fActivePage, FileUtil.createFile(
"aaaaa", proj));
/*
javadoc: If activate == true the editor will be activated
*/
//open the registered editor for the marker resource with activation
IEditorPart editor = IDE.openEditor(fActivePage, marker, true);
editorCall = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), MockEditorPart.ID2);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
/*
javadoc: the cursor and selection state of the editor is then updated from information
recorded in the marker.
*/
assertEquals(editorCall.contains("gotoMarker"), true);
fActivePage.closeEditor(editor, false);
fActivePage.activate(extra);
//open the registered editor for the marker resource without activation
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
listenerCall.clear();
editor = IDE.openEditor(fActivePage, marker, false);
editorCall = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), MockEditorPart.ID2);
assertEquals(hasEditor(editor), true);
assertEquals(listenerCall.contains("partBroughtToTop"), true);
assertEquals(listenerCall.contains("partActivated"), false);
assertEquals(editorCall.contains("gotoMarker"), true);
fActivePage.closeEditor(editor, false);
/*
javadoc: If the marker contains an EDITOR_ID_ATTR attribute the attribute value will be used to
determine the editor type to be opened
*/
String id = MockEditorPart.ID1;
marker.setAttribute(IDE.EDITOR_ID_ATTR, id);
//open an editor with activation
listenerCall.clear();
editor = IDE.openEditor(fActivePage, marker, true);
editorCall = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(fActivePage.getActiveEditor(), editor);
assertEquals(editorCall.contains("gotoMarker"), true);
fActivePage.closeEditor(editor, false);
fActivePage.activate(extra);
//open an editor without activation
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
listenerCall.clear();
editor = IDE.openEditor(fActivePage, marker, false);
editorCall = ((MockEditorPart) editor).getCallHistory();
assertEquals(editor.getSite().getId(), id);
assertEquals(hasEditor(editor), true);
assertEquals(editorCall.contains("gotoMarker"), true);
assertEquals(listenerCall.contains("partActivated"), false);
assertEquals(listenerCall.contains("partBroughtToTop"), true);
//do not close the editor this time
fActivePage.activate(extra);
/*
javadoc: If this page already has an editor open on the target object that editor is brought to front
Note: we need to make a non-editor active first or bringing the editor to front would activate it
*/
//open the editor second time without activation
fActivePage.showView(IPageLayout.ID_PROBLEM_VIEW, null, IWorkbenchPage.VIEW_ACTIVATE);
listenerCall.clear();
assertEquals(IDE.openEditor(fActivePage, marker, false), editor);
assertEquals(listenerCall.contains("partBroughtToTop"), true);
assertEquals(listenerCall.contains("partActivated"), false);
fActivePage.activate(extra);
/*
javdoc: If activate == true the editor will be activated
*/
//open the editor second time with activation
listenerCall.clear();
assertEquals(IDE.openEditor(fActivePage, marker, true), editor);
assertEquals(editorCall.contains("gotoMarker"), true);
assertEquals(listenerCall.contains("partBroughtToTop"), true);
assertEquals(listenerCall.contains("partActivated"), true);
/*
javadoc: If activate == false but another editor in the same stack was active, the
new editor will be activated regardless.
*/
// Close the old editor
fActivePage.closeEditor(editor, false);
// Ensure another editor in the stack is active
fActivePage.activate(extra);
listenerCall.clear();
// Verify that the editor is still activated
IDE.openEditor(fActivePage, marker, false);
assertEquals(listenerCall.contains("partBroughtToTop"), true);
assertEquals(listenerCall.contains("partActivated"), true);
}
public void testGetPerspective() throws Throwable {
assertNotNull(fActivePage.getPerspective());
IWorkbenchPage page = fWin.openPage(EmptyPerspective.PERSP_ID, getPageInput());
assertEquals(EmptyPerspective.PERSP_ID, page.getPerspective().getId());
}
public void testSetPerspective() throws Throwable {
IPerspectiveDescriptor per = PlatformUI.getWorkbench()
.getPerspectiveRegistry().findPerspectiveWithId(
EmptyPerspective.PERSP_ID);
fActivePage.setPerspective(per);
assertEquals(per, fActivePage.getPerspective());
}
public void testGetLabel() {
assertNotNull(fActivePage.getLabel());
}
public void testGetInput() throws Throwable {
IAdaptable input = getPageInput();
IWorkbenchPage page = fWin.openPage(input);
assertEquals(input, page.getInput());
}
public void testActivate() throws Throwable {
MockViewPart part = (MockViewPart) fActivePage
.showView(MockViewPart.ID);
MockViewPart part2 = (MockViewPart) fActivePage
.showView(MockViewPart.ID2);
MockPartListener listener = new MockPartListener();
fActivePage.addPartListener(listener);
fActivePage.activate(part);
CallHistory callTrace;
callTrace = part2.getCallHistory();
callTrace.clear();
fActivePage.activate(part2);
assertTrue(callTrace.contains("setFocus"));
assertTrue(listener.getCallHistory().contains("partActivated"));
callTrace = part.getCallHistory();
callTrace.clear();
fActivePage.activate(part);
assertTrue(callTrace.contains("setFocus"));
assertTrue(listener.getCallHistory().contains("partActivated"));
}
public void testBringToTop() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
IEditorPart part = IDE.openEditor(fActivePage, FileUtil.createFile(
"a.mock1", proj));
IEditorPart part2 = IDE.openEditor(fActivePage, FileUtil.createFile(
"b.mock1", proj));
MockPartListener listener = new MockPartListener();
fActivePage.addPartListener(listener);
CallHistory callTrace = listener.getCallHistory();
//at this point, part2 is active
fActivePage.bringToTop(part);
assertEquals(callTrace.contains("partBroughtToTop"), true);
callTrace.clear();
fActivePage.bringToTop(part2);
assertEquals(callTrace.contains("partBroughtToTop"), true);
}
public void testGetWorkbenchWindow() {
/*
* Commented out because until test case can be updated to work
* with new window/page/perspective implementation
*
assertEquals(fActivePage.getWorkbenchWindow(), fWin);
IWorkbenchPage page = openTestPage(fWin);
assertEquals(page.getWorkbenchWindow(), fWin);
*/
}
public void testShowView() throws Throwable {
/*
javadoc: Shows a view in this page and give it focus
*/
MockViewPart view = (MockViewPart) fActivePage
.showView(MockViewPart.ID);
assertNotNull(view);
assertTrue(view.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
fActivePage.showView(MockViewPart.ID2);
/*
javadoc: If the view is already visible, it is given focus
*/
CallHistory callTrace = view.getCallHistory();
callTrace.clear();
assertEquals(fActivePage.showView(MockViewPart.ID), view);
assertEquals(callTrace.contains("setFocus"), true);
}
/**
* Tests showing multi-instance views (docked normally).
*/
public void testShowViewMult() throws Throwable {
/*
javadoc: Shows the view identified by the given view id and secondary id
in this page and gives it focus.
This allows multiple instances of a particular view to be created.
They are disambiguated using the secondary id.
*/
MockViewPart view = (MockViewPart) fActivePage
.showView(MockViewPart.IDMULT);
assertNotNull(view);
assertTrue(view.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
MockViewPart view2 = (MockViewPart) fActivePage.showView(
MockViewPart.IDMULT, "2", IWorkbenchPage.VIEW_ACTIVATE);
assertNotNull(view2);
assertTrue(view2.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
assertTrue(!view.equals(view2));
MockViewPart view3 = (MockViewPart) fActivePage.showView(
MockViewPart.IDMULT, "3", IWorkbenchPage.VIEW_ACTIVATE);
assertNotNull(view3);
assertTrue(view3.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
assertTrue(!view.equals(view3));
assertTrue(!view2.equals(view3));
/*
javadoc: If there is a view identified by the given view id and
secondary id already open in this page, it is given focus.
*/
CallHistory callTrace = view.getCallHistory();
callTrace.clear();
assertEquals(fActivePage.showView(MockViewPart.IDMULT), view);
assertEquals(callTrace.contains("setFocus"), true);
CallHistory callTrace2 = view2.getCallHistory();
callTrace.clear();
callTrace2.clear();
assertEquals(fActivePage.showView(MockViewPart.IDMULT, "2",
IWorkbenchPage.VIEW_ACTIVATE), view2);
assertEquals(callTrace2.contains("setFocus"), true);
assertEquals(callTrace.contains("setFocus"), false);
CallHistory callTrace3 = view3.getCallHistory();
callTrace.clear();
callTrace2.clear();
callTrace3.clear();
assertEquals(fActivePage.showView(MockViewPart.IDMULT, "3",
IWorkbenchPage.VIEW_ACTIVATE), view3);
assertEquals(callTrace3.contains("setFocus"), true);
assertEquals(callTrace.contains("setFocus"), false);
assertEquals(callTrace2.contains("setFocus"), false);
/*
javadoc: If a secondary id is given, the view must allow multiple instances by
having specified allowMultiple="true" in its extension.
*/
boolean exceptionThrown = false;
try {
fActivePage.showView(MockViewPart.ID, "2",
IWorkbenchPage.VIEW_ACTIVATE);
} catch (PartInitException e) {
assertEquals(e.getMessage().indexOf("mult") != -1, true);
exceptionThrown = true;
}
assertEquals(exceptionThrown, true);
}
/**
* Tests showing multi-instance views (as fast views).
* This is a regression test for bug 76669 - [Perspectives] NullPointerException in Perspective.getFastViewWidthRatio()
*/
public void testShowViewMultFast() throws Throwable {
/*
javadoc: Shows the view identified by the given view id and secondary id
in this page and gives it focus.
This allows multiple instances of a particular view to be created.
They are disambiguated using the secondary id.
*/
MockViewPart view = (MockViewPart) fActivePage
.showView(MockViewPart.IDMULT);
assertNotNull(view);
assertTrue(view.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
MockViewPart view2 = (MockViewPart) fActivePage.showView(
MockViewPart.IDMULT, "2", IWorkbenchPage.VIEW_ACTIVATE);
assertNotNull(view2);
assertTrue(view2.getCallHistory().verifyOrder(
new String[] { "init", "createPartControl", "setFocus" }));
assertTrue(!view.equals(view2));
WorkbenchPage page = (WorkbenchPage) fActivePage;
IViewReference ref = (IViewReference) page.getReference(view);
IViewReference ref2 = (IViewReference) page.getReference(view2);
page.addFastView(ref);
page.addFastView(ref2);
page.activate(view);
assertEquals(view, page.getActivePart());
page.activate(view2);
assertEquals(view2, page.getActivePart());
}
/**
* Tests saving the page state when there is a fast view that is also a multi-instance view.
* This is a regression test for bug 76669 - [Perspectives] NullPointerException in Perspective.getFastViewWidthRatio()
*/
public void testBug76669() throws Throwable {
MockViewPart view = (MockViewPart) fActivePage
.showView(MockViewPart.IDMULT);
MockViewPart view2 = (MockViewPart) fActivePage.showView(
MockViewPart.IDMULT, "2", IWorkbenchPage.VIEW_ACTIVATE);
WorkbenchPage page = (WorkbenchPage) fActivePage;
IViewReference ref = (IViewReference) page.getReference(view);
IViewReference ref2 = (IViewReference) page.getReference(view2);
page.addFastView(ref);
page.addFastView(ref2);
IMemento memento = XMLMemento.createWriteRoot("page");
page.saveState(memento);
IMemento persps = memento.getChild("perspectives");
IMemento persp = persps.getChildren("perspective")[0];
IMemento[] fastViews = persp.getChild("fastViews").getChildren("view");
assertEquals(2, fastViews.length);
}
public void testFindView() throws Throwable {
String id = MockViewPart.ID3;
//id of valid, but not open view
assertNull(fActivePage.findView(id));
IViewPart view = fActivePage.showView(id);
assertEquals(fActivePage.findView(id), view);
//close view
fActivePage.hideView(view);
assertNull(fActivePage.findView(id));
}
public void testFindViewReference() throws Throwable {
fActivePage.getWorkbenchWindow().getWorkbench().showPerspective(
SessionPerspective.ID, fActivePage.getWorkbenchWindow());
assertNull(fActivePage.findViewReference(MockViewPart.ID4));
fActivePage.showView(MockViewPart.ID4);
assertNotNull(fActivePage.findViewReference(MockViewPart.ID4));
}
public void testGetViews() throws Throwable {
int totalBefore = fActivePage.getViewReferences().length;
IViewPart view = fActivePage.showView(MockViewPart.ID2);
assertEquals(hasView(view), true);
assertEquals(fActivePage.getViewReferences().length, totalBefore + 1);
fActivePage.hideView(view);
assertEquals(hasView(view), false);
assertEquals(fActivePage.getViewReferences().length, totalBefore);
}
public void testHideViewWithPart() throws Throwable {
// test that nothing bad happens with a null parameter
try {
fActivePage.hideView((IViewPart) null);
} catch (RuntimeException e) {
fail(e.getMessage());
}
IViewPart view = fActivePage.showView(MockViewPart.ID3);
fActivePage.hideView(view);
CallHistory callTrace = ((MockViewPart) view).getCallHistory();
assertTrue(callTrace.contains("dispose"));
}
public void testHideViewWithReference() throws Throwable {
// test that nothing bad happens with a null parameter
try {
fActivePage.hideView((IViewReference) null);
} catch (RuntimeException e) {
fail(e.getMessage());
}
IViewPart view = fActivePage.showView(MockViewPart.ID4);
IViewReference ref = fActivePage.findViewReference(MockViewPart.ID4);
fActivePage.hideView(ref);
CallHistory callTrace = ((MockViewPart) view).getCallHistory();
assertTrue(callTrace.contains("dispose"));
}
public void testHideSaveableView() throws Throwable {
String viewId = SaveableMockViewPart.ID;
SaveableMockViewPart view = (SaveableMockViewPart) fActivePage.showView(viewId);
fActivePage.hideView(view);
CallHistory callTrace = view.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertTrue(callTrace.contains("dispose"));
assertEquals(fActivePage.findView(viewId), null);
try {
SaveableHelper.testSetAutomatedResponse(1); // No
view = (SaveableMockViewPart) fActivePage.showView(viewId);
view.setDirty(true);
fActivePage.hideView(view);
callTrace = view.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertFalse(callTrace.contains("doSave"));
assertTrue(callTrace.contains("dispose"));
assertEquals(fActivePage.findView(viewId), null);
SaveableHelper.testSetAutomatedResponse(2); // Cancel
view = (SaveableMockViewPart) fActivePage.showView(viewId);
view.setDirty(true);
fActivePage.hideView(view);
callTrace = view.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertFalse(callTrace.contains("doSave"));
assertFalse(callTrace.contains("dispose"));
assertEquals(fActivePage.findView(viewId), view);
SaveableHelper.testSetAutomatedResponse(0); // Yes
view = (SaveableMockViewPart) fActivePage.showView(viewId);
view.setDirty(true);
fActivePage.hideView(view);
callTrace = view.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertTrue(callTrace.contains("doSave"));
assertTrue(callTrace.contains("dispose"));
assertEquals(fActivePage.findView(viewId), null);
// don't leave the view showing, or the UI will block on window close
}
finally {
SaveableHelper.testSetAutomatedResponse(-1); // restore default (prompt)
}
}
/**
* Tests that a close will fall back to the default if the view returns
* ISaveable2.DEFAULT.
*
* @throws Throwable
*/
public void testCloseWithSaveNeeded() throws Throwable {
String viewId = UserSaveableMockViewPart.ID;
UserSaveableMockViewPart view = (UserSaveableMockViewPart) fActivePage
.showView(viewId);
fActivePage.hideView(view);
UserSaveableMockViewPart view2 = null;
CallHistory callTrace = view.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertTrue(callTrace.contains("dispose"));
assertEquals(fActivePage.findView(UserSaveableMockViewPart.ID), null);
try {
SaveableHelper.testSetAutomatedResponse(3); // DEFAULT
view = (UserSaveableMockViewPart) fActivePage.showView(viewId);
view.setDirty(true);
view2 = (UserSaveableMockViewPart) fActivePage.showView(viewId,
"2", IWorkbenchPage.VIEW_ACTIVATE);
assertNotNull(view2);
view2.setDirty(true);
WorkbenchPage page = (WorkbenchPage) fActivePage;
page.getEditorManager().saveAll(true, false);
assertFalse(view.isDirty());
assertFalse(view2.isDirty());
callTrace = view.getCallHistory();
fActivePage.hideView(view);
fActivePage.hideView(view2);
assertTrue(callTrace.contains("isDirty"));
assertTrue(callTrace.contains("doSave"));
assertEquals(fActivePage.findView(viewId), null);
// don't leave the view showing, or the UI will block on window
// close
} finally {
SaveableHelper.testSetAutomatedResponse(SaveableHelper.USER_RESPONSE); // restore default
// (prompt)
}
}
/**
* Tests that a close will fall back to the default if the view returns
* ISaveable2.DEFAULT.
*
* @throws Throwable
*/
public void testSaveEffectsSharedModel() throws Throwable {
String viewId = UserSaveableSharedViewPart.ID;
UserSaveableSharedViewPart view = null;
UserSaveableSharedViewPart view2 = null;
assertEquals(fActivePage.findView(UserSaveableSharedViewPart.ID), null);
try {
SaveableHelper.testSetAutomatedResponse(3); // DEFAULT
UserSaveableSharedViewPart.SharedModel model = new UserSaveableSharedViewPart.SharedModel();
view = (UserSaveableSharedViewPart) fActivePage.showView(viewId);
view.setSharedModel(model);
view2 = (UserSaveableSharedViewPart) fActivePage.showView(viewId,
"2", IWorkbenchPage.VIEW_ACTIVATE);
assertNotNull(view2);
view2.setSharedModel(model);
WorkbenchPage page = (WorkbenchPage) fActivePage;
page.getEditorManager().saveAll(true, false);
assertFalse(view.isDirty());
assertFalse(view2.isDirty());
CallHistory callTrace = view.getCallHistory();
CallHistory call2 = view2.getCallHistory();
assertTrue(callTrace.contains("isDirty"));
assertTrue(call2.contains("isDirty"));
assertTrue("At least one should call doSave", callTrace
.contains("doSave")
|| call2.contains("doSave"));
assertFalse("Both should not call doSave", callTrace
.contains("doSave")
&& call2.contains("doSave"));
// don't leave the view showing, or the UI will block on window
// close
} finally {
SaveableHelper
.testSetAutomatedResponse(SaveableHelper.USER_RESPONSE); // restore
// default
// (prompt)
fActivePage.hideView(view);
fActivePage.hideView(view2);
}
}
public void testClose() throws Throwable {
IWorkbenchPage page = openTestPage(fWin);
proj = FileUtil.createProject("testOpenEditor");
final IFile file = FileUtil.createFile("aaa.mock1", proj);
IEditorPart editor = IDE.openEditor(page, file);
CallHistory callTrace = ((MockEditorPart) editor).getCallHistory();
callTrace.clear();
/*
javadoc: If the page has open editors with unsaved content and save is true, the user will be given the opportunity to save them
*/
assertEquals(page.close(), true);
assertEquals(callTrace
.verifyOrder(new String[] { "isDirty", "dispose" }), true);
assertEquals(fWin.getActivePage(), fActivePage);
}
public void testCloseEditor() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
final IFile file = FileUtil.createFile("test.mock1", proj);
IEditorPart editor;
CallHistory callTrace;
MockEditorPart mock;
/*
javadoc: Parameters: save - true to save the editor contents if required (recommended)
*/
//create a clean editor that needs to be saved on closing
editor = IDE.openEditor(fActivePage, file);
mock = (MockEditorPart) editor;
mock.setSaveNeeded(true);
callTrace = mock.getCallHistory();
callTrace.clear();
//close the editor with save confirmation
assertEquals(fActivePage.closeEditor(editor, true), true);
assertEquals(callTrace
.verifyOrder(new String[] { "isDirty", "dispose" }), true);
/*
javadoc: If the editor has unsaved content and save is true, the user will be given the opportunity to save it.
*/
//can't be tested
/*
javadoc: Parameters: save - false to discard any unsaved changes
*/
//create a dirty editor
editor = IDE.openEditor(fActivePage, file);
mock = (MockEditorPart) editor;
mock.setDirty(true);
mock.setSaveNeeded(true);
callTrace = mock.getCallHistory();
callTrace.clear();
//close the editor and discard changes
assertEquals(fActivePage.closeEditor(editor, false), true);
assertEquals(callTrace.contains("isSaveOnCloseNeeded"), false);
/*
* It is possible that some action may query the isDirty value of
* the editor to update its enabled state. There is nothing wrong
* in doing that, so do not test for no isDirty call here.
*
* assertEquals(callTrace.contains( "isDirty"), false);
*/
assertEquals(callTrace.contains("doSave"), false);
assertEquals(callTrace.contains("dispose"), true);
}
public void testCloseEditors() throws Throwable {
int total = 5;
final IFile[] files = new IFile[total];
IEditorPart[] editors = new IEditorPart[total];
IEditorReference[] editorRefs = new IEditorReference[total];
CallHistory[] callTraces = new CallHistory[total];
MockEditorPart[] mocks = new MockEditorPart[total];
proj = FileUtil.createProject("testCloseEditors");
for (int i = 0; i < total; i++)
files[i] = FileUtil.createFile(i + ".mock2", proj);
/*
javadoc: If the page has open editors with unsaved content and save is true, the user will be given the opportunity to save them.
*/
//close all clean editors with confirmation
for (int i = 0; i < total; i++) {
editors[i] = IDE.openEditor(fActivePage, files[i]);
callTraces[i] = ((MockEditorPart) editors[i]).getCallHistory();
}
editorRefs = fActivePage.getEditorReferences();
assertEquals(fActivePage.closeEditors(editorRefs, true), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//close all dirty editors with confirmation
//can't be tested
//close all dirty editors discarding them
for (int i = 0; i < total; i++) {
editors[i] = IDE.openEditor(fActivePage, files[i]);
mocks[i] = (MockEditorPart) editors[i];
mocks[i].setDirty(true);
callTraces[i] = mocks[i].getCallHistory();
}
editorRefs = fActivePage.getEditorReferences();
assertEquals(fActivePage.closeEditors(editorRefs, false), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("doSave"), false);
}
//close empty array of editors
total = 1;
for (int i = 0; i < total; i++) {
editors[i] = IDE.openEditor(fActivePage, files[i]);
mocks[i] = (MockEditorPart) editors[i];
mocks[i].setDirty(true);
callTraces[i] = mocks[i].getCallHistory();
}
// empty array test
editorRefs = new IEditorReference[0];
assertEquals(fActivePage.closeEditors(editorRefs, true), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
// close the last remaining editor, with save=false
editorRefs = fActivePage.getEditorReferences();
fActivePage.closeEditors(editorRefs, false);
}
public void testCloseAllEditors() throws Throwable {
int total = 5;
final IFile[] files = new IFile[total];
IEditorPart[] editors = new IEditorPart[total];
CallHistory[] callTraces = new CallHistory[total];
MockEditorPart[] mocks = new MockEditorPart[total];
proj = FileUtil.createProject("testOpenEditor");
for (int i = 0; i < total; i++)
files[i] = FileUtil.createFile(i + ".mock2", proj);
/*
javadoc: If the page has open editors with unsaved content and save is true, the user will be given the opportunity to save them.
*/
//close all clean editors with confirmation
for (int i = 0; i < total; i++) {
editors[i] = IDE.openEditor(fActivePage, files[i]);
callTraces[i] = ((MockEditorPart) editors[i]).getCallHistory();
}
assertEquals(fActivePage.closeAllEditors(true), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//close all dirty editors with confirmation
//can't be tested
//close all dirty editors discarding them
for (int i = 0; i < total; i++) {
editors[i] = IDE.openEditor(fActivePage, files[i]);
mocks[i] = (MockEditorPart) editors[i];
mocks[i].setDirty(true);
callTraces[i] = mocks[i].getCallHistory();
}
assertEquals(fActivePage.closeAllEditors(false), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("doSave"), false);
}
}
public void testSaveEditor() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
final IFile file = FileUtil.createFile("test.mock1", proj);
IEditorPart editor;
CallHistory callTrace;
MockEditorPart mock;
//create a clean editor
editor = IDE.openEditor(fActivePage, file);
mock = (MockEditorPart) editor;
callTrace = mock.getCallHistory();
callTrace.clear();
/*
javadoc: Saves the contents of the given editor if dirty.
If not, this method returns without effect
*/
//save the clean editor with confirmation
assertEquals(fActivePage.saveEditor(editor, true), true);
assertEquals(callTrace.contains("isDirty"), true);
assertEquals(callTrace.contains("doSave"), false);
/*
javadoc: If confirm is true the user is prompted to confirm the command.
*/
//can't be tested
/*
javadoc: Otherwise, the save happens without prompt.
*/
//save the clean editor without confirmation
assertEquals(fActivePage.saveEditor(editor, false), true);
assertEquals(callTrace.contains("isDirty"), true);
assertEquals(callTrace.contains("doSave"), false);
//save the dirty editor without confirmation
mock.setDirty(true);
callTrace.clear();
assertEquals(fActivePage.saveEditor(editor, false), true);
assertEquals(callTrace
.verifyOrder(new String[] { "isDirty", "doSave" }), true);
}
public void testIDESaveAllEditors() throws Throwable {
int total = 3;
final IFile[] files = new IFile[total];
IEditorPart[] editors = new IEditorPart[total];
CallHistory[] callTraces = new CallHistory[total];
MockEditorPart[] mocks = new MockEditorPart[total];
proj = FileUtil.createProject("testOpenEditor");
for (int i = 0; i < total; i++) {
files[i] = FileUtil.createFile(i + ".mock2", proj);
editors[i] = IDE.openEditor(fActivePage, files[i]);
mocks[i] = (MockEditorPart) editors[i];
callTraces[i] = mocks[i].getCallHistory();
}
/*
javadoc: If there are no dirty editors this method returns without effect.
javadoc: If confirm is true the user is prompted to confirm the command
*/
//save all clean editors with confirmation
assertEquals(IDE.saveAllEditors(new IResource[] { proj }, true), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//save all dirty editors with confirmation can't be tested
/*
javadoc: Parameters: confirm - false to save unsaved changes without asking
*/
//save all clean editors without confirmation
assertEquals(IDE.saveAllEditors(new IResource[] { proj }, false), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//save all dirty editors with resource that IS NOT a parent
// of the contents of the dirty editors without confirmation, this should not
// save any as they are not parented by the resource provided
for (int i = 0; i < total; i++)
mocks[i].setDirty(true);
IResource emptyProj = FileUtil
.createProject("testOpenEditorEmptyProject");
assertEquals(IDE.saveAllEditors(new IResource[] { emptyProj }, false),
true);
for (int i = 0; i < total; i++) {
// the editors were not in the empty project hence still dirty
assertEquals(mocks[i].isDirty(), true);
callTraces[i].clear();
}
//save all dirty editors with resource that IS a parent
// of the contents of the editors without confirmation, this should
// save them as they are parented by the resource provided
assertEquals(IDE.saveAllEditors(new IResource[] { proj }, false), true);
for (int i = 0; i < total; i++) {
// the editors were not in the empty project hence still dirty
assertEquals(mocks[i].isDirty(), false);
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), true);
callTraces[i].clear();
}
//save all dirty editors with resource that IS NOT a parent
// of the contents of the dirty editors without confirmation, this should not
// save any as they are not parented by the resource provided
for (int i = 0; i < total; i++)
mocks[i].setDirty(true);
assertEquals(IDE.saveAllEditors(new IResource[] {}, false), true);
for (int i = 0; i < total; i++) {
// the editors were not in the empty project hence still dirty
assertEquals(mocks[i].isDirty(), true);
callTraces[i].clear();
}
// clear the dirty state so the tearDown does not open a confirm dialog.
for (int i = 0; i < total; i++)
mocks[i].setDirty(false);
}
public void testSaveAllEditors() throws Throwable {
int total = 3;
final IFile[] files = new IFile[total];
IEditorPart[] editors = new IEditorPart[total];
CallHistory[] callTraces = new CallHistory[total];
MockEditorPart[] mocks = new MockEditorPart[total];
proj = FileUtil.createProject("testOpenEditor");
for (int i = 0; i < total; i++) {
files[i] = FileUtil.createFile(i + ".mock2", proj);
editors[i] = IDE.openEditor(fActivePage, files[i]);
mocks[i] = (MockEditorPart) editors[i];
callTraces[i] = mocks[i].getCallHistory();
}
/*
javadoc: If there are no dirty editors this method returns without effect.
javadoc: If confirm is true the user is prompted to confirm the command
*/
//save all clean editors with confirmation
assertEquals(fActivePage.saveAllEditors(true), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//save all dirty editors with confirmation can't be tested
/*
javadoc: Parameters: confirm - false to save unsaved changes without asking
*/
//save all clean editors without confirmation
assertEquals(fActivePage.saveAllEditors(false), true);
for (int i = 0; i < total; i++) {
assertEquals(callTraces[i].contains("isDirty"), true);
assertEquals(callTraces[i].contains("doSave"), false);
callTraces[i].clear();
}
//save all dirty editors without confirmation
for (int i = 0; i < total; i++)
mocks[i].setDirty(true);
assertEquals(fActivePage.saveAllEditors(false), true);
for (int i = 0; i < total; i++)
assertEquals(callTraces[i].verifyOrder(new String[] { "isDirty",
"doSave" }), true);
}
public void testGetEditors() throws Throwable {
proj = FileUtil.createProject("testOpenEditor");
int totalBefore = fActivePage.getEditorReferences().length;
int num = 3;
IEditorPart[] editors = new IEditorPart[num];
for (int i = 0; i < num; i++) {
editors[i] = IDE.openEditor(fActivePage, FileUtil.createFile(i
+ ".mock2", proj));
assertEquals(hasEditor(editors[i]), true);
}
assertEquals(fActivePage.getEditorReferences().length, totalBefore
+ num);
fActivePage.closeEditor(editors[0], false);
assertEquals(hasEditor(editors[0]), false);
assertEquals(fActivePage.getEditorReferences().length, totalBefore
+ num - 1);
fActivePage.closeAllEditors(false);
assertEquals(fActivePage.getEditorReferences().length, 0);
}
public void testShowActionSet() {
String id = MockActionDelegate.ACTION_SET_ID;
WorkbenchPage page = (WorkbenchPage) fActivePage;
int totalBefore = page.getActionSets().length;
fActivePage.showActionSet(id);
IActionSetDescriptor[] sets = ((WorkbenchPage) fActivePage)
.getActionSets();
boolean found = false;
for (int i = 0; i < sets.length; i++)
if (id.equals(sets[i].getId()))
found = true;
assertEquals(found, true);
//check that the method does not add an invalid action set to itself
id = IConstants.FakeID;
fActivePage.showActionSet(id);
sets = ((WorkbenchPage) fActivePage).getActionSets();
found = false;
for (int i = 0; i < sets.length; i++)
if (id.equals(sets[i].getId()))
found = true;
assertEquals(found, false);
assertEquals(page.getActionSets().length, totalBefore + 1);
}
public void testHideActionSet() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
int totalBefore = page.getActionSets().length;
String id = MockWorkbenchWindowActionDelegate.SET_ID;
fActivePage.showActionSet(id);
assertEquals(page.getActionSets().length, totalBefore + 1);
fActivePage.hideActionSet(id);
assertEquals(page.getActionSets().length, totalBefore);
IActionSetDescriptor[] sets = page.getActionSets();
boolean found = false;
for (int i = 0; i < sets.length; i++)
if (id.equals(sets[i].getId()))
found = true;
assertEquals(found, false);
}
/**
* Return whether or not the editor exists in the current page.
* @param editor
* @return boolean
*/
private boolean hasEditor(IEditorPart editor) {
IEditorReference[] references = fActivePage.getEditorReferences();
for (int i = 0; i < references.length; i++) {
if (references[i].getEditor(false).equals(editor))
return true;
}
return false;
}
/**
* Return whether or not the view exists in the current page.
* @param editor
* @return boolean
*/
private boolean hasView(IViewPart view) {
IViewReference[] references = fActivePage.getViewReferences();
for (int i = 0; i < references.length; i++) {
if (references[i].getView(false).equals(view))
return true;
}
return false;
}
public void testStackOrder() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
IViewPart part1 = page.showView(MockViewPart.ID);
IViewPart part2 = page.showView(MockViewPart.ID2);
IViewPart part3 = page.showView(MockViewPart.ID3);
IViewPart part4 = page.showView(MockViewPart.ID4);
IViewPart[] stack = page.getViewStack(part1);
assertTrue(stack.length == 4);
assertTrue(stack[0] == part4);
assertTrue(stack[1] == part3);
assertTrue(stack[2] == part2);
assertTrue(stack[3] == part1);
page.activate(part2);
stack = page.getViewStack(part1);
assertTrue(stack.length == 4);
assertTrue(stack[0] == part2);
assertTrue(stack[1] == part4);
assertTrue(stack[2] == part3);
assertTrue(stack[3] == part1);
page.activate(part1);
stack = page.getViewStack(part1);
assertTrue(stack.length == 4);
assertTrue(stack[0] == part1);
assertTrue(stack[1] == part2);
assertTrue(stack[2] == part4);
assertTrue(stack[3] == part3);
page.activate(part3);
stack = page.getViewStack(part1);
assertTrue(stack.length == 4);
assertTrue(stack[0] == part3);
assertTrue(stack[1] == part1);
assertTrue(stack[2] == part2);
assertTrue(stack[3] == part4);
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test the VIEW_CREATE parameter for showView. Ensures that the created
* view is not the active part.
*
*/
public void testView_CREATE1() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID);
IViewPart createdPart = page.showView(MockViewPart.ID2, null,
IWorkbenchPage.VIEW_CREATE);
IViewPart[] stack = page.getViewStack(activePart);
assertEquals(2, stack.length);
assertEquals(activePart, stack[0]);
assertEquals(createdPart, stack[1]);
assertFalse(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test the VIEW_CREATE parameter for showView. Ensures that the created
* view is not the active part and is not visible
*/
public void testView_CREATE2() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID3);
IViewPart createdPart = page.showView(MockViewPart.ID2, null,
IWorkbenchPage.VIEW_CREATE);
IViewPart[] stack = page.getViewStack(createdPart);
assertEquals(2, stack.length);
assertEquals(page.findView(MockViewPart.ID), stack[0]);
assertEquals(createdPart, stack[1]);
assertFalse(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test the VIEW_CREATE parameter for showView. Ensures that the created
* view is not the active part and is visible.
*/
public void testView_CREATE3() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID3);
IViewPart createdPart = page.showView(MockViewPart.ID4, null,
IWorkbenchPage.VIEW_CREATE);
IViewPart[] stack = page.getViewStack(createdPart);
assertEquals(1, stack.length);
assertEquals(createdPart, stack[0]);
assertTrue(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test the VIEW_VISIBLE parameter for showView, opening the view in the
* stack containing the active view. Ensures that the created view is not
* the active part and is not visible.
*/
public void testView_VISIBLE1() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID);
IViewPart createdPart = page.showView(MockViewPart.ID2, null,
IWorkbenchPage.VIEW_VISIBLE);
IViewPart[] stack = page.getViewStack(activePart);
assertEquals(2, stack.length);
assertEquals(activePart, stack[0]);
assertEquals(createdPart, stack[1]);
assertFalse(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test the VIEW_VISIBLE parameter for showView, opening the view in its
* own stack. Ensures that the created view is not active part but is the
* top part in its stack.
*/
public void testView_VISIBLE3() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
page.setPerspective(WorkbenchPlugin.getDefault()
.getPerspectiveRegistry().findPerspectiveWithId(
"org.eclipse.ui.tests.api.ViewPerspective"));
//create a part to be active
IViewPart activePart = page.showView(MockViewPart.ID3);
IViewPart createdPart = page.showView(MockViewPart.ID4, null,
IWorkbenchPage.VIEW_VISIBLE);
IViewPart[] stack = page.getViewStack(createdPart);
assertEquals(1, stack.length);
assertEquals(createdPart, stack[0]);
assertTrue(page.isPartVisible(createdPart));
assertEquals(activePart, page.getActivePart());
} catch (PartInitException e) {
fail(e.getMessage());
}
}
/**
* Test opening a perspective with a fast view.
*/
public void testOpenPerspectiveWithFastView() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
fWin.getWorkbench().showPerspective(
PerspectiveWithFastView.PERSP_ID, fWin);
} catch (WorkbenchException e) {
fail("Unexpected WorkbenchException: " + e);
}
assertEquals(page.getFastViews().length, 1);
assertEquals(page.getFastViews()[0].getId(),
"org.eclipse.ui.views.ResourceNavigator");
assertEquals(page.getViewReferences().length, 1);
assertTrue(page.getViewReferences()[0].isFastView());
ClosePerspectiveAction closePespective = new ClosePerspectiveAction(
fWin);
closePespective.run();
}
/**
* Test opening a perspective with placeholders for multi instance views.
* The placeholders are added at top level (not in any folder).
*
* @since 3.1
*/
public void testOpenPerspectiveWithMultiViewPlaceholdersAtTopLevel() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
fWin.getWorkbench().showPerspective(
PerspectiveWithMultiViewPlaceholdersAtTopLevel.PERSP_ID, fWin);
} catch (WorkbenchException e) {
fail("Unexpected WorkbenchException: " + e);
}
PerspectiveState state = new PerspectiveState(page);
ArrayList partIds = state.getPartIds(null);
assertTrue(partIds.contains("*"));
assertTrue(partIds.contains(MockViewPart.IDMULT));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":secondaryId"));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":*"));
}
/**
* Test opening a perspective with placeholders for multi instance views.
* The placeholders are added in a placeholder folder.
* This is a regression test for bug 72383 [Perspectives] Placeholder folder error with multiple instance views
*
* @since 3.1
*/
public void testOpenPerspectiveWithMultiViewPlaceholdersInPlaceholderFolder() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
fWin.getWorkbench().showPerspective(
PerspectiveWithMultiViewPlaceholdersInPlaceholderFolder.PERSP_ID, fWin);
} catch (WorkbenchException e) {
fail("Unexpected WorkbenchException: " + e);
}
PerspectiveState state = new PerspectiveState(page);
ArrayList partIds = state.getPartIds("placeholderFolder");
assertTrue(partIds.contains("*"));
assertTrue(partIds.contains(MockViewPart.IDMULT));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":secondaryId"));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":*"));
}
/**
* Test opening a perspective with placeholders for multi instance views.
* The placeholders are added at top level (not in any folder).
*
* @since 3.1
*/
public void testOpenPerspectiveWithMultiViewPlaceholdersInFolder() {
WorkbenchPage page = (WorkbenchPage) fActivePage;
try {
fWin.getWorkbench().showPerspective(
PerspectiveWithMultiViewPlaceholdersInFolder.PERSP_ID, fWin);
} catch (WorkbenchException e) {
fail("Unexpected WorkbenchException: " + e);
}
PerspectiveState state = new PerspectiveState(page);
ArrayList partIds = state.getPartIds("folder");
assertTrue(partIds.contains("*"));
assertTrue(partIds.contains(MockViewPart.IDMULT));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":secondaryId"));
assertTrue(partIds.contains(MockViewPart.IDMULT + ":*"));
}
/**
* Tests the getNewWizardShortcuts() method.
*
* @since 3.1
*/
public void testGetNewWizardShortcuts() {
String[] shortcuts = fActivePage.getNewWizardShortcuts();
assertNotNull(shortcuts);
assertEquals(0, shortcuts.length);
IWorkbenchWindow win = openTestWindow(IDE.RESOURCE_PERSPECTIVE_ID);
IWorkbenchPage page = win.getActivePage();
shortcuts = page.getNewWizardShortcuts();
List shortcutList = Arrays.asList(shortcuts);
assertTrue(shortcutList.contains("org.eclipse.ui.wizards.new.folder"));
assertTrue(shortcutList.contains("org.eclipse.ui.wizards.new.file"));
}
/**
* Tests the getShowViewShortcuts() method.
*
* @since 3.1
*/
public void testGetShowViewShortcuts() {
String[] shortcuts = fActivePage.getShowViewShortcuts();
assertNotNull(shortcuts);
assertEquals(0, shortcuts.length);
IWorkbenchWindow win = openTestWindow(IDE.RESOURCE_PERSPECTIVE_ID);
IWorkbenchPage page = win.getActivePage();
shortcuts = page.getShowViewShortcuts();
List shortcutList = Arrays.asList(shortcuts);
assertTrue(shortcutList.contains(IPageLayout.ID_RES_NAV));
assertTrue(shortcutList.contains(IPageLayout.ID_OUTLINE));
assertTrue(shortcutList.contains(IPageLayout.ID_PROP_SHEET));
assertTrue(shortcutList.contains(IPageLayout.ID_PROBLEM_VIEW));
}
/**
* Tests the getPerspectiveShortcuts() method.
*
* @since 3.1
*/
public void testGetPerspectiveShortcuts() {
String[] shortcuts = fActivePage.getPerspectiveShortcuts();
assertNotNull(shortcuts);
assertEquals(0, shortcuts.length);
// not much of a test
}
/**
* Tests the getOpenPerspectives() method.
*
* @since 3.1
*/
public void testGetOpenPerspectives() {
IPerspectiveDescriptor[] openPersps = fActivePage.getOpenPerspectives();
assertEquals(1, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
IPerspectiveRegistry reg = fWorkbench.getPerspectiveRegistry();
IPerspectiveDescriptor resourcePersp = reg.findPerspectiveWithId(IDE.RESOURCE_PERSPECTIVE_ID);
fActivePage.setPerspective(resourcePersp);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(2, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
assertEquals(IDE.RESOURCE_PERSPECTIVE_ID, openPersps[1].getId());
IPerspectiveDescriptor emptyPersp = reg.findPerspectiveWithId(EmptyPerspective.PERSP_ID);
fActivePage.setPerspective(emptyPersp);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(2, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
assertEquals(IDE.RESOURCE_PERSPECTIVE_ID, openPersps[1].getId());
fActivePage.closeAllPerspectives(false, false);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
fActivePage.close();
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
}
/**
* Tests the getSortedPerspectives() method.
*
* @since 3.1
*/
public void testGetSortedPerspectives() {
IPerspectiveDescriptor[] openPersps = fActivePage.getSortedPerspectives();
assertEquals(1, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
IPerspectiveRegistry reg = fWorkbench.getPerspectiveRegistry();
IPerspectiveDescriptor resourcePersp = reg.findPerspectiveWithId(IDE.RESOURCE_PERSPECTIVE_ID);
fActivePage.setPerspective(resourcePersp);
openPersps = fActivePage.getSortedPerspectives();
assertEquals(2, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
assertEquals(IDE.RESOURCE_PERSPECTIVE_ID, openPersps[1].getId());
IPerspectiveDescriptor emptyPersp = reg.findPerspectiveWithId(EmptyPerspective.PERSP_ID);
fActivePage.setPerspective(emptyPersp);
openPersps = fActivePage.getSortedPerspectives();
assertEquals(2, openPersps.length);
assertEquals(IDE.RESOURCE_PERSPECTIVE_ID, openPersps[0].getId());
assertEquals(EmptyPerspective.PERSP_ID, openPersps[1].getId());
fActivePage.closeAllPerspectives(false, false);
openPersps = fActivePage.getSortedPerspectives();
assertEquals(0, openPersps.length);
fActivePage.close();
openPersps = fActivePage.getSortedPerspectives();
assertEquals(0, openPersps.length);
}
/**
* Tests the closePerspective method.
*
* @since 3.1
*/
public void testClosePerspective() {
// TODO: Need to test variants with saveEditors==true
IPerspectiveRegistry reg = fWorkbench.getPerspectiveRegistry();
IPerspectiveDescriptor emptyPersp = reg.findPerspectiveWithId(EmptyPerspective.PERSP_ID);
IPerspectiveDescriptor resourcePersp = reg.findPerspectiveWithId(IDE.RESOURCE_PERSPECTIVE_ID);
fActivePage.setPerspective(resourcePersp);
IPerspectiveDescriptor[] openPersps = fActivePage.getOpenPerspectives();
assertEquals(2, openPersps.length);
fActivePage.closePerspective(resourcePersp, false, false);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(1, openPersps.length);
assertEquals(EmptyPerspective.PERSP_ID, openPersps[0].getId());
fActivePage.closePerspective(emptyPersp, false, false);
assertEquals(fActivePage, fWin.getActivePage()); // page not closed
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
fActivePage.setPerspective(emptyPersp);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(1, openPersps.length);
fActivePage.closePerspective(emptyPersp, false, true);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
assertNull(fWin.getActivePage()); // page closed
}
/**
* Tests the closeAllPerspectives method.
*
* @since 3.1
*/
public void testCloseAllPerspectives() {
// TODO: Need to test variants with saveEditors==true
IPerspectiveRegistry reg = fWorkbench.getPerspectiveRegistry();
IPerspectiveDescriptor emptyPersp = reg.findPerspectiveWithId(EmptyPerspective.PERSP_ID);
IPerspectiveDescriptor resourcePersp = reg.findPerspectiveWithId(IDE.RESOURCE_PERSPECTIVE_ID);
fActivePage.setPerspective(resourcePersp);
IPerspectiveDescriptor[] openPersps = fActivePage.getOpenPerspectives();
assertEquals(2, openPersps.length);
fActivePage.closeAllPerspectives(false, false);
assertEquals(fActivePage, fWin.getActivePage()); // page not closed
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
fActivePage.setPerspective(emptyPersp);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(1, openPersps.length);
fActivePage.closeAllPerspectives(false, true);
openPersps = fActivePage.getOpenPerspectives();
assertEquals(0, openPersps.length);
assertNull(fWin.getActivePage()); // page closed
}
/**
* Regression test for Bug 76285 [Presentations] Folder tab does not indicate current view.
* Tests that, when switching between perspectives, the remembered old part correctly
* handles multi-view instances.
*/
public void testBug76285() {
IWorkbenchPage page = fActivePage;
IPerspectiveDescriptor originalPersp = page.getPerspective();
IPerspectiveDescriptor resourcePersp = PlatformUI.getWorkbench()
.getPerspectiveRegistry().findPerspectiveWithId(
IDE.RESOURCE_PERSPECTIVE_ID);
// test requires switching between two different perspectives
assertNotSame(originalPersp, resourcePersp);
int n = 5;
IViewPart[] views = new IViewPart[n];
for (int i = 0; i < n; ++i) {
try {
views[i] = page.showView(MockViewPart.IDMULT, Integer
.toString(i), IWorkbenchPage.VIEW_CREATE);
} catch (PartInitException e) {
fail(e.getMessage());
}
}
assertEquals(5, page.getViews().length);
for (int i = 0; i < n; ++i) {
page.activate(views[i]);
page.setPerspective(resourcePersp);
assertFalse(page.getActivePart() instanceof MockViewPart);
page.setPerspective(originalPersp);
assertEquals(views[i], page.getActivePart());
}
}
/**
* Tests that IShowEditorInput.showEditorInput is called when a
* matching editor is found during openEditor, and is not called
* when a new editor is opened.
*
* @since 3.1
*/
public void testShowEditorInput() throws Exception {
IWorkbenchPage page = fActivePage;
proj = FileUtil.createProject("testShowEditorInput");
IFile file = FileUtil.createFile("a.mock1", proj);
MockEditorPart part1 = (MockEditorPart) IDE.openEditor(page, file);
assertFalse(part1.getCallHistory().contains("showEditorInput"));
MockEditorPart part2 = (MockEditorPart) IDE.openEditor(page, file);
assertTrue(part1 == part2);
assertTrue(part2.getCallHistory().contains("showEditorInput"));
}
/**
* Tests that the openEditor and findEditor variants that accepts match flags work as expected.
*
* @since 3.2
*/
public void testOpenAndFindEditorWithMatchFlags() throws Exception {
IWorkbenchPage page = fActivePage;
proj = FileUtil.createProject("testOpenEditorMatchFlags");
IFile file1 = FileUtil.createFile("a.mock1", proj);
IFile file2 = FileUtil.createFile("a.mock2", proj);
FileEditorInput input1 = new FileEditorInput(file1);
FileEditorInput input2 = new FileEditorInput(file2);
String id1 = MockEditorPart.ID1;
String id2 = MockEditorPart.ID2;
// first editor (no match)
MockEditorPart part1 = (MockEditorPart) page.openEditor(input1, id1, true, IWorkbenchPage.MATCH_INPUT);
assertNotNull(part1);
// same input, same id, matching input (should match part1)
MockEditorPart part2 = (MockEditorPart) page.openEditor(input1, id1, true, IWorkbenchPage.MATCH_INPUT);
assertTrue(part1 == part2);
// same input, different id, matching input (should match part1)
MockEditorPart part3 = (MockEditorPart) page.openEditor(input1, id2, true, IWorkbenchPage.MATCH_INPUT);
assertTrue(part1 == part3);
// same input, different id, matching input and id (no match)
MockEditorPart part4 = (MockEditorPart) page.openEditor(input1, id2, true, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
assertNotNull(part4);
assertTrue(part4 != part1);
// same input, same id, matching nothing (no match)
MockEditorPart part5 = (MockEditorPart) page.openEditor(input1, id1, true, IWorkbenchPage.MATCH_NONE);
assertNotNull(part5);
assertTrue(part5 != part1);
assertTrue(part5 != part4);
// different input, same id, matching id (should match part5 instead of part1, because it was active)
MockEditorPart part6 = (MockEditorPart) page.openEditor(input2, id1, true, IWorkbenchPage.MATCH_ID);
assertTrue(part6 == part5);
// different input, different id, matching input and id (no match)
MockEditorPart part7 = (MockEditorPart) page.openEditor(input2, id2, true, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
assertNotNull(part7);
assertTrue(part7 != part1);
assertTrue(part7 != part4);
assertTrue(part7 != part5);
// At this point, there are 4 editors open:
// part1 (input1, id1), part4 (input1, id2), part5 (input1, id1), and part7 (input2, id2).
// with part7 active.
// find with MATCH_NONE is always empty
IEditorReference[] refs = page.findEditors(input1, id1, IWorkbenchPage.MATCH_NONE);
assertEquals(0, refs.length);
// find input1 with MATCH_INPUT finds 3 editors: part1, part4 and part5 (in order)
refs = page.findEditors(input1, null, IWorkbenchPage.MATCH_INPUT);
assertEquals(3, refs.length);
assertEquals(part1, refs[0].getPart(true));
assertEquals(part4, refs[1].getPart(true));
assertEquals(part5, refs[2].getPart(true));
// find input2 with MATCH_INPUT finds 1 editor: part7
refs = page.findEditors(input2, null, IWorkbenchPage.MATCH_INPUT);
assertEquals(1, refs.length);
assertEquals(part7, refs[0].getPart(true));
// find id1 with MATCH_ID finds 2 editors: part1 and part5 (in order)
refs = page.findEditors(null, id1, IWorkbenchPage.MATCH_ID);
assertEquals(2, refs.length);
assertEquals(part1, refs[0].getPart(true));
assertEquals(part5, refs[1].getPart(true));
// find id2 with MATCH_ID finds 2 editors: part4 and part7 (with part7 first because it was active)
refs = page.findEditors(null, id2, IWorkbenchPage.MATCH_ID);
assertEquals(2, refs.length);
assertEquals(part7, refs[0].getPart(true));
assertEquals(part4, refs[1].getPart(true));
// find input1 and id1 with MATCH_INPUT and MATCH_ID finds 2 editors: part1 and part5 (in order)
refs = page.findEditors(input1, id1, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
assertEquals(2, refs.length);
assertEquals(part1, refs[0].getPart(true));
assertEquals(part5, refs[1].getPart(true));
// find input1 and id2 with MATCH_INPUT and MATCH_ID finds 1 editors: part4
refs = page.findEditors(input1, id2, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
assertEquals(1, refs.length);
assertEquals(part4, refs[0].getPart(true));
}
}