blob: a97189f71fff1dba303407444bae637bab4a5b01 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 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.keys;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.jface.bindings.Binding;
import org.eclipse.jface.bindings.keys.KeyBinding;
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.internal.keys.model.BindingElement;
import org.eclipse.ui.internal.keys.model.BindingModel;
import org.eclipse.ui.internal.keys.model.CommonModel;
import org.eclipse.ui.internal.keys.model.ConflictModel;
import org.eclipse.ui.internal.keys.model.ContextElement;
import org.eclipse.ui.internal.keys.model.ContextModel;
import org.eclipse.ui.internal.keys.model.KeyController;
import org.eclipse.ui.internal.keys.model.ModelElement;
import org.eclipse.ui.internal.keys.model.SchemeElement;
import org.eclipse.ui.internal.keys.model.SchemeModel;
import org.eclipse.ui.keys.IBindingService;
import org.eclipse.ui.tests.harness.util.UITestCase;
/**
* @since 3.4
*
*/
public class KeysPreferenceModelTest extends UITestCase {
private static final String ID_QUICK_SWITCH = "org.eclipse.ui.window.openEditorDropDown";
private static final String SCHEME_EMACS_ID = "org.eclipse.ui.emacsAcceleratorConfiguration";
private static final String ID_QUICK_ACCESS = "org.eclipse.ui.window.quickAccess";
private static final String ID_ACTIVATE_EDITOR = "org.eclipse.ui.window.activateEditor";
private static final String ID_ABOUT = "org.eclipse.ui.help.aboutAction";
private static final String ID_CMD_CONFLICT1 = "org.eclipse.ui.tests.keyModel.conflict1";
private static final String ID_CMD_CONFLICT2 = "org.eclipse.ui.tests.keyModel.conflict2";
private static final String ID_CMD_CONFLICT3 = "org.eclipse.ui.tests.keyModel.conflict3";
private static final String ID_CMD_CONFLICT4 = "org.eclipse.ui.tests.keyModel.conflict4";
private static final String ID_CMD_EMACS1 = "org.eclipse.ui.tests.keyModel.emacs1";
/**
* @param testName
*/
public KeysPreferenceModelTest(String testName) {
super(testName);
}
public void testDefaults() throws Exception {
KeyController controller = new KeyController();
controller.init(getWorkbench());
ContextModel cm = controller.getContextModel();
boolean foundWindow = false;
boolean foundDialog = false;
Iterator i = cm.getContexts().iterator();
while (i.hasNext()) {
ContextElement elem = (ContextElement) i.next();
if (elem.getId().equals(IContextService.CONTEXT_ID_WINDOW)) {
foundWindow = true;
} else if (elem.getId().equals(IContextService.CONTEXT_ID_DIALOG)) {
foundDialog = true;
}
}
assertTrue("No window context", foundWindow);
assertTrue("No dialog context", foundDialog);
assertNull(cm.getSelectedElement());
assertNotNull(cm.getContextIdToElement().get(
IContextService.CONTEXT_ID_DIALOG_AND_WINDOW));
SchemeModel sm = controller.getSchemeModel();
boolean foundDefault = false;
i = sm.getSchemes().iterator();
while (i.hasNext()) {
SchemeElement e = (SchemeElement) i.next();
if (e.getId().equals(
IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
foundDefault = true;
}
}
assertTrue("No default scheme", foundDefault);
assertEquals(IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID, sm
.getSelectedElement().getId());
ConflictModel cf = controller.getConflictModel();
assertNull("There should not be any conflicts", cf.getConflicts());
assertNull(cf.getSelectedElement());
BindingModel bm = controller.getBindingModel();
BindingElement quickAccess = getBindingElement(bm, ID_QUICK_ACCESS);
assertNotNull(quickAccess);
assertNull(bm.getSelectedElement());
}
public void testContexts() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
ContextModel cm = controller.getContextModel();
ContextElement dialog = (ContextElement) cm.getContextIdToElement()
.get(IContextService.CONTEXT_ID_DIALOG);
assertNull(cm.getSelectedElement());
assertNotNull(dialog);
final ArrayList events = new ArrayList();
// test setup vars
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
cm.setSelectedElement(dialog);
assertTrue(cm.getSelectedElement() == dialog);
assertEquals(1, events.size());
ContextElement window = (ContextElement) cm.getContextIdToElement()
.get(IContextService.CONTEXT_ID_WINDOW);
assertNotNull(window);
cm.setSelectedElement(window);
assertEquals(2, events.size());
cm.setSelectedElement(null);
assertEquals(3, events.size());
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, dialog),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, dialog, window),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, window, null) };
assertChanges(expected, events);
}
public void testBindings() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
ContextModel cm = controller.getContextModel();
BindingModel bm = controller.getBindingModel();
BindingElement activateEditor = getBindingElement(bm,
ID_ACTIVATE_EDITOR);
assertNotNull(activateEditor);
assertNotNull(activateEditor.getContext());
assertNull(bm.getSelectedElement());
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
bm.setSelectedElement(activateEditor);
assertTrue(bm.getSelectedElement() == activateEditor);
assertNotNull(cm.getSelectedElement());
assertTrue(cm.getSelectedElement().getId().equals(
activateEditor.getContext().getId()));
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getConflictModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor
.getContext()),
new PropertyChangeEvent(controller.getBindingModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor), };
assertChanges(expected, events);
events.clear();
bm.setSelectedElement(null);
assertNull(bm.getSelectedElement());
assertNull(cm.getSelectedElement());
expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getConflictModel(),
CommonModel.PROP_SELECTED_ELEMENT, activateEditor, null),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, activateEditor
.getContext(), null),
new PropertyChangeEvent(controller.getBindingModel(),
CommonModel.PROP_SELECTED_ELEMENT, activateEditor, null) };
assertChanges(expected, events);
}
public void testBasicConflicts() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ConflictModel cf = controller.getConflictModel();
final BindingModel bm = controller.getBindingModel();
final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
assertNotNull(conflict1);
assertEquals(Boolean.TRUE, conflict1.getConflict());
final BindingElement activateEditor = getBindingElement(bm,
ID_ACTIVATE_EDITOR);
assertNotNull(activateEditor);
assertEquals(Boolean.FALSE, activateEditor.getConflict());
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
bm.setSelectedElement(conflict1);
assertEquals(conflict1, bm.getSelectedElement());
assertEquals(conflict1, cf.getSelectedElement());
final Collection conflicts = cf.getConflicts();
assertEquals(3, conflicts.size());
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getConflictModel(),
ConflictModel.PROP_CONFLICTS, null, conflicts),
new PropertyChangeEvent(controller.getConflictModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, conflict1),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, conflict1
.getContext()),
new PropertyChangeEvent(controller.getBindingModel(),
CommonModel.PROP_SELECTED_ELEMENT, null, conflict1) };
assertChanges(expected, events);
events.clear();
bm.setSelectedElement(activateEditor);
assertEquals(activateEditor, bm.getSelectedElement());
expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getConflictModel(),
ConflictModel.PROP_CONFLICTS, conflicts, null),
new PropertyChangeEvent(controller.getConflictModel(),
CommonModel.PROP_SELECTED_ELEMENT, conflict1,
activateEditor),
new PropertyChangeEvent(controller.getContextModel(),
CommonModel.PROP_SELECTED_ELEMENT, conflict1
.getContext(), activateEditor.getContext()),
new PropertyChangeEvent(controller.getBindingModel(),
CommonModel.PROP_SELECTED_ELEMENT, conflict1,
activateEditor) };
assertChanges(expected, events);
}
public void testConflictSelection() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ConflictModel cf = controller.getConflictModel();
final BindingModel bm = controller.getBindingModel();
final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
final BindingElement conflict3 = getBindingElement(bm, ID_CMD_CONFLICT3);
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
bm.setSelectedElement(conflict1);
assertEquals(conflict1, bm.getSelectedElement());
assertEquals(conflict1, cf.getSelectedElement());
assertEquals(4, events.size());
events.clear();
cf.setSelectedElement(conflict3);
assertEquals(conflict3, bm.getSelectedElement());
assertEquals(conflict3, cf.getSelectedElement());
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(controller.getBindingModel(),
CommonModel.PROP_SELECTED_ELEMENT, conflict1, conflict3),
new PropertyChangeEvent(controller.getConflictModel(),
CommonModel.PROP_SELECTED_ELEMENT, conflict1, conflict3) };
assertChanges(expected, events);
}
public void testCreateConflict() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ConflictModel cf = controller.getConflictModel();
final BindingModel bm = controller.getBindingModel();
BindingElement about = getBindingElement(bm, ID_ABOUT);
assertNotNull(about);
assertNull(about.getTrigger());
BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
assertNotNull(active);
assertNotNull(active.getTrigger());
assertEquals(Boolean.FALSE, active.getConflict());
bm.setSelectedElement(about);
about.setTrigger(KeySequence.getInstance("F12"));
assertEquals(Boolean.TRUE, about.getConflict());
assertEquals(Boolean.TRUE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
about.setTrigger(KeySequence.getInstance("F12 A"));
assertEquals(Boolean.FALSE, about.getConflict());
assertEquals(Boolean.FALSE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
assertNull(cf.getConflicts());
about.setTrigger(null);
assertEquals(Boolean.FALSE, about.getConflict());
assertEquals(Boolean.FALSE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
assertNull(cf.getConflicts());
}
public void testConflictRemove() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ConflictModel cf = controller.getConflictModel();
final BindingModel bm = controller.getBindingModel();
BindingElement about = getBindingElement(bm, ID_ABOUT);
assertNotNull(about);
assertNull(about.getTrigger());
BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
assertNotNull(active);
assertNotNull(active.getTrigger());
assertEquals(Boolean.FALSE, active.getConflict());
bm.setSelectedElement(about);
about.setTrigger(KeySequence.getInstance("F12"));
assertEquals(Boolean.TRUE, about.getConflict());
assertEquals(Boolean.TRUE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
bm.remove();
assertEquals(Boolean.FALSE, about.getConflict());
assertEquals(Boolean.FALSE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
assertNull(cf.getConflicts());
}
public void testConflictRestore() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ConflictModel cf = controller.getConflictModel();
final BindingModel bm = controller.getBindingModel();
BindingElement about = getBindingElement(bm, ID_ABOUT);
assertNotNull(about);
assertNull(about.getTrigger());
BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
assertNotNull(active);
assertNotNull(active.getTrigger());
assertEquals(Boolean.FALSE, active.getConflict());
bm.setSelectedElement(about);
about.setTrigger(KeySequence.getInstance("F12"));
assertEquals(Boolean.TRUE, about.getConflict());
assertEquals(Boolean.TRUE, active.getConflict());
assertEquals(about, cf.getSelectedElement());
bm.restoreBinding(controller.getContextModel());
active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
about = getBindingElement(bm, ID_ABOUT);
assertEquals(Boolean.FALSE, about.getConflict());
assertEquals(Boolean.FALSE, active.getConflict());
assertEquals(bm.getSelectedElement(), cf.getSelectedElement());
assertNull(cf.getConflicts());
}
public void testUpdateContext() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ContextModel cm = controller.getContextModel();
final ContextElement dialog = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
final ContextElement window = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
final BindingModel bm = controller.getBindingModel();
final BindingElement conflict2 = getBindingElement(bm, ID_CMD_CONFLICT2);
final Binding c2model = (Binding) conflict2.getModelObject();
assertEquals(dialog, conflict2.getContext());
bm.setSelectedElement(conflict2);
assertEquals(dialog, cm.getSelectedElement());
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
cm.setSelectedElement(window);
assertEquals(window, ((BindingElement) bm.getSelectedElement())
.getContext());
assertNotSame(c2model, conflict2.getModelObject());
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(conflict2,
BindingElement.PROP_CONFLICT, Boolean.TRUE,
Boolean.FALSE),
new PropertyChangeEvent(conflict2, BindingElement.PROP_CONTEXT,
dialog, window),
new PropertyChangeEvent(conflict2,
BindingElement.PROP_USER_DELTA, new Integer(
Binding.SYSTEM), new Integer(Binding.USER)),
new PropertyChangeEvent(conflict2,
ModelElement.PROP_MODEL_OBJECT, c2model, conflict2
.getModelObject()),
new PropertyChangeEvent(cm, CommonModel.PROP_SELECTED_ELEMENT,
dialog, window), };
assertChanges(expected, events);
}
public void testUpdateKeySequence() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ContextModel cm = controller.getContextModel();
final ContextElement dialog = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
final BindingModel bm = controller.getBindingModel();
final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
final BindingElement conflict2 = getBindingElement(bm, ID_CMD_CONFLICT2);
final BindingElement conflict3 = getBindingElement(bm, ID_CMD_CONFLICT3);
final Binding c2model = (Binding) conflict2.getModelObject();
final Binding c3model = (Binding) conflict3.getModelObject();
final ParameterizedCommand c3parameterized = c3model
.getParameterizedCommand();
assertEquals(dialog, conflict2.getContext());
assertTrue(c2model instanceof KeyBinding);
bm.setSelectedElement(conflict2);
assertEquals(dialog, cm.getSelectedElement());
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
KeySequence oldKeySequence = (KeySequence) conflict2.getTrigger();
KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
Object bindingConflict1 = conflict1.getModelObject();
conflict2.setTrigger(ctrl5);
ConflictModel conflictModel = controller.getConflictModel();
ContextModel contextModel = controller.getContextModel();
ArrayList oldValue = new ArrayList();
oldValue.add(conflict3);
assertEquals(dialog, ((BindingElement) bm.getSelectedElement())
.getContext());
assertTrue(conflict2.getModelObject() instanceof KeyBinding);
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(conflict2,
BindingElement.PROP_CONFLICT, Boolean.TRUE,
Boolean.FALSE),
new PropertyChangeEvent(conflict2,
BindingElement.PROP_USER_DELTA, new Integer(
Binding.SYSTEM), new Integer(Binding.USER)),
new PropertyChangeEvent(controller.getConflictModel(),
ConflictModel.PROP_CONFLICTS_REMOVE, null, conflict2),
new PropertyChangeEvent(conflict2,
ModelElement.PROP_MODEL_OBJECT, c2model, conflict2
.getModelObject()),
new PropertyChangeEvent(conflict1,
BindingElement.PROP_CONFLICT, Boolean.TRUE,
Boolean.FALSE),
new PropertyChangeEvent(
conflict1,
BindingElement.PROP_CONTEXT,
((BindingElement) bm.getSelectedElement()).getContext(),
null),
new PropertyChangeEvent(conflictModel,
ConflictModel.PROP_CONFLICTS_REMOVE, null, conflict1),
new PropertyChangeEvent(conflict3,
BindingElement.PROP_CONFLICT, Boolean.TRUE,
Boolean.FALSE),
new PropertyChangeEvent(conflictModel,
ConflictModel.PROP_CONFLICTS, oldValue, null),
new PropertyChangeEvent(contextModel,
CommonModel.PROP_SELECTED_ELEMENT, dialog, null),
new PropertyChangeEvent(conflict1,
ModelElement.PROP_MODEL_OBJECT, bindingConflict1,
conflict1.getModelObject()),
new PropertyChangeEvent(conflict1, BindingElement.PROP_TRIGGER,
oldKeySequence, null),
new PropertyChangeEvent(conflict3, BindingElement.PROP_CONTEXT,
dialog, null),
new PropertyChangeEvent(conflict3,
ModelElement.PROP_MODEL_OBJECT, c3model,
c3parameterized),
new PropertyChangeEvent(conflict3,
BindingElement.PROP_TRIGGER, oldKeySequence, null),
new PropertyChangeEvent(bm,
BindingModel.PROP_CONFLICT_ELEMENT_MAP, null, conflict3),
new PropertyChangeEvent(conflict2, BindingElement.PROP_TRIGGER,
oldKeySequence, ctrl5), };
assertChanges(expected, events);
}
public void testCreateKeyBinding() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ContextModel cm = controller.getContextModel();
final ContextElement window = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
final BindingModel bm = controller.getBindingModel();
final BindingElement conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
assertNull(conflict4.getContext());
Object c4model = conflict4.getModelObject();
assertTrue(c4model instanceof ParameterizedCommand);
bm.setSelectedElement(conflict4);
assertNull(cm.getSelectedElement());
// test setup vars
final ArrayList events = new ArrayList();
controller.addPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
events.add(event);
}
});
KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
conflict4.setTrigger(ctrl5);
assertEquals(window, ((BindingElement) bm.getSelectedElement())
.getContext());
assertTrue(conflict4.getModelObject() instanceof KeyBinding);
assertEquals(cm.getSelectedElement(), conflict4.getContext());
PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
new PropertyChangeEvent(conflict4, BindingElement.PROP_CONTEXT,
null, window),
new PropertyChangeEvent(conflict4,
BindingElement.PROP_USER_DELTA, new Integer(
Binding.SYSTEM), new Integer(Binding.USER)),
new PropertyChangeEvent(cm, CommonModel.PROP_SELECTED_ELEMENT,
null, conflict4.getContext()),
new PropertyChangeEvent(conflict4,
ModelElement.PROP_MODEL_OBJECT, c4model, conflict4
.getModelObject()),
new PropertyChangeEvent(conflict4, BindingElement.PROP_TRIGGER,
null, ctrl5), };
assertChanges(expected, events);
}
public void testChangeSchemes() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
SchemeModel sm = controller.getSchemeModel();
SchemeElement emacsScheme = null;
Iterator i = sm.getSchemes().iterator();
while (i.hasNext()) {
SchemeElement e = (SchemeElement) i.next();
if (e.getId().equals(SCHEME_EMACS_ID)) {
emacsScheme = e;
}
}
assertNotNull(emacsScheme);
BindingModel bm = controller.getBindingModel();
BindingElement quickSwitch = null;
int quickCount = 0;
i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(ID_QUICK_SWITCH)) {
quickSwitch = e;
quickCount++;
}
}
assertNotNull(quickSwitch);
assertEquals(1, quickCount);
sm.setSelectedElement(emacsScheme);
i = bm.getBindings().iterator();
ArrayList quick2 = new ArrayList();
boolean foundOriginal = false;
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(ID_QUICK_SWITCH)) {
quick2.add(e);
if (e == quickSwitch) {
foundOriginal = true;
}
}
}
assertEquals(2, quick2.size());
assertTrue(foundOriginal);
}
public void testChangeSchemesTwice() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
SchemeModel sm = controller.getSchemeModel();
SchemeElement emacsScheme = null;
SchemeElement defaultScheme = null;
Iterator i = sm.getSchemes().iterator();
while (i.hasNext()) {
SchemeElement e = (SchemeElement) i.next();
if (e.getId().equals(SCHEME_EMACS_ID)) {
emacsScheme = e;
} else if (e.getId().equals(
IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
defaultScheme = e;
}
}
assertNotNull(emacsScheme);
assertNotNull(defaultScheme);
BindingModel bm = controller.getBindingModel();
BindingElement quickSwitch = null;
int quickCount = 0;
i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(ID_QUICK_SWITCH)) {
quickSwitch = e;
quickCount++;
}
}
assertNotNull(quickSwitch);
assertEquals(1, quickCount);
sm.setSelectedElement(emacsScheme);
i = bm.getBindings().iterator();
ArrayList quick2 = new ArrayList();
boolean foundOriginal = false;
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(ID_QUICK_SWITCH)) {
quick2.add(e);
if (e == quickSwitch) {
foundOriginal = true;
}
}
}
assertEquals(2, quick2.size());
assertTrue(foundOriginal);
sm.setSelectedElement(defaultScheme);
i = bm.getBindings().iterator();
quick2.clear();
foundOriginal = false;
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(ID_QUICK_SWITCH)) {
quick2.add(e);
if (e == quickSwitch) {
foundOriginal = true;
}
}
}
assertEquals(1, quick2.size());
assertTrue(foundOriginal);
}
public void testSchemesWithNoDefaultBinding() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final SchemeModel sm = controller.getSchemeModel();
SchemeElement emacsScheme = null;
SchemeElement defaultScheme = null;
Iterator i = sm.getSchemes().iterator();
while (i.hasNext()) {
SchemeElement e = (SchemeElement) i.next();
if (e.getId().equals(SCHEME_EMACS_ID)) {
emacsScheme = e;
} else if (e.getId().equals(
IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
defaultScheme = e;
}
}
assertNotNull(emacsScheme);
assertNotNull(defaultScheme);
final BindingModel bm = controller.getBindingModel();
BindingElement emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
assertNotNull(emacsElement);
assertTrue(emacsElement.getModelObject() instanceof ParameterizedCommand);
sm.setSelectedElement(emacsScheme);
emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
assertTrue(emacsElement.getModelObject() instanceof KeyBinding);
sm.setSelectedElement(defaultScheme);
emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
assertTrue(emacsElement.getModelObject() instanceof ParameterizedCommand);
}
public void testCopyBinding() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
BindingModel bm = controller.getBindingModel();
BindingElement activateEditor = null;
ArrayList activates = new ArrayList();
Iterator i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
activates.add(be);
if (be.getModelObject() instanceof KeyBinding) {
activateEditor = be;
}
}
}
assertEquals(1, activates.size());
assertNotNull(activateEditor);
bm.setSelectedElement(activateEditor);
bm.copy();
activates.clear();
i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
activates.add(be);
}
}
assertEquals(2, activates.size());
}
public void testCopyCommand() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
BindingModel bm = controller.getBindingModel();
BindingElement conflict4 = null;
ArrayList activates = new ArrayList();
Iterator i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_CMD_CONFLICT4)) {
activates.add(be);
if (be.getModelObject() instanceof ParameterizedCommand) {
conflict4 = be;
}
}
}
assertEquals(1, activates.size());
assertNotNull(conflict4);
bm.setSelectedElement(conflict4);
bm.copy();
activates.clear();
i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_CMD_CONFLICT4)) {
activates.add(be);
}
}
assertEquals(1, activates.size());
}
public void testRemoveActiveEditor() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
BindingModel bm = controller.getBindingModel();
BindingElement activateEditor = getBindingElement(bm,
ID_ACTIVATE_EDITOR);
assertNotNull(activateEditor);
assertTrue(activateEditor.getModelObject() instanceof KeyBinding);
bm.setSelectedElement(activateEditor);
bm.remove();
assertTrue(activateEditor.getModelObject() instanceof ParameterizedCommand);
}
public void testRestoreBinding() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
BindingModel bm = controller.getBindingModel();
BindingElement activateEditor = getBindingElement(bm,
ID_ACTIVATE_EDITOR);
bm.setSelectedElement(activateEditor);
KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
activateEditor.setTrigger(ctrl5);
assertEquals(new Integer(Binding.USER), activateEditor.getUserDelta());
bm.copy();
BindingElement activeTwo = (BindingElement) bm.getSelectedElement();
assertFalse(activateEditor == activeTwo);
activeTwo.setTrigger(KeySequence.getInstance("CTRL+5 M"));
assertEquals(new Integer(Binding.USER), activeTwo.getUserDelta());
ArrayList activates = new ArrayList();
Iterator i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
activates.add(be);
}
}
assertEquals(2, activates.size());
bm.restoreBinding(controller.getContextModel());
activates = new ArrayList();
i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement be = (BindingElement) i.next();
if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
activates.add(be);
activateEditor = be;
}
}
assertEquals(1, activates.size());
assertEquals(new Integer(Binding.SYSTEM), activateEditor.getUserDelta());
}
public void testRestoreCommand() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ContextModel cm = controller.getContextModel();
final ContextElement window = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
final BindingModel bm = controller.getBindingModel();
BindingElement conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
assertNull(conflict4.getContext());
Object c4model = conflict4.getModelObject();
assertTrue(c4model instanceof ParameterizedCommand);
bm.setSelectedElement(conflict4);
assertNull(cm.getSelectedElement());
KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
conflict4.setTrigger(ctrl5);
assertEquals(window, ((BindingElement) bm.getSelectedElement())
.getContext());
assertTrue(conflict4.getModelObject() instanceof KeyBinding);
bm.setSelectedElement(conflict4);
bm.restoreBinding(cm);
conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
assertTrue(conflict4.getModelObject() instanceof ParameterizedCommand);
}
public void testRestoreContext() throws Exception {
final KeyController controller = new KeyController();
controller.init(getWorkbench());
final ContextModel cm = controller.getContextModel();
final ContextElement dialog = (ContextElement) cm
.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
final BindingModel bm = controller.getBindingModel();
BindingElement activateEditor = getBindingElement(bm,
ID_ACTIVATE_EDITOR);
activateEditor.setContext(dialog);
bm.setSelectedElement(activateEditor);
bm.restoreBinding(cm);
activateEditor = getBindingElement(bm, ID_ACTIVATE_EDITOR);
assertNotNull(activateEditor);
}
private void assertChangeEvent(int eventNum, PropertyChangeEvent expected,
PropertyChangeEvent event) {
assertEquals("source: " + eventNum, expected.getSource(), event
.getSource());
assertEquals("property: " + eventNum, expected.getProperty(), event
.getProperty());
assertEquals("old: " + eventNum, expected.getOldValue(), event
.getOldValue());
assertEquals("new: " + eventNum, expected.getNewValue(), event
.getNewValue());
}
private void assertChanges(PropertyChangeEvent[] expected, List events) {
assertEquals("events length", expected.length, events.size());
for (int i = 0; i < expected.length; i++) {
assertChangeEvent(i, expected[i], (PropertyChangeEvent) events
.get(i));
}
}
private BindingElement getBindingElement(BindingModel bm, String bindingId) {
BindingElement quickAccess = null;
Iterator i = bm.getBindings().iterator();
while (i.hasNext()) {
BindingElement e = (BindingElement) i.next();
if (e.getId().equals(bindingId)) {
quickAccess = e;
}
}
return quickAccess;
}
}