1 /*
   2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.scene.control;
  27 
  28 import static com.sun.javafx.scene.control.infrastructure.ControlTestUtils.*;
  29 
  30 import com.sun.javafx.pgstub.StubToolkit;
  31 import com.sun.javafx.tk.Toolkit;
  32 import javafx.beans.property.BooleanProperty;
  33 import javafx.beans.property.ObjectProperty;
  34 import javafx.beans.property.SimpleBooleanProperty;
  35 import javafx.beans.property.SimpleObjectProperty;
  36 import javafx.scene.Node;
  37 import javafx.scene.shape.Rectangle;
  38 import static org.junit.Assert.*;
  39 
  40 
  41 import org.junit.Before;
  42 import org.junit.Ignore;
  43 import org.junit.Test;
  44 
  45 /**
  46  *
  47  * @author srikalyc
  48  */
  49 public class RadioMenuItemTest {
  50     private ToggleGroup toggleGroup;
  51     private RadioMenuItem radioMenuItem, rmi;//Empty string
  52     private RadioMenuItem radioMenuItemTwoArg;
  53     private Node node;
  54     private Toolkit tk;
  55 
  56     @Before public void setup() {
  57         tk = (StubToolkit)Toolkit.getToolkit();//This step is not needed (Just to make sure StubToolkit is loaded into VM)
  58         node = new Rectangle();
  59         toggleGroup = new ToggleGroup();
  60         radioMenuItem = rmi = new RadioMenuItem("one");
  61         radioMenuItemTwoArg = new RadioMenuItem("two", node);
  62     }
  63     
  64    
  65    
  66     /*********************************************************************
  67      * Tests for default values                                         *
  68      ********************************************************************/
  69     
  70     @Test public void oneArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  71         assertStyleClassContains(radioMenuItem, "radio-menu-item");
  72     }
  73     @Test public void twoArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  74         assertStyleClassContains(radioMenuItemTwoArg, "radio-menu-item");
  75     }
  76     
  77     @Test public void defaultTxtNotNull() {
  78         assertNotNull(radioMenuItem.getText());
  79         assertEquals(radioMenuItem.getText(), "one");
  80     }
  81 
  82     @Test public void twoArgConstructorGraphicNotNull() {
  83         assertNotNull(radioMenuItemTwoArg.getGraphic());
  84         assertSame(radioMenuItemTwoArg.getGraphic(), node);
  85     }
  86 
  87     @Test public void defaultSelected() {
  88         assertFalse(radioMenuItem.isSelected());
  89     }
  90 
  91     
  92     /*********************************************************************
  93      * Tests for property binding                                        *
  94      ********************************************************************/
  95     
  96     @Test public void checkSelectedPropertyBind() {
  97         BooleanProperty objPr = new SimpleBooleanProperty(true);
  98         radioMenuItem.selectedProperty().bind(objPr);
  99         assertTrue("selectedProperty cannot be bound", radioMenuItem.selectedProperty().getValue());
 100         objPr.setValue(false);
 101         assertFalse("selectedProperty cannot be bound", radioMenuItem.selectedProperty().getValue());
 102     }
 103     
 104     @Test public void checkToggleGroupPropertyBind() {
 105         ObjectProperty objPr = new SimpleObjectProperty<ToggleGroup>(null);
 106         radioMenuItem.toggleGroupProperty().bind(objPr);
 107         assertNull("toggleGroupProperty cannot be bound", radioMenuItem.toggleGroupProperty().getValue());
 108         objPr.setValue(toggleGroup);
 109         assertSame("toggleGroupProperty cannot be bound", radioMenuItem.toggleGroupProperty().getValue(), toggleGroup);
 110     }
 111     
 112     @Test public void selectedPropertyHasBeanReference() {
 113         assertSame(radioMenuItem, radioMenuItem.selectedProperty().getBean());
 114     }
 115 
 116     @Test public void selectedPropertyHasName() {
 117         assertEquals("selected", radioMenuItem.selectedProperty().getName());
 118     }
 119 
 120     @Test public void toggleGroupPropertyHasBeanReference() {
 121         assertSame(radioMenuItem, radioMenuItem.toggleGroupProperty().getBean());
 122     }
 123 
 124     @Test public void toggleGroupPropertyHasName() {
 125         assertEquals("toggleGroup", radioMenuItem.toggleGroupProperty().getName());
 126     }
 127 
 128     /*********************************************************************
 129      * Miscellaneous Tests                                         *
 130      ********************************************************************/
 131     @Test public void setSelectedAndSeeValueIsReflectedInModel() {
 132         radioMenuItem.setSelected(true);
 133         assertTrue(radioMenuItem.selectedProperty().getValue());
 134     }
 135     
 136     @Test public void setSelectedAndSeeValue() {
 137         radioMenuItem.setSelected(false);
 138         assertFalse(radioMenuItem.isSelected());
 139     }
 140     
 141     @Test public void setSelectedTrueAndSeeIfStyleSelectedExists() {
 142         radioMenuItem.setSelected(true);
 143         assertTrue(radioMenuItem.getStyleClass().contains("selected"));
 144     }
 145     
 146     @Test public void setSelectedFalseAndSeeIfStyleSelectedDoesNotExists() {
 147         radioMenuItem.setSelected(false);
 148         assertFalse(radioMenuItem.getStyleClass().contains("selected"));
 149     }
 150     
 151     @Test public void setToggleGroupAndSeeValueIsReflectedInModel() {
 152         radioMenuItem.setToggleGroup(toggleGroup);
 153         assertSame(radioMenuItem.toggleGroupProperty().getValue(), toggleGroup);
 154     }
 155     
 156     @Test public void setToggleGroupAndSeeValue() {
 157         radioMenuItem.setToggleGroup(toggleGroup);
 158         assertSame(radioMenuItem.getToggleGroup(), toggleGroup);
 159     }
 160 
 161     @Test public void oneArgConstructorShouldHaveNoGraphic1() {
 162         RadioMenuItem rmi2 = new RadioMenuItem(null);
 163         assertNull(rmi2.getGraphic());
 164     }
 165 
 166     @Test public void oneArgConstructorShouldHaveNoGraphic2() {
 167         RadioMenuItem rmi2 = new RadioMenuItem("");
 168         assertNull(rmi2.getGraphic());
 169     }
 170 
 171     @Test public void oneArgConstructorShouldHaveNoGraphic3() {
 172         assertNull(rmi.getGraphic());
 173     }
 174 
 175     @Test public void oneArgConstructorShouldHaveSpecifiedString1() {
 176         RadioMenuItem rmi2 = new RadioMenuItem(null);
 177         assertNull(rmi2.getText());
 178     }
 179 
 180     @Test public void oneArgConstructorShouldHaveSpecifiedString2() {
 181         RadioMenuItem rmi2 = new RadioMenuItem("");
 182         assertEquals("", rmi2.getText());
 183     }
 184 
 185     @Test public void oneArgConstructorShouldHaveSpecifiedString3() {
 186         assertEquals("one", rmi.getText());
 187     }
 188 
 189     @Test public void twoArgConstructorShouldHaveSpecifiedGraphic1() {
 190         RadioMenuItem rmi2 = new RadioMenuItem(null, null);
 191         assertNull(rmi2.getGraphic());
 192     }
 193 
 194     @Test public void twoArgConstructorShouldHaveSpecifiedGraphic2() {
 195         Rectangle rect = new Rectangle();
 196         RadioMenuItem rmi2 = new RadioMenuItem("Hello", rect);
 197         assertEquals(rect, rmi2.getGraphic());
 198     }
 199 
 200     @Test public void twoArgConstructorShouldHaveSpecifiedString1() {
 201         RadioMenuItem rmi2 = new RadioMenuItem(null, null);
 202         assertNull(rmi2.getText());
 203     }
 204 
 205     @Test public void twoArgConstructorShouldHaveSpecifiedString2() {
 206         Rectangle rect = new Rectangle();
 207         RadioMenuItem rmi2 = new RadioMenuItem("Hello", rect);
 208         assertEquals("Hello", rmi2.getText());
 209     }
 210 
 211     @Test public void defaultToggleGroup() {
 212         assertNull(rmi.getToggleGroup());
 213     }
 214 
 215     @Test public void setNullToggleGroup() {
 216         rmi.setToggleGroup(null);
 217         assertNull(rmi.getToggleGroup());
 218     }
 219 
 220     @Test public void setSpecifiedToggleGroup() {
 221         ToggleGroup tg = new ToggleGroup();
 222         rmi.setToggleGroup(tg);
 223         assertSame(tg, rmi.getToggleGroup());
 224     }
 225 
 226     @Test public void getUnspecifiedToggleGroupProperty1() {
 227         assertNotNull(rmi.toggleGroupProperty());
 228     }
 229 
 230     @Test public void getUnspecifiedToggleGroupProperty2() {
 231         RadioMenuItem rmi2 = new RadioMenuItem("", null);
 232         assertNotNull(rmi2.toggleGroupProperty());
 233     }
 234 
 235     // calling toggleGroupProperty does not ensure the value of toggleGroup
 236     // to be non null
 237     @Ignore
 238     @Test public void unsetToggleGroupButNotNull() {
 239         rmi.toggleGroupProperty();
 240         assertNotNull(rmi.getToggleGroup());
 241     }
 242 
 243     @Test public void toggleGroupCanBeBound() {
 244         ToggleGroup tg = new ToggleGroup();
 245         SimpleObjectProperty<ToggleGroup> other = new SimpleObjectProperty<ToggleGroup>(rmi, "toggleGroup", tg);
 246         rmi.toggleGroupProperty().bind(other);
 247         assertSame(tg, rmi.getToggleGroup());
 248     }
 249 
 250      @Test public void getUnspecifiedSelected() {
 251         assertEquals(false, rmi.isSelected());
 252     }
 253 
 254     @Test public void setTrueSelected() {
 255         rmi.setSelected(true);
 256         assertTrue(rmi.isSelected());
 257     }
 258 
 259     @Test public void setFalseSelected() {
 260         rmi.setSelected(false);
 261         assertFalse(rmi.isSelected());
 262     }
 263 
 264     @Test public void selectedNotSetButNotNull() {
 265         rmi.selectedProperty();
 266         assertNotNull(rmi.isSelected());
 267     }
 268 
 269     @Test public void selectedCanBeBound1() {
 270         SimpleBooleanProperty other = new SimpleBooleanProperty(rmi, "selected", false);
 271         rmi.selectedProperty().bind(other);
 272         assertEquals(other.get(), rmi.isSelected());
 273     }
 274 
 275     @Test public void selectedCanBeBound2() {
 276         SimpleBooleanProperty other = new SimpleBooleanProperty(rmi, "selected", true);
 277         rmi.selectedProperty().bind(other);
 278         assertEquals(other.get(), rmi.isSelected());
 279     }
 280     
 281     
 282 }