Package org.jbehave.threaded.swing

Source Code of org.jbehave.threaded.swing.DefaultWindowWrapperBehaviour

package org.jbehave.threaded.swing;

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.text.JTextComponent;

import org.jbehave.core.minimock.UsingMiniMock;
import org.jbehave.core.mock.Matcher;
import org.jbehave.core.mock.Mock;
import org.jbehave.core.threaded.TimeoutException;


public class DefaultWindowWrapperBehaviour extends UsingMiniMock {
 
  public void shouldClickAButtonOnAWindow() throws Exception {
    checkForHeadless();
    DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);
       
    try {
            AFrame frame = new AFrame();
        frame.setName(AFrame.FRAME_NAME);
       
        JButton button = new JButton("Press Me!");
        button.setName("a.button");
       
        Mock actionListener = mock(ActionListener.class);
        actionListener.expects("actionPerformed");
       
        button.addActionListener((ActionListener)actionListener);       
       
        frame.getContentPane().add(button);
        frame.pack();
        frame.setVisible(true);
       
        wrapper.clickButton("a.button");
       
        verifyMocks();
        } finally {
            wrapper.closeWindow();
        }
  }

 
  public void shouldEnterTextIntoTextComponents() throws Exception {
        checkForHeadless();
        DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);

        try {
            AFrame frame = new AFrame();
       
        JTextComponent textField = new JTextField();
        textField.setName("a.textfield");
       
        JTextComponent textArea = new JTextArea();
        textArea.setName("b.textarea");
       
        frame.getContentPane().setLayout(new FlowLayout());
       
        frame.getContentPane().add(textField);
        frame.getContentPane().add(textArea);
        frame.pack();
       
       
        frame.setVisible(true);
        wrapper.enterText("a.textfield", "Text1");
        wrapper.enterText("b.textarea", "Text2");
       
        ensureThat(textField.getText(), eq("Text1"));
        ensureThat(textArea.getText(), eq("Text2"));
        } finally {
            wrapper.closeWindow();
        }
  }
 
  public void shouldFindComponent() throws ComponentFinderException, TimeoutException  {
      checkForHeadless();
      DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);
        try {

            AFrame frame = new AFrame();
       
        JPanel panel = new JPanel();
        panel.setName("a.panel");
       
        frame.getContentPane().add(panel);
        frame.setVisible(true);
       
        ensureThat(wrapper.findComponent("a.panel"), eq(panel));
        } finally {
            wrapper.closeWindow();
        }
  }
   
    public void shouldCloseWindows() throws TimeoutException {
        checkForHeadless();
        DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);

        AFrame frame = new AFrame();
       
        wrapper.closeWindow();
        ensureThat(!frame.isShowing());
        frame.dispose();
    }
   
    public void shouldSimulateKeyPressesForInputMap() throws TimeoutException {
        checkForHeadless();
    DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);
   
        try {
            AFrame frame = new AFrame();           

            Mock action = mock(Action.class, "Action");
            action.stubs("isEnabled").will(returnValue(true));
            action.expects("actionPerformed").with(anything());
           
            frame.contentPanel.getActionMap().put(AFrame.ACTION_KEY, (Action) action);
           
            wrapper.pressKeychar(' ');
           
            verifyMocks();
        } finally {
            wrapper.closeWindow();
        }
    }
   
    public void shouldSimulateKeyPressesForKeyListeners() throws TimeoutException {
        checkForHeadless();
        DefaultWindowWrapper wrapper = new DefaultWindowWrapper(AFrame.FRAME_NAME);
       
        try {
            AFrame frame = new AFrame();
           
            Matcher spaceKeyEvent = new Matcher() {
                public boolean matches(Object arg) {
                    return ((KeyEvent)arg).getKeyCode() == KeyEvent.VK_SPACE ||
                        ((KeyEvent)arg).getKeyChar() == ' ';
                }
            };
            Mock keyListener = mock(KeyListener.class);
            keyListener.stubs("keyTyped").once().with(spaceKeyEvent);
            keyListener.stubs("keyPressed").once().with(spaceKeyEvent);
            keyListener.expects("keyReleased").once().with(spaceKeyEvent);
            frame.contentPanel.addKeyListener((KeyListener) keyListener);   
           
            wrapper.pressKeychar(' ');
           
            verifyMocks();
        } finally {
            wrapper.closeWindow();
        }
    }

    private void checkForHeadless() {
        new HeadlessChecker().check();
    }

    public class AFrame extends JFrame {
        private static final String FRAME_NAME = "a.window";
        private static final String ACTION_KEY = "AFrame.action";
       
       
        private JPanel contentPanel = new JPanel();
        public AFrame() {
            setName(FRAME_NAME);
            setContentPane(contentPanel);

            contentPanel.getInputMap().put(KeyStroke.getKeyStroke(' '), ACTION_KEY);
           
            this.pack();
            this.setVisible(true);
           
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        }
    }
}
TOP

Related Classes of org.jbehave.threaded.swing.DefaultWindowWrapperBehaviour

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.