- Revision
- 677
- Author
- sirenian
- Date
- 2007-01-24 12:31:21 -0600 (Wed, 24 Jan 2007)
Log Message
[EK] Added queuing listener to the button clicker to ensure that we get the events.
Modified Paths
- trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java
- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java
- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/DefaultWindowWrapper.java
Added Paths
Diff
Modified: trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java (676 => 677)
--- trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java 2007-01-24 18:23:59 UTC (rev 676) +++ trunk/extensions/swing/src/behaviour/org/jbehave/threaded/swing/DefaultWindowWrapperBehaviour.java 2007-01-24 18:31:21 UTC (rev 677) @@ -23,7 +23,6 @@ public class DefaultWindowWrapperBehaviour extends UsingMiniMock { public void shouldClickAButtonOnAWindow() throws Exception { - todo("Does not work on Mac"); checkForHeadless(); DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);
Added: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/ButtonClicker.java (0 => 677)
--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/ButtonClicker.java (rev 0) +++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/ButtonClicker.java 2007-01-24 18:31:21 UTC (rev 677) @@ -0,0 +1,58 @@ +package org.jbehave.threaded.swing; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.AbstractButton; + +import org.jbehave.core.exception.PendingException; +import org.jbehave.core.threaded.QueuedObjectHolder; +import org.jbehave.core.threaded.TimeoutException; + +public class ButtonClicker { + + private Idler idler; + + public ButtonClicker() { + idler = new Idler(); + } + + public void click(AbstractButton button) { + QueueingActionListener queuer = new QueueingActionListener(button); + + try { + button.doClick(200); + queuer.waitForEvent(); + } finally { + queuer.removeSelf(); + } + idler.waitForIdle(); + } + + private class QueueingActionListener implements ActionListener { + private QueuedObjectHolder holder = new QueuedObjectHolder(); + private final AbstractButton button; + + public QueueingActionListener(AbstractButton button) { + this.button = button; + button.addActionListener(this); + } + + public void actionPerformed(ActionEvent e) { + holder.set(e); + } + public void waitForEvent() { + try { + holder.get(1000); + } catch (TimeoutException e) { + throw new PendingException("Clicking buttons is not supported for your Swing library."); + } + idler.waitForIdle(); + } + + public void removeSelf() { + button.removeActionListener(this); + } + + } +}
Modified: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java (676 => 677)
--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java 2007-01-24 18:23:59 UTC (rev 676) +++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java 2007-01-24 18:31:21 UTC (rev 677) @@ -21,8 +21,7 @@ */ class CharacterTyper { - private static final String ACTION_KEY = "CharacterTyper.action"; - private static final String TEXT_TYPING_UNSUPPORTED = "Text typing not supported for your Swing library."; + private static final String TEXT_TYPING_UNSUPPORTED = "Text typing is not supported for your Swing library."; private EventQueue sysQueue; private Idler idler;
Modified: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/DefaultWindowWrapper.java (676 => 677)
--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/DefaultWindowWrapper.java 2007-01-24 18:23:59 UTC (rev 676) +++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/DefaultWindowWrapper.java 2007-01-24 18:31:21 UTC (rev 677) @@ -20,6 +20,7 @@ private static final WindowGrabber grabber = new WindowGrabber(); private final CharacterTyper typer; + private final ButtonClicker clicker; private final String windowName; private final ComponentFinder finder; @@ -39,6 +40,7 @@ sysQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); idler = new Idler(); typer = new CharacterTyper(); + clicker = new ButtonClicker(); } public void closeWindow() throws TimeoutException { @@ -49,8 +51,8 @@ public void clickButton(String componentName) throws ComponentFinderException, TimeoutException { AbstractButton button = (AbstractButton) finder.findExactComponent( getOpenWindow(), new NamedComponentFilter(componentName)); - button.doClick(200); - idler.waitForIdle(); + clicker.click(button); + } public void enterText(String componentName, String text) throws ComponentFinderException, TimeoutException {
To unsubscribe from this list please visit:
