package org.jboss.tools.runtime.test;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.jboss.tools.runtime.core.RuntimeCoreActivator;
import org.jboss.tools.runtime.core.internal.RuntimeCorePreferences;
import org.jboss.tools.runtime.core.internal.RuntimeExtensionManager;
import org.jboss.tools.runtime.core.model.IRuntimeDetector;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.osgi.service.prefs.BackingStoreException;
import junit.framework.TestCase;
/**
* Test the initialization of the handlers
* @author rob
*
*/
public class RuntimeExtensionManagerTest extends TestCase {
public class TestExtension extends RuntimeExtensionManager {
public Set<IRuntimeDetector> loadInitializedRuntimeDetectors() {
return super.loadInitializedRuntimeDetectors();
}
}
@Before
public void setUp() {
clearPrefs();
}
@After
public void tearDown() {
clearPrefs();
}
@Test
public void testEnablementMatchesDefaults() {
TestExtension test = new TestExtension();
Set<IRuntimeDetector> initialized = test.loadInitializedRuntimeDetectors();
Set<IRuntimeDetector> raw = test.loadDeclaredRuntimeDetectors();
Iterator<IRuntimeDetector> rawIterator = raw.iterator();
while(rawIterator.hasNext()) {
IRuntimeDetector det = rawIterator.next();
assertEquals(det.getId() + " does not match its default enablement", det.isEnabled(), getEnablement(det.getId(), initialized));
}
}
private static final String HANDLER1 = "org.jboss.tools.runtime.handlers.TestHandler1";
private static final String HANDLER2 = "org.jboss.tools.runtime.handlers.TestHandler2";
private void setPrefs(String enabled, String disabled) {
try {
IEclipsePreferences prefs = ConfigurationScope.INSTANCE.getNode(RuntimeCoreActivator.PLUGIN_ID);
prefs.put("enabledDetectors", enabled);
prefs.put("disabledDetectors", disabled);
prefs.flush();
} catch(BackingStoreException bse) {
bse.printStackTrace();
}
}
public void testEnablementMatchesBothEnabledImplementation() {
String handlers = HANDLER1 + "," + HANDLER2;
setPrefs(handlers, "");
TestExtension test = new TestExtension();
Set<IRuntimeDetector> initialized = test.loadInitializedRuntimeDetectors();
Iterator<IRuntimeDetector> i = initialized.iterator();
while(i.hasNext()) {
IRuntimeDetector rd = i.next();
if( rd.getId().equals(HANDLER1) || rd.getId().equals(HANDLER2)) {
assertTrue(rd.isEnabled());
}
}
}
public void testEnablementMatchesBothDisabledImplementation() {
String handlers = HANDLER1 + "," + HANDLER2;
setPrefs("", handlers);
TestExtension test = new TestExtension();
Set<IRuntimeDetector> initialized = test.loadInitializedRuntimeDetectors();
Iterator<IRuntimeDetector> i = initialized.iterator();
while(i.hasNext()) {
IRuntimeDetector rd = i.next();
if( rd.getId().equals(HANDLER1) || rd.getId().equals(HANDLER2)) {
assertFalse(rd.isEnabled());
}
}
}
private void setEnabled(String id, boolean enabled, Set<IRuntimeDetector> det) {
Iterator<IRuntimeDetector> i = det.iterator();
while(i.hasNext()) {
IRuntimeDetector d = i.next();
if( d.getId().equals(id)) {
d.setEnabled(enabled);
return;
}
}
}
public void testEnablementMatchesBothEnabled() {
TestExtension test = new TestExtension();
Set<IRuntimeDetector> initialized = test.loadInitializedRuntimeDetectors();
setEnabled(HANDLER1, true, initialized);
setEnabled(HANDLER2, true, initialized);
RuntimeCorePreferences.getDefault().saveDetectorEnablement(initialized);
TestExtension test2 = new TestExtension();
Set<IRuntimeDetector> initialized2 = test2.loadInitializedRuntimeDetectors();
Iterator<IRuntimeDetector> i = initialized2.iterator();
while(i.hasNext()) {
IRuntimeDetector rd = i.next();
if( rd.getId().equals(HANDLER1) || rd.getId().equals(HANDLER2)) {
assertTrue(rd.isEnabled());
}
}
}
public void testEnablementMatchesBothDisabled() {
TestExtension test = new TestExtension();
Set<IRuntimeDetector> initialized = test.loadInitializedRuntimeDetectors();
setEnabled(HANDLER1, false, initialized);
setEnabled(HANDLER2, false, initialized);
RuntimeCorePreferences.getDefault().saveDetectorEnablement(initialized);
TestExtension test2 = new TestExtension();
Set<IRuntimeDetector> initialized2 = test2.loadInitializedRuntimeDetectors();
Iterator<IRuntimeDetector> i = initialized2.iterator();
while(i.hasNext()) {
IRuntimeDetector rd = i.next();
if( rd.getId().equals(HANDLER1) || rd.getId().equals(HANDLER2)) {
assertFalse(rd.isEnabled());
}
}
}
private void clearPrefs() {
try {
IEclipsePreferences prefs = ConfigurationScope.INSTANCE.getNode(RuntimeCoreActivator.PLUGIN_ID);
prefs.put("enabledDetectors", "");
prefs.put("disabledDetectors", "");
prefs.flush();
} catch(BackingStoreException bse) {
bse.printStackTrace();
}
}
private boolean getEnablement(String id, Set<IRuntimeDetector> set) {
Iterator<IRuntimeDetector> initialized = set.iterator();
while(initialized.hasNext()) {
IRuntimeDetector i = initialized.next();
if( i.getId().equals(id)) {
return i.isEnabled();
}
}
throw new RuntimeException();
}
}