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 }