| /******************************************************************************* |
| * 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.commands; |
| |
| import java.util.Map; |
| |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.commands.AbstractHandler; |
| import org.eclipse.ui.commands.ExecutionException; |
| import org.eclipse.ui.commands.HandlerSubmission; |
| import org.eclipse.ui.commands.ICommand; |
| import org.eclipse.ui.commands.IHandler; |
| import org.eclipse.ui.commands.IWorkbenchCommandSupport; |
| import org.eclipse.ui.commands.NotHandledException; |
| import org.eclipse.ui.commands.Priority; |
| import org.eclipse.ui.tests.harness.util.UITestCase; |
| |
| /** |
| * Tests that dialogs will inherit the handlers from the workbench window, if |
| * none is defined for the dialog itself. It tests all of the various |
| * combinations of this situation. |
| * |
| * @since 3.0 |
| */ |
| public final class Bug66182Test extends UITestCase { |
| |
| /** |
| * Constructor for Bug66182Test. |
| * |
| * @param name |
| * The name of the test |
| */ |
| public Bug66182Test(final String name) { |
| super(name); |
| } |
| |
| /** |
| * Tests that the dialog handlers will take priority. The set-up is a |
| * workbench window with a handler registered for the command to test. Then |
| * there is a dialog opened with a handler for the same command. The test is |
| * to see that the dialog's handler gets priority. |
| * |
| * @throws ExecutionException |
| * This should never happen, and indicates a problem with the |
| * test. |
| * @throws NotHandledException |
| * Indicates that no handler was found where one should have |
| * been found. |
| */ |
| public final void testDialogHandlers() throws ExecutionException, |
| NotHandledException { |
| // Open a test window. |
| // final IWorkbenchWindow window = openTestWindow(); |
| // |
| // // Define a handler for some random command identifier. |
| // final Object windowResult = new Object(); |
| // final IHandler windowHandler = new AbstractHandler() { |
| // |
| // public Object execute(Map parameterValuesByName) |
| // throws ExecutionException { |
| // // Do nothing. |
| // return windowResult; |
| // } |
| // }; |
| // final IWorkbenchCommandSupport commandSupport = fWorkbench |
| // .getCommandSupport(); |
| // final String commandId = "org.eclipse.ui.tests.Bug66182"; |
| // final Shell windowShell = window.getShell(); |
| // final HandlerSubmission windowSubmission = new HandlerSubmission(null, |
| // windowShell, null, commandId, windowHandler, Priority.MEDIUM); |
| // commandSupport.addHandlerSubmission(windowSubmission); |
| // |
| // // Open a dialog. |
| // final Shell dialogShell = new Shell(windowShell); |
| // dialogShell.pack(); |
| // dialogShell.open(); |
| // final Display display = dialogShell.getDisplay(); |
| // while (display.readAndDispatch()) |
| // ; |
| // |
| // /* |
| // * Define a handler for the same command identifier, but for this |
| // * dialog. |
| // */ |
| // final Object dialogResult = new Object(); |
| // final IHandler dialogHandler = new AbstractHandler() { |
| // |
| // public Object execute(Map parameterValuesByName) |
| // throws ExecutionException { |
| // // Do nothing. |
| // return dialogResult; |
| // } |
| // }; |
| // final HandlerSubmission dialogSubmission = new HandlerSubmission(null, |
| // dialogShell, null, commandId, dialogHandler, Priority.MEDIUM); |
| // commandSupport.addHandlerSubmission(dialogSubmission); |
| // |
| // // Check to see which handler is the right handler. |
| // final ICommand command = commandSupport.getCommandManager().getCommand( |
| // commandId); |
| // assertSame( |
| // "The active shell must be the dialog. If you are activating other shells while this test is running, then this test will fail", |
| // dialogShell, display.getActiveShell()); |
| // assertSame( |
| // "The active workbench window must be the window created in this test. If you are activating other workbench windows, then this test will fail", |
| // windowShell, fWorkbench.getActiveWorkbenchWindow().getShell()); |
| // final Object result = command.execute(Collections.EMPTY_MAP); |
| // assertSame( |
| // "The dialog handler was not chosen when both a window and dialog handler were defined.", |
| // dialogResult, result); |
| // |
| // // Close the dialog and let the event loop spin. |
| // commandSupport.removeHandlerSubmission(windowSubmission); |
| // commandSupport.removeHandlerSubmission(dialogSubmission); |
| // dialogShell.close(); |
| // while (display.readAndDispatch()) |
| // ; |
| } |
| |
| /** |
| * Tests that, in the absence of a dialog handler, that the window handler |
| * will be given a chance to take over. The set-up is a workbench window |
| * with a handler registered for the command to test. Then there is a dialog |
| * opened, but with no handler. The test is to see that the window's handler |
| * is active. |
| * |
| * @throws ExecutionException |
| * This should never happen, and indicates a problem with the |
| * test. |
| * @throws NotHandledException |
| * Indicates that no handler was found where one should have |
| * been found. |
| */ |
| public final void testFallbackToWindow() throws ExecutionException, |
| NotHandledException { |
| // Open a test window. |
| // final IWorkbenchWindow window = openTestWindow(); |
| // |
| // // Define a handler for some random command identifier. |
| // final Object windowResult = new Object(); |
| // final IHandler windowHandler = new AbstractHandler() { |
| // |
| // public Object execute(Map parameterValuesByName) |
| // throws ExecutionException { |
| // // Do nothing. |
| // return windowResult; |
| // } |
| // }; |
| // final IWorkbenchCommandSupport commandSupport = fWorkbench |
| // .getCommandSupport(); |
| // final String commandId = "org.eclipse.ui.tests.Bug66182"; |
| // final Shell windowShell = window.getShell(); |
| // final HandlerSubmission windowSubmission = new HandlerSubmission(null, |
| // windowShell, null, commandId, windowHandler, Priority.MEDIUM); |
| // commandSupport.addHandlerSubmission(windowSubmission); |
| // |
| // // Open a dialog. |
| // final Shell dialogShell = new Shell(windowShell); |
| // final IWorkbenchContextSupport contextSupport = fWorkbench |
| // .getContextSupport(); |
| // contextSupport.registerShell(dialogShell, |
| // IWorkbenchContextSupport.TYPE_WINDOW); |
| // dialogShell.pack(); |
| // dialogShell.open(); |
| // final Display display = dialogShell.getDisplay(); |
| // while (display.readAndDispatch()) |
| // ; |
| // |
| // // Check to see which handler is the right handler. |
| // final ICommand command = commandSupport.getCommandManager().getCommand( |
| // commandId); |
| // assertSame( |
| // "The active shell must be the dialog. If you are activating other shells while this test is running, then this test will fail", |
| // dialogShell, display.getActiveShell()); |
| // assertSame( |
| // "The active workbench window must be the window created in this test. If you are activating other workbench windows, then this test will fail", |
| // windowShell, fWorkbench.getActiveWorkbenchWindow().getShell()); |
| // final Object result = command.execute(new HashMap()); |
| // assertSame( |
| // "The window handler was not chosen when both a dialog was open with no handler, but the active workbench window did have a handler.", |
| // windowResult, result); |
| // |
| // // Close the dialog and let the event loop spin. |
| // commandSupport.removeHandlerSubmission(windowSubmission); |
| // contextSupport.unregisterShell(dialogShell); |
| // dialogShell.close(); |
| // while (display.readAndDispatch()) |
| // ; |
| } |
| |
| /** |
| * Tests that if a dialog is open, that the application will not fall back |
| * to the dialog. The set-up is a workbench window with a handler registered |
| * for the command to test. Then there is a dialog opened, but with no |
| * handler. The test is to see that no handler is active. |
| * |
| * @throws ExecutionException |
| * This should never happen, and indicates a problem with the |
| * test. |
| * @throws NotHandledException |
| * Indicates that no handler was found where one should have |
| * been found. |
| */ |
| public final void testFallbackToWindowBlockedByDialog() |
| throws ExecutionException, NotHandledException { |
| // Open a test window. |
| final IWorkbenchWindow window = openTestWindow(); |
| |
| // Define a handler for some random command identifier. |
| final Object windowResult = new Object(); |
| final IHandler windowHandler = new AbstractHandler() { |
| |
| public Object execute(Map parameterValuesByName) |
| throws ExecutionException { |
| // Do nothing. |
| return windowResult; |
| } |
| }; |
| final IWorkbenchCommandSupport commandSupport = fWorkbench |
| .getCommandSupport(); |
| final String commandId = "org.eclipse.ui.tests.Bug66182"; |
| final Shell windowShell = window.getShell(); |
| final HandlerSubmission windowSubmission = new HandlerSubmission(null, |
| windowShell, null, commandId, windowHandler, Priority.MEDIUM); |
| commandSupport.addHandlerSubmission(windowSubmission); |
| |
| // Open a dialog. |
| final Shell dialogShell = new Shell(windowShell); |
| dialogShell.pack(); |
| dialogShell.open(); |
| final Display display = dialogShell.getDisplay(); |
| while (display.readAndDispatch()) |
| ; |
| |
| // Check to see which handler is the right handler. |
| final ICommand command = commandSupport.getCommandManager().getCommand( |
| commandId); |
| assertSame( |
| "The active shell must be the dialog. If you are activating other shells while this test is running, then this test will fail", |
| dialogShell, display.getActiveShell()); |
| assertSame( |
| "The active workbench window must be the window created in this test. If you are activating other workbench windows, then this test will fail", |
| windowShell, fWorkbench.getActiveWorkbenchWindow().getShell()); |
| assertTrue( |
| "When a dialog is open, it should not fall back to the active workbench window.", |
| !command.isHandled()); |
| |
| // Close the dialog and let the event loop spin. |
| commandSupport.removeHandlerSubmission(windowSubmission); |
| dialogShell.close(); |
| while (display.readAndDispatch()) |
| ; |
| } |
| |
| /** |
| * Tests that if the workbench window is the active shell, that its handlers |
| * will take priority. The scenario has two handlers defined: one for the |
| * workbench window, and one for a dialog that is not open. The workbench |
| * window handler should be the active handler. |
| * |
| * @throws ExecutionException |
| * This should never happen, and indicates a problem with the |
| * test. |
| * @throws NotHandledException |
| * Indicates that no handler was found where one should have |
| * been found. |
| */ |
| public final void testWindow() throws ExecutionException, |
| NotHandledException { |
| // Open a test window. |
| // final IWorkbenchWindow window = openTestWindow(); |
| // |
| // // Define a handler for some random command identifier. |
| // final Object windowResult = new Object(); |
| // final IHandler windowHandler = new AbstractHandler() { |
| // |
| // public Object execute(Map parameterValuesByName) |
| // throws ExecutionException { |
| // // Do nothing. |
| // return windowResult; |
| // } |
| // }; |
| // final IWorkbenchCommandSupport commandSupport = fWorkbench |
| // .getCommandSupport(); |
| // final String commandId = "org.eclipse.ui.tests.Bug66182"; |
| // final Shell windowShell = window.getShell(); |
| // final HandlerSubmission windowSubmission = new HandlerSubmission(null, |
| // windowShell, null, commandId, windowHandler, Priority.MEDIUM); |
| // commandSupport.addHandlerSubmission(windowSubmission); |
| // |
| // // Create a dialog. |
| // final Shell dialogShell = new Shell(windowShell); |
| // |
| // /* |
| // * Define a handler for the same command identifier, but for this |
| // * dialog. |
| // */ |
| // final Object dialogResult = new Object(); |
| // final IHandler dialogHandler = new AbstractHandler() { |
| // |
| // public Object execute(Map parameterValuesByName) |
| // throws ExecutionException { |
| // // Do nothing. |
| // return dialogResult; |
| // } |
| // }; |
| // final HandlerSubmission dialogSubmission = new HandlerSubmission(null, |
| // dialogShell, null, commandId, dialogHandler, Priority.MEDIUM); |
| // commandSupport.addHandlerSubmission(dialogSubmission); |
| // |
| // // Check to see which handler is the right handler. |
| // final ICommand command = commandSupport.getCommandManager().getCommand( |
| // commandId); |
| // assertSame( |
| // "The active shell must be the dialog. If you are activating other shells while this test is running, then this test will fail", |
| // windowShell, fWorkbench.getDisplay().getActiveShell()); |
| // assertSame( |
| // "The active workbench window must be the window created in this test. If you are activating other workbench windows, then this test will fail", |
| // windowShell, fWorkbench.getActiveWorkbenchWindow().getShell()); |
| // final Object result = command.execute(new HashMap()); |
| // assertSame( |
| // "The window handler was not chosen when both a dialog was open with no handler, but the active workbench window did have a handler.", |
| // windowResult, result); |
| // |
| // // Close the dialog and let the event loop spin. |
| // commandSupport.removeHandlerSubmission(windowSubmission); |
| // dialogShell.dispose(); |
| } |
| } |