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 }