| /******************************************************************************* |
| * Copyright (c) 2000, 2006 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.keybinding.tests; |
| |
| import java.io.BufferedOutputStream; |
| import java.io.File; |
| import java.io.FileNotFoundException; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Properties; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.PluginVersionIdentifier; |
| import org.eclipse.core.runtime.Preferences; |
| import org.eclipse.ui.commands.ICommandManager; |
| import org.eclipse.ui.internal.IWorkbenchConstants; |
| import org.eclipse.ui.keys.KeySequence; |
| import org.eclipse.ui.tests.harness.util.UITestCase; |
| |
| /** |
| * Tests Bug 36420 |
| * |
| * @since 3.0 |
| */ |
| public class Bug36420Test extends UITestCase { |
| |
| /** |
| * Constructor for Bug36420Test. |
| * |
| * @param name |
| * The name of the test |
| */ |
| public Bug36420Test(String name) { |
| super(name); |
| } |
| |
| /** |
| * Tests that importing key preferences actually has an effect. |
| * |
| * @throws CoreException |
| * If the preferences can't be imported. |
| * @throws FileNotFoundException |
| * If the temporary file is removed after it is created, but |
| * before it is opened. (Wow) |
| * @throws IOException |
| * If something fails during output of the preferences file. |
| */ |
| public void testImportKeyPreferences() throws CoreException, |
| FileNotFoundException, IOException { |
| String commandId = "org.eclipse.ui.window.nextView"; //$NON-NLS-1$ |
| String keySequenceText = "F S C K"; //$NON-NLS-1$ |
| |
| /* |
| * DO NOT USE PreferenceMutator for this section. This test case must |
| * use these exact steps, while PreferenceMutator might use something |
| * else in the future. |
| */ |
| // Set up the preferences. |
| Properties preferences = new Properties(); |
| String key = "org.eclipse.ui.workbench/org.eclipse.ui.commands"; //$NON-NLS-1$ |
| String value = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<org.eclipse.ui.commands><activeKeyConfiguration keyConfigurationId=\"" + IWorkbenchConstants.DEFAULT_ACCELERATOR_CONFIGURATION_ID + "\"></activeKeyConfiguration><keyBinding keyConfigurationId=\"org.eclipse.ui.defaultAcceleratorConfiguration\" commandId=\"" + commandId + "\" keySequence=\"" + keySequenceText + "\"/></org.eclipse.ui.commands>"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
| preferences.put(key, value); |
| |
| // This is the first pass way to "walk" through the list |
| // of bundles |
| String[] pluginIds = Platform.getExtensionRegistry().getNamespaces(); |
| for (int i = 0; i < pluginIds.length; i++) { |
| preferences.put(pluginIds[i], new PluginVersionIdentifier( |
| (String) Platform.getBundle(pluginIds[i]).getHeaders().get( |
| org.osgi.framework.Constants.BUNDLE_VERSION))); |
| } |
| |
| // Export the preferences. |
| File file = File.createTempFile("preferences", ".txt"); //$NON-NLS-1$//$NON-NLS-2$ |
| file.deleteOnExit(); |
| BufferedOutputStream bos = new BufferedOutputStream( |
| new FileOutputStream(file)); |
| preferences.store(bos, null); |
| bos.close(); |
| |
| // Attempt to import the key binding. |
| Preferences.importPreferences(new Path(file.getAbsolutePath())); |
| /* |
| * END SECTION |
| */ |
| |
| // Check to see that the key binding for the given command matches. |
| ICommandManager manager = fWorkbench.getCommandSupport() |
| .getCommandManager(); |
| List keyBindings = manager.getCommand(commandId) |
| .getKeySequenceBindings(); |
| Iterator keyBindingItr = keyBindings.iterator(); |
| boolean found = false; |
| while (keyBindingItr.hasNext()) { |
| KeySequence keyBinding = (KeySequence) keyBindingItr.next(); |
| String currentText = keyBinding.toString(); |
| if (keySequenceText.equals(currentText)) { |
| found = true; |
| } |
| } |
| |
| assertTrue("Key binding not imported.", found); //$NON-NLS-1$ |
| } |
| } |