- Revision
- 731
- Author
- sirenian
- Date
- 2007-05-24 12:13:26 -0500 (Thu, 24 May 2007)
Log Message
[EK] Focusing is event-driven too! This version only as broken as it already was, next step to fix it.
Modified Paths
Added Paths
Diff
Modified: trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java (730 => 731)
--- trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java 2007-05-23 12:48:52 UTC (rev 730) +++ trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java 2007-05-24 17:13:26 UTC (rev 731) @@ -7,6 +7,7 @@ import javax.swing.Action; import javax.swing.JButton; +import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; @@ -77,10 +78,44 @@ ensureThat(textField.getText(), eq("Text1")); ensureThat(textArea.getText(), eq("Text2")); + } finally { wrapper.closeWindow(); } } + + public void shouldEnterTextIntoAComboBox() throws Exception { + shouldEnterTextIntoComboBox(false); + } + +// public void shouldEnterTextIntoAnEditableComboBox() throws Exception { +// shouldEnterTextIntoComboBox(true); +// } + + private void shouldEnterTextIntoComboBox(boolean editable) throws ComponentFinderException, TimeoutException { + checkForHeadless(); + DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME); + + try { + AFrame frame = new AFrame(); + + JComboBox comboBox = new JComboBox(new Object[] {"horse", "cow", "sheep"}); + comboBox.setName("a.combobox"); + comboBox.setEditable(editable); + frame.getContentPane().setLayout(new FlowLayout()); + frame.getContentPane().add(comboBox); + frame.pack(); + frame.setVisible(true); + + wrapper.enterText("a.combobox", "cow"); + + ensureThat(comboBox.getSelectedItem(), eq("cow")); + + + } finally { + wrapper.closeWindow(); + } + } public void shouldFindComponent() throws ComponentFinderException, TimeoutException { checkForHeadless(); @@ -164,7 +199,7 @@ new HeadlessChecker().check(); } - public class AFrame extends JFrame { + public static class AFrame extends JFrame { private static final String FRAME_NAME = "a.window"; private static final String ACTION_KEY = "AFrame.action"; @@ -182,4 +217,20 @@ this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } } + + public static void main(String[] args) { + AFrame frame = new AFrame(); + + JComboBox comboBox = new JComboBox(new Object[] {"horse", "cow", "sheep"}); + comboBox.setName("a.combobox"); + comboBox.setEditable(true); + + frame.getContentPane().setLayout(new FlowLayout()); + + frame.getContentPane().add(comboBox); + frame.pack(); + + + frame.setVisible(true); + } }
Added: trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/FocuserBehaviour.java (0 => 731)
--- trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/FocuserBehaviour.java (rev 0) +++ trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/FocuserBehaviour.java 2007-05-24 17:13:26 UTC (rev 731) @@ -0,0 +1,76 @@ +package org.jbehave.threaded.swing; + +import java.awt.FlowLayout; + +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import org.jbehave.core.mock.UsingMatchers; + +public class FocuserBehaviour extends UsingMatchers { + + public void shouldRequestFocusOnAComponent() { + checkForHeadless(); + Focuser focuser = new Focuser(); + AFrame frame = new AFrame(); + + try { + + JComboBox comboBox = new JComboBox(new Object[] {"horse", "cow", "sheep"}); + comboBox.setName("a.combobox"); + frame.getContentPane().setLayout(new FlowLayout()); + frame.getContentPane().add(comboBox); + frame.pack(); + frame.setVisible(true); + + focuser.requestFocusOn(comboBox); + + ensureThat(comboBox.hasFocus()); + } finally { + frame.dispose(); + } + } + + public void shouldNotChangeAnythingIfFocusAlreadyOnAComponent() { + checkForHeadless(); + Focuser focuser = new Focuser(); + AFrame frame = new AFrame(); + + try { + + JComboBox comboBox = new JComboBox(new Object[] {"horse", "cow", "sheep"}); + comboBox.setName("a.combobox"); + frame.getContentPane().setLayout(new FlowLayout()); + frame.getContentPane().add(comboBox); + frame.pack(); + frame.setVisible(true); + + focuser.requestFocusOn(comboBox); + focuser.requestFocusOn(comboBox); + + ensureThat(comboBox.hasFocus()); + } finally { + frame.dispose(); + } + } + + public static class AFrame extends JFrame { + private static final String FRAME_NAME = "a.window"; + + private JPanel contentPanel = new JPanel(); + public AFrame() { + setName(FRAME_NAME); + setContentPane(contentPanel); + + this.pack(); + this.setVisible(true); + + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + } + } + + private void checkForHeadless() { + new HeadlessChecker().check(); + } +} \ No newline at end of file
Added: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/Focuser.java (0 => 731)
--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/Focuser.java (rev 0) +++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/Focuser.java 2007-05-24 17:13:26 UTC (rev 731) @@ -0,0 +1,41 @@ +package org.jbehave.threaded.swing; + +import java.awt.Component; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +public class Focuser { + + public void requestFocusOn(Component component) { + if (!component.hasFocus()) { + QueueingFocusListener focusListener = new QueueingFocusListener(component); + component.requestFocus(); + try { + focusListener.waitForEvent(); + } finally { + focusListener.removeSelfFromComponent(); + } + } + } + + private class QueueingFocusListener extends QueueingAdapter implements FocusListener { + + public QueueingFocusListener(Component component) { + super(component, "FocusEvent"); + } + + public void focusGained(FocusEvent e) { + eventOccurred(); + } + + public void focusLost(FocusEvent e) {} + + protected void addSelfToComponent() { + component.addFocusListener(this); + } + + protected void removeSelfFromComponent() { + component.removeFocusListener(this); + } + } +}
Added: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java (0 => 731)
--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java (rev 0) +++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java 2007-05-24 17:13:26 UTC (rev 731) @@ -0,0 +1,38 @@ +package org.jbehave.threaded.swing; + +import java.awt.Component; + +import org.jbehave.core.threaded.QueuedObjectHolder; +import org.jbehave.core.threaded.TimeoutException; + +abstract class QueueingAdapter { + + private QueuedObjectHolder holder = new QueuedObjectHolder(); + private Idler idler = new Idler(); + protected final Component component; + private String eventType; + + public QueueingAdapter(Component component, String eventType) { + this.component = component; + this.eventType = eventType; + addSelfToComponent(); + } + + public void waitForEvent() { + try { + holder.get(1000); + } catch (TimeoutException e) { + throw new RuntimeException("Expected " + eventType + " on component " + component.getName() + " was not received"); + } + idler.waitForIdle(); + } + + protected abstract void addSelfToComponent(); + + protected abstract void removeSelfFromComponent(); + + public void eventOccurred() { + holder.set(new Object()); + } + +}
To unsubscribe from this list please visit:
