1 /* 2 * Copyright (c) 2011, 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 test.javafx.binding.expression; 27 28 import static org.junit.Assert.assertEquals; 29 import static org.junit.Assert.assertTrue; 30 import javafx.beans.binding.BooleanBinding; 31 import javafx.beans.binding.BooleanExpression; 32 import javafx.beans.binding.ObjectExpression; 33 import javafx.beans.binding.StringBinding; 34 import javafx.beans.property.BooleanProperty; 35 import javafx.beans.property.SimpleBooleanProperty; 36 import javafx.beans.value.ObservableBooleanValueStub; 37 import javafx.beans.value.ObservableValue; 38 import javafx.beans.value.ObservableValueStub; 39 import test.javafx.binding.DependencyUtils; 40 import javafx.collections.FXCollections; 41 42 import org.junit.Before; 43 import org.junit.Test; 44 45 public class BooleanExpressionTest { 46 47 private BooleanProperty op1; 48 private BooleanProperty op2; 49 50 @Before 51 public void setUp() { 52 op1 = new SimpleBooleanProperty(true); 53 op2 = new SimpleBooleanProperty(false); 54 } 55 56 @Test 57 public void testGetters() { 58 assertEquals(true, op1.get()); 59 assertEquals(Boolean.TRUE, op1.getValue()); 60 61 assertEquals(false, op2.get()); 62 assertEquals(Boolean.FALSE, op2.getValue()); 63 } 64 65 @Test 66 public void testAND() { 67 final BooleanExpression exp = op1.and(op2); 68 assertEquals(true && false, exp.get()); 69 70 op1.set(false); 71 assertEquals(false && false, exp.get()); 72 73 op2.set(true); 74 assertEquals(false && true, exp.get()); 75 76 op1.set(true); 77 assertEquals(true && true, exp.get()); 78 } 79 80 @Test 81 public void testOR() { 82 final BooleanExpression exp = op1.or(op2); 83 assertEquals(true || false, exp.get()); 84 85 op1.set(false); 86 assertEquals(false || false, exp.get()); 87 88 op2.set(true); 89 assertEquals(false || true, exp.get()); 90 91 op1.set(true); 92 assertEquals(true || true, exp.get()); 93 } 94 95 @Test 96 public void testNOT() { 97 final BooleanExpression exp = op1.not(); 98 assertEquals(false, exp.get()); 99 100 op1.set(false); 101 assertEquals(true, exp.get()); 102 103 op1.set(true); 104 assertEquals(false, exp.get()); 105 } 106 107 @Test 108 public void testEquals() { 109 final BooleanExpression exp = op1.isEqualTo(op2); 110 assertEquals(true == false, exp.get()); 111 112 op1.set(false); 113 assertEquals(false == false, exp.get()); 114 115 op2.set(true); 116 assertEquals(false == true, exp.get()); 117 118 op1.set(true); 119 assertEquals(true == true, exp.get()); 120 } 121 122 @Test 123 public void testNotEquals() { 124 final BooleanExpression exp = op1.isNotEqualTo(op2); 125 assertEquals(true != false, exp.get()); 126 127 op1.set(false); 128 assertEquals(false != false, exp.get()); 129 130 op2.set(true); 131 assertEquals(false != true, exp.get()); 132 133 op1.set(true); 134 assertEquals(true != true, exp.get()); 135 } 136 137 @Test 138 public void testAsString() { 139 final StringBinding binding = op1.asString(); 140 DependencyUtils.checkDependencies(binding.getDependencies(), op1); 141 assertEquals("true", binding.get()); 142 143 op1.set(false); 144 assertEquals("false", binding.get()); 145 146 op1.set(true); 147 assertEquals("true", binding.get()); 148 } 149 150 @Test 151 public void testAsObject() { 152 final ObservableBooleanValueStub valueModel = new ObservableBooleanValueStub(); 153 final ObjectExpression<Boolean> exp = BooleanExpression.booleanExpression(valueModel).asObject(); 154 155 assertEquals(Boolean.FALSE, exp.get()); 156 valueModel.set(true); 157 assertEquals(Boolean.TRUE, exp.get()); 158 valueModel.set(false); 159 assertEquals(Boolean.FALSE, exp.get()); 160 } 161 162 @Test 163 public void testFactory() { 164 final ObservableBooleanValueStub valueModel = new ObservableBooleanValueStub(); 165 final BooleanExpression exp = BooleanExpression.booleanExpression(valueModel); 166 167 assertTrue(exp instanceof BooleanBinding); 168 assertEquals(FXCollections.singletonObservableList(valueModel), ((BooleanBinding)exp).getDependencies()); 169 170 assertEquals(false, exp.get()); 171 valueModel.set(true); 172 assertEquals(true, exp.get()); 173 valueModel.set(false); 174 assertEquals(false, exp.get()); 175 176 // make sure we do not create unnecessary bindings 177 assertEquals(op1, BooleanExpression.booleanExpression(op1)); 178 } 179 180 @Test 181 public void testObjectToBoolean() { 182 final ObservableValueStub<Boolean> valueModel = new ObservableValueStub<Boolean>(); 183 final BooleanExpression exp = BooleanExpression.booleanExpression(valueModel); 184 185 assertTrue(exp instanceof BooleanBinding); 186 assertEquals(FXCollections.singletonObservableList(valueModel), ((BooleanBinding)exp).getDependencies()); 187 188 assertEquals(false, exp.get()); 189 valueModel.set(true); 190 assertEquals(true, exp.get()); 191 valueModel.set(false); 192 assertEquals(false, exp.get()); 193 194 // make sure we do not create unnecessary bindings 195 assertEquals(op1, BooleanExpression.booleanExpression((ObservableValue)op1)); 196 } 197 198 @Test(expected=NullPointerException.class) 199 public void testFactory_Null() { 200 BooleanExpression.booleanExpression(null); 201 } 202 }