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