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 }