/******************************************************************************* * Copyright (c) 2013, 2014 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 * Lars Vogel <Lars.Vogel@gmail.com> - Bug 431667, 440893 * Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 450209 *******************************************************************************/ package org.eclipse.e4.core.commands.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.util.HashMap; import java.util.Map; import org.eclipse.core.commands.Category; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.IParameter; import org.eclipse.core.commands.IParameterValues; import org.eclipse.core.commands.ParameterizedCommand; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.e4.core.commands.CommandServiceAddon; import org.eclipse.e4.core.commands.ECommandService; import org.eclipse.e4.core.contexts.ContextInjectionFactory; import org.eclipse.e4.core.contexts.IEclipseContext; import org.junit.After; import org.junit.Before; import org.junit.Test; public class DefineCommandsTest { private static final String TEST_ID2 = "test.id2"; private static final String TEST_ID1 = "test.id1"; private static final String TEST_ID1_WITH_PARAMETERS = "test.id1.with.parameters"; private static final String TEST_CAT1 = "test.cat1"; private IEclipseContext workbenchContext; @Before public void setUp() { IEclipseContext globalContext = TestActivator.getDefault().getGlobalContext(); workbenchContext = globalContext.createChild("workbenchContext"); ContextInjectionFactory.make(CommandServiceAddon.class, workbenchContext); } @After public void tearDown() { workbenchContext.dispose(); } @Test public void testCreateCommands() { ECommandService cs = workbenchContext.get(ECommandService.class); assertNotNull(cs); assertNotNull(cs.defineCategory(TEST_CAT1, "CAT1", null)); Category category = cs.getCategory(TEST_CAT1); assertNotNull("need category", category); assertNotNull("command1", cs.defineCommand(TEST_ID1, "ID1", null, category, null)); assertNotNull("command2", cs.defineCommand(TEST_ID2, "ID2", null, category, null)); Command cmd1 = cs.getCommand(TEST_ID1); assertNotNull("get command1", cmd1); try { assertEquals("ID1", cmd1.getName()); } catch (NotDefinedException e) { fail(e.getMessage()); } assertNotNull("get command2", cs.getCommand(TEST_ID2)); assertNotNull("parameterized command", cs.createCommand(TEST_ID1, null)); } @Test public void testParamizedCommandsSimple() { ECommandService cs = workbenchContext.get(ECommandService.class); IParameter[] parms = new IParameter[1]; parms[0] = new IParameter() { @Override public String getId() { return "viewId"; } @Override public String getName() { return "View Id"; } @Override public IParameterValues getValues() { return null; } @Override public boolean isOptional() { return false; } }; // command needs to be defined Category defineCategory = cs.defineCategory(TEST_CAT1, "CAT1", null); Command command = cs.defineCommand(TEST_ID1_WITH_PARAMETERS, "TEST_ID1_WITH_PARAMETERS", null, defineCategory, parms); Map<String, Object> parameters = new HashMap<>(); parameters.put("viewId", "Testing"); // afterwards it is possible to create a ParameterizedCommand ParameterizedCommand createdParamizedCommand = cs.createCommand(TEST_ID1_WITH_PARAMETERS, parameters); assertNotNull(command); assertNotNull(createdParamizedCommand); Command cmd1 = cs.getCommand(TEST_ID1_WITH_PARAMETERS); assertNotNull("get command1", cmd1); } @Test public void testCreateWithSecondContexts() { IEclipseContext localContext = workbenchContext.createChild(); ECommandService cs = localContext.get(ECommandService.class); assertNotNull(cs); assertNotNull(cs.defineCategory(TEST_CAT1, "CAT1", null)); Category category = cs.getCategory(TEST_CAT1); assertNotNull("need category", category); assertNotNull("command1", cs.defineCommand(TEST_ID1, "ID1", null, category, null)); assertNotNull("command2", cs.defineCommand(TEST_ID2, "ID2", null, category, null)); Command cmd1 = cs.getCommand(TEST_ID1); assertNotNull("get command1", cmd1); try { assertEquals("ID1", cmd1.getName()); } catch (NotDefinedException e) { fail(e.getMessage()); } assertNotNull("get command2", cs.getCommand(TEST_ID2)); } @Test public void testCreateWithTwoContexts() { IEclipseContext localContext = workbenchContext.createChild("Level1"); ECommandService cs = localContext.get(ECommandService.class); assertNotNull(cs); assertNotNull(cs.defineCategory(TEST_CAT1, "CAT1", null)); Category category = cs.getCategory(TEST_CAT1); assertNotNull("need category", category); assertNotNull("command1", cs.defineCommand(TEST_ID1, "ID1", null, category, null)); assertNotNull("command2", cs.defineCommand(TEST_ID2, "ID2", null, category, null)); cs = workbenchContext.get(ECommandService.class); Command cmd1 = cs.getCommand(TEST_ID1); assertNotNull("get command1", cmd1); try { assertEquals("ID1", cmd1.getName()); } catch (NotDefinedException e) { fail(e.getMessage()); } assertNotNull("get command2", cs.getCommand(TEST_ID2)); } }