/*
* Created on 23.04.2009
*
*/
package org.jdesktop.swingx.event;
import java.awt.Component;
import java.awt.DefaultKeyboardFocusManager;
import java.awt.GraphicsEnvironment;
import java.awt.KeyboardFocusManager;
import java.lang.reflect.InvocationTargetException;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXDatePicker;
import org.jdesktop.swingx.SwingXUtilities;
import org.jdesktop.test.PropertyChangeReport;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class CompoundFocusListenerIssues extends CompoundFocusListenerTest {
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(CompoundFocusListenerIssues.class.getName());
/**
* Test that listener copes with change of keyboardFocusManager.
*
* Not yet implemented.
*
* @throws InterruptedException
* @throws InvocationTargetException
*/
@Test
public void testKeyboardFocusManager() throws InterruptedException, InvocationTargetException {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run test - headless environment");
return;
}
JXDatePicker picker = getRealizedDatePicker();
final KeyboardFocusManager oldManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
Component focusOwner = oldManager.getPermanentFocusOwner();
assertFalse("sanity: initial focus must not be in picker",
SwingXUtilities.isDescendingFrom(focusOwner, picker));
CompoundFocusListener l = new CompoundFocusListener(picker);
final PropertyChangeReport report = new PropertyChangeReport();
l.addPropertyChangeListener(report);
KeyboardFocusManager customManager = new DefaultKeyboardFocusManager();
KeyboardFocusManager.setCurrentKeyboardFocusManager(customManager);
LOG.info("after custom? ");
picker.requestFocusInWindow();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
try {
assertEquals(1, report.getEventCount("focused"));
} finally {
KeyboardFocusManager.setCurrentKeyboardFocusManager(oldManager);
}
}
});
}
}