001: /*--
002: $Id: ButtonGroupTest.java,v 1.2 2005/06/01 00:04:36 wolfpaulus Exp $
003:
004: Copyright (C) 2003-2007 Wolf Paulus.
005: All rights reserved.
006:
007: Redistribution and use in source and binary forms, with or without
008: modification, are permitted provided that the following conditions
009: are met:
010:
011: 1. Redistributions of source code must retain the above copyright
012: notice, this list of conditions, and the following disclaimer.
013:
014: 2. Redistributions in binary form must reproduce the above copyright
015: notice, this list of conditions, and the disclaimer that follows
016: these conditions in the documentation and/or other materials provided
017: with the distribution.
018:
019: 3. The end-user documentation included with the redistribution,
020: if any, must include the following acknowledgment:
021: "This product includes software developed by the
022: SWIXML Project (http://www.swixml.org/)."
023: Alternately, this acknowledgment may appear in the software itself,
024: if and wherever such third-party acknowledgments normally appear.
025:
026: 4. The name "Swixml" must not be used to endorse or promote products
027: derived from this software without prior written permission. For
028: written permission, please contact <info_AT_swixml_DOT_org>
029:
030: 5. Products derived from this software may not be called "Swixml",
031: nor may "Swixml" appear in their name, without prior written
032: permission from the Swixml Project Management.
033:
034: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
035: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
036: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
037: DISCLAIMED. IN NO EVENT SHALL THE SWIXML PROJECT OR ITS
038: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
039: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
040: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
041: USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
042: ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
043: OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
044: OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
045: SUCH DAMAGE.
046: ====================================================================
047:
048: This software consists of voluntary contributions made by many
049: individuals on behalf of the Swixml Project and was originally
050: created by Wolf Paulus <wolf_AT_swixml_DOT_org>. For more information
051: on the Swixml Project, please see <http://www.swixml.org/>.
052: */
053: package org.swixml;
054:
055: import junit.framework.TestCase;
056:
057: import javax.swing.*;
058: import java.awt.*;
059: import java.util.Enumeration;
060:
061: /**
062: * The somewhat odd ButtonGroup class doesn't really fit into the way Swixml deals with
063: * objects it has instatiated. It therefore deserves its very own test class.
064: */
065: public class ButtonGroupTest extends TestCase {
066:
067: public static final String DESCRIPTOR = "xml/mappings.xml";
068: private Container container;
069: private SwingEngine se;
070:
071: private JRadioButton am, fm;
072: private ButtonGroup radio;
073:
074: public ButtonGroupTest() {
075: super ("Test the Mapping and behavior of a ButtonGroup.");
076: }
077:
078: /**
079: * Renders the test GUI into the container field.<br>
080: * Note: Like with every testcase, the setup method is going to be performed before
081: * the execution of every test..() method.
082: *
083: * @throws Exception
084: */
085: public void setUp() throws Exception {
086: se = new SwingEngine(this );
087: container = se.render(MappingTest.DESCRIPTOR);
088: }
089:
090: /**
091: * Clears the container
092: */
093: public void teardown() {
094: se = null;
095: container.removeAll();
096: container = null;
097: }
098:
099: /**
100: * Tests if the Fields were correctly initialized/mapped by the SwingEngine.
101: */
102: public void testMapping() {
103: TestCase
104: .assertTrue(
105: "IDMap's EntrySet needs to contain the ButtonGroup's ID",
106: se.getIdMap().containsKey("radio"));
107: TestCase
108: .assertNotNull(
109: "Private Field, whose names have a matching ids the the XML descriptor should be initializd by the SwingEngine.",
110: radio);
111: TestCase
112: .assertNotNull(
113: "Public Fields, whose names have matching ids the the XML descriptor should be initializd by the SwingEngine.",
114: am);
115: TestCase
116: .assertNotNull(
117: "Public Fields, whose names have matching ids the the XML descriptor should be initializd by the SwingEngine.",
118: fm);
119: }
120:
121: /**
122: * Test that one and only one of the buttons in the group can be selected
123: */
124: public void testXOR() {
125: am.setSelected(true);
126: TestCase.assertTrue(am.isSelected());
127: TestCase
128: .assertFalse(
129: "Only one RadioButton in the group should be flagged selected.",
130: fm.isSelected());
131: fm.setSelected(true);
132: TestCase
133: .assertFalse(
134: "Only one RadioButton in the group should be flagged selected.",
135: am.isSelected());
136: TestCase.assertTrue(fm.isSelected());
137: }
138:
139: /**
140: * Test that the buttons are actually being added into the button group
141: */
142: public void testStructure() {
143: Enumeration e = radio.getElements();
144: while (e.hasMoreElements()) {
145: Object obj = e.nextElement();
146: TestCase.assertTrue(am.equals(obj) ^ fm.equals(obj));
147: }
148: TestCase.assertEquals(
149: "There should be two buttons in this group", radio
150: .getButtonCount(), 2);
151: }
152: }
|