modules/base/src/test/java/test/com/sun/javafx/binding/ExpressionHelperTest.java

Print this page
rev 9235 : 8134760: Refactor Javafx base module tests for clear separation of tests
Reviewed-by:


   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 com.sun.javafx.binding;
  27 


  28 import javafx.beans.InvalidationListener;
  29 import javafx.beans.InvalidationListenerMock;
  30 import javafx.beans.Observable;
  31 import javafx.beans.WeakInvalidationListenerMock;
  32 import javafx.beans.value.ChangeListener;
  33 import javafx.beans.value.ChangeListenerMock;
  34 import javafx.beans.value.ObservableValue;
  35 import javafx.beans.value.ObservableValueStub;
  36 import javafx.beans.value.WeakChangeListenerMock;
  37 import org.junit.Before;
  38 import org.junit.Test;
  39 
  40 import java.util.BitSet;
  41 import java.util.concurrent.atomic.AtomicBoolean;
  42 import java.util.concurrent.atomic.AtomicInteger;
  43 
  44 import static org.junit.Assert.assertEquals;
  45 import static org.junit.Assert.assertTrue;
  46 
  47 public class ExpressionHelperTest {
  48 
  49     private static final Object UNDEFINED = new Object();
  50     private static final Object DATA_1 = new Object();
  51     private static final Object DATA_2 = new Object();
  52 
  53     private ExpressionHelper helper;
  54     private ObservableValueStub observable;
  55     private InvalidationListenerMock[] invalidationListener;
  56     private ChangeListenerMock<Object>[] changeListener;


 503         changeListener[0].check(observable, DATA_1, null, 1);
 504 
 505         ExpressionHelper.fireValueChangedEvent(helper);
 506         invalidationListener[0].check(observable, 1);
 507         changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
 508 
 509         observable.set(DATA_1);
 510         ExpressionHelper.fireValueChangedEvent(helper);
 511         invalidationListener[0].check(observable, 1);
 512         changeListener[0].check(observable, null, DATA_1, 1);
 513 
 514         ExpressionHelper.fireValueChangedEvent(helper);
 515         invalidationListener[0].check(observable, 1);
 516         changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
 517     }
 518 
 519     @Test
 520     public void testExceptionNotPropagatedFromSingleInvalidation() {
 521         helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
 522         observable.set(null);
 523         helper.fireValueChangedEvent();
 524     }
 525 
 526     @Test
 527     public void testExceptionNotPropagatedFromMultipleInvalidation() {
 528         BitSet called = new BitSet();
 529 
 530         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(0); throw new RuntimeException();});
 531         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(1); throw new RuntimeException();});
 532         observable.set(null);
 533         helper.fireValueChangedEvent();
 534 
 535         assertTrue(called.get(0));
 536         assertTrue(called.get(1));
 537     }
 538 
 539     @Test
 540     public void testExceptionNotPropagatedFromSingleChange() {
 541         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 542         observable.set(null);
 543         helper.fireValueChangedEvent();
 544     }
 545 
 546     @Test
 547     public void testExceptionNotPropagatedFromMultipleChange() {
 548         BitSet called = new BitSet();
 549 
 550         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
 551         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
 552         observable.set(null);
 553         helper.fireValueChangedEvent();
 554 
 555         assertTrue(called.get(0));
 556         assertTrue(called.get(1));
 557     }
 558 
 559     @Test
 560     public void testExceptionNotPropagatedFromMultipleChangeAndInvalidation() {
 561         BitSet called = new BitSet();
 562 
 563         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
 564         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
 565         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(2); throw new RuntimeException();});
 566         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(3); throw new RuntimeException();});
 567         observable.set(null);
 568         helper.fireValueChangedEvent();
 569 
 570         assertTrue(called.get(0));
 571         assertTrue(called.get(1));
 572         assertTrue(called.get(2));
 573         assertTrue(called.get(3));
 574     }
 575 
 576     @Test
 577     public void testExceptionHandledByThreadUncaughtHandlerInSingleInvalidation() {
 578         AtomicBoolean called = new AtomicBoolean(false);
 579 
 580         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
 581 
 582         helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
 583         observable.set(null);
 584         helper.fireValueChangedEvent();
 585 
 586         assertTrue(called.get());
 587     }
 588 
 589 
 590     @Test
 591     public void testExceptionHandledByThreadUncaughtHandlerInMultipleInvalidation() {
 592         AtomicInteger called = new AtomicInteger(0);
 593 
 594         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 595 
 596         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 597         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 598         observable.set(null);
 599         helper.fireValueChangedEvent();
 600 
 601         assertEquals(2, called.get());
 602     }
 603 
 604     @Test
 605     public void testExceptionHandledByThreadUncaughtHandlerInSingleChange() {
 606         AtomicBoolean called = new AtomicBoolean(false);
 607 
 608         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
 609         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 610         observable.set(null);
 611         helper.fireValueChangedEvent();
 612 
 613         assertTrue(called.get());
 614     }
 615 
 616     @Test
 617     public void testExceptionHandledByThreadUncaughtHandlerInMultipleChange() {
 618         AtomicInteger called = new AtomicInteger(0);
 619 
 620         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 621 
 622         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 623         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 624         observable.set(null);
 625         helper.fireValueChangedEvent();
 626 
 627         assertEquals(2, called.get());
 628     }
 629 
 630     @Test
 631     public void testExceptionHandledByThreadUncaughtHandlerInMultipleChangeAndInvalidation() {
 632         AtomicInteger called = new AtomicInteger(0);
 633 
 634         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 635 
 636         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
 637         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
 638         helper = ExpressionHelper.addListener(helper, observable, (o) -> { throw new RuntimeException();});
 639         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 640         observable.set(null);
 641         helper.fireValueChangedEvent();
 642 
 643         assertEquals(4, called.get());
 644     }
 645 
 646 }


   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package test.com.sun.javafx.binding;
  27 
  28 import com.sun.javafx.binding.ExpressionHelper;
  29 import com.sun.javafx.binding.ExpressionHelperShim;
  30 import javafx.beans.InvalidationListener;
  31 import test.javafx.beans.InvalidationListenerMock;
  32 import javafx.beans.Observable;
  33 import test.javafx.beans.WeakInvalidationListenerMock;
  34 import javafx.beans.value.ChangeListener;
  35 import test.javafx.beans.value.ChangeListenerMock;
  36 import javafx.beans.value.ObservableValue;
  37 import javafx.beans.value.ObservableValueStub;
  38 import test.javafx.beans.value.WeakChangeListenerMock;
  39 import org.junit.Before;
  40 import org.junit.Test;
  41 
  42 import java.util.BitSet;
  43 import java.util.concurrent.atomic.AtomicBoolean;
  44 import java.util.concurrent.atomic.AtomicInteger;
  45 
  46 import static org.junit.Assert.assertEquals;
  47 import static org.junit.Assert.assertTrue;
  48 
  49 public class ExpressionHelperTest {
  50 
  51     private static final Object UNDEFINED = new Object();
  52     private static final Object DATA_1 = new Object();
  53     private static final Object DATA_2 = new Object();
  54 
  55     private ExpressionHelper helper;
  56     private ObservableValueStub observable;
  57     private InvalidationListenerMock[] invalidationListener;
  58     private ChangeListenerMock<Object>[] changeListener;


 505         changeListener[0].check(observable, DATA_1, null, 1);
 506 
 507         ExpressionHelper.fireValueChangedEvent(helper);
 508         invalidationListener[0].check(observable, 1);
 509         changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
 510 
 511         observable.set(DATA_1);
 512         ExpressionHelper.fireValueChangedEvent(helper);
 513         invalidationListener[0].check(observable, 1);
 514         changeListener[0].check(observable, null, DATA_1, 1);
 515 
 516         ExpressionHelper.fireValueChangedEvent(helper);
 517         invalidationListener[0].check(observable, 1);
 518         changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
 519     }
 520 
 521     @Test
 522     public void testExceptionNotPropagatedFromSingleInvalidation() {
 523         helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
 524         observable.set(null);
 525         ExpressionHelperShim.fireValueChangedEvent(helper);
 526     }
 527 
 528     @Test
 529     public void testExceptionNotPropagatedFromMultipleInvalidation() {
 530         BitSet called = new BitSet();
 531 
 532         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(0); throw new RuntimeException();});
 533         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(1); throw new RuntimeException();});
 534         observable.set(null);
 535         ExpressionHelperShim.fireValueChangedEvent(helper);
 536 
 537         assertTrue(called.get(0));
 538         assertTrue(called.get(1));
 539     }
 540 
 541     @Test
 542     public void testExceptionNotPropagatedFromSingleChange() {
 543         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 544         observable.set(null);
 545         ExpressionHelperShim.fireValueChangedEvent(helper);
 546     }
 547 
 548     @Test
 549     public void testExceptionNotPropagatedFromMultipleChange() {
 550         BitSet called = new BitSet();
 551 
 552         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
 553         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
 554         observable.set(null);
 555         ExpressionHelperShim.fireValueChangedEvent(helper);
 556 
 557         assertTrue(called.get(0));
 558         assertTrue(called.get(1));
 559     }
 560 
 561     @Test
 562     public void testExceptionNotPropagatedFromMultipleChangeAndInvalidation() {
 563         BitSet called = new BitSet();
 564 
 565         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
 566         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
 567         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(2); throw new RuntimeException();});
 568         helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(3); throw new RuntimeException();});
 569         observable.set(null);
 570         ExpressionHelperShim.fireValueChangedEvent(helper);
 571 
 572         assertTrue(called.get(0));
 573         assertTrue(called.get(1));
 574         assertTrue(called.get(2));
 575         assertTrue(called.get(3));
 576     }
 577 
 578     @Test
 579     public void testExceptionHandledByThreadUncaughtHandlerInSingleInvalidation() {
 580         AtomicBoolean called = new AtomicBoolean(false);
 581 
 582         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
 583 
 584         helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
 585         observable.set(null);
 586         ExpressionHelperShim.fireValueChangedEvent(helper);
 587 
 588         assertTrue(called.get());
 589     }
 590 
 591 
 592     @Test
 593     public void testExceptionHandledByThreadUncaughtHandlerInMultipleInvalidation() {
 594         AtomicInteger called = new AtomicInteger(0);
 595 
 596         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 597 
 598         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 599         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 600         observable.set(null);
 601         ExpressionHelperShim.fireValueChangedEvent(helper);
 602 
 603         assertEquals(2, called.get());
 604     }
 605 
 606     @Test
 607     public void testExceptionHandledByThreadUncaughtHandlerInSingleChange() {
 608         AtomicBoolean called = new AtomicBoolean(false);
 609 
 610         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
 611         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 612         observable.set(null);
 613         ExpressionHelperShim.fireValueChangedEvent(helper);
 614 
 615         assertTrue(called.get());
 616     }
 617 
 618     @Test
 619     public void testExceptionHandledByThreadUncaughtHandlerInMultipleChange() {
 620         AtomicInteger called = new AtomicInteger(0);
 621 
 622         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 623 
 624         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 625         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
 626         observable.set(null);
 627         ExpressionHelperShim.fireValueChangedEvent(helper);
 628 
 629         assertEquals(2, called.get());
 630     }
 631 
 632     @Test
 633     public void testExceptionHandledByThreadUncaughtHandlerInMultipleChangeAndInvalidation() {
 634         AtomicInteger called = new AtomicInteger(0);
 635 
 636         Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
 637 
 638         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
 639         helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
 640         helper = ExpressionHelper.addListener(helper, observable, (o) -> { throw new RuntimeException();});
 641         helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
 642         observable.set(null);
 643         ExpressionHelperShim.fireValueChangedEvent(helper);
 644 
 645         assertEquals(4, called.get());
 646     }
 647 
 648 }