Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 25832 Details for
Bug 96129
[MPE] (regression) MultiEditor.getInnerEditors() returns null.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
UI tests for 3.1.1 v02
bug96129-ui.tests-0808.txt (text/plain), 37.79 KB, created by
Paul Webster
on 2005-08-08 09:44:28 EDT
(
hide
)
Description:
UI tests for 3.1.1 v02
Filename:
MIME Type:
Creator:
Paul Webster
Created:
2005-08-08 09:44:28 EDT
Size:
37.79 KB
patch
obsolete
>Index: plugin.xml >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.tests/plugin.xml,v >retrieving revision 1.138 >diff -u -r1.138 plugin.xml >--- plugin.xml 20 Jun 2005 13:33:18 -0000 1.138 >+++ plugin.xml 8 Aug 2005 13:38:42 -0000 >@@ -598,6 +598,20 @@ > name="org.eclipse.ui.tests.contentType2Editor"> > <contentTypeBinding contentTypeId="org.eclipse.ui.tests.content-type2"/> > </editor> >+ <editor >+ class="org.eclipse.ui.tests.multieditor.TiledEditor" >+ default="false" >+ icon="icons/editor.gif" >+ id="org.eclipse.ui.tests.multieditor.TiledEditor" >+ name="%Editors.TiledEditor"/> >+ <editor >+ class="org.eclipse.ui.tests.multieditor.TestEditor" >+ contributorClass="org.eclipse.ui.tests.multieditor.TestActionBarContributor" >+ default="false" >+ extensions="etest" >+ icon="icons/binary_co.gif" >+ id="org.eclipse.ui.tests.multieditor.TestEditor" >+ name="%Editors.TestEditor"/> > </extension> > <extension > point="org.eclipse.ui.actionSets"> >@@ -646,6 +660,21 @@ > id="org.eclipse.ui.tests.markers.delete"> > </action> > </actionSet> >+ <actionSet >+ id="org.eclipse.ui.tests.multieditor.actionSet" >+ label="TestEditorMulti" >+ visible="false"> >+ <action >+ class="org.eclipse.ui.tests.api.MockEditorActionDelegate" >+ disabledIcon="icons/binary_co.gif" >+ icon="icons/view.gif" >+ id="org.eclipse.ui.tests.multieditor.editorAction.action" >+ label="MockMultiEditorAction" >+ state="false" >+ style="push" >+ toolbarPath="Normal/Presentation" >+ tooltip="MultiEditorActionThing"/> >+ </actionSet> > </extension> > <extension > point="org.eclipse.ui.viewActions"> >@@ -2318,4 +2347,12 @@ > icon="icons/anything.gif" > id="org.eclipse.category1"/> > </extension> >+ <extension >+ id="org.eclipse.ui.tests.multieditor.ASPA" >+ name="ASPA" >+ point="org.eclipse.ui.actionSetPartAssociations"> >+ <actionSetPartAssociation targetID="org.eclipse.ui.tests.multieditor.actionSet"> >+ <part id="org.eclipse.ui.tests.multieditor.TestEditor"/> >+ </actionSetPartAssociation> >+ </extension> > </plugin> >\ No newline at end of file >Index: Eclipse UI Tests/org/eclipse/ui/tests/UiTestSuite.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/UiTestSuite.java,v >retrieving revision 1.45 >diff -u -r1.45 UiTestSuite.java >--- Eclipse UI Tests/org/eclipse/ui/tests/UiTestSuite.java 4 May 2005 16:45:57 -0000 1.45 >+++ Eclipse UI Tests/org/eclipse/ui/tests/UiTestSuite.java 8 Aug 2005 13:38:42 -0000 >@@ -31,6 +31,7 @@ > import org.eclipse.ui.tests.keys.KeysTestSuite; > import org.eclipse.ui.tests.leaks.LeakTests; > import org.eclipse.ui.tests.menus.MenusTestSuite; >+import org.eclipse.ui.tests.multieditor.MultiEditorTestSuite; > import org.eclipse.ui.tests.multipageeditor.MultiPageEditorTestSuite; > import org.eclipse.ui.tests.navigator.NavigatorTestSuite; > import org.eclipse.ui.tests.operations.OperationsTestSuite; >@@ -70,6 +71,7 @@ > addTest(new DataTransferTestSuite()); > addTest(new PreferencesTestSuite()); > addTest(new KeysTestSuite()); >+ addTest(new MultiEditorTestSuite()); > addTest(new MultiPageEditorTestSuite()); > addTest(new DynamicPluginsTestSuite()); > addTest(new ActivitiesTestSuite()); >Index: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java >=================================================================== >RCS file: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java >diff -N Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,586 @@ >+/******************************************************************************* >+ * 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.multieditor; >+ >+import java.io.IOException; >+import java.net.URL; >+ >+import junit.framework.TestSuite; >+ >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.IWorkspace; >+import org.eclipse.core.resources.ResourcesPlugin; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.ILog; >+import org.eclipse.core.runtime.ILogListener; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.Platform; >+import org.eclipse.jface.action.IContributionItem; >+import org.eclipse.jface.action.ToolBarContributionItem; >+import org.eclipse.jface.action.ToolBarManager; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.ToolBar; >+import org.eclipse.swt.widgets.ToolItem; >+import org.eclipse.ui.IActionBars2; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.IEditorRegistry; >+import org.eclipse.ui.IViewPart; >+import org.eclipse.ui.IWorkbenchPage; >+import org.eclipse.ui.IWorkbenchPart; >+import org.eclipse.ui.IWorkbenchWindow; >+import org.eclipse.ui.PartInitException; >+import org.eclipse.ui.internal.WorkbenchPage; >+import org.eclipse.ui.internal.WorkbenchPlugin; >+import org.eclipse.ui.part.FileEditorInput; >+import org.eclipse.ui.part.IContributedContentsView; >+import org.eclipse.ui.part.MultiEditor; >+import org.eclipse.ui.part.MultiEditorInput; >+import org.eclipse.ui.tests.TestPlugin; >+import org.eclipse.ui.tests.util.CallHistory; >+import org.eclipse.ui.tests.util.UITestCase; >+ >+/** >+ * Test MultiEditor behaviour to highlight some of the broken functionality. >+ * >+ * @since 3.1 >+ */ >+public class MultiEditorTest extends UITestCase { >+ private static final String ACTION_TOOLTIP = "MultiEditorActionThing"; >+ >+ private static final String PROJECT_NAME = "TiledEditorProject"; >+ >+ private static final String CONTENT_OUTLINE = "org.eclipse.ui.views.ContentOutline"; >+ >+ private static final String TESTEDITOR_COOLBAR = "org.eclipse.ui.tests.multieditor.actionSet"; >+ >+ private static final String TILED_EDITOR_ID = "org.eclipse.ui.tests.multieditor.TiledEditor"; >+ >+ // tiled editor test files >+ private static final String DATA_FILES_DIR = "/data/org.eclipse.newMultiEditor/"; >+ >+ private static final String TEST01_TXT = "test01.txt"; >+ >+ private static final String TEST02_TXT = "test02.txt"; >+ >+ private static final String TEST03_ETEST = "test03.etest"; >+ >+ private static final String TEST04_PROPERTIES = "test04.properties"; >+ >+ private static final String BUILD_XML = "build.xml"; >+ >+ // >+ // call trace for the editor open - setFocus - close test >+ // >+ private static String[] gEditorOpenTrace = { "setInitializationData", >+ "init", "createPartControl", "createInnerPartControl", >+ "createInnerPartControl", "setFocus", "updateGradient", >+ "updateGradient", "updateGradient", }; >+ >+ private static String[] gEditorFocusTrace = { "setInitializationData", >+ "init", "createPartControl", "createInnerPartControl", >+ "createInnerPartControl", "setFocus", "updateGradient", >+ "updateGradient", "updateGradient", "setFocus", "updateGradient", >+ "updateGradient", "updateGradient", }; >+ >+ private static String[] gEditorCloseTrace = { "setInitializationData", >+ "init", "createPartControl", "createInnerPartControl", >+ "createInnerPartControl", "setFocus", "updateGradient", >+ "updateGradient", "updateGradient", "setFocus", "updateGradient", >+ "updateGradient", "updateGradient", "widgetsDisposed", "dispose" }; >+ >+ public static TestSuite suite() { >+ return new TestSuite(MultiEditorTest.class); >+ } >+ >+ /** >+ * Can catch a MultiEditor unexpect Exception on init. >+ */ >+ private EditorErrorListener fErrorListener; >+ >+ public MultiEditorTest(String tc) { >+ super(tc); >+ } >+ >+ /** >+ * Test that the test tiled editor can be opened with a basic >+ * MultiEditorInput with the same type of files. >+ * >+ * Test: Select a couple of files from navigator and use the TiledEditor >+ * menu to open the editor. It should open with the first selected file on >+ * top. >+ * >+ * @throws Throwable >+ * on an error >+ */ >+ public void testOpenBasicEditor() throws Throwable { >+ final String[] simpleFiles = { TEST01_TXT, TEST02_TXT }; >+ >+ IWorkbenchWindow window = fWorkbench.getActiveWorkbenchWindow(); >+ IWorkbenchPage page = window.getActivePage(); >+ >+ IProject testProject = findOrCreateProject(PROJECT_NAME); >+ >+ MultiEditorInput input = generateEditorInput(simpleFiles, testProject); >+ >+ // validate there are no NullPointerExceptions during editor >+ // initialization >+ openAndValidateEditor(page, input); >+ } >+ >+ /** >+ * Test that the public methods in TiledEditor (and MultiEditor) are called >+ * in the correct order from 3.0 to 3.1. >+ * >+ * Test: this test involves opening the tiled editor on 2 files, changing >+ * the focus from the first file to the second file, and closing the tiled >+ * editor. >+ * >+ * @throws Throwable >+ */ >+ public void testOpenTestFile() throws Throwable { >+ final String[] simpleFiles = { TEST01_TXT, TEST03_ETEST }; >+ >+ IWorkbenchWindow window = fWorkbench.getActiveWorkbenchWindow(); >+ WorkbenchPage page = (WorkbenchPage) window.getActivePage(); >+ >+ IProject testProject = findOrCreateProject(PROJECT_NAME); >+ >+ MultiEditorInput input = generateEditorInput(simpleFiles, testProject); >+ >+ // catches the framework NPE >+ IEditorPart editor = openAndValidateEditor(page, input); >+ >+ // did we get a multieditor back? >+ assertTrue(editor instanceof MultiEditor); >+ MultiEditor multiEditor = (MultiEditor) editor; >+ >+ chewUpEvents(); >+ >+ // listHistory(((TiledEditor) multiEditor).callHistory); >+ >+ // check the public API called for opening the TiledEditor >+ assertTrue("The editor open trace was incorrect", >+ ((TiledEditor) multiEditor).callHistory >+ .verifyOrder(gEditorOpenTrace)); >+ >+ // swap focus to the last editor, which is the test editor >+ // with the test coolbar contribution >+ IEditorPart[] innerEditors = multiEditor.getInnerEditors(); >+ innerEditors[innerEditors.length - 1].setFocus(); >+ >+ chewUpEvents(); >+ >+ assertTrue("Editor setFocus trace was incorrect", >+ ((TiledEditor) multiEditor).callHistory >+ .verifyOrder(gEditorFocusTrace)); >+ >+ page.closeEditor(multiEditor, false); >+ >+ chewUpEvents(); >+ >+ assertTrue("Editor close trace was incorrect", >+ ((TiledEditor) multiEditor).callHistory >+ .verifyOrder(gEditorCloseTrace)); >+ } >+ >+ /** >+ * Test that coolbar items in the workbench are updated when focus moves >+ * through the different inner editors ... this test as written is not 100% >+ * accurate, as the items are enabled. >+ * >+ * Test: Open two files where the first is a text file and the second is of >+ * type etest. Change focus to the etest file, and the coolbar should update >+ * with a new action icon and it should be enabled. >+ * >+ * @throws Throwable >+ * on an error >+ */ >+ public void testTrackCoolBar() throws Throwable { >+ final String[] simpleFiles = { TEST01_TXT, TEST02_TXT, >+ TEST04_PROPERTIES, BUILD_XML, TEST03_ETEST }; >+ >+ IWorkbenchWindow window = fWorkbench.getActiveWorkbenchWindow(); >+ WorkbenchPage page = (WorkbenchPage) window.getActivePage(); >+ >+ IProject testProject = findOrCreateProject(PROJECT_NAME); >+ >+ MultiEditorInput input = generateEditorInput(simpleFiles, testProject); >+ >+ // catches the framework NPE >+ IEditorPart editor = openAndValidateEditor(page, input); >+ >+ // did we get a multieditor back? >+ assertTrue(editor instanceof MultiEditor); >+ MultiEditor multiEditor = (MultiEditor) editor; >+ >+ chewUpEvents(); >+ >+ // get access to the appropriate coolbar >+ IContributionItem contribution = findMyCoolBar(page); >+ >+ // our test editor contribution should not be visible >+ // but it should be enabled >+ validateIconState(contribution, ACTION_TOOLTIP, false); >+ >+ // swap focus to the last editor, which is the test editor >+ // with the test coolbar contribution >+ IEditorPart[] innerEditors = multiEditor.getInnerEditors(); >+ innerEditors[innerEditors.length - 1].setFocus(); >+ >+ chewUpEvents(); >+ >+ contribution = findMyCoolBar(page); >+ assertNotNull("It should be available now", contribution); >+ >+ // our test editor contribution should now be visible and >+ // enabled >+ validateIconState(contribution, ACTION_TOOLTIP, true); >+ >+ } >+ >+ /** >+ * Test that the outline view is updated when focus moves from an editor to >+ * the ant editor. >+ * >+ * Test: Open 2 files where the first is a text file and the second is an >+ * ant file. Set focus on the ant file, and the outline should be updated to >+ * reflect the buildfile outline. >+ * >+ * @throws Throwable >+ * on an error >+ */ >+ public void testTrackOutline() throws Throwable { >+ final String[] simpleFiles = { TEST01_TXT, TEST02_TXT, >+ TEST04_PROPERTIES, BUILD_XML, TEST03_ETEST }; >+ >+ IWorkbenchWindow window = fWorkbench.getActiveWorkbenchWindow(); >+ WorkbenchPage page = (WorkbenchPage) window.getActivePage(); >+ >+ IProject testProject = findOrCreateProject(PROJECT_NAME); >+ >+ MultiEditorInput input = generateEditorInput(simpleFiles, testProject); >+ >+ // catches the framework NPE >+ IEditorPart editor = openAndValidateEditor(page, input); >+ >+ // did we get a multieditor back? >+ assertTrue(editor instanceof MultiEditor); >+ MultiEditor multiEditor = (MultiEditor) editor; >+ >+ chewUpEvents(); >+ >+ // Swap to the second last editor, which should be the ant >+ // build editor. >+ IEditorPart[] innerEditors = multiEditor.getInnerEditors(); >+ innerEditors[innerEditors.length - 2].setFocus(); >+ chewUpEvents(); >+ >+ // get the outline view part >+ IViewPart outline = window.getActivePage().findView(CONTENT_OUTLINE); >+ assertNotNull(outline); >+ >+ // find out who is contributing the outline view. >+ IContributedContentsView view = (IContributedContentsView) outline >+ .getAdapter(IContributedContentsView.class); >+ IWorkbenchPart part = view.getContributingPart(); >+ assertNotNull("The Outline view has not been updated by the editor", >+ part); >+ assertTrue("The Outline view is not talking to an editor", >+ part instanceof IEditorPart); >+ >+ IEditorPart outlineEditor = (IEditorPart) part; >+ >+ // the active inner editor (the ant editor) should also >+ // be the outline editor contributor ... this works in >+ // 3.0, fails in 3.1 >+ assertEquals("The Outline view is not talking to the correct editor", >+ multiEditor.getActiveEditor(), outlineEditor); >+ } >+ >+ /** >+ * Return the test editor coolbar. >+ * >+ * @param page >+ * the workbench page >+ * @return the IContributionItem for the test editor cool bar. >+ */ >+ private IContributionItem findMyCoolBar(WorkbenchPage page) { >+ //listItems(page); >+ IContributionItem contribution = ((IActionBars2) page.getActionBars()) >+ .getCoolBarManager().find(TESTEDITOR_COOLBAR); >+ // assertNotNull(contribution); >+ >+ return contribution; >+ } >+ >+ /** >+ * Validate the state of an icon in the toolbar. >+ * >+ * @param contribution >+ * the high level contribution from the coolbar to look through >+ * @param tooltip >+ * the string that matches the action's tooltip >+ * @param state >+ * should it be true or false >+ */ >+ private void validateIconState(IContributionItem contribution, >+ String tooltip, boolean state) { >+ assertTrue("We might not have the contribution or expect it", >+ contribution != null || !state); >+ if (contribution == null) { >+ return; >+ } >+ >+ ToolBarManager toolBarManager = (ToolBarManager) ((ToolBarContributionItem) contribution) >+ .getToolBarManager(); >+ ToolBar bar = toolBarManager.getControl(); >+ >+ assertTrue("It's OK for bar to be null if we expect state to be false", >+ bar != null || !state); >+ if (bar == null) { >+ return; >+ } >+ >+ ToolItem[] items = bar.getItems(); >+ for (int i = 0; i < items.length; ++i) { >+ // System.err.println("Item: " + items[i].getToolTipText()); >+ if (tooltip.equals(items[i].getToolTipText())) { >+ assertEquals("Invalid icon state for " + tooltip, state, >+ items[i].getEnabled()); >+ return; >+ } >+ } >+ assertFalse("We haven't found our item", state); >+ } >+ >+ /** >+ * Create the project to work in. If it already exists, just open it. >+ * >+ * @param projectName >+ * the name of the project to create >+ * @return the newly opened project >+ * @throws CoreException >+ */ >+ private IProject findOrCreateProject(String projectName) >+ throws CoreException { >+ IWorkspace workspace = ResourcesPlugin.getWorkspace(); >+ IProject testProject = workspace.getRoot().getProject(projectName); >+ if (!testProject.exists()) { >+ testProject.create(null); >+ } >+ testProject.open(null); >+ return testProject; >+ } >+ >+ /** >+ * Internal printing method, only used for investigation. >+ * >+ * @param page >+ * the workbench page >+ */ >+ private void checkView(WorkbenchPage page) { >+ IViewPart[] views = page.getViews(); >+ for (int i = 0; i < views.length; ++i) { >+ System.err.println("view: " + views[i].getViewSite().getId() + "/" >+ + views[i].getViewSite().getRegisteredName()); >+ } >+ } >+ >+ /** >+ * Print the call history to console. Only used for investigation. >+ * >+ * @param history >+ * the editor call history object. >+ */ >+ private void listHistory(CallHistory history) { >+ history.printToConsole(); >+ } >+ >+ /** >+ * List bits and internals of the coolbar manager contribution items. Only >+ * used for investigation. >+ * >+ * @param page >+ * the workbench page >+ */ >+ private void listItems(WorkbenchPage page) { >+ checkView(page); >+ IContributionItem[] items = ((IActionBars2) page.getActionBars()) >+ .getCoolBarManager().getItems(); >+ System.err.println("Length: " + items.length); >+ for (int i = 0; i < items.length; ++i) { >+ System.err.println("" + items[i].isEnabled() + ":" >+ + items[i].isVisible() + " " + items[i].getId() + "\n\t" >+ + items[i].getClass().getName()); >+ if (items[i] instanceof ToolBarContributionItem) { >+ displayItem(items[i]); >+ } >+ } >+ System.err.println("----"); >+ } >+ >+ /** >+ * Display bits of contribution item internals to the console. Only used for >+ * investigation. >+ * >+ * @param contributionItem >+ * the IContributionItem to display >+ */ >+ private void displayItem(IContributionItem contributionItem) { >+ ToolBarManager toolBarManager = (ToolBarManager) ((ToolBarContributionItem) contributionItem) >+ .getToolBarManager(); >+ ToolBar bar = toolBarManager.getControl(); >+ if (bar == null) { >+ System.err.println("\tInfo-items: -1"); >+ } else { >+ System.err.println("\tInfo-items: " + bar.getItemCount() + "/" >+ + bar.getEnabled() + "/" + bar.isEnabled() + "/" >+ + bar.isVisible()); >+ ToolItem[] tools = bar.getItems(); >+ for (int t = 0; t < tools.length; ++t) { >+ System.err.println("\t\titem: " + tools[t].getEnabled() + " " >+ + tools[t].getToolTipText()); >+ } >+ } >+ } >+ >+ /** >+ * After an internal action, see if there are any outstanding SWT events. >+ */ >+ private void chewUpEvents() throws InterruptedException { >+ Thread.sleep(500); >+ Display display = Display.getCurrent(); >+ while (display.readAndDispatch()) >+ ; >+ } >+ >+ /** >+ * Open the test editor. It does basic validation that there is no >+ * NullPointerException during initialization. >+ * >+ * @param page >+ * the workbench page >+ * @param input >+ * the editor input with multiple files >+ * @return the MultiEditor >+ * @throws PartInitException >+ */ >+ private IEditorPart openAndValidateEditor(IWorkbenchPage page, >+ MultiEditorInput input) throws PartInitException { >+ >+ IEditorPart editorPart = null; >+ try { >+ setupErrorListener(); >+ editorPart = page >+ .openEditor(input, MultiEditorTest.TILED_EDITOR_ID); >+ assertNotNull(editorPart); >+ >+ // 3.1.0 only >+ // assertFalse("The editor never actualized", >+ // editorPart instanceof ErrorEditorPart); >+ >+ assertTrue("Creation error: " + fErrorListener.fErrorMsg, >+ fErrorListener.fNoError); >+ } finally { >+ removeErrorListener(); >+ } >+ return editorPart; >+ } >+ >+ /** >+ * Set up to catch any editor initialization exceptions. >+ * >+ */ >+ private void setupErrorListener() { >+ final ILog log = WorkbenchPlugin.getDefault().getLog(); >+ fErrorListener = new EditorErrorListener(); >+ log.addLogListener(fErrorListener); >+ } >+ >+ /** >+ * Remove the editor error listener. >+ */ >+ private void removeErrorListener() { >+ final ILog log = WorkbenchPlugin.getDefault().getLog(); >+ if (fErrorListener != null) { >+ log.removeLogListener(fErrorListener); >+ fErrorListener = null; >+ } >+ } >+ >+ /** >+ * Create the multi editor input in the given project. Creates the files in >+ * the project from template files in the classpath if they don't already >+ * exist. >+ * >+ * @param simpleFiles >+ * the array of filenames to copy over >+ * @param testProject >+ * the project to create the files in >+ * @return the editor input used to open the multieditor >+ * @throws CoreException >+ * @throws IOException >+ */ >+ private MultiEditorInput generateEditorInput(String[] simpleFiles, >+ IProject testProject) throws CoreException, IOException { >+ String[] ids = new String[simpleFiles.length]; >+ IEditorInput[] inputs = new IEditorInput[simpleFiles.length]; >+ IEditorRegistry registry = fWorkbench.getEditorRegistry(); >+ >+ for (int f = 0; f < simpleFiles.length; ++f) { >+ IFile f1 = testProject.getFile(simpleFiles[f]); >+ if (!f1.exists()) { >+ URL file = Platform.asLocalURL(TestPlugin.getDefault() >+ .getBundle().getEntry(DATA_FILES_DIR + simpleFiles[f])); >+ f1.create(file.openStream(), true, null); >+ } >+ ids[f] = registry.getDefaultEditor(f1.getName()).getId(); >+ inputs[f] = new FileEditorInput(f1); >+ } >+ >+ MultiEditorInput input = new MultiEditorInput(ids, inputs); >+ return input; >+ } >+ >+ /** >+ * Close any editors at the end of a test, so the next test can be clean. >+ */ >+ protected void doTearDown() throws Exception { >+ fWorkbench.getActiveWorkbenchWindow().getActivePage().closeAllEditors( >+ false); >+ super.doTearDown(); >+ } >+ >+ /** >+ * Listens for the standard message that indicates the MultiEditor failed >+ * ... usually caused by incorrect framework initialization that doesn't set >+ * the innerChildren. >+ * >+ * @since 3.1 >+ * >+ */ >+ public static class EditorErrorListener implements ILogListener { >+ public boolean fNoError = true; >+ >+ public String fErrorMsg = null; >+ >+ public void logging(IStatus status, String plugin) { >+ fNoError = false; >+ fErrorMsg = status.getMessage(); >+ Throwable ex = status.getException(); >+ if (ex != null) { >+ fErrorMsg += ": " + ex.getMessage(); >+ } >+ } >+ } >+} >Index: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTestSuite.java >=================================================================== >RCS file: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTestSuite.java >diff -N Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTestSuite.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTestSuite.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,27 @@ >+/******************************************************************************* >+ * 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.multieditor; >+ >+import junit.framework.Test; >+import junit.framework.TestSuite; >+ >+public class MultiEditorTestSuite extends TestSuite { >+ >+ public static Test suite() { >+ TestSuite suite = new TestSuite( >+ "Test for org.eclipse.ui.tests.multieditor"); >+ //$JUnit-BEGIN$ >+ suite.addTest(MultiEditorTest.suite()); >+ //$JUnit-END$ >+ return suite; >+ } >+ >+} >Index: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestActionBarContributor.java >=================================================================== >RCS file: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestActionBarContributor.java >diff -N Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestActionBarContributor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestActionBarContributor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,28 @@ >+/******************************************************************************* >+ * 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.multieditor; >+ >+import org.eclipse.jface.action.ICoolBarManager; >+import org.eclipse.ui.part.EditorActionBarContributor; >+ >+public class TestActionBarContributor extends EditorActionBarContributor { >+ >+ public TestActionBarContributor() { >+ super(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToCoolBar(org.eclipse.jface.action.ICoolBarManager) >+ */ >+ public void contributeToCoolBar(ICoolBarManager coolBarManager) { >+ super.contributeToCoolBar(coolBarManager); >+ } >+} >Index: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestEditor.java >=================================================================== >RCS file: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestEditor.java >diff -N Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestEditor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TestEditor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,90 @@ >+/******************************************************************************* >+ * 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.multieditor; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.layout.RowLayout; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Label; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorSite; >+import org.eclipse.ui.IFileEditorInput; >+import org.eclipse.ui.PartInitException; >+import org.eclipse.ui.part.EditorPart; >+ >+/** >+ * A test editor that does pretty-well nothing. Activating it will >+ * update the coolbar, and possibly eventually the outline as well. >+ * >+ * @since 3.1 >+ * >+ */ >+public class TestEditor extends EditorPart { >+ >+ private Composite fMainPanel; >+ >+ public TestEditor() { >+ super(); >+ // TODO Auto-generated constructor stub >+ } >+ >+ public void doSave(IProgressMonitor monitor) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void doSaveAs() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void init(IEditorSite site, IEditorInput input) >+ throws PartInitException { >+ if (!(input instanceof IFileEditorInput)) >+ throw new PartInitException( >+ "Invalid Input: Must be IFileEditorInput"); >+ setSite(site); >+ setInput(input); >+ >+ } >+ >+ public boolean isDirty() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public boolean isSaveAsAllowed() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public void createPartControl(Composite parent) { >+ fMainPanel = new Composite(parent, SWT.NONE); >+ fMainPanel.setLayout(new RowLayout(SWT.VERTICAL)); >+ >+ Label l = new Label(fMainPanel, SWT.NONE); >+ l.setText("Editor Title:"); >+ >+ l = new Label(fMainPanel, SWT.BORDER); >+ l.setText(getEditorInput().getName()); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus() >+ */ >+ public void setFocus() { >+ fMainPanel.setFocus(); >+ } >+ >+} >Index: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TiledEditor.java >=================================================================== >RCS file: Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TiledEditor.java >diff -N Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TiledEditor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ Eclipse UI Tests/org/eclipse/ui/tests/multieditor/TiledEditor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,193 @@ >+/******************************************************************************* >+ * 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.multieditor; >+ >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.custom.CLabel; >+import org.eclipse.swt.custom.SashForm; >+import org.eclipse.swt.custom.ViewForm; >+import org.eclipse.swt.events.DisposeEvent; >+import org.eclipse.swt.events.DisposeListener; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.layout.FillLayout; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.IEditorSite; >+import org.eclipse.ui.IPropertyListener; >+import org.eclipse.ui.IWorkbenchPart; >+import org.eclipse.ui.PartInitException; >+import org.eclipse.ui.part.MultiEditor; >+import org.eclipse.ui.tests.util.CallHistory; >+ >+/** >+ * Implementation of a TiledEditor. This is the testable version copied from bug >+ * 42641. >+ */ >+public class TiledEditor extends MultiEditor { >+ >+ private CLabel innerEditorTitle[]; >+ >+ public CallHistory callHistory; >+ >+ public TiledEditor() { >+ super(); >+ callHistory = new CallHistory(this); >+ } >+ >+ /** >+ * technically not part of our framework API, but it will mark when the >+ * widgets were disposed. >+ */ >+ public void widgetsDisposed() { >+ callHistory.add("widgetsDisposed"); >+ } >+ >+ /* >+ * @see IWorkbenchPart#createPartControl(Composite) >+ */ >+ public void createPartControl(Composite parent) { >+ callHistory.add("createPartControl"); >+ >+ parent.addDisposeListener(new DisposeListener() { >+ public void widgetDisposed(DisposeEvent e) { >+ widgetsDisposed(); >+ } >+ }); >+ >+ parent = new Composite(parent, SWT.BORDER); >+ >+ parent.setLayout(new FillLayout()); >+ SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL); >+ IEditorPart innerEditors[] = getInnerEditors(); >+ >+ for (int i = 0; i < innerEditors.length; i++) { >+ final IEditorPart e = innerEditors[i]; >+ ViewForm viewForm = new ViewForm(sashForm, SWT.NONE); >+ viewForm.marginWidth = 0; >+ viewForm.marginHeight = 0; >+ >+ createInnerEditorTitle(i, viewForm); >+ >+ Composite content = createInnerPartControl(viewForm, e); >+ >+ viewForm.setContent(content); >+ updateInnerEditorTitle(e, innerEditorTitle[i]); >+ >+ final int index = i; >+ e.addPropertyListener(new IPropertyListener() { >+ public void propertyChanged(Object source, int property) { >+ if (property == IEditorPart.PROP_DIRTY >+ || property == IWorkbenchPart.PROP_TITLE) >+ if (source instanceof IEditorPart) >+ updateInnerEditorTitle((IEditorPart) source, >+ innerEditorTitle[index]); >+ } >+ }); >+ } >+ } >+ >+ /** >+ * Draw the gradient for the specified editor. >+ */ >+ protected void drawGradient(IEditorPart innerEditor, Gradient g) { >+ CLabel label = innerEditorTitle[getIndex(innerEditor)]; >+ if ((label == null) || label.isDisposed()) >+ return; >+ >+ label.setForeground(g.fgColor); >+ label.setBackground(g.bgColors, g.bgPercents); >+ } >+ >+ /* >+ * Create the label for each inner editor. >+ */ >+ protected void createInnerEditorTitle(int index, ViewForm parent) { >+ >+ CLabel titleLabel = new CLabel(parent, SWT.SHADOW_NONE); >+ // hookFocus(titleLabel); >+ titleLabel.setAlignment(SWT.LEFT); >+ titleLabel.setBackground(null, null); >+ parent.setTopLeft(titleLabel); >+ if (innerEditorTitle == null) >+ innerEditorTitle = new CLabel[getInnerEditors().length]; >+ innerEditorTitle[index] = titleLabel; >+ } >+ >+ /* >+ * Update the tab for an editor. This is typically called by a site when the >+ * tab title changes. >+ */ >+ public void updateInnerEditorTitle(IEditorPart editor, CLabel label) { >+ >+ if ((label == null) || label.isDisposed()) >+ return; >+ String title = editor.getTitle(); >+ if (editor.isDirty()) >+ title = "*" + title; //$NON-NLS-1$ >+ label.setText(title); >+ Image image = editor.getTitleImage(); >+ if (image != null) >+ if (!image.equals(label.getImage())) >+ label.setImage(image); >+ label.setToolTipText(editor.getTitleToolTip()); >+ } >+ >+ /* >+ * >+ */ >+ protected int getIndex(IEditorPart editor) { >+ IEditorPart innerEditors[] = getInnerEditors(); >+ for (int i = 0; i < innerEditors.length; i++) { >+ if (innerEditors[i] == editor) >+ return i; >+ } >+ return -1; >+ } >+ >+ // >+ // These are public methods from the parent that are overriden to >+ // add them to the call history. >+ // >+ >+ public Composite createInnerPartControl(Composite parent, IEditorPart e) { >+ callHistory.add("createInnerPartControl"); >+ return super.createInnerPartControl(parent, e); >+ } >+ >+ public void init(IEditorSite site, IEditorInput input) >+ throws PartInitException { >+ callHistory.add("init"); >+ super.init(site, input); >+ } >+ >+ public void setFocus() { >+ callHistory.add("setFocus"); >+ super.setFocus(); >+ } >+ >+ public void updateGradient(IEditorPart editor) { >+ callHistory.add("updateGradient"); >+ super.updateGradient(editor); >+ } >+ >+ public void setInitializationData(IConfigurationElement cfig, >+ String propertyName, Object data) { >+ callHistory.add("setInitializationData"); >+ super.setInitializationData(cfig, propertyName, data); >+ } >+ >+ public void dispose() { >+ callHistory.add("dispose"); >+ super.dispose(); >+ } >+} >Index: data/org.eclipse.newMultiEditor/build.xml >=================================================================== >RCS file: data/org.eclipse.newMultiEditor/build.xml >diff -N data/org.eclipse.newMultiEditor/build.xml >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ data/org.eclipse.newMultiEditor/build.xml 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,29 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!-- ====================================================================== >+ Jun 27, 2005 10:23:13 AM >+ >+ project >+ description >+ >+ pwebster >+ ====================================================================== --> >+<project name="project" default="default"> >+ <description> >+ description >+ </description> >+ >+ <!-- ================================= >+ target: default >+ ================================= --> >+ <target name="default" depends="depends" description="--> description"> >+ >+ </target> >+ >+ <!-- - - - - - - - - - - - - - - - - - >+ target: depends >+ - - - - - - - - - - - - - - - - - --> >+ <target name="depends"> >+ </target> >+ >+</project> >+ >Index: data/org.eclipse.newMultiEditor/test01.txt >=================================================================== >RCS file: data/org.eclipse.newMultiEditor/test01.txt >diff -N data/org.eclipse.newMultiEditor/test01.txt >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ data/org.eclipse.newMultiEditor/test01.txt 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,3 @@ >+test file 01 >+ >+test for MultiEditor >Index: data/org.eclipse.newMultiEditor/test02.txt >=================================================================== >RCS file: data/org.eclipse.newMultiEditor/test02.txt >diff -N data/org.eclipse.newMultiEditor/test02.txt >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ data/org.eclipse.newMultiEditor/test02.txt 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,3 @@ >+test file 02 >+ >+test for MultiEditor >Index: data/org.eclipse.newMultiEditor/test03.etest >=================================================================== >RCS file: data/org.eclipse.newMultiEditor/test03.etest >diff -N data/org.eclipse.newMultiEditor/test03.etest >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ data/org.eclipse.newMultiEditor/test03.etest 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,3 @@ >+test file 03 >+ >+test for MultiEditor >Index: data/org.eclipse.newMultiEditor/test04.properties >=================================================================== >RCS file: data/org.eclipse.newMultiEditor/test04.properties >diff -N data/org.eclipse.newMultiEditor/test04.properties >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ data/org.eclipse.newMultiEditor/test04.properties 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,2 @@ >+org.eclipse.ui.tests.multieditor.good = MultiEditorTest >+org.eclipse.ui.tests.multieditor.bad = TiledEditor
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 96129
:
22644
|
22931
|
23457
|
24032
|
24096
|
24227
|
24358
|
24437
|
25128
|
25262
|
25425
|
25426
|
25620
|
25735
|
25831
|
25832
|
25834
|
25890
|
25923
|
25936
|
25937
|
25990
|
26109
|
26111
|
26121