blob: affc30f7e0701a8ff0593f1e30385f35504120f9 [file] [log] [blame]
/*******************************************************************************
* 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.keys;
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$
}
}