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.DoubleBinding;
  31 import javafx.beans.binding.FloatBinding;
  32 import javafx.beans.binding.FloatExpression;
  33 import javafx.beans.binding.ObjectExpression;
  34 import javafx.beans.property.FloatProperty;
  35 import javafx.beans.property.SimpleFloatProperty;
  36 import javafx.beans.value.ObservableFloatValueStub;
  37 import javafx.beans.value.ObservableValue;
  38 import javafx.beans.value.ObservableValueStub;
  39 import javafx.collections.FXCollections;
  40 
  41 import org.junit.Before;
  42 import org.junit.Test;
  43 
  44 public class FloatExpressionTest {
  45 
  46     private static final float EPSILON = 1e-6f;
  47 
  48     private float data;
  49     private FloatProperty op1;
  50     private double double1;
  51     private float float1;
  52     private long long1;
  53     private int integer1;
  54     private short short1;
  55     private byte byte1;
  56 
  57     @Before
  58     public void setUp() {
  59         data = 2.1f;
  60         op1 = new SimpleFloatProperty(data);
  61         double1 = -234.234;
  62         float1 = 111.9f;
  63         long1 = 2009234L;
  64         integer1 = -234734;
  65         short1 = 9824;
  66         byte1 = -123;
  67     }
  68 
  69     @Test
  70     public void testGetters() {
  71         assertEquals((double)data, op1.doubleValue(), EPSILON);
  72         assertEquals((float)data, op1.floatValue(), EPSILON);
  73         assertEquals((long)data, op1.longValue());
  74         assertEquals((int)data, op1.intValue());
  75     }
  76 
  77     @Test
  78     public void testNegation() {
  79         final FloatBinding binding1 = op1.negate();
  80         assertEquals(-data, binding1.floatValue(), EPSILON);
  81     }
  82 
  83     @Test
  84     public void testPlus() {
  85         final DoubleBinding binding1 = op1.add(double1);
  86         assertEquals(data + double1, binding1.doubleValue(), EPSILON);
  87 
  88         final FloatBinding binding2 = op1.add(float1);
  89         assertEquals(data + float1, binding2.floatValue(), EPSILON);
  90 
  91         final FloatBinding binding3 = op1.add(long1);
  92         assertEquals(data + long1, binding3.floatValue(), EPSILON);
  93 
  94         final FloatBinding binding4 = op1.add(integer1);
  95         assertEquals(data + integer1, binding4.floatValue(), EPSILON);
  96 
  97         final FloatBinding binding5 = op1.add(short1);
  98         assertEquals(data + short1, binding5.floatValue(), EPSILON);
  99 
 100         final FloatBinding binding6 = op1.add(byte1);
 101         assertEquals(data + byte1, binding6.floatValue(), EPSILON);
 102     }
 103 
 104     @Test
 105     public void testMinus() {
 106         final DoubleBinding binding1 = op1.subtract(double1);
 107         assertEquals(data - double1, binding1.doubleValue(), EPSILON);
 108 
 109         final FloatBinding binding2 = op1.subtract(float1);
 110         assertEquals(data - float1, binding2.floatValue(), EPSILON);
 111 
 112         final FloatBinding binding3 = op1.subtract(long1);
 113         assertEquals(data - long1, binding3.floatValue(), EPSILON);
 114 
 115         final FloatBinding binding4 = op1.subtract(integer1);
 116         assertEquals(data - integer1, binding4.floatValue(), EPSILON);
 117 
 118         final FloatBinding binding5 = op1.subtract(short1);
 119         assertEquals(data - short1, binding5.floatValue(), EPSILON);
 120 
 121         final FloatBinding binding6 = op1.subtract(byte1);
 122         assertEquals(data - byte1, binding6.floatValue(), EPSILON);
 123     }
 124 
 125     @Test
 126     public void testTimes() {
 127         final DoubleBinding binding1 = op1.multiply(double1);
 128         assertEquals(data * double1, binding1.doubleValue(), EPSILON);
 129 
 130         final FloatBinding binding2 = op1.multiply(float1);
 131         assertEquals(data * float1, binding2.floatValue(), EPSILON);
 132 
 133         final FloatBinding binding3 = op1.multiply(long1);
 134         assertEquals(data * long1, binding3.floatValue(), EPSILON);
 135 
 136         final FloatBinding binding4 = op1.multiply(integer1);
 137         assertEquals(data * integer1, binding4.floatValue(), EPSILON);
 138 
 139         final FloatBinding binding5 = op1.multiply(short1);
 140         assertEquals(data * short1, binding5.floatValue(), EPSILON);
 141 
 142         final FloatBinding binding6 = op1.multiply(byte1);
 143         assertEquals(data * byte1, binding6.floatValue(), EPSILON);
 144     }
 145 
 146     @Test
 147     public void testDividedBy() {
 148         final DoubleBinding binding1 = op1.divide(double1);
 149         assertEquals(data / double1, binding1.doubleValue(), EPSILON);
 150 
 151         final FloatBinding binding2 = op1.divide(float1);
 152         assertEquals(data / float1, binding2.floatValue(), EPSILON);
 153 
 154         final FloatBinding binding3 = op1.divide(long1);
 155         assertEquals(data / long1, binding3.floatValue(), EPSILON);
 156 
 157         final FloatBinding binding4 = op1.divide(integer1);
 158         assertEquals(data / integer1, binding4.floatValue(), EPSILON);
 159 
 160         final FloatBinding binding5 = op1.divide(short1);
 161         assertEquals(data / short1, binding5.floatValue(), EPSILON);
 162 
 163         final FloatBinding binding6 = op1.divide(byte1);
 164         assertEquals(data / byte1, binding6.floatValue(), EPSILON);
 165     }
 166 
 167     @Test
 168     public void testFactory() {
 169         final ObservableFloatValueStub valueModel = new ObservableFloatValueStub();
 170         final FloatExpression exp = FloatExpression.floatExpression(valueModel);
 171 
 172         assertTrue(exp instanceof FloatBinding);
 173         assertEquals(FXCollections.singletonObservableList(valueModel), ((FloatBinding)exp).getDependencies());
 174 
 175         assertEquals(0.0f, exp.floatValue(), EPSILON);
 176         valueModel.set(data);
 177         assertEquals(data, exp.floatValue(), EPSILON);
 178         valueModel.set(float1);
 179         assertEquals(float1, exp.floatValue(), EPSILON);
 180 
 181         // make sure we do not create unnecessary bindings
 182         assertEquals(op1, FloatExpression.floatExpression(op1));
 183     }
 184     
 185     @Test
 186     public void testAsObject() { 
 187         final ObservableFloatValueStub valueModel = new ObservableFloatValueStub();
 188         final ObjectExpression<Float> exp = FloatExpression.floatExpression(valueModel).asObject();
 189         
 190         assertEquals(0.0f, exp.getValue(), EPSILON);
 191         valueModel.set(data);
 192         assertEquals(data, exp.getValue(), EPSILON);
 193         valueModel.set(float1);
 194         assertEquals(float1, exp.getValue(), EPSILON);
 195 
 196     }
 197     
 198     @Test
 199     public void testObjectToFloat() {
 200         final ObservableValueStub<Float> valueModel = new ObservableValueStub<Float>();
 201         final FloatExpression exp = FloatExpression.floatExpression(valueModel);
 202 
 203         assertTrue(exp instanceof FloatBinding);
 204         assertEquals(FXCollections.singletonObservableList(valueModel), ((FloatBinding)exp).getDependencies());
 205 
 206         assertEquals(0.0f, exp.floatValue(), EPSILON);
 207         valueModel.set(data);
 208         assertEquals(data, exp.floatValue(), EPSILON);
 209         valueModel.set(float1);
 210         assertEquals(float1, exp.floatValue(), EPSILON);
 211 
 212         // make sure we do not create unnecessary bindings
 213         assertEquals(op1, FloatExpression.floatExpression((ObservableValue)op1));
 214     }
 215 
 216     @Test(expected=NullPointerException.class)
 217     public void testFactory_Null() {
 218         FloatExpression.floatExpression(null);
 219     }
 220 }