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 javafx.beans.property.BooleanProperty;
  29 import javafx.beans.property.ObjectProperty;
  30 import javafx.beans.property.SimpleBooleanProperty;
  31 import javafx.beans.property.SimpleObjectProperty;
  32 import javafx.scene.Node;
  33 import javafx.scene.shape.Rectangle;
  34 
  35 import com.sun.javafx.pgstub.StubToolkit;
  36 import com.sun.javafx.tk.Toolkit;
  37 import org.junit.Before;
  38 import org.junit.Ignore;
  39 import org.junit.Test;
  40 
  41 import static com.sun.javafx.scene.control.infrastructure.ControlTestUtils.*;
  42 import static org.junit.Assert.*;
  43 
  44 /**
  45  *
  46  * @author srikalyc
  47  */
  48 public class CustomMenuItemTest {
  49     private CustomMenuItem customMenuItem, cmi;//Empty string
  50     private CustomMenuItem customMenuItemOneArg;
  51     private CustomMenuItem customMenuItemTwoArg;
  52     private Node node;
  53     private Toolkit tk;
  54 
  55     @Before public void setup() {
  56         tk = (StubToolkit)Toolkit.getToolkit();//This step is not needed (Just to make sure StubToolkit is loaded into VM)
  57         node = new Rectangle();
  58         customMenuItem = cmi = new CustomMenuItem();
  59         customMenuItemOneArg = new CustomMenuItem(node);
  60         customMenuItemTwoArg = new CustomMenuItem(node, false);
  61     }
  62     
  63    
  64    
  65     /*********************************************************************
  66      * Tests for default values                                         *
  67      ********************************************************************/
  68     
  69     @Test public void defaultConstructorShouldSetStyleClassTo_custommenuitem() {
  70         assertStyleClassContains(customMenuItem, "custom-menu-item");
  71     }
  72     @Test public void oneArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  73         assertStyleClassContains(customMenuItemOneArg, "custom-menu-item");
  74     }
  75     @Test public void twoArgConstructorShouldSetStyleClassTo_checkmenuitem() {
  76         assertStyleClassContains(customMenuItemTwoArg, "custom-menu-item");
  77     }
  78     
  79     @Test public void defaultNodeNull() {
  80         assertNull(customMenuItem.getContent());
  81     }
  82 
  83     @Test public void oneArgConstructorNodeNotNull() {
  84         assertNotNull(customMenuItemOneArg.getContent());
  85         assertSame(customMenuItemOneArg.getContent(), node);
  86     }
  87 
  88 
  89     
  90     /*********************************************************************
  91      * Tests for property binding                                        *
  92      ********************************************************************/
  93     
  94     @Test public void checkHideOnClickPropertyBind() {
  95         BooleanProperty objPr = new SimpleBooleanProperty(true);
  96         customMenuItem.hideOnClickProperty().bind(objPr);
  97         assertTrue("hideOnClickProperty cannot be bound", customMenuItem.hideOnClickProperty().getValue());
  98         objPr.setValue(false);
  99         assertFalse("hideOnClickProperty cannot be bound", customMenuItem.hideOnClickProperty().getValue());
 100     }
 101     
 102     @Test public void checkContentPropertyBind() {
 103         ObjectProperty objPr = new SimpleObjectProperty<Node>(null);
 104         customMenuItem.contentProperty().bind(objPr);
 105         assertNull("contentProperty cannot be bound", customMenuItem.contentProperty().getValue());
 106         objPr.setValue(node);
 107         assertSame("contentProperty cannot be bound", customMenuItem.contentProperty().getValue(), node);
 108     }
 109     
 110     @Test public void contentPropertyHasBeanReference() {
 111         assertSame(customMenuItem, customMenuItem.contentProperty().getBean());
 112     }
 113 
 114     @Test public void selectedPropertyHasName() {
 115         assertEquals("content", customMenuItem.contentProperty().getName());
 116     }
 117 
 118     /*********************************************************************
 119      * Miscellaneous Tests                                         *
 120      ********************************************************************/
 121     @Test public void setContentAndSeeValueIsReflectedInModel() {
 122         customMenuItem.setContent(node);
 123         assertSame(customMenuItem.contentProperty().getValue(), node);
 124     }
 125     
 126     @Test public void setContentAndSeeValue() {
 127         customMenuItem.setContent(node);
 128         assertSame(customMenuItem.getContent(), node);
 129     }
 130 
 131     @Test public void defaultConstructorShouldHaveNoContent() {
 132         assertNull(cmi.getContent());
 133     }
 134 
 135     @Test public void defaultConstructorShouldHaveTrueHideClick() {
 136         assertTrue(cmi.isHideOnClick());
 137     }
 138 
 139     @Test public void defaultConstructorShouldHaveNullGraphic() {
 140         assertNull(cmi.getGraphic());
 141     }
 142 
 143     @Test public void defaultConstructorShouldHaveNullText() {
 144         assertNull(cmi.getText());
 145     }
 146 
 147     @Test public void oneArgConstructorShouldHaveNoContent1() {
 148         CustomMenuItem cmi2 = new CustomMenuItem(null);
 149         assertNull(cmi2.getContent());
 150     }
 151 
 152     @Test public void oneArgConstructorShouldHaveNoContent2() {
 153         Rectangle rect = new Rectangle();
 154         CustomMenuItem cmi2 = new CustomMenuItem(rect);
 155         assertSame(rect, cmi2.getContent());
 156     }
 157 
 158     @Test public void oneArgConstructorShouldHaveTrueHideClick1() {
 159         CustomMenuItem cmi2 = new CustomMenuItem(null);
 160         assertTrue(cmi2.isHideOnClick());
 161     }
 162 
 163     @Test public void oneArgConstructorShouldHaveTrueHideClick2() {
 164         Rectangle rect = new Rectangle();
 165         CustomMenuItem cmi2 = new CustomMenuItem(rect);
 166         assertTrue(cmi2.isHideOnClick());
 167     }
 168 
 169     @Test public void oneArgConstructorShouldHaveNullGraphic() {
 170         Rectangle rect = new Rectangle();
 171         CustomMenuItem cmi2 = new CustomMenuItem(rect);
 172         assertNull(cmi2.getGraphic());
 173     }
 174 
 175     @Test public void oneArgConstructorShouldHaveNullText() {
 176         Rectangle rect = new Rectangle();
 177         CustomMenuItem cmi2 = new CustomMenuItem(rect);
 178         assertNull(cmi2.getText());
 179     }
 180 
 181     @Test public void twoArgConstructorShouldHaveSpecifiedContent1() {
 182         CustomMenuItem cmi2 = new CustomMenuItem(null, true);
 183         assertNull(cmi2.getContent());
 184     }
 185 
 186     @Test public void twoArgConstructorShouldHaveSpecifiedContent2() {
 187         CustomMenuItem cmi2 = new CustomMenuItem(null, false);
 188         assertNull(cmi2.getContent());
 189     }
 190 
 191     @Test public void twoArgConstructorShouldHaveSpecifiedContent3() {
 192         Rectangle rect = new Rectangle();
 193         CustomMenuItem cmi2 = new CustomMenuItem(rect, true);
 194         assertSame(rect, cmi2.getContent());
 195     }
 196 
 197     @Test public void twoArgConstructorShouldHaveSpecifiedContent4() {
 198         Rectangle rect = new Rectangle();
 199         CustomMenuItem cmi2 = new CustomMenuItem(rect, false);
 200         assertSame(rect, cmi2.getContent());
 201     }
 202 
 203     @Test public void twoArgConstructorShouldHaveSpecifiedHideClick1() {
 204         CustomMenuItem cmi2 = new CustomMenuItem(null, true);
 205         assertTrue(cmi2.isHideOnClick());
 206     }
 207 
 208     @Test public void twoArgConstructorShouldHaveSpecifiedHideClick2() {
 209         CustomMenuItem cmi2 = new CustomMenuItem(null, false);
 210         assertFalse(cmi2.isHideOnClick());
 211     }
 212 
 213     @Test public void twoArgConstructorShouldHaveSpecifiedHideClick3() {
 214         Rectangle rect = new Rectangle();
 215         CustomMenuItem cmi2 = new CustomMenuItem(rect, true);
 216         assertTrue(cmi2.isHideOnClick());
 217     }
 218 
 219     @Test public void twoArgConstructorShouldHaveSpecifiedHideClick4() {
 220         Rectangle rect = new Rectangle();
 221         CustomMenuItem cmi2 = new CustomMenuItem(rect, false);
 222         assertFalse(cmi2.isHideOnClick());
 223     }
 224 
 225     @Test public void twoArgConstructorShouldHaveNullGraphic() {
 226         Rectangle rect = new Rectangle();
 227         CustomMenuItem cmi2 = new CustomMenuItem(rect, true);
 228         assertNull(cmi2.getGraphic());
 229     }
 230 
 231     @Test public void twoArgConstructorShouldHaveNullText() {
 232         Rectangle rect = new Rectangle();
 233         CustomMenuItem cmi2 = new CustomMenuItem(rect, true);
 234         assertNull(cmi2.getText());
 235     }
 236 
 237     @Test public void resetContent1() {
 238         Rectangle rect = new Rectangle();
 239         cmi.setContent(rect);
 240         assertSame(rect, cmi.getContent());
 241     }
 242 
 243     @Test public void resetContent2() {
 244         Rectangle rect = new Rectangle();
 245         CustomMenuItem cmi2 = new CustomMenuItem(rect, true);
 246 
 247         Rectangle rect2 = new Rectangle();
 248         cmi2.setContent(rect2);
 249         assertSame(rect2, cmi2.getContent());
 250     }
 251 
 252     @Test public void resetContent3() {
 253         Rectangle rect = new Rectangle();
 254         CustomMenuItem mi2 = new CustomMenuItem(rect, true);
 255 
 256         Rectangle rect2 = null;
 257         mi2.setContent(rect2);
 258         assertNull(mi2.getContent());
 259     }
 260 
 261     @Test public void getUnspecifiedContentProperty1() {
 262         CustomMenuItem cmi2 = new CustomMenuItem();
 263         assertNotNull(cmi2.contentProperty());
 264     }
 265 
 266     @Test public void getUnspecifiedContentProperty2() {
 267         CustomMenuItem cmi2 = new CustomMenuItem(null, true);
 268         assertNotNull(cmi2.contentProperty());
 269     }
 270 
 271     @Ignore("I'm not sure what this test was supposed to test, so ignoring for now.")
 272     @Test public void unsetContentButNotNull() {
 273         CustomMenuItem cmi2 = new CustomMenuItem();
 274         cmi2.contentProperty(); // <-- this line is a no-op, what is it for?
 275         assertNotNull(cmi2.getContent());
 276     }
 277 
 278     @Test public void contentCanBeBound() {
 279         Rectangle rect = new Rectangle();
 280         SimpleObjectProperty<Node> other = new SimpleObjectProperty<Node>(cmi, "content", rect);
 281         cmi.contentProperty().bind(other);
 282         assertEquals(rect, cmi.getContent());
 283     }
 284 
 285     @Test public void getUnspecifiedHideOnClick() {
 286         assertTrue(cmi.isHideOnClick());
 287     }
 288 
 289     @Test public void setTrueHideOnClick() {
 290         cmi.setHideOnClick(true);
 291         assertTrue(cmi.isHideOnClick());
 292     }
 293 
 294     @Test public void setFalseHideOnClick() {
 295         cmi.setHideOnClick(false);
 296         assertFalse(cmi.isHideOnClick());
 297     }
 298 
 299     @Test public void hideOnClickNotSetButNotNull() {
 300         cmi.hideOnClickProperty();
 301         assertNotNull(cmi.isHideOnClick());
 302     }
 303 
 304     @Test public void hideOnClickCanBeBound1() {
 305         SimpleBooleanProperty other = new SimpleBooleanProperty(cmi, "hideOnClick", false);
 306         cmi.hideOnClickProperty().bind(other);
 307         assertEquals(other.get(), cmi.isHideOnClick());
 308     }
 309 
 310     @Test public void hideOnClickCanBeBound2() {
 311         SimpleBooleanProperty other = new SimpleBooleanProperty(cmi, "hideOnClick", true);
 312         cmi.hideOnClickProperty().bind(other);
 313         assertEquals(other.get(), cmi.isHideOnClick());
 314     }
 315     
 316 }