blob: 6d4faf50136adaeb59c262e12c445c4a8b4e22cf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 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.e4.ui.tests.workbench;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.commands.Category;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.e4.core.commands.CommandServiceAddon;
import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.commands.EHandlerService;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class HandlerTest {
private static final String HELP_COMMAND_ID = "org.eclipse.ui.commands.help";
private static final String HELP_COMMAND1_ID = HELP_COMMAND_ID + "1";
private IEclipseContext appContext;
public static class TestHandler {
boolean ran = false;
boolean canRun;
String rc;
public TestHandler(boolean c, String ret) {
canRun = c;
rc = ret;
}
@CanExecute
public boolean canExecute() {
return canRun;
}
@Execute
public Object execute() {
ran = true;
return rc;
}
}
@Before
public void setUp() throws Exception {
appContext = E4Application.createDefaultContext();
ContextInjectionFactory.make(CommandServiceAddon.class, appContext);
}
@After
public void tearDown() throws Exception {
appContext.dispose();
}
@Test
public void testOneCommand() throws Exception {
defineCommands(appContext);
final ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
final ParameterizedCommand help1Command = getCommand(appContext,
HELP_COMMAND1_ID);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
EHandlerService service = appContext.get(EHandlerService.class);
service.activateHandler(HELP_COMMAND_ID, handler);
ECommandService cmdService = appContext.get(ECommandService.class);
Command command = cmdService.getCommand(HELP_COMMAND_ID);
assertEquals(HELP_COMMAND_ID, command.getId());
assertEquals(HELP_COMMAND_ID, service.executeHandler(helpCommand));
assertTrue(handler.ran);
assertNull(service.executeHandler(help1Command));
}
@Test
public void testTwoCommands() throws Exception {
defineCommands(appContext);
final ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
final ParameterizedCommand help1Command = getCommand(appContext,
HELP_COMMAND1_ID);
EHandlerService service = appContext.get(EHandlerService.class);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
service.activateHandler(HELP_COMMAND_ID, handler);
TestHandler handler1 = new TestHandler(false, HELP_COMMAND1_ID);
service.activateHandler(HELP_COMMAND1_ID, handler1);
assertEquals(HELP_COMMAND_ID, service.executeHandler(helpCommand));
assertNull(service.executeHandler(help1Command));
assertFalse(handler1.ran);
handler1.canRun = true;
assertEquals(HELP_COMMAND1_ID, service.executeHandler(help1Command));
assertTrue(handler1.ran);
}
@Test
public void testTwoHandlers() throws Exception {
defineCommands(appContext);
ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
EHandlerService service = appContext.get(EHandlerService.class);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
service.activateHandler(HELP_COMMAND_ID, handler);
IEclipseContext window = appContext.createChild("windowContext");
window.activate();
EHandlerService windowService = window.get(EHandlerService.class);
String windowRC = HELP_COMMAND_ID + ".window";
TestHandler windowHandler = new TestHandler(false, windowRC);
windowService.activateHandler(HELP_COMMAND_ID, windowHandler);
assertNull(service.executeHandler(helpCommand));
assertFalse(windowHandler.ran);
assertFalse(handler.ran);
windowHandler.canRun = true;
assertEquals(windowRC, service.executeHandler(helpCommand));
assertTrue(windowHandler.ran);
assertFalse(handler.ran);
}
/**
* @param appContext
* @param commandId
* @return
*/
private ParameterizedCommand getCommand(IEclipseContext appContext,
String commandId) {
ECommandService cs = appContext.get(ECommandService.class);
final Command cmd = cs.getCommand(commandId);
return new ParameterizedCommand(cmd, null);
}
@Test
public void testCanExecute() throws Exception {
defineCommands(appContext);
final ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
EHandlerService service = appContext.get(EHandlerService.class);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
service.activateHandler(HELP_COMMAND_ID, handler);
IEclipseContext window = appContext.createChild("windowContext");
window.activate();
EHandlerService windowService = window.get(EHandlerService.class);
String windowRC = HELP_COMMAND_ID + ".window";
TestHandler windowHandler = new TestHandler(false, windowRC);
windowService.activateHandler(HELP_COMMAND_ID, windowHandler);
assertFalse(windowService.canExecute(helpCommand));
windowHandler.canRun = true;
assertTrue(windowService.canExecute(helpCommand));
windowHandler.canRun = false;
assertFalse(windowService.canExecute(helpCommand));
windowService.deactivateHandler(HELP_COMMAND_ID, windowHandler);
assertTrue(windowService.canExecute(helpCommand));
}
@Test
public void testThreeContexts() throws Exception {
defineCommands(appContext);
final ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
EHandlerService service = appContext.get(EHandlerService.class);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
service.activateHandler(HELP_COMMAND_ID, handler);
IEclipseContext window = appContext.createChild("windowContext");
window.activate();
EHandlerService windowService = window.get(EHandlerService.class);
String windowRC = HELP_COMMAND_ID + ".window";
TestHandler windowHandler = new TestHandler(true, windowRC);
windowService.activateHandler(HELP_COMMAND_ID, windowHandler);
assertEquals(windowRC, service.executeHandler(helpCommand));
IEclipseContext dialog = appContext.createChild("dialogContext");
dialog.activate();
assertEquals(HELP_COMMAND_ID, service.executeHandler(helpCommand));
window.activate();
assertEquals(windowRC, service.executeHandler(helpCommand));
}
@Test
public void testDifferentExecutionContexts() throws Exception {
defineCommands(appContext);
final ParameterizedCommand helpCommand = getCommand(appContext,
HELP_COMMAND_ID);
EHandlerService service = appContext.get(EHandlerService.class);
TestHandler handler = new TestHandler(true, HELP_COMMAND_ID);
service.activateHandler(HELP_COMMAND_ID, handler);
IEclipseContext window = appContext.createChild("windowContext");
window.activate();
EHandlerService windowService = window.get(EHandlerService.class);
String windowRC = HELP_COMMAND_ID + ".window";
TestHandler windowHandler = new TestHandler(true, windowRC);
windowService.activateHandler(HELP_COMMAND_ID, windowHandler);
assertEquals(windowRC, service.executeHandler(helpCommand));
assertEquals(windowRC, windowService.executeHandler(helpCommand));
IEclipseContext dialog = appContext.createChild("dialogContext");
EHandlerService dialogService = dialog.get(EHandlerService.class);
assertEquals(HELP_COMMAND_ID, dialogService.executeHandler(helpCommand));
}
private void defineCommands(IEclipseContext appContext) {
ECommandService cmdService = (ECommandService) appContext
.get(ECommandService.class.getName());
Category category = cmdService.defineCategory("cat." + HELP_COMMAND_ID,
"Help Category", null);
cmdService.defineCommand(HELP_COMMAND_ID, "Help Command", null,
category, null);
cmdService.defineCommand(HELP_COMMAND1_ID, "Help 1 Command", null,
category, null);
}
}