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