Clover coverage report - JFCUnit Test Coverage
Coverage timestamp: Mon Dec 20 2004 23:38:10 MST
file stats: LOC: 291   Methods: 10
NCLOC: 136   Classes: 2
 
 Source file Conditionals Statements Methods TOTAL
EchoTagHandler.java 92.3% 98.6% 100% 97.2%
coverage coverage
 1   
 /*
 2   
  * Created on Oct 24, 2003
 3   
  *
 4   
  * To change the template for this generated file go to
 5   
  * Window>Preferences>Java>Code Generation>Code and Comments
 6   
  */
 7   
 package junit.extensions.xml.elements;
 8   
 
 9   
 import junit.extensions.jfcunit.xml.JFCXMLTestCase;
 10   
 
 11   
 import junit.extensions.xml.IXMLTestCase;
 12   
 import junit.extensions.xml.XMLException;
 13   
 
 14   
 import junit.framework.Assert;
 15   
 
 16   
 import org.w3c.dom.Element;
 17   
 
 18   
 import java.awt.event.ActionEvent;
 19   
 import java.awt.event.ActionListener;
 20   
 
 21   
 import javax.swing.Box;
 22   
 import javax.swing.BoxLayout;
 23   
 import javax.swing.JButton;
 24   
 import javax.swing.JDialog;
 25   
 import javax.swing.JLabel;
 26   
 import javax.swing.JOptionPane;
 27   
 import javax.swing.JPanel;
 28   
 
 29   
 
 30   
 /**
 31   
  * Provide a mechanism for sending debug messages to the
 32   
  * test case developer.
 33   
  *
 34   
  * <H3>Tag Name:</H3>
 35   
  * echo
 36   
  * <H3>Attributes:</H3>
 37   
  * <pre>
 38   
  * message - the message to output        [required]
 39   
  * mode    - what is the output mechanism [optional]
 40   
  *          'stdout' is default, sends output to stdout
 41   
  *          'dialog' sends the output to a JOptionPane
 42   
  *          'confirm' sends the output to a JOptionPane
 43   
  *                    confirmation dialog.
 44   
  *          'stderr' sends the output to stderr
 45   
  * block   - Block is a valid attribute when the mode is
 46   
  *           dialog or confirm. It controlls the modality
 47   
  *           of the dialog. Default value is true.
 48   
  * </pre>
 49   
  * <H3>Examples:</H3>
 50   
  * <pre>
 51   
  *   &lt;echo message="hello world"/&gt;
 52   
  *   &lt;echo mode='dialog' message="hello world"/&gt;
 53   
  *   &lt;echo mode='dialog' block="false" message="hello world"/&gt;
 54   
  *   &lt;echo mode='stderr' message="hello world"/&gt;
 55   
  * </pre>
 56   
  * @author JFCUnit contributor
 57   
  */
 58   
 public class EchoTagHandler extends AbstractTagHandler {
 59   
     /**
 60   
      * Result of confirm dialog when YES button is pressed.
 61   
      */
 62   
     private static final int YES_OPTION = JOptionPane.YES_OPTION;
 63   
 
 64   
     /**
 65   
      * Result of confirm dialog when NO or CANCEL button is pressed.
 66   
      */
 67   
     private static final int NO_OPTION = JOptionPane.NO_OPTION;
 68   
 
 69   
     /**
 70   
      * Window close result.
 71   
      */
 72   
     private boolean m_result = false;
 73   
 
 74   
     /**
 75   
      * Constructor.
 76   
      * @param element Element to be processed by the tag handler.
 77   
      * @param testcase parent test case.
 78   
      */
 79  14
     public EchoTagHandler(final Element element, final IXMLTestCase testcase) {
 80  14
         super(element, testcase);
 81   
     }
 82   
 
 83   
     /**
 84   
      * Handle the XML processing of the tag 'echo'.
 85   
      * @throws XMLException upon failure of processing.
 86   
      */
 87  13
     public void processElement() throws XMLException {
 88  13
         validateElement();
 89   
 
 90  13
         final String msg = getString(MESSAGE);
 91   
 
 92  13
         String       mode = getString(MODE);
 93   
 
 94  13
         if (mode == null) {
 95  5
             mode = STDOUT;
 96   
         }
 97   
 
 98  13
         boolean block = getBoolean("block", true);
 99   
 
 100  13
         if (DIALOG.equals(mode)) {
 101  2
             m_result = false;
 102   
 
 103  2
             if (block) {
 104  1
                 JOptionPane.showMessageDialog(null, msg);
 105   
             } else {
 106  1
                 showDialog(msg);
 107   
             }
 108   
 
 109  2
             System.err.println("[echo] " + msg);
 110  11
         } else if (CONFIRM.equalsIgnoreCase(mode)) {
 111  4
             System.err.println("[echo] " + msg);
 112   
 
 113  4
             if (block) {
 114  2
                 m_result = JOptionPane.showConfirmDialog(null, msg, "Confirm",
 115   
                         JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
 116   
             } else {
 117  2
                 m_result = (showConfirm(msg) == JOptionPane.YES_OPTION);
 118   
             }
 119   
 
 120  4
             if (!m_result) {
 121  2
                 Assert.fail(msg);
 122   
             }
 123  7
         } else if (STDERR.equalsIgnoreCase(mode)) {
 124  1
             System.err.println("[echo] " + msg);
 125  6
         } else if (STDOUT.equalsIgnoreCase(mode)) {
 126  5
             System.out.println("[echo] " + msg);
 127   
         } else {
 128  1
             throw new XMLException("Invalid mode", null,
 129   
                 getElement(),
 130   
                 getXMLTestCase().getPropertyCache());
 131   
         }
 132   
     }
 133   
 
 134   
     /**
 135   
      * Make sure the appropriate tag and attributes are used.
 136   
      * @throws XMLException when validation fails.
 137   
      */
 138  13
     public void validateElement() throws XMLException {
 139  13
         super.validateElement();
 140   
 
 141   
         // message is a required attribute
 142  13
         checkRequiredAttribute(MESSAGE);
 143   
     }
 144   
 
 145   
     /**
 146   
      * Show a confirm dialog.
 147   
      * @param msg Message to be displayed.
 148   
      * @return YES_OPTION or NO_OPTION
 149   
      */
 150  2
     int showConfirm(final String msg) {
 151  2
         return showDialog(msg, true);
 152   
     }
 153   
 
 154   
     /**
 155   
      * Show a Dialog.
 156   
      * @param msg Message to be displayed.
 157   
      */
 158  1
     void showDialog(final String msg) {
 159  1
         showDialog(msg, false);
 160   
     }
 161   
 
 162   
     /**
 163   
      * Show the dialog with the message given.
 164   
      * @param msg message to be displayed.
 165   
      * @param confirm if true then use YES/NO buttons.
 166   
      * @return YES_OPTION or NO_OPTION.
 167   
      */
 168  3
     int showDialog(final String msg, final boolean confirm) {
 169  3
         EchoDialog ed = new EchoDialog(msg, confirm);
 170  3
         ed.setVisible(true);
 171   
 
 172  3
         IXMLTestCase tc = getXMLTestCase();
 173   
 
 174  3
         while (!ed.getDialogClosed()) {
 175  4
             if (tc instanceof JFCXMLTestCase) {
 176  0
                 ((JFCXMLTestCase) tc).sleep(1000);
 177   
             } else {
 178  4
                 try {
 179  4
                     Thread.currentThread().sleep(1000);
 180   
                 } catch (InterruptedException ie) {
 181   
                     ;
 182   
                 }
 183   
             }
 184   
         }
 185   
 
 186  3
         return ed.getResult();
 187   
     }
 188   
 
 189   
     /**
 190   
      * <p>Title: EchoDialog non-modal dialog for echos</p>
 191   
      * <p>Description: Non modal dialog for echo/confirm.
 192   
      * This dialog allows Application to be exercized.
 193   
      * <p>Copyright: Copyright (c) 2003</p>
 194   
      * <p>Company: JFCUnit Project</p>
 195   
      * @author Kevin Wilson
 196   
      * @version 1.0
 197   
      */
 198   
     private class EchoDialog extends JDialog implements ActionListener {
 199   
         /**
 200   
          * NO Button.
 201   
          */
 202   
         private JButton m_no;
 203   
 
 204   
         /**
 205   
          * Yes Button.
 206   
          */
 207   
         private JButton m_ok;
 208   
 
 209   
         /**
 210   
          * Private result of the dialog.
 211   
          */
 212   
         private volatile boolean m_dislogClosed = false;
 213   
 
 214   
         /**
 215   
          * Result of the dialog.
 216   
          */
 217   
         private int m_result = JOptionPane.DEFAULT_OPTION;
 218   
 
 219   
         /**
 220   
          * Constructor.
 221   
          * @param message Message to be displayed.
 222   
          * @param confirm true if YES/NO buttons false for OK button.
 223   
          */
 224  3
         public EchoDialog(final String message, final boolean confirm) {
 225  3
             JLabel msg = new JLabel(message);
 226   
 
 227  3
             m_ok = new JButton("OK");
 228   
 
 229  3
             if (confirm) {
 230  2
                 m_ok.setText("Yes");
 231   
             }
 232   
 
 233  3
             m_ok.addActionListener(this);
 234  3
             m_no = new JButton("No");
 235  3
             m_no.addActionListener(this);
 236  3
             m_no.setVisible(confirm);
 237   
 
 238  3
             JPanel buttonPanel = new JPanel();
 239  3
             buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
 240  3
             buttonPanel.add(Box.createHorizontalGlue());
 241  3
             buttonPanel.add(m_ok);
 242  3
             buttonPanel.add(m_no);
 243  3
             buttonPanel.add(Box.createHorizontalGlue());
 244   
 
 245  3
             JPanel panel = new JPanel();
 246  3
             panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
 247  3
             panel.add(msg);
 248  3
             panel.add(buttonPanel);
 249  3
             setContentPane(panel);
 250  3
             this.setModal(false);
 251  3
             pack();
 252   
         }
 253   
 
 254   
         /**
 255   
          * Get the dialog closed state.
 256   
          * @return true if the dialog was closed.
 257   
          */
 258  7
         public boolean getDialogClosed() {
 259  7
             return m_dislogClosed;
 260   
         }
 261   
 
 262   
         /**
 263   
          * Get the result of the dialog.
 264   
          * @return the result of the dialog YES_OPTION, NO_OPTION.
 265   
          */
 266  3
         public int getResult() {
 267  3
             return m_result;
 268   
         }
 269   
 
 270   
         /**
 271   
          * Action handler for this dialog.
 272   
          * @param ae ActionEvent to be consumed.
 273   
          */
 274  3
         public void actionPerformed(final ActionEvent ae) {
 275  3
             Object source = ae.getSource();
 276   
 
 277  3
             if (source == m_ok) {
 278  2
                 m_result = YES_OPTION;
 279  1
             } else if (source == m_no) {
 280  1
                 m_result = NO_OPTION;
 281   
             }
 282   
 
 283  3
             this.setVisible(false);
 284  3
             this.dispose();
 285  3
             m_ok               = null;
 286  3
             m_no               = null;
 287  3
             m_dislogClosed     = true;
 288   
         }
 289   
     }
 290   
 }
 291