blob: 9cffae6cc31c5dd55d5f038a8661d6fd343068bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.preferences;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.preferences.*;
import org.eclipse.core.tests.runtime.RuntimeTest;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
/**
* @since 3.0
*/
public class PreferencesServiceTest extends RuntimeTest {
private static Random random = new Random();
public PreferencesServiceTest(String name) {
super(name);
}
public static Test suite() {
// all test methods are named "test..."
return new TestSuite(PreferencesServiceTest.class);
// TestSuite suite = new TestSuite();
// suite.addTest(new PreferencesServiceTest("testListeners2"));
// return suite;
}
public void testImportExportBasic() {
IPreferencesService service = Platform.getPreferencesService();
// create test node hierarchy
IEclipsePreferences root = service.getRootNode();
String qualifier = getRandomString() + '1';
IEclipsePreferences test = root.node(new Path(TestScope.SCOPE).append(qualifier));
String key = getRandomString() + 'k';
String value = getRandomString() + 'v';
String actual = test.get(key, null);
assertNull("1.0", actual);
test.put(key, value);
actual = test.get(key, null);
assertEquals("1.1", value, actual);
// export it
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
service.exportPreferences(test, output, null);
} catch (CoreException e) {
fail("2.0", e);
} finally {
try {
output.close();
} catch (IOException e1) {
// ignore
}
}
byte[] bytes = output.toByteArray();
// add new values
String newKey = getRandomString() + '3';
String newValue = getRandomString() + '4';
actual = test.get(newKey, null);
assertNull("3.0", actual);
test.put(newKey, newValue);
actual = test.get(newKey, null);
assertEquals("3.1", newValue, actual);
String newOldValue = getRandomString() + '5';
test.put(key, newOldValue);
actual = test.get(key, null);
assertEquals("3.2", newOldValue, actual);
// import
ByteArrayInputStream input = new ByteArrayInputStream(bytes);
try {
service.importPreferences(input);
} catch (CoreException e) {
fail("4.0", e);
} finally {
try {
input.close();
} catch (IOException e) {
// ignore
}
}
// verify
test = root.node(new Path(TestScope.SCOPE).append(qualifier));
actual = test.get(key, null);
assertEquals("5.0", value, actual);
actual = test.get(newKey, null);
assertNull("5.1", actual);
// ensure that the node isn't dirty (has been saved after the import)
assertTrue("5.2", test instanceof TestScope);
assertTrue("5.3", !((TestScope) test).isDirty());
// clear all
try {
test.clear();
} catch (BackingStoreException e) {
fail("6.0", e);
}
actual = test.get(key, null);
assertNull("6.1", actual);
actual = test.get(newKey, null);
assertNull("6.2", actual);
// import
input = new ByteArrayInputStream(bytes);
try {
service.importPreferences(input);
} catch (CoreException e) {
fail("7.0", e);
} finally {
try {
input.close();
} catch (IOException e) {
// ignore
}
}
// verify
test = root.node(new Path(TestScope.SCOPE).append(qualifier));
actual = test.get(key, null);
assertEquals("8.0", value, actual);
actual = test.get(newKey, null);
assertNull("8.1", actual);
}
public void testImportExportExcludes() {
// TODO
}
private void assertEquals(String message, String[] one, String[] two) {
if (one == null && two == null)
return;
if (one == two)
return;
assertNotNull(message + ".1", one);
assertNotNull(message + ".2", two);
assertEquals(message + ".3", one.length, two.length);
for (int i = 0; i < one.length; i++)
assertEquals(message + ".4." + i, one[i], two[i]);
}
public void testLookupOrder() {
IPreferencesService service = Platform.getPreferencesService();
String[] defaultOrder = new String[] {"project", //$NON-NLS-1$
InstanceScope.SCOPE, //
ConfigurationScope.SCOPE, //
DefaultScope.SCOPE};
String[] fullOrder = new String[] {"a", "b", "c"};
String[] nullKeyOrder = new String[] {"e", "f", "g"};
String qualifier = getRandomString();
String key = getRandomString();
// bogus set parms
try {
service.setDefaultLookupOrder(null, key, fullOrder);
fail("0.0");
} catch (IllegalArgumentException e) {
// expected
}
try {
service.setDefaultLookupOrder(qualifier, key, new String[] {"a", null, "b"});
fail("0.1");
} catch (IllegalArgumentException e) {
// expected
}
// nothing set
String[] order = service.getDefaultLookupOrder(qualifier, key);
assertNull("1.0", order);
order = service.getLookupOrder(qualifier, key);
assertNotNull("1.1", order);
assertEquals("1.2", defaultOrder, order);
order = service.getDefaultLookupOrder(qualifier, null);
assertNull("1.3", order);
order = service.getLookupOrder(qualifier, null);
assertNotNull("1.4", order);
assertEquals("1.5", defaultOrder, order);
// set for qualifier/key
service.setDefaultLookupOrder(qualifier, key, fullOrder);
order = service.getDefaultLookupOrder(qualifier, key);
assertNotNull("2.2", order);
assertEquals("2.3", fullOrder, order);
order = service.getLookupOrder(qualifier, key);
assertNotNull("2.4", order);
assertEquals("2.5", fullOrder, order);
// nothing set for qualifier/null
order = service.getDefaultLookupOrder(qualifier, null);
assertNull("3.0", order);
order = service.getLookupOrder(qualifier, null);
assertNotNull("3.1", order);
assertEquals("3.2", defaultOrder, order);
// set for qualifier/null
service.setDefaultLookupOrder(qualifier, null, nullKeyOrder);
order = service.getDefaultLookupOrder(qualifier, null);
assertNotNull("4.0", order);
assertEquals("4.1", nullKeyOrder, order);
order = service.getLookupOrder(qualifier, null);
assertNotNull("4.2", order);
assertEquals("4.3", nullKeyOrder, order);
order = service.getDefaultLookupOrder(qualifier, key);
assertNotNull("4.4", order);
assertEquals("4.5", fullOrder, order);
order = service.getLookupOrder(qualifier, key);
assertNotNull("4.6", order);
assertEquals("4.7", fullOrder, order);
// clear qualifier/key (find qualifier/null)
service.setDefaultLookupOrder(qualifier, key, null);
order = service.getDefaultLookupOrder(qualifier, key);
assertNull("5.0", order);
order = service.getLookupOrder(qualifier, key);
assertNotNull("5.1", order);
assertEquals("5.2", nullKeyOrder, order);
// clear qualifier/null (find returns default-default)
service.setDefaultLookupOrder(qualifier, null, null);
order = service.getDefaultLookupOrder(qualifier, key);
assertNull("6.0", order);
order = service.getLookupOrder(qualifier, key);
assertNotNull("6.1", order);
assertEquals("6.2", defaultOrder, order);
order = service.getDefaultLookupOrder(qualifier, null);
assertNull("6.3", order);
order = service.getLookupOrder(qualifier, null);
assertNotNull("6.4", order);
assertEquals("6.5", defaultOrder, order);
}
public void testGetWithNodes() {
IPreferencesService service = Platform.getPreferencesService();
String qualifier = getRandomString();
String key = getRandomString();
String expected = getRandomString();
// nothing set - navigation
Preferences node = service.getRootNode().node(TestScope.SCOPE).node(qualifier);
String actual = node.get(key, null);
assertNull("10", actual);
// nothing set - service searching
actual = service.get(key, null, new Preferences[] {node});
assertNull("2.0", actual);
// set value
node.put(key, expected);
// value is set - navigation
actual = node.get(key, null);
assertNotNull("3.0", actual);
assertEquals("3.1", expected, actual);
// value is set - service searching
actual = service.get(key, null, new Preferences[] {node});
assertNotNull("4.0", actual);
assertEquals("4.1", expected, actual);
// return default value if node list is null
actual = service.get(key, null, null);
assertNull("5.0", actual);
// skip over null nodes
actual = service.get(key, null, new Preferences[] {null, node});
assertNotNull("6.0", actual);
assertEquals("6.1", expected, actual);
// set the value in the default scope as well
Preferences defaultNode = service.getRootNode().node(DefaultScope.SCOPE).node(qualifier);
String defaultValue = getRandomString();
defaultNode.put(key, defaultValue);
actual = defaultNode.get(key, null);
assertNotNull("7.0", actual);
assertEquals("7.1", defaultValue, actual);
// pass in both nodes
actual = service.get(key, null, new Preferences[] {node, defaultNode});
assertNotNull("8.0", actual);
assertEquals("8.1", expected, actual);
// skip nulls
actual = service.get(key, null, new Preferences[] {null, node, null, defaultNode, null});
assertNotNull("8.2", actual);
assertEquals("8.3", expected, actual);
// reverse the order
actual = service.get(key, null, new Preferences[] {defaultNode, node});
assertNotNull("8.4", actual);
assertEquals("8.5", defaultValue, actual);
// skip nulls
actual = service.get(key, null, new Preferences[] {null, null, defaultNode, null, node, null});
assertNotNull("8.6", actual);
assertEquals("8.7", defaultValue, actual);
}
private String getRandomString() {
return Long.toString(random.nextLong());
}
public void testSearchingStringBasics() {
IPreferencesService service = Platform.getPreferencesService();
String qualifier = getRandomString();
String key = getRandomString();
Preferences node = service.getRootNode().node(TestScope.SCOPE).node(qualifier);
Preferences defaultNode = service.getRootNode().node(DefaultScope.SCOPE).node(qualifier);
String value = getRandomString();
String defaultValue = getRandomString() + '1';
String actual = null;
ArrayList list = new ArrayList();
list.add(null);
list.add(new IScopeContext[] {});
list.add(new IScopeContext[] {null});
list.add(new IScopeContext[] {new TestScope()});
list.add(new IScopeContext[] {new TestScope(), new DefaultScope()});
list.add(new IScopeContext[] {new DefaultScope(), new TestScope()});
list.add(new IScopeContext[] {new DefaultScope()});
IScopeContext[][] contexts = (IScopeContext[][]) list.toArray(new IScopeContext[list.size()][]);
// nothing is set
for (int i = 0; i < contexts.length; i++) {
actual = service.getString(qualifier, key, null, contexts[i]);
assertNull("1.0." + i, actual);
}
// set a default value
defaultNode.put(key, defaultValue);
actual = defaultNode.get(key, null);
assertNotNull("2.0", actual);
assertEquals("2.1", defaultValue, actual);
// should find it because "default" is in the default-default lookup order
for (int i = 0; i < contexts.length; i++) {
actual = service.getString(qualifier, key, null, contexts[i]);
assertNotNull("3.0." + i, actual);
assertEquals("3.1." + i, defaultValue, actual);
}
// set a real value
node.put(key, value);
actual = node.get(key, null);
assertNotNull("4.0", actual);
assertEquals("4.1", value, actual);
// should find the default value since the "test" scope isn't in the lookup order
for (int i = 0; i < contexts.length; i++) {
actual = service.getString(qualifier, key, null, contexts[i]);
assertNotNull("5.0." + i, actual);
assertEquals("5.1." + i, defaultValue, actual);
}
// set the lookup order for qualifier/null
String[] setOrder = new String[] {TestScope.SCOPE, DefaultScope.SCOPE};
service.setDefaultLookupOrder(qualifier, null, setOrder);
String[] order = service.getLookupOrder(qualifier, null);
assertNotNull("6.0", order);
assertEquals("6.1", setOrder, order);
// get the value, should be the real one
for (int i = 0; i < contexts.length; i++) {
actual = service.getString(qualifier, key, null, contexts[i]);
assertNotNull("7.0." + i, actual);
assertEquals("7.1." + i, value, actual);
}
// set the order to be the reverse for the qualifier/key
setOrder = new String[] {DefaultScope.SCOPE, TestScope.SCOPE};
service.setDefaultLookupOrder(qualifier, key, setOrder);
order = service.getLookupOrder(qualifier, key);
assertNotNull("8.0", order);
assertEquals("8.1", setOrder, order);
// get the value, should be the default one
for (int i = 0; i < contexts.length; i++) {
actual = service.getString(qualifier, key, null, contexts[i]);
assertNotNull("9.0." + i, actual);
assertEquals("9.1." + i, defaultValue, actual);
}
}
/*
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
Platform.getPreferencesService().getRootNode().node(TestScope.SCOPE).removeNode();
}
}