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 }