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