Title: [677] trunk/extensions/swing/src/java/org/jbehave/threaded/swing: [EK] Added queuing listener to the button clicker to ensure that we get the events.

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:

http://xircles.codehaus.org/manage_email

Reply via email to