1 /*
   2  * Copyright (c) 2010, 2015, 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 test.javafx.scene.control;
  27 
  28 import static test.com.sun.javafx.scene.control.infrastructure.ControlTestUtils.*;
  29 
  30 import test.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.beans.value.ChangeListener;
  37 import javafx.beans.value.ObservableValue;
  38 import javafx.scene.Node;
  39 import javafx.scene.control.RadioMenuItem;
  40 import javafx.scene.control.ToggleGroup;
  41 import javafx.scene.shape.Rectangle;
  42 import static org.junit.Assert.*;
  43 
  44 
  45 import org.junit.Before;
  46 import org.junit.Ignore;
  47 import org.junit.Test;
  48 
  49 /**
  50  *
  51  * @author srikalyc
  52  */
  53 public class RadioMenuItemTest {
  54     private ToggleGroup toggleGroup;
  55     private RadioMenuItem radioMenuItem, rmi;//Empty string
  56     private RadioMenuItem radioMenuItemTwoArg;
  57     private Node node;
  58     private Toolkit tk;
  59 
  60     @Before public void setup() {
  61         tk = (StubToolkit)Toolkit.getToolkit();//This step is not needed (Just to make sure StubToolkit is loaded into VM)
  62         node = new Rectangle();
  63         toggleGroup = new ToggleGroup();
  64         radioMenuItem = rmi = new RadioMenuItem("one");
  65         radioMenuItemTwoArg = new RadioMenuItem("two", node);
  66     }
  67 
  68 
  69 
  70     /*********************************************************************
  71      * Tests for default values                                         *
  72      ********************************************************************/
  73 
  74     @Test public void oneArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  75         assertStyleClassContains(radioMenuItem, "radio-menu-item");
  76     }
  77     @Test public void twoArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  78         assertStyleClassContains(radioMenuItemTwoArg, "radio-menu-item");
  79     }
  80 
  81     @Test public void defaultTxtNotNull() {
  82         assertNotNull(radioMenuItem.getText());
  83         assertEquals(radioMenuItem.getText(), "one");
  84     }
  85 
  86     @Test public void twoArgConstructorGraphicNotNull() {
  87         assertNotNull(radioMenuItemTwoArg.getGraphic());
  88         assertSame(radioMenuItemTwoArg.getGraphic(), node);
  89     }
  90 
  91     @Test public void defaultSelected() {
  92         assertFalse(radioMenuItem.isSelected());
  93     }
  94 
  95 
  96     /*********************************************************************
  97      * Tests for property binding                                        *
  98      ********************************************************************/
  99 
 100     @Test public void checkSelectedPropertyBind() {
 101         BooleanProperty objPr = new SimpleBooleanProperty(true);
 102         radioMenuItem.selectedProperty().bind(objPr);
 103         assertTrue("selectedProperty cannot be bound", radioMenuItem.selectedProperty().getValue());
 104         objPr.setValue(false);
 105         assertFalse("selectedProperty cannot be bound", radioMenuItem.selectedProperty().getValue());
 106     }
 107 
 108     @Test public void checkToggleGroupPropertyBind() {
 109         ObjectProperty objPr = new SimpleObjectProperty<ToggleGroup>(null);
 110         radioMenuItem.toggleGroupProperty().bind(objPr);
 111         assertNull("toggleGroupProperty cannot be bound", radioMenuItem.toggleGroupProperty().getValue());
 112         objPr.setValue(toggleGroup);
 113         assertSame("toggleGroupProperty cannot be bound", radioMenuItem.toggleGroupProperty().getValue(), toggleGroup);
 114     }
 115 
 116     @Test public void selectedPropertyHasBeanReference() {
 117         assertSame(radioMenuItem, radioMenuItem.selectedProperty().getBean());
 118     }
 119 
 120     @Test public void selectedPropertyHasName() {
 121         assertEquals("selected", radioMenuItem.selectedProperty().getName());
 122     }
 123 
 124     @Test public void toggleGroupPropertyHasBeanReference() {
 125         assertSame(radioMenuItem, radioMenuItem.toggleGroupProperty().getBean());
 126     }
 127 
 128     @Test public void toggleGroupPropertyHasName() {
 129         assertEquals("toggleGroup", radioMenuItem.toggleGroupProperty().getName());
 130     }
 131 
 132     /*********************************************************************
 133      * Miscellaneous Tests                                         *
 134      ********************************************************************/
 135     @Test public void setSelectedAndSeeValueIsReflectedInModel() {
 136         radioMenuItem.setSelected(true);
 137         assertTrue(radioMenuItem.selectedProperty().getValue());
 138     }
 139 
 140     @Test public void setSelectedAndSeeValue() {
 141         radioMenuItem.setSelected(false);
 142         assertFalse(radioMenuItem.isSelected());
 143     }
 144 
 145     @Test public void setSelectedTrueAndSeeIfStyleSelectedExists() {
 146         radioMenuItem.setSelected(true);
 147         assertTrue(radioMenuItem.getStyleClass().contains("selected"));
 148     }
 149 
 150     @Test public void setSelectedFalseAndSeeIfStyleSelectedDoesNotExists() {
 151         radioMenuItem.setSelected(false);
 152         assertFalse(radioMenuItem.getStyleClass().contains("selected"));
 153     }
 154 
 155     @Test public void setToggleGroupAndSeeValueIsReflectedInModel() {
 156         radioMenuItem.setToggleGroup(toggleGroup);
 157         assertSame(radioMenuItem.toggleGroupProperty().getValue(), toggleGroup);
 158     }
 159 
 160     @Test public void setToggleGroupAndSeeValue() {
 161         radioMenuItem.setToggleGroup(toggleGroup);
 162         assertSame(radioMenuItem.getToggleGroup(), toggleGroup);
 163     }
 164 
 165     @Test public void oneArgConstructorShouldHaveNoGraphic1() {
 166         RadioMenuItem rmi2 = new RadioMenuItem(null);
 167         assertNull(rmi2.getGraphic());
 168     }
 169 
 170     @Test public void oneArgConstructorShouldHaveNoGraphic2() {
 171         RadioMenuItem rmi2 = new RadioMenuItem("");
 172         assertNull(rmi2.getGraphic());
 173     }
 174 
 175     @Test public void oneArgConstructorShouldHaveNoGraphic3() {
 176         assertNull(rmi.getGraphic());
 177     }
 178 
 179     @Test public void oneArgConstructorShouldHaveSpecifiedString1() {
 180         RadioMenuItem rmi2 = new RadioMenuItem(null);
 181         assertNull(rmi2.getText());
 182     }
 183 
 184     @Test public void oneArgConstructorShouldHaveSpecifiedString2() {
 185         RadioMenuItem rmi2 = new RadioMenuItem("");
 186         assertEquals("", rmi2.getText());
 187     }
 188 
 189     @Test public void oneArgConstructorShouldHaveSpecifiedString3() {
 190         assertEquals("one", rmi.getText());
 191     }
 192 
 193     @Test public void twoArgConstructorShouldHaveSpecifiedGraphic1() {
 194         RadioMenuItem rmi2 = new RadioMenuItem(null, null);
 195         assertNull(rmi2.getGraphic());
 196     }
 197 
 198     @Test public void twoArgConstructorShouldHaveSpecifiedGraphic2() {
 199         Rectangle rect = new Rectangle();
 200         RadioMenuItem rmi2 = new RadioMenuItem("Hello", rect);
 201         assertEquals(rect, rmi2.getGraphic());
 202     }
 203 
 204     @Test public void twoArgConstructorShouldHaveSpecifiedString1() {
 205         RadioMenuItem rmi2 = new RadioMenuItem(null, null);
 206         assertNull(rmi2.getText());
 207     }
 208 
 209     @Test public void twoArgConstructorShouldHaveSpecifiedString2() {
 210         Rectangle rect = new Rectangle();
 211         RadioMenuItem rmi2 = new RadioMenuItem("Hello", rect);
 212         assertEquals("Hello", rmi2.getText());
 213     }
 214 
 215     @Test public void defaultToggleGroup() {
 216         assertNull(rmi.getToggleGroup());
 217     }
 218 
 219     @Test public void setNullToggleGroup() {
 220         rmi.setToggleGroup(null);
 221         assertNull(rmi.getToggleGroup());
 222     }
 223 
 224     @Test public void setSpecifiedToggleGroup() {
 225         ToggleGroup tg = new ToggleGroup();
 226         rmi.setToggleGroup(tg);
 227         assertSame(tg, rmi.getToggleGroup());
 228     }
 229 
 230     @Test public void getUnspecifiedToggleGroupProperty1() {
 231         assertNotNull(rmi.toggleGroupProperty());
 232     }
 233 
 234     @Test public void getUnspecifiedToggleGroupProperty2() {
 235         RadioMenuItem rmi2 = new RadioMenuItem("", null);
 236         assertNotNull(rmi2.toggleGroupProperty());
 237     }
 238 
 239     // calling toggleGroupProperty does not ensure the value of toggleGroup
 240     // to be non null
 241     @Ignore
 242     @Test public void unsetToggleGroupButNotNull() {
 243         rmi.toggleGroupProperty();
 244         assertNotNull(rmi.getToggleGroup());
 245     }
 246 
 247     @Test public void toggleGroupCanBeBound() {
 248         ToggleGroup tg = new ToggleGroup();
 249         SimpleObjectProperty<ToggleGroup> other = new SimpleObjectProperty<ToggleGroup>(rmi, "toggleGroup", tg);
 250         rmi.toggleGroupProperty().bind(other);
 251         assertSame(tg, rmi.getToggleGroup());
 252     }
 253 
 254      @Test public void getUnspecifiedSelected() {
 255         assertEquals(false, rmi.isSelected());
 256     }
 257 
 258     @Test public void setTrueSelected() {
 259         rmi.setSelected(true);
 260         assertTrue(rmi.isSelected());
 261     }
 262 
 263     @Test public void setFalseSelected() {
 264         rmi.setSelected(false);
 265         assertFalse(rmi.isSelected());
 266     }
 267 
 268     @Test public void selectedNotSetButNotNull() {
 269         rmi.selectedProperty();
 270         assertNotNull(rmi.isSelected());
 271     }
 272 
 273     @Test public void selectedCanBeBound1() {
 274         SimpleBooleanProperty other = new SimpleBooleanProperty(rmi, "selected", false);
 275         rmi.selectedProperty().bind(other);
 276         assertEquals(other.get(), rmi.isSelected());
 277     }
 278 
 279     @Test public void selectedCanBeBound2() {
 280         SimpleBooleanProperty other = new SimpleBooleanProperty(rmi, "selected", true);
 281         rmi.selectedProperty().bind(other);
 282         assertEquals(other.get(), rmi.isSelected());
 283     }
 284 
 285     private boolean Result8189677 = false;
 286     @Test public void extraNullValueInSelectedProperty_JDK_8189677() {
 287        RadioMenuItem b1 = new RadioMenuItem("ONE");
 288        RadioMenuItem b2 = new RadioMenuItem("TWO");
 289        ToggleGroup group = new ToggleGroup();
 290        group.getToggles().addAll(b1, b2);
 291        group.selectToggle(b1);
 292 
 293        group.selectedToggleProperty().addListener(new ChangeListener() {
 294             @Override public void changed(ObservableValue o, Object oldVal,
 295                                           Object newVal) {
 296                 if (newVal == null || oldVal == null) {
 297                     Result8189677 = true;
 298                 }
 299             }
 300        });
 301 
 302        group.selectToggle(b2);
 303        group.selectToggle(b1);
 304 
 305        assertTrue(b1.isSelected());
 306        assertFalse(Result8189677);
 307     }
 308 }