1 /*
   2  * Copyright (c) 2012, 2018, 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;
  27 
  28 import javafx.beans.binding.*;
  29 import javafx.beans.property.IntegerProperty;
  30 import javafx.beans.property.ListProperty;
  31 import javafx.beans.property.SimpleIntegerProperty;
  32 import javafx.beans.property.SimpleListProperty;
  33 import javafx.collections.FXCollections;
  34 import javafx.collections.ObservableList;
  35 import test.com.sun.javafx.binding.ErrorLoggingUtiltity;
  36 import javafx.collections.ObservableFloatArray;
  37 import javafx.collections.ObservableIntegerArray;
  38 import org.junit.Before;
  39 import org.junit.BeforeClass;
  40 import org.junit.Test;
  41 
  42 import static org.junit.Assert.*;
  43 
  44 /**
  45  */
  46 public class BindingsArrayTest {
  47 
  48     private static final double EPSILON_DOUBLE = 1e-12;
  49     private static final float EPSILON_FLOAT = 1e-5f;
  50 
  51     private static final Object data1 = new Object();
  52     private static final Object data2 = new Object();
  53 
  54     private ListProperty<Object> property;
  55     private ObservableList<Object> list1;
  56     private ObservableList<Object> list2;
  57     private IntegerProperty index;
  58 
  59     @BeforeClass
  60     public static void setUpClass() {
  61         ErrorLoggingUtiltity.reset();
  62     }
  63 
  64     @Before
  65     public void setUp() {
  66         property = new SimpleListProperty<Object>();
  67         list1 = FXCollections.<Object>observableArrayList(data1, data2);
  68         list2 = FXCollections.<Object>observableArrayList();
  69         index = new SimpleIntegerProperty();
  70     }
  71 
  72     @Test
  73     public void testSize() {
  74         final IntegerBinding size = Bindings.size(property);
  75         DependencyUtils.checkDependencies(size.getDependencies(), property);
  76 
  77         assertEquals(0, size.get());
  78         property.set(list1);
  79         assertEquals(2, size.get());
  80         list1.remove(data2);
  81         assertEquals(1, size.get());
  82         property.set(list2);
  83         assertEquals(0, size.get());
  84         property.addAll(data2, data2);
  85         assertEquals(2, size.get());
  86         property.set(null);
  87         assertEquals(0, size.get());
  88     }
  89 
  90     @Test(expected = NullPointerException.class)
  91     public void testSize_Null() {
  92         Bindings.size((ObservableList<Object>) null);
  93     }
  94 
  95     @Test
  96     public void testIsEmpty() {
  97         final BooleanBinding empty = Bindings.isEmpty(property);
  98         DependencyUtils.checkDependencies(empty.getDependencies(), property);
  99 
 100         assertTrue(empty.get());
 101         property.set(list1);
 102         assertFalse(empty.get());
 103         list1.remove(data2);
 104         assertFalse(empty.get());
 105         property.set(list2);
 106         assertTrue(empty.get());
 107         property.addAll(data2, data2);
 108         assertFalse(empty.get());
 109         property.set(null);
 110         assertTrue(empty.get());
 111     }
 112 
 113     @Test(expected = NullPointerException.class)
 114     public void testIsEmpty_Null() {
 115         Bindings.isEmpty((ObservableList<Object>) null);
 116     }
 117 
 118     @Test
 119     public void testIsNotEmpty() {
 120         final BooleanBinding notEmpty = Bindings.isNotEmpty(property);
 121         DependencyUtils.checkDependencies(notEmpty.getDependencies(), property);
 122 
 123         assertFalse(notEmpty.get());
 124         property.set(list1);
 125         assertTrue(notEmpty.get());
 126         list1.remove(data2);
 127         assertTrue(notEmpty.get());
 128         property.set(list2);
 129         assertFalse(notEmpty.get());
 130         property.addAll(data2, data2);
 131         assertTrue(notEmpty.get());
 132         property.set(null);
 133         assertFalse(notEmpty.get());
 134     }
 135 
 136     @Test(expected = NullPointerException.class)
 137     public void testIsNotEmpty_Null() {
 138         Bindings.isNotEmpty((ObservableList<Object>) null);
 139     }
 140 
 141     @Test
 142     public void testValueAt_Constant() {
 143         final ObjectBinding<Object> binding0 = Bindings.valueAt(property, 0);
 144         final ObjectBinding<Object> binding1 = Bindings.valueAt(property, 1);
 145         final ObjectBinding<Object> binding2 = Bindings.valueAt(property, 2);
 146         DependencyUtils.checkDependencies(binding0.getDependencies(), property);
 147         DependencyUtils.checkDependencies(binding1.getDependencies(), property);
 148         DependencyUtils.checkDependencies(binding2.getDependencies(), property);
 149         assertNull(binding0.get());
 150         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 151         assertNull(binding1.get());
 152         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 153         assertNull(binding2.get());
 154         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 155 
 156         property.set(list1);
 157         assertEquals(data1, binding0.get());
 158         assertEquals(data2, binding1.get());
 159         assertNull(binding2.get());
 160         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 161 
 162         property.remove(data2);
 163         assertEquals(data1, binding0.get());
 164         assertNull(binding1.get());
 165         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 166         assertNull(binding2.get());
 167         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 168 
 169         property.set(list2);
 170         assertNull(binding0.get());
 171         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 172         assertNull(binding1.get());
 173         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 174         assertNull(binding2.get());
 175         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 176 
 177         property.addAll(data2, data2);
 178         assertEquals(data2, binding0.get());
 179         assertEquals(data2, binding1.get());
 180         assertNull(binding2.get());
 181         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 182 
 183         property.set(null);
 184         assertNull(binding0.get());
 185         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 186         assertNull(binding1.get());
 187         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 188         assertNull(binding2.get());
 189         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 190     }
 191 
 192     @Test(expected = NullPointerException.class)
 193     public void testValueAt_Constant_Null() {
 194         Bindings.valueAt(null, 0);
 195     }
 196 
 197     @Test(expected = IllegalArgumentException.class)
 198     public void testValueAt_Constant_NegativeIndex() {
 199         Bindings.valueAt(property, -1);
 200     }
 201 
 202     @Test
 203     public void testValueAt_Variable() {
 204         final ObjectBinding<Object> binding = Bindings.valueAt(property, index);
 205         DependencyUtils.checkDependencies(binding.getDependencies(), property, index);
 206 
 207         index.set(-1);
 208         assertNull(binding.get());
 209         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 210         index.set(0);
 211         assertNull(binding.get());
 212         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 213 
 214         property.set(list1);
 215         index.set(-1);
 216         assertNull(binding.get());
 217         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 218         index.set(0);
 219         assertEquals(data1, binding.get());
 220         index.set(1);
 221         assertEquals(data2, binding.get());
 222         index.set(2);
 223         assertNull(binding.get());
 224         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 225 
 226         property.remove(data2);
 227         index.set(-1);
 228         assertNull(binding.get());
 229         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 230         index.set(0);
 231         assertEquals(data1, binding.get());
 232         index.set(1);
 233         assertNull(binding.get());
 234         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 235 
 236         property.set(list2);
 237         index.set(-1);
 238         assertNull(binding.get());
 239         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 240         index.set(0);
 241         assertNull(binding.get());
 242         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 243 
 244         property.addAll(data2, data2);
 245         index.set(-1);
 246         assertNull(binding.get());
 247         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 248         index.set(0);
 249         assertEquals(data2, binding.get());
 250         index.set(1);
 251         assertEquals(data2, binding.get());
 252         index.set(2);
 253         assertNull(binding.get());
 254         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 255 
 256         property.set(null);
 257         index.set(-1);
 258         assertNull(binding.get());
 259         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 260         index.set(0);
 261         assertNull(binding.get());
 262         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 263     }
 264 
 265     @Test(expected = NullPointerException.class)
 266     public void testValueAt_Variable_Null() {
 267         Bindings.valueAt((ObservableList<Object>)null, index);
 268     }
 269 
 270     @Test(expected = NullPointerException.class)
 271     public void testValueAt_Variable_NullIndex() {
 272         Bindings.valueAt(property, null);
 273     }
 274 
 275     @Test
 276     public void testBooleanValueAt_Constant() {
 277         final boolean defaultData = false;
 278         final boolean localData1 = false;
 279         final boolean localData2 = true;
 280         final ListProperty<Boolean> localProperty = new SimpleListProperty<Boolean>();
 281         final ObservableList<Boolean> localList1 = FXCollections.observableArrayList(localData1, localData2);
 282         final ObservableList<Boolean> localList2 = FXCollections.observableArrayList();
 283 
 284         final BooleanBinding binding0 = Bindings.booleanValueAt(localProperty, 0);
 285         final BooleanBinding binding1 = Bindings.booleanValueAt(localProperty, 1);
 286         final BooleanBinding binding2 = Bindings.booleanValueAt(localProperty, 2);
 287         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
 288         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
 289         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
 290         assertEquals(defaultData, binding0.get());
 291         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 292         assertEquals(defaultData, binding1.get());
 293         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 294         assertEquals(defaultData, binding2.get());
 295         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 296 
 297         localProperty.set(localList1);
 298         assertEquals(localData1, binding0.get());
 299         assertEquals(localData2, binding1.get());
 300         assertEquals(defaultData, binding2.get());
 301         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 302 
 303         localProperty.remove(1);
 304         assertEquals(localData1, binding0.get());
 305         assertEquals(defaultData, binding1.get());
 306         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 307         assertEquals(defaultData, binding2.get());
 308         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 309 
 310         localProperty.set(localList2);
 311         assertEquals(defaultData, binding0.get());
 312         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 313         assertEquals(defaultData, binding1.get());
 314         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 315         assertEquals(defaultData, binding2.get());
 316         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 317 
 318         localProperty.addAll(localData2, localData2);
 319         assertEquals(localData2, binding0.get());
 320         assertEquals(localData2, binding1.get());
 321         assertEquals(defaultData, binding2.get());
 322         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 323 
 324         localProperty.set(null);
 325         assertEquals(defaultData, binding0.get());
 326         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 327         assertEquals(defaultData, binding1.get());
 328         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 329         assertEquals(defaultData, binding2.get());
 330         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 331     }
 332 
 333     @Test(expected = NullPointerException.class)
 334     public void testBooleanValueAt_Constant_Null() {
 335         Bindings.booleanValueAt(null, 0);
 336     }
 337 
 338     @Test(expected = IllegalArgumentException.class)
 339     public void testBooleanValueAt_Constant_NegativeIndex() {
 340         final ListProperty<Boolean> localProperty = new SimpleListProperty<Boolean>();
 341         Bindings.booleanValueAt(localProperty, -1);
 342     }
 343 
 344     @Test
 345     public void testBooleanValueAt_Variable() {
 346         final boolean defaultData = false;
 347         final boolean localData1 = false;
 348         final boolean localData2 = true;
 349         final ListProperty<Boolean> localProperty = new SimpleListProperty<Boolean>();
 350         final ObservableList<Boolean> localList1 = FXCollections.observableArrayList(localData1, localData2);
 351         final ObservableList<Boolean> localList2 = FXCollections.observableArrayList();
 352 
 353         final BooleanBinding binding = Bindings.booleanValueAt(localProperty, index);
 354         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
 355 
 356         index.set(-1);
 357         assertEquals(defaultData, binding.get());
 358         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 359         index.set(0);
 360         assertEquals(defaultData, binding.get());
 361         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 362 
 363         localProperty.set(localList1);
 364         index.set(-1);
 365         assertEquals(defaultData, binding.get());
 366         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 367         index.set(0);
 368         assertEquals(localData1, binding.get());
 369         index.set(1);
 370         assertEquals(localData2, binding.get());
 371         index.set(2);
 372         assertEquals(defaultData, binding.get());
 373         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 374 
 375         localProperty.remove(1);
 376         index.set(-1);
 377         assertEquals(defaultData, binding.get());
 378         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 379         index.set(0);
 380         assertEquals(localData1, binding.get());
 381         index.set(1);
 382         assertEquals(defaultData, binding.get());
 383         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 384 
 385         localProperty.set(0, null);
 386         index.set(-1);
 387         assertEquals(defaultData, binding.get());
 388         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 389         index.set(0);
 390         assertEquals(defaultData, binding.get());
 391         ErrorLoggingUtiltity.checkFine(NullPointerException.class);
 392         index.set(1);
 393         assertEquals(defaultData, binding.get());
 394         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 395 
 396         localProperty.set(localList2);
 397         index.set(-1);
 398         assertEquals(defaultData, binding.get());
 399         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 400         index.set(0);
 401         assertEquals(defaultData, binding.get());
 402         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 403 
 404         localProperty.addAll(localData2, localData2);
 405         index.set(-1);
 406         assertEquals(defaultData, binding.get());
 407         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 408         index.set(0);
 409         assertEquals(localData2, binding.get());
 410         index.set(1);
 411         assertEquals(localData2, binding.get());
 412         index.set(2);
 413         assertEquals(defaultData, binding.get());
 414         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 415 
 416         localProperty.set(null);
 417         index.set(-1);
 418         assertEquals(defaultData, binding.get());
 419         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 420         index.set(0);
 421         assertEquals(defaultData, binding.get());
 422         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 423     }
 424 
 425     @Test(expected = NullPointerException.class)
 426     public void testBooleanValueAt_Variable_Null() {
 427         Bindings.booleanValueAt((ObservableList<Boolean>)null, index);
 428     }
 429 
 430     @Test(expected = NullPointerException.class)
 431     public void testBooleanValueAt_Variable_NullIndex() {
 432         final ListProperty<Boolean> localProperty = new SimpleListProperty<Boolean>();
 433         Bindings.booleanValueAt(localProperty, null);
 434     }
 435 
 436     @Test
 437     public void testDoubleValueAt_Constant() {
 438         final double defaultData = 0.0;
 439         final double localData1 = Math.PI;
 440         final double localData2 = -Math.E;
 441         final ListProperty<Double> localProperty = new SimpleListProperty<Double>();
 442         final ObservableList<Double> localList1 = FXCollections.observableArrayList(localData1, localData2);
 443         final ObservableList<Double> localList2 = FXCollections.observableArrayList();
 444 
 445         final DoubleBinding binding0 = Bindings.doubleValueAt(localProperty, 0);
 446         final DoubleBinding binding1 = Bindings.doubleValueAt(localProperty, 1);
 447         final DoubleBinding binding2 = Bindings.doubleValueAt(localProperty, 2);
 448         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
 449         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
 450         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
 451         assertEquals(defaultData, binding0.get(), EPSILON_DOUBLE);
 452         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 453         assertEquals(defaultData, binding1.get(), EPSILON_DOUBLE);
 454         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 455         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 456         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 457 
 458         localProperty.set(localList1);
 459         assertEquals(localData1, binding0.get(), EPSILON_DOUBLE);
 460         assertEquals(localData2, binding1.get(), EPSILON_DOUBLE);
 461         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 462         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 463 
 464         localProperty.remove(1);
 465         assertEquals(localData1, binding0.get(), EPSILON_DOUBLE);
 466         assertEquals(defaultData, binding1.get(), EPSILON_DOUBLE);
 467         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 468         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 469         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 470 
 471         localProperty.set(localList2);
 472         assertEquals(defaultData, binding0.get(), EPSILON_DOUBLE);
 473         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 474         assertEquals(defaultData, binding1.get(), EPSILON_DOUBLE);
 475         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 476         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 477         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 478 
 479         localProperty.addAll(localData2, localData2);
 480         assertEquals(localData2, binding0.get(), EPSILON_DOUBLE);
 481         assertEquals(localData2, binding1.get(), EPSILON_DOUBLE);
 482         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 483         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 484 
 485         localProperty.set(null);
 486         assertEquals(defaultData, binding0.get(), EPSILON_DOUBLE);
 487         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 488         assertEquals(defaultData, binding1.get(), EPSILON_DOUBLE);
 489         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 490         assertEquals(defaultData, binding2.get(), EPSILON_DOUBLE);
 491         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 492     }
 493 
 494     @Test(expected = NullPointerException.class)
 495     public void testDoubleValueAt_Constant_Null() {
 496         Bindings.doubleValueAt(null, 0);
 497     }
 498 
 499     @Test(expected = IllegalArgumentException.class)
 500     public void testDoubleValueAt_Constant_NegativeIndex() {
 501         final ListProperty<Double> localProperty = new SimpleListProperty<Double>();
 502         Bindings.doubleValueAt(localProperty, -1);
 503     }
 504 
 505     @Test
 506     public void testDoubleValueAt_Variable() {
 507         final double defaultData = 0.0;
 508         final double localData1 = -Math.PI;
 509         final double localData2 = Math.E;
 510         final ListProperty<Double> localProperty = new SimpleListProperty<Double>();
 511         final ObservableList<Double> localList1 = FXCollections.observableArrayList(localData1, localData2);
 512         final ObservableList<Double> localList2 = FXCollections.observableArrayList();
 513 
 514         final DoubleBinding binding = Bindings.doubleValueAt(localProperty, index);
 515         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
 516 
 517         index.set(-1);
 518         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 519         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 520         index.set(0);
 521         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 522         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 523 
 524         localProperty.set(localList1);
 525         index.set(-1);
 526         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 527         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 528         index.set(0);
 529         assertEquals(localData1, binding.get(), EPSILON_DOUBLE);
 530         index.set(1);
 531         assertEquals(localData2, binding.get(), EPSILON_DOUBLE);
 532         index.set(2);
 533         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 534         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 535 
 536         localProperty.remove(1);
 537         index.set(-1);
 538         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 539         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 540         index.set(0);
 541         assertEquals(localData1, binding.get(), EPSILON_DOUBLE);
 542         index.set(1);
 543         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 544         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 545 
 546         localProperty.set(0, null);
 547         index.set(-1);
 548         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 549         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 550         index.set(0);
 551         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 552         ErrorLoggingUtiltity.checkFine(NullPointerException.class);
 553         index.set(1);
 554         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 555         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 556 
 557         localProperty.set(localList2);
 558         index.set(-1);
 559         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 560         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 561         index.set(0);
 562         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 563         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 564 
 565         localProperty.addAll(localData2, localData2);
 566         index.set(-1);
 567         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 568         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 569         index.set(0);
 570         assertEquals(localData2, binding.get(), EPSILON_DOUBLE);
 571         index.set(1);
 572         assertEquals(localData2, binding.get(), EPSILON_DOUBLE);
 573         index.set(2);
 574         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 575         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 576 
 577         localProperty.set(null);
 578         index.set(-1);
 579         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 580         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 581         index.set(0);
 582         assertEquals(defaultData, binding.get(), EPSILON_DOUBLE);
 583         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 584     }
 585 
 586     @Test(expected = NullPointerException.class)
 587     public void testDoubleValueAt_Variable_Null() {
 588         Bindings.doubleValueAt((ObservableList<Double>)null, index);
 589     }
 590 
 591     @Test(expected = NullPointerException.class)
 592     public void testDoubleValueAt_Variable_NullIndex() {
 593         final ListProperty<Double> localProperty = new SimpleListProperty<Double>();
 594         Bindings.doubleValueAt(localProperty, null);
 595     }
 596 
 597     @Test
 598     public void testFloatValueAt_Constant() {
 599         final float defaultData = 0.0f;
 600         final float localData1 = (float)Math.PI;
 601         final float localData2 = (float)-Math.E;
 602         final ListProperty<Float> localProperty = new SimpleListProperty<Float>();
 603         final ObservableList<Float> localList1 = FXCollections.observableArrayList(localData1, localData2);
 604         final ObservableList<Float> localList2 = FXCollections.observableArrayList();
 605 
 606         final FloatBinding binding0 = Bindings.floatValueAt(localProperty, 0);
 607         final FloatBinding binding1 = Bindings.floatValueAt(localProperty, 1);
 608         final FloatBinding binding2 = Bindings.floatValueAt(localProperty, 2);
 609         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
 610         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
 611         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
 612         assertEquals(defaultData, binding0.get(), EPSILON_FLOAT);
 613         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 614         assertEquals(defaultData, binding1.get(), EPSILON_FLOAT);
 615         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 616         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 617         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 618 
 619         localProperty.set(localList1);
 620         assertEquals(localData1, binding0.get(), EPSILON_FLOAT);
 621         assertEquals(localData2, binding1.get(), EPSILON_FLOAT);
 622         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 623         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 624 
 625         localProperty.remove(1);
 626         assertEquals(localData1, binding0.get(), EPSILON_FLOAT);
 627         assertEquals(defaultData, binding1.get(), EPSILON_FLOAT);
 628         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 629         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 630         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 631 
 632         localProperty.set(localList2);
 633         assertEquals(defaultData, binding0.get(), EPSILON_FLOAT);
 634         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 635         assertEquals(defaultData, binding1.get(), EPSILON_FLOAT);
 636         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 637         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 638         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 639 
 640         localProperty.addAll(localData2, localData2);
 641         assertEquals(localData2, binding0.get(), EPSILON_FLOAT);
 642         assertEquals(localData2, binding1.get(), EPSILON_FLOAT);
 643         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 644         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 645 
 646         localProperty.set(null);
 647         assertEquals(defaultData, binding0.get(), EPSILON_FLOAT);
 648         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 649         assertEquals(defaultData, binding1.get(), EPSILON_FLOAT);
 650         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 651         assertEquals(defaultData, binding2.get(), EPSILON_FLOAT);
 652         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 653     }
 654 
 655     @Test(expected = NullPointerException.class)
 656     public void testFloatValueAt_Constant_Null() {
 657         Bindings.floatValueAt((ObservableFloatArray) null, 0);
 658     }
 659 
 660     @Test(expected = IllegalArgumentException.class)
 661     public void testFloatValueAt_Constant_NegativeIndex() {
 662         final ListProperty<Float> localProperty = new SimpleListProperty<Float>();
 663         Bindings.floatValueAt(localProperty, -1);
 664     }
 665 
 666     @Test
 667     public void testFloatValueAt_Variable() {
 668         final float defaultData = 0.0f;
 669         final float localData1 = (float)-Math.PI;
 670         final float localData2 = (float)Math.E;
 671         final ListProperty<Float> localProperty = new SimpleListProperty<Float>();
 672         final ObservableList<Float> localList1 = FXCollections.observableArrayList(localData1, localData2);
 673         final ObservableList<Float> localList2 = FXCollections.observableArrayList();
 674 
 675         final FloatBinding binding = Bindings.floatValueAt(localProperty, index);
 676         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
 677 
 678         index.set(-1);
 679         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 680         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 681         index.set(0);
 682         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 683         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 684 
 685         localProperty.set(localList1);
 686         index.set(-1);
 687         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 688         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 689         index.set(0);
 690         assertEquals(localData1, binding.get(), EPSILON_FLOAT);
 691         index.set(1);
 692         assertEquals(localData2, binding.get(), EPSILON_FLOAT);
 693         index.set(2);
 694         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 695         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 696 
 697         localProperty.remove(1);
 698         index.set(-1);
 699         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 700         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 701         index.set(0);
 702         assertEquals(localData1, binding.get(), EPSILON_FLOAT);
 703         index.set(1);
 704         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 705         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 706 
 707         localProperty.set(0, null);
 708         index.set(-1);
 709         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 710         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 711         index.set(0);
 712         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 713         ErrorLoggingUtiltity.checkFine(NullPointerException.class);
 714         index.set(1);
 715         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 716         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 717 
 718         localProperty.set(localList2);
 719         index.set(-1);
 720         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 721         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 722         index.set(0);
 723         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 724         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 725 
 726         localProperty.addAll(localData2, localData2);
 727         index.set(-1);
 728         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 729         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 730         index.set(0);
 731         assertEquals(localData2, binding.get(), EPSILON_FLOAT);
 732         index.set(1);
 733         assertEquals(localData2, binding.get(), EPSILON_FLOAT);
 734         index.set(2);
 735         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 736         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 737 
 738         localProperty.set(null);
 739         index.set(-1);
 740         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 741         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 742         index.set(0);
 743         assertEquals(defaultData, binding.get(), EPSILON_FLOAT);
 744         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 745     }
 746 
 747     @Test(expected = NullPointerException.class)
 748     public void testFloatValueAt_Variable_Null() {
 749         Bindings.floatValueAt((ObservableList<Float>)null, index);
 750     }
 751 
 752     @Test(expected = NullPointerException.class)
 753     public void testFloatValueAt_Variable_NullIndex() {
 754         final ListProperty<Float> localProperty = new SimpleListProperty<Float>();
 755         Bindings.floatValueAt(localProperty, null);
 756     }
 757 
 758     @Test
 759     public void testIntegerValueAt_Constant() {
 760         final int defaultData = 0;
 761         final int localData1 = 42;
 762         final int localData2 = -7;
 763         final ListProperty<Integer> localProperty = new SimpleListProperty<Integer>();
 764         final ObservableList<Integer> localList1 = FXCollections.observableArrayList(localData1, localData2);
 765         final ObservableList<Integer> localList2 = FXCollections.observableArrayList();
 766 
 767         final IntegerBinding binding0 = Bindings.integerValueAt(localProperty, 0);
 768         final IntegerBinding binding1 = Bindings.integerValueAt(localProperty, 1);
 769         final IntegerBinding binding2 = Bindings.integerValueAt(localProperty, 2);
 770         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
 771         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
 772         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
 773         assertEquals(defaultData, binding0.get());
 774         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 775         assertEquals(defaultData, binding1.get());
 776         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 777         assertEquals(defaultData, binding2.get());
 778         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 779 
 780         localProperty.set(localList1);
 781         assertEquals(localData1, binding0.get());
 782         assertEquals(localData2, binding1.get());
 783         assertEquals(defaultData, binding2.get());
 784         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 785 
 786         localProperty.remove(1);
 787         assertEquals(localData1, binding0.get());
 788         assertEquals(defaultData, binding1.get());
 789         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 790         assertEquals(defaultData, binding2.get());
 791         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 792 
 793         localProperty.set(localList2);
 794         assertEquals(defaultData, binding0.get());
 795         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 796         assertEquals(defaultData, binding1.get());
 797         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 798         assertEquals(defaultData, binding2.get());
 799         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 800 
 801         localProperty.addAll(localData2, localData2);
 802         assertEquals(localData2, binding0.get());
 803         assertEquals(localData2, binding1.get());
 804         assertEquals(defaultData, binding2.get());
 805         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 806 
 807         localProperty.set(null);
 808         assertEquals(defaultData, binding0.get());
 809         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 810         assertEquals(defaultData, binding1.get());
 811         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 812         assertEquals(defaultData, binding2.get());
 813         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 814     }
 815 
 816     @Test(expected = NullPointerException.class)
 817     public void testIntegerValueAt_Constant_Null() {
 818         Bindings.integerValueAt((ObservableIntegerArray) null, 0);
 819     }
 820 
 821     @Test(expected = IllegalArgumentException.class)
 822     public void testIntegerValueAt_Constant_NegativeIndex() {
 823         final ListProperty<Integer> localProperty = new SimpleListProperty<Integer>();
 824         Bindings.integerValueAt(localProperty, -1);
 825     }
 826 
 827     @Test
 828     public void testIntegerValueAt_Variable() {
 829         final int defaultData = 0;
 830         final int localData1 = 42;
 831         final int localData2 = -7;
 832         final ListProperty<Integer> localProperty = new SimpleListProperty<Integer>();
 833         final ObservableList<Integer> localList1 = FXCollections.observableArrayList(localData1, localData2);
 834         final ObservableList<Integer> localList2 = FXCollections.observableArrayList();
 835 
 836         final IntegerBinding binding = Bindings.integerValueAt(localProperty, index);
 837         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
 838 
 839         index.set(-1);
 840         assertEquals(defaultData, binding.get());
 841         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 842         index.set(0);
 843         assertEquals(defaultData, binding.get());
 844         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 845 
 846         localProperty.set(localList1);
 847         index.set(-1);
 848         assertEquals(defaultData, binding.get());
 849         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 850         index.set(0);
 851         assertEquals(localData1, binding.get());
 852         index.set(1);
 853         assertEquals(localData2, binding.get());
 854         index.set(2);
 855         assertEquals(defaultData, binding.get());
 856         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 857 
 858         localProperty.remove(1);
 859         index.set(-1);
 860         assertEquals(defaultData, binding.get());
 861         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 862         index.set(0);
 863         assertEquals(localData1, binding.get());
 864         index.set(1);
 865         assertEquals(defaultData, binding.get());
 866         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 867 
 868         localProperty.set(0, null);
 869         index.set(-1);
 870         assertEquals(defaultData, binding.get());
 871         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 872         index.set(0);
 873         assertEquals(defaultData, binding.get());
 874         ErrorLoggingUtiltity.checkFine(NullPointerException.class);
 875         index.set(1);
 876         assertEquals(defaultData, binding.get());
 877         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 878 
 879         localProperty.set(localList2);
 880         index.set(-1);
 881         assertEquals(defaultData, binding.get());
 882         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 883         index.set(0);
 884         assertEquals(defaultData, binding.get());
 885         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 886 
 887         localProperty.addAll(localData2, localData2);
 888         index.set(-1);
 889         assertEquals(defaultData, binding.get());
 890         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 891         index.set(0);
 892         assertEquals(localData2, binding.get());
 893         index.set(1);
 894         assertEquals(localData2, binding.get());
 895         index.set(2);
 896         assertEquals(defaultData, binding.get());
 897         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 898 
 899         localProperty.set(null);
 900         index.set(-1);
 901         assertEquals(defaultData, binding.get());
 902         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 903         index.set(0);
 904         assertEquals(defaultData, binding.get());
 905         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 906     }
 907 
 908     @Test(expected = NullPointerException.class)
 909     public void testIntegerValueAt_Variable_Null() {
 910         Bindings.integerValueAt((ObservableList<Integer>)null, index);
 911     }
 912 
 913     @Test(expected = NullPointerException.class)
 914     public void testIntegerValueAt_Variable_NullIndex() {
 915         final ListProperty<Integer> localProperty = new SimpleListProperty<Integer>();
 916         Bindings.integerValueAt(localProperty, null);
 917     }
 918 
 919     @Test
 920     public void testLongValueAt_Constant() {
 921         final long defaultData = 0L;
 922         final long localData1 = 1234567890987654321L;
 923         final long localData2 = -987654321987654321L;
 924         final ListProperty<Long> localProperty = new SimpleListProperty<Long>();
 925         final ObservableList<Long> localList1 = FXCollections.observableArrayList(localData1, localData2);
 926         final ObservableList<Long> localList2 = FXCollections.observableArrayList();
 927 
 928         final LongBinding binding0 = Bindings.longValueAt(localProperty, 0);
 929         final LongBinding binding1 = Bindings.longValueAt(localProperty, 1);
 930         final LongBinding binding2 = Bindings.longValueAt(localProperty, 2);
 931         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
 932         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
 933         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
 934         assertEquals(defaultData, binding0.get());
 935         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 936         assertEquals(defaultData, binding1.get());
 937         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 938         assertEquals(defaultData, binding2.get());
 939         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 940 
 941         localProperty.set(localList1);
 942         assertEquals(localData1, binding0.get());
 943         assertEquals(localData2, binding1.get());
 944         assertEquals(defaultData, binding2.get());
 945         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 946 
 947         localProperty.remove(1);
 948         assertEquals(localData1, binding0.get());
 949         assertEquals(defaultData, binding1.get());
 950         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 951         assertEquals(defaultData, binding2.get());
 952         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 953 
 954         localProperty.set(localList2);
 955         assertEquals(defaultData, binding0.get());
 956         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 957         assertEquals(defaultData, binding1.get());
 958         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 959         assertEquals(defaultData, binding2.get());
 960         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 961 
 962         localProperty.addAll(localData2, localData2);
 963         assertEquals(localData2, binding0.get());
 964         assertEquals(localData2, binding1.get());
 965         assertEquals(defaultData, binding2.get());
 966         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 967 
 968         localProperty.set(null);
 969         assertEquals(defaultData, binding0.get());
 970         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 971         assertEquals(defaultData, binding1.get());
 972         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 973         assertEquals(defaultData, binding2.get());
 974         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
 975     }
 976 
 977     @Test(expected = NullPointerException.class)
 978     public void testLongValueAt_Constant_Null() {
 979         Bindings.longValueAt(null, 0);
 980     }
 981 
 982     @Test(expected = IllegalArgumentException.class)
 983     public void testLongValueAt_Constant_NegativeIndex() {
 984         final ListProperty<Long> localProperty = new SimpleListProperty<Long>();
 985         Bindings.longValueAt(localProperty, -1);
 986     }
 987 
 988     @Test
 989     public void testLongValueAt_Variable() {
 990         final long defaultData = 0;
 991         final long localData1 = 98765432123456789L;
 992         final long localData2 = -1234567890123456789L;
 993         final ListProperty<Long> localProperty = new SimpleListProperty<Long>();
 994         final ObservableList<Long> localList1 = FXCollections.observableArrayList(localData1, localData2);
 995         final ObservableList<Long> localList2 = FXCollections.observableArrayList();
 996 
 997         final LongBinding binding = Bindings.longValueAt(localProperty, index);
 998         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
 999 
1000         index.set(-1);
1001         assertEquals(defaultData, binding.get());
1002         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1003         index.set(0);
1004         assertEquals(defaultData, binding.get());
1005         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1006 
1007         localProperty.set(localList1);
1008         index.set(-1);
1009         assertEquals(defaultData, binding.get());
1010         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1011         index.set(0);
1012         assertEquals(localData1, binding.get());
1013         index.set(1);
1014         assertEquals(localData2, binding.get());
1015         index.set(2);
1016         assertEquals(defaultData, binding.get());
1017         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1018 
1019         localProperty.remove(1);
1020         index.set(-1);
1021         assertEquals(defaultData, binding.get());
1022         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1023         index.set(0);
1024         assertEquals(localData1, binding.get());
1025         index.set(1);
1026         assertEquals(defaultData, binding.get());
1027         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1028 
1029         localProperty.set(0, null);
1030         index.set(-1);
1031         assertEquals(defaultData, binding.get());
1032         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1033         index.set(0);
1034         assertEquals(defaultData, binding.get());
1035         ErrorLoggingUtiltity.checkFine(NullPointerException.class);
1036         index.set(1);
1037         assertEquals(defaultData, binding.get());
1038         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1039 
1040         localProperty.set(localList2);
1041         index.set(-1);
1042         assertEquals(defaultData, binding.get());
1043         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1044         index.set(0);
1045         assertEquals(defaultData, binding.get());
1046         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1047 
1048         localProperty.addAll(localData2, localData2);
1049         index.set(-1);
1050         assertEquals(defaultData, binding.get());
1051         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1052         index.set(0);
1053         assertEquals(localData2, binding.get());
1054         index.set(1);
1055         assertEquals(localData2, binding.get());
1056         index.set(2);
1057         assertEquals(defaultData, binding.get());
1058         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1059 
1060         localProperty.set(null);
1061         index.set(-1);
1062         assertEquals(defaultData, binding.get());
1063         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1064         index.set(0);
1065         assertEquals(defaultData, binding.get());
1066         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1067     }
1068 
1069     @Test(expected = NullPointerException.class)
1070     public void testLongValueAt_Variable_Null() {
1071         Bindings.longValueAt((ObservableList<Long>)null, index);
1072     }
1073 
1074     @Test(expected = NullPointerException.class)
1075     public void testLongValueAt_Variable_NullIndex() {
1076         final ListProperty<Long> localProperty = new SimpleListProperty<Long>();
1077         Bindings.longValueAt(localProperty, null);
1078     }
1079 
1080     @Test
1081     public void testStringValueAt_Constant() {
1082         final String defaultData = null;
1083         final String localData1 = "Hello World";
1084         final String localData2 = "Goodbye World";
1085         final ListProperty<String> localProperty = new SimpleListProperty<String>();
1086         final ObservableList<String> localList1 = FXCollections.observableArrayList(localData1, localData2);
1087         final ObservableList<String> localList2 = FXCollections.observableArrayList();
1088 
1089         final StringBinding binding0 = Bindings.stringValueAt(localProperty, 0);
1090         final StringBinding binding1 = Bindings.stringValueAt(localProperty, 1);
1091         final StringBinding binding2 = Bindings.stringValueAt(localProperty, 2);
1092         DependencyUtils.checkDependencies(binding0.getDependencies(), localProperty);
1093         DependencyUtils.checkDependencies(binding1.getDependencies(), localProperty);
1094         DependencyUtils.checkDependencies(binding2.getDependencies(), localProperty);
1095         assertEquals(defaultData, binding0.get());
1096         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1097         assertEquals(defaultData, binding1.get());
1098         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1099         assertEquals(defaultData, binding2.get());
1100         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1101 
1102         localProperty.set(localList1);
1103         assertEquals(localData1, binding0.get());
1104         assertEquals(localData2, binding1.get());
1105         assertEquals(defaultData, binding2.get());
1106         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1107 
1108         localProperty.remove(1);
1109         assertEquals(localData1, binding0.get());
1110         assertEquals(defaultData, binding1.get());
1111         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1112         assertEquals(defaultData, binding2.get());
1113         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1114 
1115         localProperty.set(localList2);
1116         assertEquals(defaultData, binding0.get());
1117         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1118         assertEquals(defaultData, binding1.get());
1119         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1120         assertEquals(defaultData, binding2.get());
1121         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1122 
1123         localProperty.addAll(localData2, localData2);
1124         assertEquals(localData2, binding0.get());
1125         assertEquals(localData2, binding1.get());
1126         assertEquals(defaultData, binding2.get());
1127         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1128 
1129         localProperty.set(null);
1130         assertEquals(defaultData, binding0.get());
1131         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1132         assertEquals(defaultData, binding1.get());
1133         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1134         assertEquals(defaultData, binding2.get());
1135         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1136     }
1137 
1138     @Test(expected = NullPointerException.class)
1139     public void testStringValueAt_Constant_Null() {
1140         Bindings.stringValueAt(null, 0);
1141     }
1142 
1143     @Test(expected = IllegalArgumentException.class)
1144     public void testStringValueAt_Constant_NegativeIndex() {
1145         final ListProperty<String> localProperty = new SimpleListProperty<String>();
1146         Bindings.stringValueAt(localProperty, -1);
1147     }
1148 
1149     @Test
1150     public void testStringValueAt_Variable() {
1151         final String defaultData = null;
1152         final String localData1 = "Goodbye";
1153         final String localData2 = "Hello";
1154         final ListProperty<String> localProperty = new SimpleListProperty<String>();
1155         final ObservableList<String> localList1 = FXCollections.observableArrayList(localData1, localData2);
1156         final ObservableList<String> localList2 = FXCollections.observableArrayList();
1157 
1158         final StringBinding binding = Bindings.stringValueAt(localProperty, index);
1159         DependencyUtils.checkDependencies(binding.getDependencies(), localProperty, index);
1160 
1161         index.set(-1);
1162         assertEquals(defaultData, binding.get());
1163         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1164         index.set(0);
1165         assertEquals(defaultData, binding.get());
1166         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1167 
1168         localProperty.set(localList1);
1169         index.set(-1);
1170         assertEquals(defaultData, binding.get());
1171         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1172         index.set(0);
1173         assertEquals(localData1, binding.get());
1174         index.set(1);
1175         assertEquals(localData2, binding.get());
1176         index.set(2);
1177         assertEquals(defaultData, binding.get());
1178         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1179 
1180         localProperty.remove(1);
1181         index.set(-1);
1182         assertEquals(defaultData, binding.get());
1183         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1184         index.set(0);
1185         assertEquals(localData1, binding.get());
1186         index.set(1);
1187         assertEquals(defaultData, binding.get());
1188         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1189 
1190         localProperty.set(localList2);
1191         index.set(-1);
1192         assertEquals(defaultData, binding.get());
1193         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1194         index.set(0);
1195         assertEquals(defaultData, binding.get());
1196         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1197 
1198         localProperty.addAll(localData2, localData2);
1199         index.set(-1);
1200         assertEquals(defaultData, binding.get());
1201         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1202         index.set(0);
1203         assertEquals(localData2, binding.get());
1204         index.set(1);
1205         assertEquals(localData2, binding.get());
1206         index.set(2);
1207         assertEquals(defaultData, binding.get());
1208         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1209 
1210         localProperty.set(null);
1211         index.set(-1);
1212         assertEquals(defaultData, binding.get());
1213         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1214         index.set(0);
1215         assertEquals(defaultData, binding.get());
1216         ErrorLoggingUtiltity.checkFine(IndexOutOfBoundsException.class);
1217     }
1218 
1219     @Test(expected = NullPointerException.class)
1220     public void testStringValueAt_Variable_Null() {
1221         Bindings.stringValueAt((ObservableList<String>)null, index);
1222     }
1223 
1224     @Test(expected = NullPointerException.class)
1225     public void testStringValueAt_Variable_NullIndex() {
1226         final ListProperty<String> localProperty = new SimpleListProperty<String>();
1227         Bindings.stringValueAt(localProperty, null);
1228     }
1229 
1230 
1231 }