changeset 9242:1a563cd81d47 9-b81

Automated merge with http://hg.openjdk.java.net/openjfx/9/rt
author kcr
date Fri, 04 Sep 2015 15:22:12 -0700
parents f9099a722530 e336fd3d9c5f
children fe17327de9c5 163e4cd3d757 a5c087bff5fd
files modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingTest.java modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingWithConversionTest.java modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingListTest.java modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingMapTest.java modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingSetTest.java modules/base/src/test/java/com/sun/javafx/binding/ContentBindingListTest.java modules/base/src/test/java/com/sun/javafx/binding/ContentBindingMapTest.java modules/base/src/test/java/com/sun/javafx/binding/ContentBindingSetTest.java modules/base/src/test/java/com/sun/javafx/binding/ErrorLoggingUtiltity.java modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperBaseTest.java modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperTest.java modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperUtility.java modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperUtilityTest.java modules/base/src/test/java/com/sun/javafx/binding/ListExpressionHelperTest.java modules/base/src/test/java/com/sun/javafx/binding/SelectBindingTest.java modules/base/src/test/java/com/sun/javafx/binding/StringFormatterTest.java modules/base/src/test/java/com/sun/javafx/collections/ListListenerHelperTest.java modules/base/src/test/java/com/sun/javafx/collections/MapListenerHelperTest.java modules/base/src/test/java/com/sun/javafx/collections/MappingChangeTest.java modules/base/src/test/java/com/sun/javafx/collections/NonIterableChangeTest.java modules/base/src/test/java/com/sun/javafx/collections/SetListenerHelperTest.java modules/base/src/test/java/com/sun/javafx/event/CompositeEventDispatcherTest.java modules/base/src/test/java/com/sun/javafx/event/CompositeEventHandlerTest.java modules/base/src/test/java/com/sun/javafx/event/EmptyEvent.java modules/base/src/test/java/com/sun/javafx/event/EventChangingDispatcher.java modules/base/src/test/java/com/sun/javafx/event/EventChangingHandler.java modules/base/src/test/java/com/sun/javafx/event/EventConsumingHandler.java modules/base/src/test/java/com/sun/javafx/event/EventCountingDispatcher.java modules/base/src/test/java/com/sun/javafx/event/EventCountingHandler.java modules/base/src/test/java/com/sun/javafx/event/EventDispatchChainTest.java modules/base/src/test/java/com/sun/javafx/event/EventDispatchTreeTest.java modules/base/src/test/java/com/sun/javafx/event/EventHandlerManagerTest.java modules/base/src/test/java/com/sun/javafx/event/LabeledEventDispatcher.java modules/base/src/test/java/com/sun/javafx/event/Operation.java modules/base/src/test/java/com/sun/javafx/event/PathChangingDispatcher.java modules/base/src/test/java/com/sun/javafx/event/StubBasicEventDispatcher.java modules/base/src/test/java/com/sun/javafx/event/StubEventDispatchChain.java modules/base/src/test/java/com/sun/javafx/event/TestCompositeEventDispatcher.java modules/base/src/test/java/com/sun/javafx/event/ValueEvent.java modules/base/src/test/java/com/sun/javafx/property/adapter/JavaBeanPropertyBuilderHelperTest.java modules/base/src/test/java/com/sun/javafx/property/adapter/PropertyDescriptorTest.java modules/base/src/test/java/com/sun/javafx/property/adapter/ReadOnlyPropertyDescriptorTest.java modules/base/src/test/java/com/sun/javafx/runtime/VersionInfoTest.java modules/base/src/test/java/javafx/beans/Foo.java modules/base/src/test/java/javafx/beans/InvalidationListenerMock.java modules/base/src/test/java/javafx/beans/Person.java modules/base/src/test/java/javafx/beans/WeakInvalidationListenerMock.java modules/base/src/test/java/javafx/beans/WeakInvalidationListenerTest.java modules/base/src/test/java/javafx/beans/property/BooleanPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/BooleanPropertyTest.java modules/base/src/test/java/javafx/beans/property/DoublePropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/DoublePropertyTest.java modules/base/src/test/java/javafx/beans/property/FloatPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/FloatPropertyTest.java modules/base/src/test/java/javafx/beans/property/IntegerPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/IntegerPropertyTest.java modules/base/src/test/java/javafx/beans/property/ListPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ListPropertyTest.java modules/base/src/test/java/javafx/beans/property/LongPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/LongPropertyTest.java modules/base/src/test/java/javafx/beans/property/MapPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/MapPropertyTest.java modules/base/src/test/java/javafx/beans/property/ObjectPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ObjectPropertyTest.java modules/base/src/test/java/javafx/beans/property/PropertiesTest.java modules/base/src/test/java/javafx/beans/property/PropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/PropertyReferenceTest.java modules/base/src/test/java/javafx/beans/property/PropertyReferenceWithInterfacesTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyBooleanPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyBooleanPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyBooleanWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyDoublePropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyDoublePropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyDoubleWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyFloatPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyFloatPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyFloatWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyIntegerPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyIntegerPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyIntegerWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyListPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyListPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyListWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyLongPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyLongPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyLongWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyMapPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyMapPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyMapWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyObjectPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyObjectPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyObjectWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlySetPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlySetPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlySetWrapperTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyStringPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyStringPropertyTest.java modules/base/src/test/java/javafx/beans/property/ReadOnlyStringWrapperTest.java modules/base/src/test/java/javafx/beans/property/SetPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/SetPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleBooleanPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleDoublePropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleFloatPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleIntegerPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleListPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleLongPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleObjectPropertyTest.java modules/base/src/test/java/javafx/beans/property/SimpleStringPropertyTest.java modules/base/src/test/java/javafx/beans/property/StringPropertyBaseTest.java modules/base/src/test/java/javafx/beans/property/StringPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanBooleanPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanBooleanProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanDoublePropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanDoubleProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanFloatPropertyBuilderaTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanFloatProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanIntegerPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanIntegerProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanLongPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanLongProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanObjectPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanPropertyTestBase.java modules/base/src/test/java/javafx/beans/property/adapter/JavaBeanStringPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanBooleanProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanDoublePropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanDoubleProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanFloatProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanIntegerProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanLongPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanLongProperty_prim_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectPropertyTest.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanPropertyBuilder_General_Test.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanPropertyTestBase.java modules/base/src/test/java/javafx/beans/property/adapter/ReadOnlyJavaBeanStringPropertyTest.java modules/base/src/test/java/javafx/beans/value/ChangeListenerMock.java modules/base/src/test/java/javafx/beans/value/ObservableValueBaseTest.java modules/base/src/test/java/javafx/beans/value/WeakChangeListenerMock.java modules/base/src/test/java/javafx/beans/value/WeakChangeListenerTest.java modules/base/src/test/java/javafx/binding/BindingToStringTest.java modules/base/src/test/java/javafx/binding/BindingsArrayTest.java modules/base/src/test/java/javafx/binding/BindingsBooleanTest.java modules/base/src/test/java/javafx/binding/BindingsCreateBindingTest.java modules/base/src/test/java/javafx/binding/BindingsEqualsTest.java modules/base/src/test/java/javafx/binding/BindingsIsNullTest.java modules/base/src/test/java/javafx/binding/BindingsListTest.java modules/base/src/test/java/javafx/binding/BindingsMapTest.java modules/base/src/test/java/javafx/binding/BindingsNumberCalculationsTest.java modules/base/src/test/java/javafx/binding/BindingsNumberCastTest.java modules/base/src/test/java/javafx/binding/BindingsSetTest.java modules/base/src/test/java/javafx/binding/DependencyUtils.java modules/base/src/test/java/javafx/binding/GenericBindingTest.java modules/base/src/test/java/javafx/binding/ListBindingTest.java modules/base/src/test/java/javafx/binding/MapBindingTest.java modules/base/src/test/java/javafx/binding/SetBindingTest.java modules/base/src/test/java/javafx/binding/Variable.java modules/base/src/test/java/javafx/binding/WhenTestBase.java modules/base/src/test/java/javafx/binding/When_Boolean_Test.java modules/base/src/test/java/javafx/binding/When_Double_Test.java modules/base/src/test/java/javafx/binding/When_Float_Test.java modules/base/src/test/java/javafx/binding/When_Integer_Test.java modules/base/src/test/java/javafx/binding/When_Long_Test.java modules/base/src/test/java/javafx/binding/When_Object_Test.java modules/base/src/test/java/javafx/binding/When_String_Test.java modules/base/src/test/java/javafx/binding/expression/AbstractNumberExpressionTest.java modules/base/src/test/java/javafx/binding/expression/BooleanExpressionTest.java modules/base/src/test/java/javafx/binding/expression/DoubleExpressionTest.java modules/base/src/test/java/javafx/binding/expression/FloatExpressionTest.java modules/base/src/test/java/javafx/binding/expression/IntegerExpressionTest.java modules/base/src/test/java/javafx/binding/expression/ListExpressionTest.java modules/base/src/test/java/javafx/binding/expression/LongExpressionTest.java modules/base/src/test/java/javafx/binding/expression/MapExpressionTest.java modules/base/src/test/java/javafx/binding/expression/ObjectExpressionTest.java modules/base/src/test/java/javafx/binding/expression/SetExpressionTest.java modules/base/src/test/java/javafx/binding/expression/StringExpressionTest.java modules/base/src/test/java/javafx/collections/Callable.java modules/base/src/test/java/javafx/collections/FXCollectionsTest.java modules/base/src/test/java/javafx/collections/FilteredListTest.java modules/base/src/test/java/javafx/collections/ListChangeBuilderTest.java modules/base/src/test/java/javafx/collections/MockArrayObserver.java modules/base/src/test/java/javafx/collections/MockListObserver.java modules/base/src/test/java/javafx/collections/MockMapObserver.java modules/base/src/test/java/javafx/collections/MockSetObserver.java modules/base/src/test/java/javafx/collections/ObservableArrayTest.java modules/base/src/test/java/javafx/collections/ObservableListEmptyTest.java modules/base/src/test/java/javafx/collections/ObservableListIteratorTest.java modules/base/src/test/java/javafx/collections/ObservableListTest.java modules/base/src/test/java/javafx/collections/ObservableListWithExtractor.java modules/base/src/test/java/javafx/collections/ObservableMapTest.java modules/base/src/test/java/javafx/collections/ObservableSetTest.java modules/base/src/test/java/javafx/collections/ObservableSubListIteratorTest.java modules/base/src/test/java/javafx/collections/ObservableSubListTest.java modules/base/src/test/java/javafx/collections/Person.java modules/base/src/test/java/javafx/collections/SortedListTest.java modules/base/src/test/java/javafx/collections/SourceAdapterChangeTest.java modules/base/src/test/java/javafx/collections/TestedObservableLists.java modules/base/src/test/java/javafx/collections/TestedObservableMaps.java modules/base/src/test/java/javafx/collections/TestedObservableSets.java modules/base/src/test/java/javafx/collections/TransformationListTest.java modules/base/src/test/java/javafx/collections/UnmodifiableObservableMapTest.java modules/base/src/test/java/javafx/collections/VetoableObservableListTest.java modules/base/src/test/java/javafx/collections/WeakListChangeListenerMock.java modules/base/src/test/java/javafx/collections/WeakListChangeListenerTest.java modules/base/src/test/java/javafx/collections/WeakMapChangeListenerTest.java modules/base/src/test/java/javafx/collections/WeakSetChangeListenerTest.java modules/base/src/test/java/javafx/event/EventSerializationEventExists.java modules/base/src/test/java/javafx/event/EventSerializationTest.java modules/base/src/test/java/javafx/event/EventTest.java modules/base/src/test/java/javafx/util/DurationTest.java modules/base/src/test/java/javafx/util/DurationValueOfTest.java modules/base/src/test/java/javafx/util/converter/BigDecimalStringConverterTest.java modules/base/src/test/java/javafx/util/converter/BigIntegerStringConverterTest.java modules/base/src/test/java/javafx/util/converter/BooleanStringConverterTest.java modules/base/src/test/java/javafx/util/converter/ByteStringConverterTest.java modules/base/src/test/java/javafx/util/converter/CharacterStringConverterTest.java modules/base/src/test/java/javafx/util/converter/CurrencyStringConverterTest.java modules/base/src/test/java/javafx/util/converter/DateStringConverterTest.java modules/base/src/test/java/javafx/util/converter/DateTimeStringConverterTest.java modules/base/src/test/java/javafx/util/converter/DefaultStringConverterTest.java modules/base/src/test/java/javafx/util/converter/DoubleStringConverterTest.java modules/base/src/test/java/javafx/util/converter/FloatStringConverterTest.java modules/base/src/test/java/javafx/util/converter/IntegerStringConverterTest.java modules/base/src/test/java/javafx/util/converter/LocalDateStringConverterTest.java modules/base/src/test/java/javafx/util/converter/LocalDateTimeStringConverterTest.java modules/base/src/test/java/javafx/util/converter/LocalTimeStringConverterTest.java modules/base/src/test/java/javafx/util/converter/LongStringConverterTest.java modules/base/src/test/java/javafx/util/converter/NumberStringConverterTest.java modules/base/src/test/java/javafx/util/converter/ParameterizedConverterTest.java modules/base/src/test/java/javafx/util/converter/PercentageStringConverterTest.java modules/base/src/test/java/javafx/util/converter/ShortStringConverterTest.java modules/base/src/test/java/javafx/util/converter/TimeStringConverterTest.java
diffstat 499 files changed, 62875 insertions(+), 61676 deletions(-) [+]
line wrap: on
line diff
--- a/build.gradle	Wed Sep 02 23:04:54 2015 -0700
+++ b/build.gradle	Fri Sep 04 15:22:12 2015 -0700
@@ -3305,6 +3305,7 @@
             copy {
                 from "${sdkDir}"
                 into "${exportSDKDir}"
+                includeEmptyDirs = false
                 exclude '**/jfxrt.jar'
 
                 if (isWindows) {
@@ -3313,7 +3314,7 @@
 
                 eachFile {details ->
                     if (details.path.startsWith('rt/')) {
-                        details.path = 'jre/' + details.path.substring(3);
+                        details.path = "./" + details.path.substring(3);
                     }
                 }
             }
@@ -3323,10 +3324,10 @@
                 into "${exportTmp}"
             }
 
-            mkdir "${exportSDKDir}/jre/lib/ext"
+            mkdir "${exportSDKDir}/lib"
 
             ant.jar(
-                    destfile: "${exportSDKDir}/jre/lib/ext/jfxrt.jar",
+                    destfile: "${exportSDKDir}/lib/jfxrt.jar",
                     index: true,
                     compress: compressJar
                 ) {
--- a/modules/base/src/main/java/com/sun/javafx/binding/ContentBinding.java	Wed Sep 02 23:04:54 2015 -0700
+++ b/modules/base/src/main/java/com/sun/javafx/binding/ContentBinding.java	Fri Sep 04 15:22:12 2015 -0700
@@ -221,7 +221,8 @@
             } else {
                 if (change.wasRemoved()) {
                     map.remove(change.getKey());
-                } else {
+                }
+                if (change.wasAdded()) {
                     map.put(change.getKey(), change.getValueAdded());
                 }
             }
--- a/modules/base/src/main/java/com/sun/javafx/binding/ExpressionHelper.java	Wed Sep 02 23:04:54 2015 -0700
+++ b/modules/base/src/main/java/com/sun/javafx/binding/ExpressionHelper.java	Fri Sep 04 15:22:12 2015 -0700
@@ -28,7 +28,6 @@
 import javafx.beans.InvalidationListener;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
-import sun.util.logging.PlatformLogger;
 
 import java.util.Arrays;
 
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.beans.property.*;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.util.Arrays;
-import java.util.Collection;
-import javafx.beans.value.ObservableValue;
-
-import static org.junit.Assert.*;
-
-@RunWith(Parameterized.class)
-public class BidirectionalBindingTest<T> {
-
-    @FunctionalInterface
-    public static interface PropertyFactory<T> {
-        Property<T> createProperty();
-    }
-
-    public static class Factory<T> {
-
-        private PropertyFactory<T> propertyFactory;
-        private T[] values;
-        public Factory(PropertyFactory<T> propertyFactory, T[] values) {
-            this.propertyFactory = propertyFactory;
-            this.values = values;
-        }
-        public Property<T> createProperty() {
-            return propertyFactory.createProperty();
-        }
-        public T[] getValues() {
-            return values;
-        }
-    }
-
-    private Factory<T> factory;
-    private Property<T> op1;
-    private Property<T> op2;
-    private Property<T> op3;
-    private Property<T> op4;
-    private T[] v;
-
-    public BidirectionalBindingTest(Factory<T> factory) {
-        this.factory = factory;
-    }
-
-    @Before
-    public void setUp() {
-        op1 = factory.createProperty();
-        op2 = factory.createProperty();
-        op3 = factory.createProperty();
-        op4 = factory.createProperty();
-        v = factory.getValues();
-        op1.setValue(v[0]);
-        op2.setValue(v[1]);
-    }
-
-    @Test
-    public void testBind() {
-        Bindings.bindBidirectional(op1, op2);
-        Bindings.bindBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(v[1], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-
-        op1.setValue(v[2]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[2], op2.getValue());
-
-        op2.setValue(v[3]);
-        assertEquals(v[3], op1.getValue());
-        assertEquals(v[3], op2.getValue());
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindBidirectional(op1, op2);
-
-        // unbind properties of different beans
-        Bindings.bindBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(v[1], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-
-        Bindings.unbindBidirectional(op1, op2);
-        System.gc();
-        assertEquals(v[1], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-
-        op1.setValue(v[2]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-
-        op2.setValue(v[3]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[3], op2.getValue());
-    }
-
-    @Test
-    public void testChaining() {
-        op3.setValue(v[2]);
-        Bindings.bindBidirectional(op1, op2);
-        Bindings.bindBidirectional(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[2], op2.getValue());
-        assertEquals(v[2], op3.getValue());
-
-        op1.setValue(v[3]);
-        assertEquals(v[3], op1.getValue());
-        assertEquals(v[3], op2.getValue());
-        assertEquals(v[3], op3.getValue());
-
-        op2.setValue(v[0]);
-        assertEquals(v[0], op1.getValue());
-        assertEquals(v[0], op2.getValue());
-        assertEquals(v[0], op3.getValue());
-
-        op3.setValue(v[1]);
-        assertEquals(v[1], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-        assertEquals(v[1], op3.getValue());
-
-        // now unbind
-        Bindings.unbindBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(v[1], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-        assertEquals(v[1], op3.getValue());
-
-        op1.setValue(v[2]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-        assertEquals(v[1], op3.getValue());
-
-        op2.setValue(v[3]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[3], op2.getValue());
-        assertEquals(v[3], op3.getValue());
-
-        op3.setValue(v[0]);
-        assertEquals(v[2], op1.getValue());
-        assertEquals(v[0], op2.getValue());
-        assertEquals(v[0], op3.getValue());
-    }
-
-    private int getListenerCount(ObservableValue<T> v) {
-        return ExpressionHelperUtility.getChangeListeners(v).size();
-    }
-
-    @Test
-    public void testWeakReferencing() {
-        Bindings.bindBidirectional(op1, op2);
-
-        assertEquals(1, getListenerCount(op1));
-        assertEquals(1, getListenerCount(op2));
-
-        op1 = null;
-        System.gc();
-        op2.setValue(v[2]);
-        assertEquals(0, getListenerCount(op2));
-
-        Bindings.bindBidirectional(op2, op3);
-        assertEquals(1, getListenerCount(op2));
-        assertEquals(1, getListenerCount(op3));
-
-        op3 = null;
-        System.gc();
-        op2.setValue(v[0]);
-        assertEquals(0, getListenerCount(op2));
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = BidirectionalBinding.bind(op1, op2).hashCode();
-        final int hc2 = BidirectionalBinding.bind(op2, op1).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final BidirectionalBinding golden = BidirectionalBinding.bind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(BidirectionalBinding.bind(op1, op2)));
-        assertTrue(golden.equals(BidirectionalBinding.bind(op2, op1)));
-        assertFalse(golden.equals(BidirectionalBinding.bind(op1, op3)));
-        assertFalse(golden.equals(BidirectionalBinding.bind(op3, op1)));
-        assertFalse(golden.equals(BidirectionalBinding.bind(op3, op2)));
-        assertFalse(golden.equals(BidirectionalBinding.bind(op2, op3)));
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final BidirectionalBinding binding1 = BidirectionalBinding.bind(op1, op2);
-        final BidirectionalBinding binding2 = BidirectionalBinding.bind(op1, op2);
-        final BidirectionalBinding binding3 = BidirectionalBinding.bind(op2, op1);
-        final BidirectionalBinding binding4 = BidirectionalBinding.bind(op2, op1);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-        assertFalse(binding1.equals(binding3));
-
-        assertTrue(binding3.equals(binding3));
-        assertFalse(binding3.equals(binding1));
-        assertFalse(binding3.equals(binding4));
-    }
-
-    @Test(expected=NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindBidirectional(null, op2);
-    }
-
-    @Test(expected=NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindBidirectional(op1, null);
-    }
-
-    @Test(expected=IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindBidirectional(op1, op1);
-    }
-
-    @Test(expected=NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindBidirectional(null, op2);
-    }
-
-    @Test(expected=NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindBidirectional(op1, null);
-    }
-
-    @Test(expected=IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testBrokenBind() {
-        Bindings.bindBidirectional(op1, op2);
-        op1.bind(op3);
-        assertEquals(op3.getValue(), op1.getValue());
-        assertEquals(op2.getValue(), op1.getValue());
-
-        op2.setValue(v[2]);
-        assertEquals(op3.getValue(), op1.getValue());
-        assertEquals(op2.getValue(), op1.getValue());
-    }
-
-    @Test
-    public void testDoubleBrokenBind() {
-        Bindings.bindBidirectional(op1, op2);
-        op1.bind(op3);
-        op4.setValue(v[0]);
-
-        op2.bind(op4);
-        assertEquals(op4.getValue(), op2.getValue());
-        assertEquals(op3.getValue(), op1.getValue());
-        // Test that bidirectional binding was unbound in this case
-        op3.setValue(v[0]);
-        op4.setValue(v[1]);
-        assertEquals(op4.getValue(), op2.getValue());
-        assertEquals(op3.getValue(), op1.getValue());
-        assertEquals(v[0], op1.getValue());
-        assertEquals(v[1], op2.getValue());
-    }
-
-    @Parameterized.Parameters
-    public static Collection<Object[]> parameters() {
-        final Boolean[] booleanData = new Boolean[] {true, false, true, false};
-        final Double[] doubleData = new Double[] {2348.2345, -92.214, -214.0214, -908.214};
-        final Float[] floatData = new Float[] {-3592.9f, 234872.8347f, 3897.274f, 3958.938745f};
-        final Integer[] integerData = new Integer[] {248, -9384, -234, -34};
-        final Long[] longData = new Long[] {9823984L, 2908934L, -234234L, 9089234L};
-        final Object[] objectData = new Object[] {new Object(), new Object(), new Object(), new Object()};
-        final String[] stringData = new String[] {"A", "B", "C", "D"};
-
-        return Arrays.asList(new Object[][] {
-            { new Factory(() -> new SimpleBooleanProperty(), booleanData) },
-            { new Factory(() -> new SimpleDoubleProperty(), doubleData) },
-            { new Factory(() -> new SimpleFloatProperty(), floatData) },
-            { new Factory(() -> new SimpleIntegerProperty(), integerData) },
-            { new Factory(() -> new SimpleLongProperty(), longData) },
-            { new Factory(() -> new SimpleObjectProperty<>(), objectData) },
-            { new Factory(() -> new SimpleStringProperty(), stringData) },
-            { new Factory(() -> new ReadOnlyBooleanWrapper(), booleanData) },
-            { new Factory(() -> new ReadOnlyDoubleWrapper(), doubleData) },
-            { new Factory(() -> new ReadOnlyFloatWrapper(), floatData) },
-            { new Factory(() -> new ReadOnlyIntegerWrapper(), integerData) },
-            { new Factory(() -> new ReadOnlyLongWrapper(), longData) },
-            { new Factory(() -> new ReadOnlyObjectWrapper<>(), objectData) },
-            { new Factory(() -> new ReadOnlyStringWrapper(), stringData) },
-        });
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalBindingWithConversionTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.InvalidationListener;
-import javafx.beans.binding.Bindings;
-import javafx.beans.property.*;
-import javafx.beans.value.ChangeListener;
-import javafx.util.StringConverter;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Locale;
-
-import static org.junit.Assert.*;
-
-@RunWith(Parameterized.class)
-public class BidirectionalBindingWithConversionTest<S, T> {
-
-    public static interface Functions<U, V> {
-        PropertyMock<U> create0();
-        PropertyMock<V> create1();
-    	void bind(PropertyMock<U> obj0, PropertyMock<V> obj1);
-    	void unbind(Object obj0, Object obj1);
-    	Object createBindingDirectly(PropertyMock<U> op0, PropertyMock<V> op1);
-        void check0(U obj0, U obj1);
-        void check1(V obj0, V obj1);
-    }
-
-    private final Functions<S, T> func;
-    private final S[] v0;
-    private final T[] v1;
-
-    private PropertyMock<S> op0;
-    private PropertyMock<T> op1;
-
-    public BidirectionalBindingWithConversionTest(Functions<S, T> func, S[] v0, T[] v1) {
-        this.op0 = func.create0();
-        this.op1 = func.create1();
-        this.func = func;
-        this.v0 = v0;
-        this.v1 = v1;
-    }
-
-    @Before
-    public void setUp() {
-    	op0.setValue(v0[0]);
-    	op1.setValue(v1[1]);
-    }
-    
-    @Test
-    public void testBind() {
-    	func.bind(op0, op1);
-		System.gc(); // making sure we did not not overdo weak references
-        func.check0(v0[1], op0.getValue());
-        func.check1(v1[1], op1.getValue());
-
-		op0.setValue(v0[2]);
-        func.check0(v0[2], op0.getValue());
-        func.check1(v1[2], op1.getValue());
-
-		op1.setValue(v1[3]);
-        func.check0(v0[3], op0.getValue());
-        func.check1(v1[3], op1.getValue());
-    }
-
-	@Test
-	public void testUnbind() {
-		// unbind non-existing binding => no-op
-		func.unbind(op0, op1);
-		
-		// unbind properties of different beans
-    	func.bind(op0, op1);
-		System.gc(); // making sure we did not not overdo weak references
-        func.check0(v0[1], op0.getValue());
-        func.check1(v1[1], op1.getValue());
-
-		func.unbind(op0, op1);
-		System.gc();
-        func.check0(v0[1], op0.getValue());
-        func.check1(v1[1], op1.getValue());
-
-		op0.setValue(v0[2]);
-        func.check0(v0[2], op0.getValue());
-        func.check1(v1[1], op1.getValue());
-
-		op1.setValue(v1[3]);
-        func.check0(v0[2], op0.getValue());
-        func.check1(v1[3], op1.getValue());
-	}
-
-	@Test
-	public void testWeakReferencing() {
-		func.bind(op0, op1);
-		assertEquals(1, op0.getListenerCount());
-		assertEquals(1, op1.getListenerCount());
-
-		op0 = null;
-		System.gc();
-		op1.setValue(v1[2]);
-		assertEquals(0, op1.getListenerCount());
-
-        this.op0 = func.create0();
-		func.bind(op0, op1);
-		assertEquals(1, op0.getListenerCount());
-		assertEquals(1, op1.getListenerCount());
-
-		op1 = null;
-		System.gc();
-		op0.setValue(v0[3]);
-		assertEquals(0, op0.getListenerCount());
-	}
-	
-	@Test(expected=NullPointerException.class)
-	public void testBind_Null_X() {
-		func.bind(null, op1);
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testBind_X_Null() {
-		func.bind(op0, null);
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testUnbind_Null_X() {
-		func.unbind(null, op1);
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testUnbind_X_Null() {
-		func.unbind(op0, null);
-	}
-
-	@Test(expected=IllegalArgumentException.class)
-	public void testUnbind_X_Self() {
-		func.unbind(op0, op0);
-	}
-	
-    @Parameterized.Parameters
-    public static Collection<Object[]> parameters() {
-        final DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.US);
-        final Date[] dates = new Date[] {new Date(), new Date(0), new Date(Integer.MAX_VALUE), new Date(Long.MAX_VALUE)};
-        final String[] strings = new String[] {format.format(dates[0]), format.format(dates[1]), format.format(dates[2]), format.format(dates[3])};
-
-        final StringConverter<Date> converter = new StringConverter<Date>() {
-            @Override
-            public String toString(Date object) {
-                return format.format(object);
-            }
-
-            @Override
-            public Date fromString(String string) {
-                try {
-                    return format.parse(string);
-                } catch (ParseException e) {
-                    return null;
-                }
-            }
-        };
-
-        return Arrays.asList(new Object[][] {
-            // Format
-            {
-                new Functions<String, Date>() {
-                    @Override
-                    public PropertyMock<String> create0() {
-                        return new StringPropertyMock();
-                    }
-                    @Override
-                    public PropertyMock<Date> create1() {
-                        return new ObjectPropertyMock<Date>();
-                    }
-                    @Override
-                    public void bind(PropertyMock<String> op0, PropertyMock<Date> op1) {
-                        Bindings.bindBidirectional(op0, op1, format);
-                    }
-                    @Override
-                    public void unbind(Object op0, Object op1) {
-                        Bindings.unbindBidirectional(op0, op1);
-                    }
-                    @Override
-                    public Object createBindingDirectly(PropertyMock<String> op0, PropertyMock<Date> op1) {
-                        return BidirectionalBinding.bind(op0, op1, format);
-                    }
-
-                    @Override
-                    public void check0(String obj0, String obj1) {
-                        assertEquals(obj0, obj1);
-                    }
-
-                    @Override
-                    public void check1(Date obj0, Date obj1) {
-                        assertEquals(obj0.toString(), obj1.toString());
-                    }
-                },
-                strings,
-                dates
-            },
-            // Converter
-            {
-                new Functions<String, Date>() {
-                    @Override
-                    public PropertyMock<String> create0() {
-                        return new StringPropertyMock();
-                    }
-                    @Override
-                    public PropertyMock<Date> create1() {
-                        return new ObjectPropertyMock<Date>();
-                    }
-                    @Override
-                    public void bind(PropertyMock<String> op0, PropertyMock<Date> op1) {
-                        Bindings.bindBidirectional(op0, op1, converter);
-                    }
-                    @Override
-                    public void unbind(Object op0, Object op1) {
-                        Bindings.unbindBidirectional(op0, op1);
-                    }
-                    @Override
-                    public Object createBindingDirectly(PropertyMock<String> op0, PropertyMock<Date> op1) {
-                        return BidirectionalBinding.bind(op0, op1, converter);
-                    }
-
-                    @Override
-                    public void check0(String obj0, String obj1) {
-                        assertEquals(obj0, obj1);
-                    }
-
-                    @Override
-                    public void check1(Date obj0, Date obj1) {
-                        assertEquals(obj0.toString(), obj1.toString());
-                    }
-                },
-                strings,
-                dates
-            },
-        });
-    }
-    
-    private interface PropertyMock<T> extends Property<T> {
-        int getListenerCount();
-    }
-    
-    private static class ObjectPropertyMock<T> extends SimpleObjectProperty<T> implements PropertyMock<T> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super T> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super T> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-    
-    private static class StringPropertyMock extends SimpleStringProperty implements PropertyMock<String> {
-        
-        private int listenerCount = 0;
-        
-        @Override
-        public int getListenerCount() {
-            return listenerCount;
-        }
-        
-        @Override 
-        public void addListener(ChangeListener<? super String> listener) {
-            super.addListener(listener);
-            listenerCount++;
-        }
-        
-        @Override 
-        public void removeListener(ChangeListener<? super String> listener) {
-            super.removeListener(listener);
-            listenerCount--;
-        }
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingListTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-public class BidirectionalContentBindingListTest {
-
-    private ObservableList<Integer> op1;
-    private ObservableList<Integer> op2;
-    private ObservableList<Integer> op3;
-    private List<Integer> list0;
-    private List<Integer> list1;
-    private List<Integer> list2;
-
-    @Before
-    public void setUp() {
-        list0 = new ArrayList<Integer>();
-        list1 = new ArrayList<Integer>(Arrays.asList(-1));
-        list2 = new ArrayList<Integer>(Arrays.asList(2, 1));
-
-        op1 = FXCollections.observableArrayList(list1);
-        op2 = FXCollections.observableArrayList(list2);
-        op3 = FXCollections.observableArrayList(list0);
-    }
-
-    @Test
-    public void testBind() {
-        final List<Integer> list2_sorted = new ArrayList<Integer>(Arrays.asList(1, 2));
-
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        op1.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-
-        op1.setAll(list0);
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-
-        op1.setAll(list2);
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        FXCollections.sort(op1);
-        assertEquals(list2_sorted, op1);
-        assertEquals(list2_sorted, op2);
-
-        op2.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-
-        op2.setAll(list0);
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-
-        op2.setAll(list2);
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        FXCollections.sort(op2);
-        assertEquals(list2_sorted, op1);
-        assertEquals(list2_sorted, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContentBidirectional(op1, op2);
-
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc();
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        op1.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list2, op2);
-
-        op2.setAll(list0);
-        assertEquals(list1, op1);
-        assertEquals(list0, op2);
-
-        // unbind in flipped order
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-
-        Bindings.unbindContentBidirectional(op2, op1);
-        System.gc();
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-
-        op1.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list0, op2);
-
-        op2.setAll(list2);
-        assertEquals(list1, op1);
-        assertEquals(list2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContentBidirectional(op1, op2);
-        Bindings.bindContentBidirectional(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-
-        op1.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-        assertEquals(list1, op3);
-
-        op2.setAll(list2);
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-        assertEquals(list2, op3);
-
-        op3.setAll(list0);
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-
-        // now unbind 
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-
-        op1.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-
-        op2.setAll(list2);
-        assertEquals(list1, op1);
-        assertEquals(list2, op2);
-        assertEquals(list2, op3);
-
-        op3.setAll(list0);
-        assertEquals(list1, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = BidirectionalContentBinding.bind(op1, op2).hashCode();
-        BidirectionalContentBinding.unbind(op1, op2);
-        final int hc2 = BidirectionalContentBinding.bind(op2, op1).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op1, op2)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op2, op1)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op1, op3)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op1)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op2)));
-        BidirectionalContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op2, op3)));
-        BidirectionalContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding2 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding3 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding4 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-        assertFalse(binding1.equals(binding3));
-
-        assertTrue(binding3.equals(binding3));
-        assertFalse(binding3.equals(binding1));
-        assertFalse(binding3.equals(binding4));
-    }
-
-    @Test
-    public void testChangeValue() {
-        Bindings.bindContentBidirectional(op1, op2);
-        assertEquals(2, op2.get(0).intValue());
-        op1.set(0, 1);
-        assertEquals(1, op2.get(0).intValue());
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingMapTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableMap;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-public class BidirectionalContentBindingMapTest {
-    
-    private static final String key1 = "Key1";
-    private static final String key2_1 = "Key2_1";
-    private static final String key2_2 = "Key2_2";
-
-    private ObservableMap<String, Integer> op1;
-    private ObservableMap<String, Integer> op2;
-    private ObservableMap<String, Integer> op3;
-    private Map<String, Integer> map0;
-    private Map<String, Integer> map1;
-    private Map<String, Integer> map2;
-
-    @Before
-    public void setUp() {
-        map0 = new HashMap<String, Integer>();
-        map1 = new HashMap<String, Integer>();
-        map1.put(key1, -1);
-        map2 = new HashMap<String, Integer>();
-        map2.put(key2_1, 2);
-        map2.put(key2_2, 1);
-
-        op1 = FXCollections.observableMap(map1);
-        op2 = FXCollections.observableMap(map2);
-        op3 = FXCollections.observableMap(map0);
-    }
-
-    @Test
-    public void testBind() {
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        op1.clear();
-        op1.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-
-        op1.clear();
-        op1.putAll(map0);
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-
-        op1.clear();
-        op1.putAll(map2);
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        op2.clear();
-        op2.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-
-        op2.clear();
-        op2.putAll(map0);
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-
-        op2.clear();
-        op2.putAll(map2);
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContentBidirectional(op1, op2);
-
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc();
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        op1.clear();
-        op1.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map2, op2);
-
-        op2.clear();
-        op2.putAll(map0);
-        assertEquals(map1, op1);
-        assertEquals(map0, op2);
-
-        // unbind in flipped order
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-
-        Bindings.unbindContentBidirectional(op2, op1);
-        System.gc();
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-
-        op1.clear();
-        op1.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map0, op2);
-
-        op2.clear();
-        op2.putAll(map2);
-        assertEquals(map1, op1);
-        assertEquals(map2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContentBidirectional(op1, op2);
-        Bindings.bindContentBidirectional(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-
-        op1.clear();
-        op1.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-        assertEquals(map1, op3);
-
-        op2.clear();
-        op2.putAll(map2);
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-        assertEquals(map2, op3);
-
-        op3.clear();
-        op3.putAll(map0);
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-
-        // now unbind 
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-
-        op1.clear();
-        op1.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-
-        op2.clear();
-        op2.putAll(map2);
-        assertEquals(map1, op1);
-        assertEquals(map2, op2);
-        assertEquals(map2, op3);
-
-        op3.clear();
-        op3.putAll(map0);
-        assertEquals(map1, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = BidirectionalContentBinding.bind(op1, op2).hashCode();
-        BidirectionalContentBinding.unbind(op1, op2);
-        final int hc2 = BidirectionalContentBinding.bind(op2, op1).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op1, op2)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op2, op1)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op1, op3)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op1)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op2)));
-        BidirectionalContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op2, op3)));
-        BidirectionalContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding2 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding3 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding4 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-        assertFalse(binding1.equals(binding3));
-
-        assertTrue(binding3.equals(binding3));
-        assertFalse(binding3.equals(binding1));
-        assertFalse(binding3.equals(binding4));
-    }
-
-    @Test
-    public void testChangeValue() {
-        Bindings.bindContentBidirectional(op1, op2);
-        assertEquals(2, op2.get(key2_1).intValue());
-        op1.put(key2_1, 1);
-        assertEquals(1, op2.get(key2_1).intValue());
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/BidirectionalContentBindingSetTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableSet;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
-public class BidirectionalContentBindingSetTest {
-
-    private ObservableSet<Integer> op1;
-    private ObservableSet<Integer> op2;
-    private ObservableSet<Integer> op3;
-    private Set<Integer> set0;
-    private Set<Integer> set1;
-    private Set<Integer> set2;
-
-    @Before
-    public void setUp() {
-        set0 = new HashSet<Integer>();
-        set1 = new HashSet<Integer>();
-        set1.add(-1);
-        set2 = new HashSet<Integer>();
-        set2.add(2);
-        set2.add(1);
-
-        op1 = FXCollections.observableSet(set1);
-        op2 = FXCollections.observableSet(set2);
-        op3 = FXCollections.observableSet(set0);
-    }
-
-    @Test
-    public void testBind() {
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        op1.clear();
-        op1.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-
-        op1.clear();
-        op1.addAll(set0);
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-
-        op1.clear();
-        op1.addAll(set2);
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        op2.clear();
-        op2.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-
-        op2.clear();
-        op2.addAll(set0);
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-
-        op2.clear();
-        op2.addAll(set2);
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContentBidirectional(op1, op2);
-
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc();
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        op1.clear();
-        op1.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set2, op2);
-
-        op2.clear();
-        op2.addAll(set0);
-        assertEquals(set1, op1);
-        assertEquals(set0, op2);
-
-        // unbind in flipped order
-        Bindings.bindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-
-        Bindings.unbindContentBidirectional(op2, op1);
-        System.gc();
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-
-        op1.clear();
-        op1.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set0, op2);
-
-        op2.clear();
-        op2.addAll(set2);
-        assertEquals(set1, op1);
-        assertEquals(set2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContentBidirectional(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContentBidirectional(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContentBidirectional(op1, op1);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContentBidirectional(op1, op2);
-        Bindings.bindContentBidirectional(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-
-        op1.clear();
-        op1.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-        assertEquals(set1, op3);
-
-        op2.clear();
-        op2.addAll(set2);
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-        assertEquals(set2, op3);
-
-        op3.clear();
-        op3.addAll(set0);
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-
-        // now unbind 
-        Bindings.unbindContentBidirectional(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-
-        op1.clear();
-        op1.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-
-        op2.clear();
-        op2.addAll(set2);
-        assertEquals(set1, op1);
-        assertEquals(set2, op2);
-        assertEquals(set2, op3);
-
-        op3.clear();
-        op3.addAll(set0);
-        assertEquals(set1, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = BidirectionalContentBinding.bind(op1, op2).hashCode();
-        BidirectionalContentBinding.unbind(op1, op2);
-        final int hc2 = BidirectionalContentBinding.bind(op2, op1).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op1, op2)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertTrue(golden.equals(BidirectionalContentBinding.bind(op2, op1)));
-        BidirectionalContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op1, op3)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op1)));
-        BidirectionalContentBinding.unbind(op1, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op3, op2)));
-        BidirectionalContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(BidirectionalContentBinding.bind(op2, op3)));
-        BidirectionalContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding2 = BidirectionalContentBinding.bind(op1, op2);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding3 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        final Object binding4 = BidirectionalContentBinding.bind(op2, op1);
-        BidirectionalContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-        assertFalse(binding1.equals(binding3));
-
-        assertTrue(binding3.equals(binding3));
-        assertFalse(binding3.equals(binding1));
-        assertFalse(binding3.equals(binding4));
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ContentBindingListTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-public class ContentBindingListTest {
-
-    private List<Integer> op1;
-    private ObservableList<Integer> op2;
-    private ObservableList<Integer> op3;
-    private List<Integer> list0;
-    private List<Integer> list1;
-    private List<Integer> list2;
-
-    @Before
-    public void setUp() {
-        list0 = new ArrayList<Integer>();
-        list1 = new ArrayList<Integer>(Arrays.asList(0));
-        list2 = new ArrayList<Integer>(Arrays.asList(2, 1));
-
-        op1 = new ArrayList<Integer>(list1);
-        op2 = FXCollections.observableArrayList(list2);
-        op3 = FXCollections.observableArrayList(list0);
-    }
-
-    @Test
-    public void testBind() {
-        List<Integer> list2_sorted = new ArrayList<Integer>(Arrays.asList(1, 2));
-
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        op2.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-
-        op2.setAll(list0);
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-
-        op2.setAll(list2);
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        FXCollections.sort(op2);
-        assertEquals(list2_sorted, op1);
-        assertEquals(list2_sorted, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContent(op2, op2);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContent(op1, op2);
-
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        Bindings.unbindContent(op1, op2);
-        System.gc();
-        assertEquals(list2, op1);
-        assertEquals(list2, op2);
-
-        op1.clear();
-        assertEquals(list0, op1);
-        assertEquals(list2, op2);
-
-        op2.setAll(list1);
-        assertEquals(list0, op1);
-        assertEquals(list1, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContent(op2, op2);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContent(op1, op2);
-        Bindings.bindContent(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list0, op1);
-        assertEquals(list0, op2);
-        assertEquals(list0, op3);
-
-        op3.setAll(list1);
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-        assertEquals(list1, op3);
-
-        // now unbind 
-        Bindings.unbindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(list1, op1);
-        assertEquals(list1, op2);
-        assertEquals(list1, op3);
-
-        op3.setAll(list2);
-        assertEquals(list1, op1);
-        assertEquals(list2, op2);
-        assertEquals(list2, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = ContentBinding.bind(op1, op2).hashCode();
-        ContentBinding.unbind(op1, op2);
-        final int hc2 = ContentBinding.bind(op1, op2).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(ContentBinding.bind(op1, op2)));
-        ContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(ContentBinding.bind(op3, op2)));
-        ContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(ContentBinding.bind(op2, op3)));
-        ContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        final Object binding2 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-    }
-
-    @Test
-    public void testAlreadyBound() {
-        // get the current exception handler before replacing with our own,
-        // as ListListenerHelper intercepts the exception otherwise
-        final Thread.UncaughtExceptionHandler exceptionHandler =
-                Thread.currentThread().getUncaughtExceptionHandler();
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> {
-                throw new AssertionError("We don't expect any exceptions in this test!", e);
-            }
-        );
-
-        ContentBinding.bind(op1, op2);
-        ContentBinding.bind(op1, op2);
-        op2.remove(1);
-
-        // reset the exception handler
-        Thread.currentThread().setUncaughtExceptionHandler(exceptionHandler);
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ContentBindingMapTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableMap;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-public class ContentBindingMapTest {
-    
-    private static final String key1 = "Key1";
-    private static final String key2_1 = "Key2_1";
-    private static final String key2_2 = "Key2_2";
-
-    private Map<String, Integer> op1;
-    private ObservableMap<String, Integer> op2;
-    private ObservableMap<String, Integer> op3;
-    private Map<String, Integer> map0;
-    private Map<String, Integer> map1;
-    private Map<String, Integer> map2;
-
-    @Before
-    public void setUp() {
-        map0 = new HashMap<String, Integer>();
-        map1 = new HashMap<String, Integer>();
-        map1.put(key1, -1);
-        map2 = new HashMap<String, Integer>();
-        map2.put(key2_1, 2);
-        map2.put(key2_2, 1);
-
-        op1 = new HashMap<String, Integer>(map1);
-        op2 = FXCollections.observableMap(map2);
-        op3 = FXCollections.observableMap(map0);
-    }
-
-    @Test
-    public void testBind() {
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        op2.clear();
-        op2.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-
-        op2.clear();
-        op2.putAll(map0);
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-
-        op2.clear();
-        op2.putAll(map2);
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContent(op2, op2);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContent(op1, op2);
-
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        Bindings.unbindContent(op1, op2);
-        System.gc();
-        assertEquals(map2, op1);
-        assertEquals(map2, op2);
-
-        op1.clear();
-        assertEquals(map0, op1);
-        assertEquals(map2, op2);
-
-        op2.clear();
-        op2.putAll(map1);
-        assertEquals(map0, op1);
-        assertEquals(map1, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContent(op2, op2);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContent(op1, op2);
-        Bindings.bindContent(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map0, op1);
-        assertEquals(map0, op2);
-        assertEquals(map0, op3);
-
-        op3.clear();
-        op3.putAll(map1);
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-        assertEquals(map1, op3);
-
-        // now unbind 
-        Bindings.unbindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(map1, op1);
-        assertEquals(map1, op2);
-        assertEquals(map1, op3);
-
-        op3.clear();
-        op3.putAll(map2);
-        assertEquals(map1, op1);
-        assertEquals(map2, op2);
-        assertEquals(map2, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = ContentBinding.bind(op1, op2).hashCode();
-        ContentBinding.unbind(op1, op2);
-        final int hc2 = ContentBinding.bind(op1, op2).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(ContentBinding.bind(op1, op2)));
-        ContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(ContentBinding.bind(op3, op2)));
-        ContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(ContentBinding.bind(op2, op3)));
-        ContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        final Object binding2 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ContentBindingSetTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.binding.Bindings;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableSet;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
-public class ContentBindingSetTest {
-
-    private Set<Integer> op1;
-    private ObservableSet<Integer> op2;
-    private ObservableSet<Integer> op3;
-    private Set<Integer> set0;
-    private Set<Integer> set1;
-    private Set<Integer> set2;
-
-    @Before
-    public void setUp() {
-        set0 = new HashSet<Integer>();
-        set1 = new HashSet<Integer>();
-        set1.add(-1);
-        set2 = new HashSet<Integer>(2, 1);
-        set2.add(2);
-        set2.add(1);
-
-        op1 = new HashSet<Integer>(set1);
-        op2 = FXCollections.observableSet(set2);
-        op3 = FXCollections.observableSet(set0);
-    }
-
-    @Test
-    public void testBind() {
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        op2.clear();
-        op2.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-
-        op2.clear();
-        op2.addAll(set0);
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-
-        op2.clear();
-        op2.addAll(set2);
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_Null_X() {
-        Bindings.bindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testBind_X_Null() {
-        Bindings.bindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testBind_X_Self() {
-        Bindings.bindContent(op2, op2);
-    }
-
-    @Test
-    public void testUnbind() {
-        // unbind non-existing binding => no-op
-        Bindings.unbindContent(op1, op2);
-
-        Bindings.bindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        Bindings.unbindContent(op1, op2);
-        System.gc();
-        assertEquals(set2, op1);
-        assertEquals(set2, op2);
-
-        op1.clear();
-        assertEquals(set0, op1);
-        assertEquals(set2, op2);
-
-        op2.clear();
-        op2.addAll(set1);
-        assertEquals(set0, op1);
-        assertEquals(set1, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_Null_X() {
-        Bindings.unbindContent(null, op2);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testUnbind_X_Null() {
-        Bindings.unbindContent(op1, null);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnbind_X_Self() {
-        Bindings.unbindContent(op2, op2);
-    }
-
-    @Test
-    public void testChaining() {
-        Bindings.bindContent(op1, op2);
-        Bindings.bindContent(op2, op3);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set0, op1);
-        assertEquals(set0, op2);
-        assertEquals(set0, op3);
-
-        op3.clear();
-        op3.addAll(set1);
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-        assertEquals(set1, op3);
-
-        // now unbind 
-        Bindings.unbindContent(op1, op2);
-        System.gc(); // making sure we did not not overdo weak references
-        assertEquals(set1, op1);
-        assertEquals(set1, op2);
-        assertEquals(set1, op3);
-
-        op3.clear();
-        op3.addAll(set2);
-        assertEquals(set1, op1);
-        assertEquals(set2, op2);
-        assertEquals(set2, op3);
-    }
-
-    @Test
-    public void testHashCode() {
-        final int hc1 = ContentBinding.bind(op1, op2).hashCode();
-        ContentBinding.unbind(op1, op2);
-        final int hc2 = ContentBinding.bind(op1, op2).hashCode();
-        assertEquals(hc1, hc2);
-    }
-
-    @Test
-    public void testEquals() {
-        final Object golden = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-
-        assertTrue(golden.equals(golden));
-        assertFalse(golden.equals(null));
-        assertFalse(golden.equals(op1));
-        assertTrue(golden.equals(ContentBinding.bind(op1, op2)));
-        ContentBinding.unbind(op1, op2);
-        assertFalse(golden.equals(ContentBinding.bind(op3, op2)));
-        ContentBinding.unbind(op2, op3);
-        assertFalse(golden.equals(ContentBinding.bind(op2, op3)));
-        ContentBinding.unbind(op2, op3);
-    }
-
-    @Test
-    public void testEqualsWithGCedProperty() {
-        final Object binding1 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        final Object binding2 = ContentBinding.bind(op1, op2);
-        ContentBinding.unbind(op1, op2);
-        op1 = null;
-        System.gc();
-
-        assertTrue(binding1.equals(binding1));
-        assertFalse(binding1.equals(binding2));
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ErrorLoggingUtiltity.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-import static org.junit.Assert.*;
-
-public class ErrorLoggingUtiltity {
-
-    static {
-        // initialize PlatformLogger
-        Logging.getLogger();
-    }
-
-    // getLogManager will redirect existing PlatformLogger to the Logger
-    private static final Logger logger = LogManager.getLogManager().getLogger("javafx.beans");
-
-    Level level;
-    LogRecord lastRecord;
-
-    Handler handler = new Handler() {
-
-        @Override
-        public void publish(LogRecord record) {
-            lastRecord = record;
-        }
-
-        @Override
-        public void flush() {
-        }
-
-        @Override
-        public void close() throws SecurityException {
-        }
-    };
-
-    public void start() {
-        reset();
-        level = logger.getLevel();
-        logger.setLevel(Level.ALL);
-        logger.addHandler(handler);
-    }
-
-    public void stop() {
-        logger.setLevel(level);
-        logger.removeHandler(handler);
-    }
-    
-    public void reset() {
-        lastRecord = null;
-    }
-
-    public void checkFine(Class expectedException) {
-        check(Level.FINE, expectedException);        
-    }
-
-    public void check(Level expectedLevel, Class expectedException) {
-        assertNotNull(lastRecord);
-        assertEquals(expectedLevel, lastRecord.getLevel());
-        assertEquals(expectedException, lastRecord.getThrown().getClass());
-        reset();
-    }
-
-    public boolean isEmpty() {
-        return lastRecord == null;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperBaseShim.java	Fri Sep 04 15:22:12 2015 -0700
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.javafx.binding;
+
+public class ExpressionHelperBaseShim extends ExpressionHelperBase {
+
+    public static int trim(int size, Object[] listeners) {
+        return ExpressionHelperBase.trim(size, listeners);
+    }
+    
+}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperBaseTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import static org.junit.Assert.*;
-
-import javafx.beans.WeakListener;
-import org.junit.Test;
-
-public class ExpressionHelperBaseTest {
-    
-    private static final Object listener = new Object();
-    private static final Object listener2 = new Object();
-    
-    private static final WeakListener validWeakListener = () -> false;
-    
-    private static final WeakListener gcedWeakListener = () -> true;
-    
-    @Test
-    public void testEmptyArray() {
-        Object[] array = new Object[0];
-        assertEquals(0, ExpressionHelperBase.trim(0, array));
-        assertArrayEquals(new Object[0], array);
-        
-        array = new Object[1];
-        assertEquals(0, ExpressionHelperBase.trim(0, array));
-        assertArrayEquals(new Object[1], array);
-    }
-    
-    @Test
-    public void testSingleElement() {
-        Object[] array = new Object[] {listener};
-        assertEquals(1, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {listener}, array);
-        
-        array = new Object[] {validWeakListener};
-        assertEquals(1, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {validWeakListener}, array);
-        
-        array = new Object[] {gcedWeakListener};
-        assertEquals(0, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {null}, array);
-        
-        array = new Object[] {listener, null};
-        assertEquals(1, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {listener, null}, array);
-        
-        array = new Object[] {validWeakListener, null};
-        assertEquals(1, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {validWeakListener, null}, array);
-        
-        array = new Object[] {gcedWeakListener, null};
-        assertEquals(0, ExpressionHelperBase.trim(1, array));
-        assertArrayEquals(new Object[] {null, null}, array);
-    }
-    
-    @Test
-    public void testMultipleElements() {
-        Object[] array = new Object[] {validWeakListener, listener, listener2};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, listener2}, array);
-        
-        array = new Object[] {listener, validWeakListener, listener2};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, listener2}, array);
-        
-        array = new Object[] {listener, listener2, validWeakListener};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, listener2, validWeakListener}, array);
-        
-        array = new Object[] {validWeakListener, listener, listener2, null};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, listener2, null}, array);
-        
-        array = new Object[] {listener, validWeakListener, listener2, null};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, listener2, null}, array);
-        
-        array = new Object[] {listener, listener2, validWeakListener, null};
-        assertEquals(3, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, listener2, validWeakListener, null}, array);
-
-
-        array = new Object[] {gcedWeakListener, validWeakListener, listener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
-        
-        array = new Object[] {gcedWeakListener, listener, validWeakListener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
-        
-        array = new Object[] {gcedWeakListener, validWeakListener, listener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
-        
-        array = new Object[] {gcedWeakListener, listener, validWeakListener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
-        
-
-        array = new Object[] {validWeakListener, gcedWeakListener, listener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
-        
-        array = new Object[] {listener, gcedWeakListener, validWeakListener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
-        
-        array = new Object[] {validWeakListener, gcedWeakListener, listener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
-        
-        array = new Object[] {listener, gcedWeakListener, validWeakListener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
-        
-
-        array = new Object[] {validWeakListener, listener, gcedWeakListener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null}, array);
-        
-        array = new Object[] {listener, validWeakListener, gcedWeakListener};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null}, array);
-        
-        array = new Object[] {validWeakListener, listener, gcedWeakListener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {validWeakListener, listener, null, null}, array);
-        
-        array = new Object[] {listener, validWeakListener, gcedWeakListener, null};
-        assertEquals(2, ExpressionHelperBase.trim(3, array));
-        assertArrayEquals(new Object[] {listener, validWeakListener, null, null}, array);
-        
-        
-        array = new Object[] {gcedWeakListener, gcedWeakListener};
-        assertEquals(0, ExpressionHelperBase.trim(2, array));
-        assertArrayEquals(new Object[] {null, null}, array);
-        
-        array = new Object[] {gcedWeakListener, gcedWeakListener, null};
-        assertEquals(0, ExpressionHelperBase.trim(2, array));
-        assertArrayEquals(new Object[] {null, null, null}, array);
-    }
-    
-    
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperShim.java	Fri Sep 04 15:22:12 2015 -0700
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.javafx.binding;
+
+public class ExpressionHelperShim {
+    
+    public static void fireValueChangedEvent(ExpressionHelper helper) {
+        helper.fireValueChangedEvent();
+    }
+    
+}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,646 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import javafx.beans.InvalidationListener;
-import javafx.beans.InvalidationListenerMock;
-import javafx.beans.Observable;
-import javafx.beans.WeakInvalidationListenerMock;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ChangeListenerMock;
-import javafx.beans.value.ObservableValue;
-import javafx.beans.value.ObservableValueStub;
-import javafx.beans.value.WeakChangeListenerMock;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.BitSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class ExpressionHelperTest {
-
-    private static final Object UNDEFINED = new Object();
-    private static final Object DATA_1 = new Object();
-    private static final Object DATA_2 = new Object();
-
-    private ExpressionHelper helper;
-    private ObservableValueStub observable;
-    private InvalidationListenerMock[] invalidationListener;
-    private ChangeListenerMock<Object>[] changeListener;
-
-    @Before
-    public void setUp() {
-        helper = null;
-        observable = new ObservableValueStub(DATA_1);
-        invalidationListener = new InvalidationListenerMock[] {
-                new InvalidationListenerMock(), new InvalidationListenerMock(), new InvalidationListenerMock(), new InvalidationListenerMock()
-        };
-        changeListener = new ChangeListenerMock[] {
-                new ChangeListenerMock<Object>(UNDEFINED), new ChangeListenerMock<Object>(UNDEFINED), new ChangeListenerMock<Object>(UNDEFINED), new ChangeListenerMock<Object>(UNDEFINED)
-        };
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testAddInvalidation_Null_X() {
-        ExpressionHelper.addListener(helper, null, invalidationListener[0]);
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testAddInvalidation_X_Null() {
-        ExpressionHelper.addListener(helper, observable, (InvalidationListener) null);
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testRemoveInvalidation_Null() {
-        ExpressionHelper.removeListener(helper, (InvalidationListener) null);
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testAddChange_Null_X() {
-        ExpressionHelper.addListener(helper, null, changeListener[0]);
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testAddChange_X_Null() {
-        ExpressionHelper.addListener(helper, observable, (ChangeListener) null);
-    }
-
-    @Test (expected = NullPointerException.class)
-    public void testRemoveChange_Null() {
-        ExpressionHelper.removeListener(helper, (ChangeListener) null);
-    }
-
-    @Test
-    public void testEmptyHelper() {
-        // all of these calls should be no-ops
-        ExpressionHelper.removeListener(helper, invalidationListener[0]);
-        ExpressionHelper.removeListener(helper, changeListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-    }
-
-    @Test
-    public void testSingeInvalidation() {
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-    }
-
-    @Test
-    public void testSingeChange() {
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-        changeListener[1].check(observable, DATA_2, DATA_1, 1);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testAddInvalidation() {
-        final InvalidationListener weakListener = new WeakInvalidationListenerMock();
-
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-    }
-
-    @Test
-    public void testRemoveInvalidation() {
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[0]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[1]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(observable, 1);
-
-        helper = ExpressionHelper.removeListener(helper, invalidationListener[2]);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(null, 0);
-    }
-
-    @Test
-    public void testAddInvalidationWhileLocked() {
-        final ChangeListener<Object> addingListener = new ChangeListener() {
-            int index = 0;
-            @Override public void changed(ObservableValue observable, Object oldValue, Object newValue) {
-                if (index < invalidationListener.length) {
-                    helper = ExpressionHelper.addListener(helper, ExpressionHelperTest.this.observable, invalidationListener[index++]);
-                }
-            }
-        };
-        helper = ExpressionHelper.addListener(helper, observable, addingListener);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-
-        invalidationListener[0].reset();
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        invalidationListener[1].reset();
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        invalidationListener[2].reset();
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        invalidationListener[3].reset();
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-        invalidationListener[3].check(observable, 1);
-    }
-
-    @Test
-    public void testRemoveInvalidationWhileLocked() {
-        final ChangeListener<Object> removingListener = new ChangeListener() {
-            int index = 0;
-            @Override public void changed(ObservableValue observable, Object oldValue, Object newValue) {
-                if (index < invalidationListener.length) {
-                    helper = ExpressionHelper.removeListener(helper, invalidationListener[index++]);
-                }
-            }
-        };
-        helper = ExpressionHelper.addListener(helper, observable, removingListener);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].reset();
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].reset();
-        invalidationListener[2].check(observable, 1);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].reset();
-
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(null, 0);
-    }
-
-    @Test
-    public void testAddChange() {
-        final ChangeListener<Object> weakListener = new WeakChangeListenerMock();
-
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-        changeListener[1].check(observable, DATA_2, DATA_1, 1);
-
-        helper = ExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[2]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-        changeListener[2].check(observable, DATA_1, DATA_2, 1);
-    }
-
-    @Test
-    public void testRemoveChange() {
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[2]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[0]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-        changeListener[2].check(observable, DATA_1, DATA_2, 1);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(observable, DATA_2, DATA_1, 1);
-
-        helper = ExpressionHelper.removeListener(helper, changeListener[2]);
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testAddChangeWhileLocked() {
-        final InvalidationListener addingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ExpressionHelper.addListener(helper, ExpressionHelperTest.this.observable, changeListener[index++]);
-                }
-            }
-        };
-        helper = ExpressionHelper.addListener(helper, observable, addingListener);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-
-        changeListener[0].reset();
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-
-        changeListener[1].reset();
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-
-        changeListener[2].reset();
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_2, DATA_1, 1);
-        changeListener[1].check(observable, DATA_2, DATA_1, 1);
-        changeListener[2].check(observable, DATA_2, DATA_1, 1);
-
-        changeListener[3].reset();
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, DATA_1, DATA_2, 1);
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-        changeListener[2].check(observable, DATA_1, DATA_2, 1);
-        changeListener[3].check(observable, DATA_1, DATA_2, 1);
-    }
-
-    @Test
-    public void testRemoveChangeWhileLocked() {
-        final InvalidationListener removingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ExpressionHelper.removeListener(helper, changeListener[index++]);
-                }
-            }
-        };
-        helper = ExpressionHelper.addListener(helper, observable, removingListener);
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[2]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].reset();
-        changeListener[1].check(observable, DATA_1, DATA_2, 1);
-        changeListener[2].check(observable, DATA_1, DATA_2, 1);
-
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].reset();
-        changeListener[2].check(observable, DATA_2, DATA_1, 1);
-
-        observable.set(DATA_2);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].reset();
-
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testFireValueChangedEvent() {
-        helper = ExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-
-        observable.set(null);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, DATA_1, null, 1);
-
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-
-        observable.set(DATA_1);
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, null, DATA_1, 1);
-
-        ExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleInvalidation() {
-        helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(0); throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(1); throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleChange() {
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChange() {
-        BitSet called = new BitSet();
-
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChangeAndInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(0); throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {called.set(1); throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(2); throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {called.set(3); throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-        assertTrue(called.get(2));
-        assertTrue(called.get(3));
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleInvalidation() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-
-        helper = ExpressionHelper.addListener(helper, observable,(o) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertTrue(called.get());
-    }
-
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleChange() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertTrue(called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChange() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChangeAndInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (value, o1, o2) -> { throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> { throw new RuntimeException();});
-        helper = ExpressionHelper.addListener(helper, observable, (o) -> {throw new RuntimeException();});
-        observable.set(null);
-        helper.fireValueChangedEvent();
-
-        assertEquals(4, called.get());
-    }
-
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperUtility.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,380 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javafx.beans.InvalidationListener;
-import javafx.beans.Observable;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener;
-import javafx.collections.MapChangeListener;
-import javafx.collections.ObservableList;
-import javafx.collections.ObservableMap;
-import javafx.collections.ObservableSet;
-import javafx.collections.SetChangeListener;
-
-
-public class ExpressionHelperUtility {
-    
-    private static final String EXPRESSION_HELPER_SINGLE_INVALIDATION      = "com.sun.javafx.binding.ExpressionHelper$SingleInvalidation";
-    private static final String EXPRESSION_HELPER_SINGLE_CHANGE            = "com.sun.javafx.binding.ExpressionHelper$SingleChange";
-    private static final String EXPRESSION_HELPER_GENERIC                  = "com.sun.javafx.binding.ExpressionHelper$Generic";
-    private static final String LIST_EXPRESSION_HELPER_SINGLE_INVALIDATION = "com.sun.javafx.binding.ListExpressionHelper$SingleInvalidation";
-    private static final String LIST_EXPRESSION_HELPER_SINGLE_CHANGE       = "com.sun.javafx.binding.ListExpressionHelper$SingleChange";
-    private static final String LIST_EXPRESSION_HELPER_SINGLE_LIST_CHANGE  = "com.sun.javafx.binding.ListExpressionHelper$SingleListChange";
-    private static final String LIST_EXPRESSION_HELPER_GENERIC             = "com.sun.javafx.binding.ListExpressionHelper$Generic";
-    private static final String MAP_EXPRESSION_HELPER_SINGLE_INVALIDATION  = "com.sun.javafx.binding.MapExpressionHelper$SingleInvalidation";
-    private static final String MAP_EXPRESSION_HELPER_SINGLE_CHANGE        = "com.sun.javafx.binding.MapExpressionHelper$SingleChange";
-    private static final String MAP_EXPRESSION_HELPER_SINGLE_MAP_CHANGE    = "com.sun.javafx.binding.MapExpressionHelper$SingleMapChange";
-    private static final String MAP_EXPRESSION_HELPER_GENERIC              = "com.sun.javafx.binding.MapExpressionHelper$Generic";
-    private static final String SET_EXPRESSION_HELPER_SINGLE_INVALIDATION  = "com.sun.javafx.binding.SetExpressionHelper$SingleInvalidation";
-    private static final String SET_EXPRESSION_HELPER_SINGLE_CHANGE        = "com.sun.javafx.binding.SetExpressionHelper$SingleChange";
-    private static final String SET_EXPRESSION_HELPER_SINGLE_SET_CHANGE    = "com.sun.javafx.binding.SetExpressionHelper$SingleSetChange";
-    private static final String SET_EXPRESSION_HELPER_GENERIC              = "com.sun.javafx.binding.SetExpressionHelper$Generic";
-    
-    private ExpressionHelperUtility() {}
-    
-    
-    public static List<InvalidationListener> getInvalidationListeners(Observable observable) {
-        final Object helper = getExpressionHelper(observable);
-        if (helper == null) {
-            return Collections.emptyList();
-        }
-        final Class helperClass = helper.getClass();
-
-        try {
-            final Class clazz = Class.forName(EXPRESSION_HELPER_SINGLE_INVALIDATION);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromSingleInvalidationClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_SINGLE_INVALIDATION);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromSingleInvalidationClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_SINGLE_INVALIDATION);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromSingleInvalidationClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_SINGLE_INVALIDATION);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromSingleInvalidationClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-
-        
-        
-        try {
-            final Class clazz = Class.forName(EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getInvalidationListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        return Collections.emptyList();
-    }
-    
-    public static <T> List<ChangeListener<? super T>> getChangeListeners(ObservableValue<T> observable) {
-        final Object helper = getExpressionHelper(observable);
-        if (helper == null) {
-            return Collections.emptyList();
-        }
-        final Class helperClass = helper.getClass();
-
-        try {
-            final Class clazz = Class.forName(EXPRESSION_HELPER_SINGLE_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromSingleChangeClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_SINGLE_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromSingleChangeClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_SINGLE_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromSingleChangeClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_SINGLE_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromSingleChangeClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-
-        
-        
-        try {
-            final Class clazz = Class.forName(EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                return getChangeListenerFromGenericClass(clazz, helper);
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        return Collections.emptyList();
-    }
-    
-    public static <E> List<ListChangeListener<? super E>> getListChangeListeners(ObservableList<E> observable) {
-        final Object helper = getExpressionHelper(observable);
-        if (helper == null) {
-            return Collections.emptyList();
-        }
-        final Class helperClass = helper.getClass();
-
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_SINGLE_LIST_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("listener");
-                    field.setAccessible(true);
-                    final ListChangeListener<? super E> listener = (ListChangeListener)field.get(helper);
-                    return Arrays.<ListChangeListener<? super E>>asList(listener);
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(LIST_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("listChangeListeners");
-                    field.setAccessible(true);
-                    final ListChangeListener<? super E>[] listeners = (ListChangeListener[])field.get(helper);
-                    if (listeners != null) {
-                        final Field sizeField = clazz.getDeclaredField("listChangeSize");
-                        sizeField.setAccessible(true);
-                        final int size = sizeField.getInt(helper);
-                        return Arrays.asList(Arrays.copyOf(listeners, size));
-                    }
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        return Collections.emptyList();
-    }
-    
-    public static <K, V> List<MapChangeListener<? super K, ? super V>> getMapChangeListeners(ObservableMap<K, V> observable) {
-        final Object helper = getExpressionHelper(observable);
-        if (helper == null) {
-            return Collections.emptyList();
-        }
-        final Class helperClass = helper.getClass();
-
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_SINGLE_MAP_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("listener");
-                    field.setAccessible(true);
-                    final MapChangeListener<? super K, ? super V> listener = (MapChangeListener)field.get(helper);
-                    return Arrays.<MapChangeListener<? super K, ? super V>>asList(listener);
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(MAP_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("mapChangeListeners");
-                    field.setAccessible(true);
-                    final MapChangeListener<? super K, ? super V>[] listeners = (MapChangeListener[])field.get(helper);
-                    if (listeners != null) {
-                        final Field sizeField = clazz.getDeclaredField("mapChangeSize");
-                        sizeField.setAccessible(true);
-                        final int size = sizeField.getInt(helper);
-                        return Arrays.asList(Arrays.copyOf(listeners, size));
-                    }
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        return Collections.emptyList();
-    }
-    
-    public static <E> List<SetChangeListener<? super E>> getSetChangeListeners(ObservableSet<E> observable) {
-        final Object helper = getExpressionHelper(observable);
-        if (helper == null) {
-            return Collections.emptyList();
-        }
-        final Class helperClass = helper.getClass();
-
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_SINGLE_SET_CHANGE);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("listener");
-                    field.setAccessible(true);
-                    final SetChangeListener<? super E> listener = (SetChangeListener)field.get(helper);
-                    return Arrays.<SetChangeListener<? super E>>asList(listener);
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        try {
-            final Class clazz = Class.forName(SET_EXPRESSION_HELPER_GENERIC);
-            if (clazz.isAssignableFrom(helperClass)) {
-                try {
-                    final Field field = clazz.getDeclaredField("setChangeListeners");
-                    field.setAccessible(true);
-                    final SetChangeListener<? super E>[] listeners = (SetChangeListener[])field.get(helper);
-                    if (listeners != null) {
-                        final Field sizeField = clazz.getDeclaredField("setChangeSize");
-                        sizeField.setAccessible(true);
-                        final int size = sizeField.getInt(helper);
-                        return Arrays.asList(Arrays.copyOf(listeners, size));
-                    }
-                } catch (Exception ex) { }
-            }
-        } catch (ClassNotFoundException ex) { }
-        
-        return Collections.emptyList();
-    }
-    
-    private static Object getExpressionHelper(Object bean) {
-        Class clazz = bean.getClass();
-        while (clazz != Object.class) {
-            try {
-                final Field field = clazz.getDeclaredField("helper");
-                field.setAccessible(true);
-                return field.get(bean);
-            } catch (Exception ex) { }
-            clazz = clazz.getSuperclass();
-        }
-        return null;
-    }
-
-    private static List<InvalidationListener> getInvalidationListenerFromSingleInvalidationClass(Class clazz, Object helper) {
-        try {
-            final Field field = clazz.getDeclaredField("listener");
-            field.setAccessible(true);
-            final InvalidationListener listener = (InvalidationListener)field.get(helper);
-            return Arrays.asList(listener);
-        } catch (Exception ex) { }
-        return Collections.emptyList();
-    }
-    
-    private static List<InvalidationListener> getInvalidationListenerFromGenericClass(Class clazz, Object helper) {
-        try {
-            final Field field = clazz.getDeclaredField("invalidationListeners");
-            field.setAccessible(true);
-            final InvalidationListener[] listeners = (InvalidationListener[])field.get(helper);
-            if (listeners != null) {
-                final Field sizeField = clazz.getDeclaredField("invalidationSize");
-                sizeField.setAccessible(true);
-                final int size = sizeField.getInt(helper);
-                return Arrays.asList(Arrays.copyOf(listeners, size));
-            }
-        } catch (Exception ex) { }
-        return Collections.emptyList();
-    }
-
-    private static <T> List<ChangeListener<? super T>> getChangeListenerFromSingleChangeClass(Class clazz, Object helper) { 
-        try { 
-            final Field field = clazz.getDeclaredField("listener"); 
-            field.setAccessible(true); 
-            final ChangeListener<? super T> listener = (ChangeListener)field.get(helper); 
-            return Arrays.<ChangeListener<? super T>>asList(listener); 
-        } catch (Exception ex) { } 
-        return Collections.emptyList(); 
-    } 
-
-    private static <T> List<ChangeListener<? super T>> getChangeListenerFromGenericClass(Class clazz, Object helper) { 
-        try { 
-            final Field field = clazz.getDeclaredField("changeListeners"); 
-            field.setAccessible(true); 
-            final ChangeListener<? super T>[] listeners = (ChangeListener[])field.get(helper); 
-            if (listeners != null) { 
-                final Field sizeField = clazz.getDeclaredField("changeSize"); 
-                sizeField.setAccessible(true); 
-                final int size = sizeField.getInt(helper); 
-                return Arrays.asList(Arrays.copyOf(listeners, size)); 
-            } 
-        } catch (Exception ex) { } 
-        return Collections.emptyList(); 
-    } 
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ExpressionHelperUtilityTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,437 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import java.util.Arrays;
-import java.util.Collections;
-import javafx.beans.InvalidationListener;
-import javafx.beans.Observable;
-import javafx.beans.property.SimpleListProperty;
-import javafx.beans.property.SimpleMapProperty;
-import javafx.beans.property.SimpleSetProperty;
-import javafx.beans.property.SimpleStringProperty;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableListValue;
-import javafx.beans.value.ObservableMapValue;
-import javafx.beans.value.ObservableSetValue;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener;
-import javafx.collections.MapChangeListener;
-import javafx.collections.SetChangeListener;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-import org.junit.Before;
-
-public class ExpressionHelperUtilityTest {
-    
-    private ObservableValue observableValue;
-    private ObservableListValue observableList;
-    private ObservableMapValue observableMap;
-    private ObservableSetValue observableSet;
-    
-    private InvalidationListener invalidationListener1;
-    private InvalidationListener invalidationListener2;
-    private ChangeListener changeListener1;
-    private ChangeListener changeListener2;
-    private ListChangeListener listChangeListener1;
-    private ListChangeListener listChangeListener2;
-    private MapChangeListener mapChangeListener1;
-    private MapChangeListener mapChangeListener2;
-    private SetChangeListener setChangeListener1;
-    private SetChangeListener setChangeListener2;
-    
-    @Before
-    public void setUp() {
-        observableValue = new SimpleStringProperty();
-        observableList = new SimpleListProperty();
-        observableMap = new SimpleMapProperty();
-        observableSet = new SimpleSetProperty();
-        
-        invalidationListener1 = new EmptyInvalidationListener();
-        invalidationListener2 = new EmptyInvalidationListener();
-        changeListener1 = new EmptyChangeListener();
-        changeListener2 = new EmptyChangeListener();
-        listChangeListener1 = new EmptyListChangeListener();
-        listChangeListener2 = new EmptyListChangeListener();
-        mapChangeListener1 = new EmptyMapChangeListener();
-        mapChangeListener2 = new EmptyMapChangeListener();
-        setChangeListener1 = new EmptySetChangeListener();
-        setChangeListener2 = new EmptySetChangeListener();
-    }
-    
-    @Test
-    public void testGetInvalidationListenerFromValue() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableValue));
-        
-        // SingleInvalidation
-        observableValue.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableValue));
-        observableValue.removeListener(invalidationListener1);
-        
-        // SingleChange
-        observableValue.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableValue));
-        observableValue.removeListener(changeListener1);
-        
-        // Generic
-        observableValue.addListener(changeListener1);
-        observableValue.addListener(changeListener2);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableValue));
-        observableValue.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableValue));
-        observableValue.addListener(invalidationListener2);
-        assertTrue(Arrays.asList(invalidationListener1, invalidationListener2).equals(ExpressionHelperUtility.getInvalidationListeners(observableValue))
-                || Arrays.asList(invalidationListener2, invalidationListener1).equals(ExpressionHelperUtility.getInvalidationListeners(observableValue)));
-    }
-    
-    @Test
-    public void testGetChangeListenerFromValue() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableValue));
-        
-        // SingleInvalidation
-        observableValue.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableValue));
-        observableValue.removeListener(invalidationListener1);
-        
-        // SingleChange
-        observableValue.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableValue));
-        observableValue.removeListener(changeListener1);
-        
-        // Generic
-        observableValue.addListener(invalidationListener1);
-        observableValue.addListener(invalidationListener2);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableValue));
-        observableValue.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableValue));
-        observableValue.addListener(changeListener2);
-        assertTrue(Arrays.asList(changeListener1, changeListener2).equals(ExpressionHelperUtility.getChangeListeners(observableValue))
-                || Arrays.asList(changeListener2, changeListener1).equals(ExpressionHelperUtility.getChangeListeners(observableValue)));
-    }
-
-    @Test
-    public void testGetInvalidationListenerFromList() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableList));
-
-        // SingleInvalidation
-        observableList.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableList));
-        observableList.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableList.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableList));
-        observableList.removeListener(changeListener1);
-
-        // SingeListChange
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableList));
-        observableList.removeListener(listChangeListener1);
-
-        // Generic
-        observableList.addListener(changeListener1);
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableList));
-        observableList.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableList));
-        observableList.addListener(invalidationListener2);
-        assertTrue(Arrays.asList(invalidationListener1, invalidationListener2).equals(ExpressionHelperUtility.getInvalidationListeners(observableList))
-                           || Arrays.asList(invalidationListener2, invalidationListener1).equals(ExpressionHelperUtility.getInvalidationListeners(observableList)));
-    }
-
-    @Test
-    public void testGetChangeListenerFromList() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableList));
-
-        // SingleInvalidation
-        observableList.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableList));
-        observableList.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableList.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableList));
-        observableList.removeListener(changeListener1);
-
-        // SingeListChange
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableList));
-        observableList.removeListener(listChangeListener1);
-
-        // Generic
-        observableList.addListener(invalidationListener1);
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableList));
-        observableList.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableList));
-        observableList.addListener(changeListener2);
-        assertTrue(Arrays.asList(changeListener1, changeListener2).equals(ExpressionHelperUtility.getChangeListeners(observableList))
-                           || Arrays.asList(changeListener2, changeListener1).equals(ExpressionHelperUtility.getChangeListeners(observableList)));
-    }
-
-    @Test
-    public void testGetListChangeListenerFromList() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getListChangeListeners(observableList));
-
-        // SingleInvalidation
-        observableList.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getListChangeListeners(observableList));
-        observableList.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableList.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getListChangeListeners(observableList));
-        observableList.removeListener(changeListener1);
-
-        // SingeListChange
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.singletonList(listChangeListener1), ExpressionHelperUtility.getListChangeListeners(observableList));
-        observableList.removeListener(listChangeListener1);
-
-        // Generic
-        observableList.addListener(invalidationListener1);
-        observableList.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getListChangeListeners(observableList));
-        observableList.addListener(listChangeListener1);
-        assertEquals(Collections.singletonList(listChangeListener1), ExpressionHelperUtility.getListChangeListeners(observableList));
-        observableList.addListener(listChangeListener2);
-        assertTrue(Arrays.asList(listChangeListener1, listChangeListener2).equals(ExpressionHelperUtility.getListChangeListeners(observableList))
-                           || Arrays.asList(listChangeListener2, listChangeListener1).equals(ExpressionHelperUtility.getListChangeListeners(observableList)));
-    }
-
-    @Test
-    public void testGetInvalidationListenerFromMap() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-
-        // SingleInvalidation
-        observableMap.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-        observableMap.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableMap.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-        observableMap.removeListener(changeListener1);
-
-        // SingeMapChange
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-        observableMap.removeListener(mapChangeListener1);
-
-        // Generic
-        observableMap.addListener(changeListener1);
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-        observableMap.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableMap));
-        observableMap.addListener(invalidationListener2);
-        assertTrue(Arrays.asList(invalidationListener1, invalidationListener2).equals(ExpressionHelperUtility.getInvalidationListeners(observableMap))
-                           || Arrays.asList(invalidationListener2, invalidationListener1).equals(ExpressionHelperUtility.getInvalidationListeners(observableMap)));
-    }
-
-    @Test
-    public void testGetChangeListenerFromMap() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableMap));
-
-        // SingleInvalidation
-        observableMap.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableMap));
-        observableMap.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableMap.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableMap));
-        observableMap.removeListener(changeListener1);
-
-        // SingeMapChange
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableMap));
-        observableMap.removeListener(mapChangeListener1);
-
-        // Generic
-        observableMap.addListener(invalidationListener1);
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableMap));
-        observableMap.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableMap));
-        observableMap.addListener(changeListener2);
-        assertTrue(Arrays.asList(changeListener1, changeListener2).equals(ExpressionHelperUtility.getChangeListeners(observableMap))
-                           || Arrays.asList(changeListener2, changeListener1).equals(ExpressionHelperUtility.getChangeListeners(observableMap)));
-    }
-
-    @Test
-    public void testGetMapChangeListenerFromMap() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-
-        // SingleInvalidation
-        observableMap.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-        observableMap.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableMap.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-        observableMap.removeListener(changeListener1);
-
-        // SingeMapChange
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.singletonList(mapChangeListener1), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-        observableMap.removeListener(mapChangeListener1);
-
-        // Generic
-        observableMap.addListener(invalidationListener1);
-        observableMap.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-        observableMap.addListener(mapChangeListener1);
-        assertEquals(Collections.singletonList(mapChangeListener1), ExpressionHelperUtility.getMapChangeListeners(observableMap));
-        observableMap.addListener(mapChangeListener2);
-        assertTrue(Arrays.asList(mapChangeListener1, mapChangeListener2).equals(ExpressionHelperUtility.getMapChangeListeners(observableMap))
-                           || Arrays.asList(mapChangeListener2, mapChangeListener1).equals(ExpressionHelperUtility.getMapChangeListeners(observableMap)));
-    }
-
-    @Test
-    public void testGetInvalidationListenerFromSet() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-
-        // SingleInvalidation
-        observableSet.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-        observableSet.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableSet.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-        observableSet.removeListener(changeListener1);
-
-        // SingeSetChange
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-        observableSet.removeListener(setChangeListener1);
-
-        // Generic
-        observableSet.addListener(changeListener1);
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-        observableSet.addListener(invalidationListener1);
-        assertEquals(Collections.singletonList(invalidationListener1), ExpressionHelperUtility.getInvalidationListeners(observableSet));
-        observableSet.addListener(invalidationListener2);
-        assertTrue(Arrays.asList(invalidationListener1, invalidationListener2).equals(ExpressionHelperUtility.getInvalidationListeners(observableSet))
-                           || Arrays.asList(invalidationListener2, invalidationListener1).equals(ExpressionHelperUtility.getInvalidationListeners(observableSet)));
-    }
-
-    @Test
-    public void testGetChangeListenerFromSet() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableSet));
-
-        // SingleInvalidation
-        observableSet.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableSet));
-        observableSet.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableSet.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableSet));
-        observableSet.removeListener(changeListener1);
-
-        // SingeSetChange
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableSet));
-        observableSet.removeListener(setChangeListener1);
-
-        // Generic
-        observableSet.addListener(invalidationListener1);
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getChangeListeners(observableSet));
-        observableSet.addListener(changeListener1);
-        assertEquals(Collections.singletonList(changeListener1), ExpressionHelperUtility.getChangeListeners(observableSet));
-        observableSet.addListener(changeListener2);
-        assertTrue(Arrays.asList(changeListener1, changeListener2).equals(ExpressionHelperUtility.getChangeListeners(observableSet))
-                           || Arrays.asList(changeListener2, changeListener1).equals(ExpressionHelperUtility.getChangeListeners(observableSet)));
-    }
-
-    @Test
-    public void testGetSetChangeListenerFromSet() {
-        // empty helper
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-
-        // SingleInvalidation
-        observableSet.addListener(invalidationListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-        observableSet.removeListener(invalidationListener1);
-
-        // SingleChange
-        observableSet.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-        observableSet.removeListener(changeListener1);
-
-        // SingeSetChange
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.singletonList(setChangeListener1), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-        observableSet.removeListener(setChangeListener1);
-
-        // Generic
-        observableSet.addListener(invalidationListener1);
-        observableSet.addListener(changeListener1);
-        assertEquals(Collections.emptyList(), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-        observableSet.addListener(setChangeListener1);
-        assertEquals(Collections.singletonList(setChangeListener1), ExpressionHelperUtility.getSetChangeListeners(observableSet));
-        observableSet.addListener(setChangeListener2);
-        assertTrue(Arrays.asList(setChangeListener1, setChangeListener2).equals(ExpressionHelperUtility.getSetChangeListeners(observableSet))
-                           || Arrays.asList(setChangeListener2, setChangeListener1).equals(ExpressionHelperUtility.getSetChangeListeners(observableSet)));
-    }
-
-    private static class EmptyInvalidationListener implements InvalidationListener {
-        @Override public void invalidated(Observable observable) { }
-    }
-    
-    private static class EmptyChangeListener implements ChangeListener<Object> {
-        @Override public void changed(ObservableValue<? extends Object> observableValue, Object oldValue, Object newValue) { }
-    }
-    
-    private static class EmptyListChangeListener implements ListChangeListener<Object> {
-        @Override public void onChanged(Change<? extends Object> change) { }
-    }
-    
-    private static class EmptyMapChangeListener implements MapChangeListener<Object, Object> {
-        @Override public void onChanged(Change<? extends Object, ? extends Object> change) { }
-    }
-    
-    private static class EmptySetChangeListener implements SetChangeListener<Object> {
-        @Override public void onChanged(Change<? extends Object> change) { }
-    }
-    
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/ListExpressionHelperTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,902 +0,0 @@
-/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import com.sun.javafx.collections.NonIterableChange;
-import javafx.beans.InvalidationListener;
-import javafx.beans.InvalidationListenerMock;
-import javafx.beans.Observable;
-import javafx.beans.WeakInvalidationListenerMock;
-import javafx.beans.property.ListProperty;
-import javafx.beans.property.SimpleListProperty;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ChangeListenerMock;
-import javafx.beans.value.ObservableValue;
-import javafx.beans.value.ObservableValueStub;
-import javafx.beans.value.WeakChangeListenerMock;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener;
-import javafx.collections.MockListObserver;
-import javafx.collections.ObservableList;
-import javafx.collections.WeakListChangeListenerMock;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Arrays;
-
-public class ListExpressionHelperTest {
-
-    private static final ObservableList<Object> UNDEFINED = FXCollections.observableArrayList();
-
-
-    private Object listItem;
-    private ObservableList<Object> data1;
-    private ObservableList<Object> data2;
-    private ObservableList<Object> data3;
-//    private ListChangeListener.Change change_1_2;
-//    private ListChangeListener.Change change_2_1;
-
-    private ListExpressionHelper helper;
-    private ListProperty<Object> observable;
-
-    private InvalidationListenerMock[] invalidationListener;
-    private ChangeListenerMock<? super ObservableList<Object>>[] changeListener;
-    private MockListObserver<Object>[] listChangeListener;
-
-    @Before
-    public void setUp() {
-        listItem = new Object();
-        data1 = FXCollections.observableArrayList();
-        data2 = FXCollections.observableArrayList(listItem);
-        data3 = FXCollections.observableArrayList(listItem);
-//        change_1_2 = new NonIterableChange.SimpleAddChange(0, 1, data2);
-//        change_2_1 = new NonIterableChange.SimpleRemovedChange(0, 1, listItem, data1);
-        helper = null;
-        observable = new SimpleListProperty<Object>(data1);
-
-        invalidationListener = new InvalidationListenerMock[] {
-                new InvalidationListenerMock(), new InvalidationListenerMock(), new InvalidationListenerMock(), new InvalidationListenerMock()
-        };
-        changeListener = new ChangeListenerMock[] {
-                new ChangeListenerMock(UNDEFINED), new ChangeListenerMock(UNDEFINED), new ChangeListenerMock(UNDEFINED), new ChangeListenerMock(UNDEFINED)
-        };
-        listChangeListener = new MockListObserver[] {
-                new MockListObserver<Object>(), new MockListObserver<Object>(), new MockListObserver<Object>(), new MockListObserver<Object>()
-        };
-    }
-    
-    @Test(expected = NullPointerException.class)
-    public void testAddInvalidation_Null_X() {
-        ListExpressionHelper.addListener(null, null, invalidationListener[0]);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddInvalidation_X_Null() {
-        ListExpressionHelper.addListener(null, observable, (InvalidationListener)null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveInvalidation_Null() {
-        ListExpressionHelper.removeListener(null, (InvalidationListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddChange_Null_X() {
-        ListExpressionHelper.addListener(null, null, changeListener[0]);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddChange_X_Null() {
-        ListExpressionHelper.addListener(null, observable, (ChangeListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveChange_Null() {
-        ListExpressionHelper.removeListener(null, (ChangeListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddListChange_Null_X() {
-        ListExpressionHelper.addListener(null, null, listChangeListener[0]);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddListChange_X_Null() {
-        ListExpressionHelper.addListener(null, observable, (ListChangeListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveListChange_Null() {
-        ListExpressionHelper.removeListener(null, (ListChangeListener) null);
-    }
-
-    @Test
-    public void testEmpty() {
-        final ListChangeListener.Change change = new NonIterableChange.SimpleRemovedChange(0, 1, new Object(), observable);
-        ListExpressionHelper.removeListener(null, invalidationListener[0]);
-        ListExpressionHelper.removeListener(null, changeListener[0]);
-        ListExpressionHelper.removeListener(null, listChangeListener[0]);
-        ListExpressionHelper.fireValueChangedEvent((ListExpressionHelper)null);
-        ListExpressionHelper.fireValueChangedEvent(null, change);
-    }
-
-    @Test
-    public void testSingleInvalidation() {
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        data2.remove(0);
-        ListExpressionHelper.fireValueChangedEvent(helper, new NonIterableChange.SimpleRemovedChange(0, 1, listItem, data2));
-        invalidationListener[0].check(observable, 1);
-        data2.add(listItem);
-
-        observable.set(data3);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(observable, data1, data2, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-    }
-
-    @Test
-    public void testSingleChange() {
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-
-        data2.remove(0);
-        ListExpressionHelper.fireValueChangedEvent(helper, new NonIterableChange.SimpleRemovedChange(0, 1, listItem, data2));
-        changeListener[0].check(observable, data2, data2, 1);
-        data2.add(listItem);
-
-        observable.set(data3);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data3, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        changeListener[1].check(observable, data1, data2, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-    }
-
-    @Test
-    public void testSingleListChange() {
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-
-        data2.remove(0);
-        ListExpressionHelper.fireValueChangedEvent(helper, new NonIterableChange.SimpleRemovedChange(0, 0, listItem, data2));
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        data2.add(listItem);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        invalidationListener[1].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        invalidationListener[1].check(null, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        changeListener[1].check(observable, data1, data2, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        listChangeListener[1].check0();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-    }
-
-    @Test
-    public void testAddInvalidation() {
-        final InvalidationListener weakListener = new WeakInvalidationListenerMock();
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-    }
-
-    @Test
-    public void testRemoveInvalidation() {
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[0]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[1]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(observable, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, invalidationListener[2]);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(null, 0);
-    }
-
-    @Test
-    public void testAddInvalidationWhileLocked() {
-        final ChangeListener<Object> addingListener = new ChangeListener() {
-            int index = 0;
-            @Override public void changed(ObservableValue observable, Object oldValue, Object newValue) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.addListener(helper, ListExpressionHelperTest.this.observable, invalidationListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, addingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-
-        invalidationListener[0].reset();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-
-        invalidationListener[1].reset();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-
-        invalidationListener[2].reset();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        invalidationListener[3].reset();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-        invalidationListener[3].check(observable, 1);
-    }
-
-    @Test
-    public void testRemoveInvalidationWhileLocked() {
-        final ChangeListener<Object> removingListener = new ChangeListener() {
-            int index = 0;
-            @Override public void changed(ObservableValue observable, Object oldValue, Object newValue) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.removeListener(helper, invalidationListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, removingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[1]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].reset();
-        invalidationListener[1].check(observable, 1);
-        invalidationListener[2].check(observable, 1);
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].reset();
-        invalidationListener[2].check(observable, 1);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].reset();
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(null, 0);
-        invalidationListener[1].check(null, 0);
-        invalidationListener[2].check(null, 0);
-    }
-
-    @Test
-    public void testAddChange() {
-        final ChangeListener<Object> weakListener = new WeakChangeListenerMock();
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        changeListener[1].check(observable, data2, data1, 1);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[2]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        changeListener[1].check(observable, data1, data2, 1);
-        changeListener[2].check(observable, data1, data2, 1);
-    }
-
-    @Test
-    public void testRemoveChange() {
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(observable, data1, data2, 1);
-        changeListener[2].check(observable, data1, data2, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(observable, data2, data1, 1);
-
-        helper = ListExpressionHelper.removeListener(helper, changeListener[2]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testAddChangeWhileLocked() {
-        final InvalidationListener addingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.addListener(helper, ListExpressionHelperTest.this.observable, changeListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, addingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-
-        changeListener[0].reset();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-
-        changeListener[1].reset();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        changeListener[1].check(observable, data1, data2, 1);
-
-        changeListener[2].reset();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data2, data1, 1);
-        changeListener[1].check(observable, data2, data1, 1);
-        changeListener[2].check(observable, data2, data1, 1);
-
-        changeListener[3].reset();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(observable, data1, data2, 1);
-        changeListener[1].check(observable, data1, data2, 1);
-        changeListener[2].check(observable, data1, data2, 1);
-        changeListener[3].check(observable, data1, data2, 1);
-    }
-
-    @Test
-    public void testRemoveChangeWhileLocked() {
-        final InvalidationListener removingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.removeListener(helper, changeListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, removingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[1]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].reset();
-        changeListener[1].check(observable, data1, data2, 1);
-        changeListener[2].check(observable, data1, data2, 1);
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].reset();
-        changeListener[2].check(observable, data2, data1, 1);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].reset();
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[1].check(null, UNDEFINED, UNDEFINED, 0);
-        changeListener[2].check(null, UNDEFINED, UNDEFINED, 0);
-    }
-
-    @Test
-    public void testAddListChange() {
-        final ChangeListener<Object> weakListener = new WeakListChangeListenerMock();
-
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[1].clear();
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[2]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-        listChangeListener[2].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[2].clear();
-
-        helper = ListExpressionHelper.addListener(helper, observable, weakListener);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[3]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[1].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[2].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[3].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-    }
-
-    @Test
-    public void testRemoveListChange() {
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[0]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-        listChangeListener[2].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[2].clear();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[1]);
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].check0();
-        listChangeListener[2].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[2].clear();
-
-        helper = ListExpressionHelper.removeListener(helper, listChangeListener[2]);
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].check0();
-        listChangeListener[2].check0();
-    }
-
-    @Test
-    public void testAddListChangeWhileLocked() {
-        final InvalidationListener addingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.addListener(helper, ListExpressionHelperTest.this.observable, listChangeListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, addingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-
-        listChangeListener[0].clear();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-
-        listChangeListener[1].clear();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].clear();
-
-        listChangeListener[2].clear();
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[1].clear();
-        listChangeListener[2].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-        listChangeListener[2].clear();
-
-        listChangeListener[3].clear();
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[2].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[3].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-    }
-
-    @Test
-    public void testRemoveListChangeWhileLocked() {
-        final InvalidationListener removingListener = new InvalidationListener() {
-            int index = 0;
-            @Override public void invalidated(Observable observable) {
-                if (index < invalidationListener.length) {
-                    helper = ListExpressionHelper.removeListener(helper, listChangeListener[index++]);
-                }
-            }
-        };
-        helper = ListExpressionHelper.addListener(helper, observable, removingListener);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[2]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[1]);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].clear();
-        listChangeListener[1].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[2].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[2].clear();
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].clear();
-        listChangeListener[2].check1AddRemove(observable, FXCollections.singletonObservableList(listItem), 0, 0);
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].check0();
-        listChangeListener[2].clear();
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        listChangeListener[0].check0();
-        listChangeListener[1].check0();
-        listChangeListener[2].check0();
-    }
-
-
-    @Test
-    public void testFireValueChangedEvent() {
-        helper = ListExpressionHelper.addListener(helper, observable, invalidationListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, changeListener[0]);
-        helper = ListExpressionHelper.addListener(helper, observable, listChangeListener[0]);
-
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        listChangeListener[0].check0();
-
-        observable.set(null);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, data1, null, 1);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 0);
-        listChangeListener[0].clear();
-
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        listChangeListener[0].check0();
-
-        observable.set(data1);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, null, data1, 1);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 0);
-        listChangeListener[0].clear();
-
-        observable.set(data2);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, data1, data2, 1);
-        listChangeListener[0].check1AddRemove(observable, FXCollections.emptyObservableList(), 0, 1);
-        listChangeListener[0].clear();
-
-        observable.set(data3);
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(observable, data2, data3, 1);
-        listChangeListener[0].check1AddRemove(observable, Arrays.asList(listItem), 0, 1);
-        listChangeListener[0].clear();
-
-        ListExpressionHelper.fireValueChangedEvent(helper);
-        invalidationListener[0].check(observable, 1);
-        changeListener[0].check(null, UNDEFINED, UNDEFINED, 0);
-        listChangeListener[0].check0();
-
-
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/SelectBindingTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,655 +0,0 @@
-/*
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.javafx.binding;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-import javafx.beans.Person;
-import javafx.beans.binding.Bindings;
-import javafx.beans.binding.BooleanBinding;
-import javafx.beans.binding.DoubleBinding;
-import javafx.beans.binding.FloatBinding;
-import javafx.beans.binding.IntegerBinding;
-import javafx.beans.binding.LongBinding;
-import javafx.beans.binding.ObjectBinding;
-import javafx.beans.binding.StringBinding;
-import javafx.binding.Variable;
-import javafx.collections.ObservableList;
-import sun.util.logging.PlatformLogger.Level;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class SelectBindingTest {
-
-    private static final double EPSILON_DOUBLE = 1e-12;
-    private static final float EPSILON_FLOAT = 1e-6f;
-
-    public static class POJOPerson {
-
-        private String name;
-
-        public String getName() {
-            return name;
-        }
-
-        public POJOPerson() {
-        }
-
-        public POJOPerson(String name) {
-            this.name = name;
-        }
-
-    }
-
-    public static class POJONext {
-
-        private Object next;
-        private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
-
-        public Object getNext() {
-            return next;
-        }
-
-        public void setNext(Object next) {
-            Object old = this.next;
-            this.next = next;
-            pcs.firePropertyChange("next", old, next);
-        }
-
-        public void addPropertyChangeListener(String property, PropertyChangeListener pcl) {
-            pcs.addPropertyChangeListener(property, pcl);
-        }
-
-        public void removePropertyChangeListener(String property, PropertyChangeListener pcl) {
-            pcs.removePropertyChangeListener(property, pcl);
-        }
-
-    }
-
-    private Variable a;
-    private Variable b;
-    private Variable c;
-    private Variable d;
-    private StringBinding select;
-    private ObservableList<?> dependencies;
-
-    private static final ErrorLoggingUtiltity log = new ErrorLoggingUtiltity();
-
-    @BeforeClass
-    public static void setUpClass() {
-        log.start();
-    }
-
-    @AfterClass
-    public static void tearDownClass() {
-        log.stop();
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        a = new Variable("a");
-        b = new Variable("b");
-        c = new Variable("c");
-        d = new Variable("d");
-        a.setNext(b);
-        b.setNext(c);
-        select = Bindings.selectString(a.nextProperty(), "next", "name");
-        dependencies = select.getDependencies();
-    }
-
-    @Test
-    public void testObject() {
-        final Person person1 = new Person();
-        final Person person2 = new Person();
-        c.setNext(person1);
-        final ObjectBinding<Object> objectBinding = Bindings.select(a.nextProperty(), "next", "next");
-        assertEquals(person1, objectBinding.get());
-        c.setNext(person2);
-        assertEquals(person2, objectBinding.get());
-        b.setNext(null);
-        assertEquals(null, objectBinding.get());
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJOObject() {
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-        final Person person1 = new Person();
-        final Person person2 = new Person();
-        c.setNext(person1);
-        final ObjectBinding<Object> objectBinding = Bindings.select(pojoA, "next", "next", "next");
-        assertEquals(person1, objectBinding.get());
-        c.setNext(person2);
-        assertEquals(person2, objectBinding.get());
-    }
-
-    @Test
-    public void testPOJOObject_2() {
-        POJONext pojoC = new POJONext();
-        b.setNext(pojoC);
-        final Person person1 = new Person();
-        final Person person2 = new Person();
-        pojoC.setNext(person1);
-        final ObjectBinding<Object> objectBinding = Bindings.select(a.nextProperty(), "next", "next");
-        assertEquals(person1, objectBinding.get());
-        pojoC.setNext(person2);
-        assertEquals(person2, objectBinding.get());
-    }
-
-    @Test
-    public void testPOJOObject_3() {
-        final POJOPerson person1 = new POJOPerson("P1");
-        final POJOPerson person2 = new POJOPerson("P2");
-        c.setNext(person1);
-        final ObjectBinding<Object> objectBinding = Bindings.select(a.nextProperty(), "next", "next", "name");
-        assertEquals("P1", objectBinding.get());
-        c.setNext(person2);
-        assertEquals("P2", objectBinding.get());
-        b.setNext(null);
-        assertEquals(null, objectBinding.get());
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJOBoolean() {
-
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-
-        final Person person = new Person();
-        b.setNext(person);
-        final BooleanBinding binding1 = Bindings.selectBoolean(pojoA, "next", "next", "retired");
-        assertEquals(false, binding1.get());
-        person.setRetired(true);
-        assertEquals(true, binding1.get());
-    }
-
-    @Test
-    public void testBoolean() {
-
-        final Person person = new Person();
-        b.setNext(person);
-        final BooleanBinding binding1 = Bindings.selectBoolean(a.nextProperty(), "next", "retired");
-        assertEquals(false, binding1.get());
-        person.setRetired(true);
-        assertEquals(true, binding1.get());
-        b.setNext(null);
-        assertEquals(false, binding1.get());
-        log.checkFine(NullPointerException.class);
-
-        person.setData(false);
-        b.setNext(person);
-        final BooleanBinding binding2 = Bindings.selectBoolean(a.nextProperty(), "next", "data");
-        assertEquals(false, binding2.get());
-        person.setData(true);
-        assertEquals(true, binding2.get());
-        person.setData(null);
-        assertEquals(false, binding2.get());
-        log.checkFine(NullPointerException.class);
-        b.setNext(null);
-        assertEquals(false, binding2.get());
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJODouble() {
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-
-        final Person person = new Person();
-        person.setSomething(-Math.E);
-        b.setNext(person);
-        final DoubleBinding binding1 = Bindings.selectDouble(pojoA, "next", "next", "something");
-        assertEquals(-Math.E, binding1.get(), EPSILON_DOUBLE);
-        person.setSomething(Math.PI);
-        assertEquals(Math.PI, binding1.get(), EPSILON_DOUBLE);
-    }
-
-    @Test
-    public void testDouble() {
-
-        final Person person = new Person();
-        person.setSomething(-Math.E);
-        b.setNext(person);
-        final DoubleBinding binding1 = Bindings.selectDouble(a.nextProperty(), "next", "something");
-        assertEquals(-Math.E, binding1.get(), EPSILON_DOUBLE);
-        person.setSomething(Math.PI);
-        assertEquals(Math.PI, binding1.get(), EPSILON_DOUBLE);
-        b.setNext(null);
-        assertEquals(0.0, binding1.get(), EPSILON_DOUBLE);
-        log.checkFine(NullPointerException.class);
-
-        person.setData(-Math.E);
-        b.setNext(person);
-        final DoubleBinding binding2 = Bindings.selectDouble(a.nextProperty(), "next", "data");
-        assertEquals(-Math.E, binding2.get(), EPSILON_DOUBLE);
-        person.setData(Math.PI);
-        assertEquals(Math.PI, binding2.get(), EPSILON_DOUBLE);
-        person.setData(null);
-        assertEquals(0.0, binding2.get(), EPSILON_DOUBLE);
-        log.checkFine(NullPointerException.class);
-        b.setNext(null);
-        assertEquals(0.0, binding2.get(), EPSILON_DOUBLE);
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJOFloat() {
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-
-        final Person person = new Person();
-        person.setMiles((float) -Math.E);
-        b.setNext(person);
-        final FloatBinding binding1 = Bindings.selectFloat(pojoA, "next", "next", "miles");
-        assertEquals((float) -Math.E, binding1.get(), EPSILON_FLOAT);
-        person.setMiles((float) Math.PI);
-        assertEquals((float) Math.PI, binding1.get(), EPSILON_FLOAT);
-    }
-
-    @Test
-    public void testFloat() {
-
-        final Person person = new Person();
-        person.setMiles((float) -Math.E);
-        b.setNext(person);
-        final FloatBinding binding1 = Bindings.selectFloat(a.nextProperty(), "next", "miles");
-        assertEquals((float) -Math.E, binding1.get(), EPSILON_FLOAT);
-        person.setMiles((float) Math.PI);
-        assertEquals((float) Math.PI, binding1.get(), EPSILON_FLOAT);
-        b.setNext(null);
-        assertEquals(0.0f, binding1.get(), EPSILON_FLOAT);
-        log.checkFine(NullPointerException.class);
-
-        person.setData((float) -Math.E);
-        b.setNext(person);
-        final FloatBinding binding2 = Bindings.selectFloat(a.nextProperty(), "next", "data");
-        assertEquals((float) -Math.E, binding2.get(), EPSILON_FLOAT);
-        person.setData((float) Math.PI);
-        assertEquals((float) Math.PI, binding2.get(), EPSILON_FLOAT);
-        person.setData(null);
-        assertEquals(0.0f, binding2.get(), EPSILON_FLOAT);
-        log.checkFine(NullPointerException.class);
-        b.setNext(null);
-        assertEquals(0.0f, binding2.get(), EPSILON_FLOAT);
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJOInteger() {
-
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-
-        final Person person = new Person();
-        person.setAge(42);
-        b.setNext(person);
-        final IntegerBinding binding1 = Bindings.selectInteger(pojoA, "next", "next", "age");
-        assertEquals(42, binding1.get());
-        person.setAge(-18);
-        assertEquals(-18, binding1.get());
-    }
-
-    @Test
-    public void testInteger() {
-
-        final Person person = new Person();
-        person.setAge(42);
-        b.setNext(person);
-        final IntegerBinding binding1 = Bindings.selectInteger(a.nextProperty(), "next", "age");
-        assertEquals(42, binding1.get());
-        person.setAge(-18);
-        assertEquals(-18, binding1.get());
-        b.setNext(null);
-        assertEquals(0, binding1.get());
-        log.checkFine(NullPointerException.class);
-
-        person.setData(42);
-        b.setNext(person);
-        final IntegerBinding binding2 = Bindings.selectInteger(a.nextProperty(), "next", "data");
-        assertEquals(42, binding2.get());
-        person.setData(-18);
-        assertEquals(-18, binding2.get());
-        person.setData(null);
-        assertEquals(0, binding2.get());
-        log.checkFine(NullPointerException.class);
-        b.setNext(null);
-        assertEquals(0, binding2.get());
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test
-    public void testPOJOLong() {
-        POJONext pojoA = new POJONext();
-        pojoA.setNext(b);
-        final Person person = new Person();
-        person.setIncome(1234567890987654321L);
-        b.setNext(person);
-        final LongBinding binding1 = Bindings.selectLong(pojoA, "next", "next", "income");
-        assertEquals(1234567890987654321L, binding1.get());
-        person.setIncome(-987654321234567890L);
-        assertEquals(-987654321234567890L, binding1.get());
-    }
-
-    @Test
-    public void testLong() {
-        final Person person = new Person();
-        person.setIncome(1234567890987654321L);
-        b.setNext(person);
-        final LongBinding binding1 = Bindings.selectLong(a.nextProperty(), "next", "income");
-        assertEquals(1234567890987654321L, binding1.get());
-        person.setIncome(-987654321234567890L);
-        assertEquals(-987654321234567890L, binding1.get());
-        b.setNext(null);
-        assertEquals(0L, binding1.get());
-        log.checkFine(NullPointerException.class);
-
-        person.setData(1234567890987654321L);
-        b.setNext(person);
-        final LongBinding binding2 = Bindings.selectLong(a.nextProperty(), "next", "data");
-        assertEquals(1234567890987654321L, binding2.get());
-        person.setData(-987654321234567890L);
-        assertEquals(-987654321234567890L, binding2.get());
-        person.setData(null);
-        assertEquals(0L, binding2.get());
-        log.checkFine(NullPointerException.class);
-        b.setNext(null);
-        assertEquals(0L, binding2.get());
-        log.checkFine(NullPointerException.class);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void createWithRootNull() {
-        select = Bindings.selectString(null, "next", "name");
-    }
-
-    @Test
-    public void createWithNoSteps() {
-        select = Bindings.selectString(a.nameProperty());
-        assertEquals("a", select.get());
-        a.setName("b");
-        assertEquals("b", select.get());
-        a.setName(null);
-        assertNull(select.get());
-        log.check(java.util.logging.Level.WARNING, NullPointerException.class);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void createWithOneStepIsNull() {
-        select = Bindings.selectString(a.nextProperty(), null, "name");
-    }
-
-    @Test
-    public void testNullIsReturnedFromAChainWithAPropertyThatIsNotOnTheAvailableObject() {
-        select = Bindings.selectString(a.nextProperty(), "dummy", "name");
-        assertNull(select.get());
-        log.check(java.util.logging.Level.WARNING, NoSuchMethodException.class);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testAllMembersHaveListeners() {
-        // As yet, there should still be no listeners registered
-        assertEquals(1, a.numChangedListenersForNext);
-        assertEquals(0, a.numChangedListenersForName);
-        assertEquals(0, b.numChangedListenersForNext);
-        assertEquals(0, b.numChangedListenersForName);
-        assertEquals(0, c.numChangedListenersForNext);
-        assertEquals(0, c.numChangedListenersForName);
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        // Read the value of the select. It should be == "c"
-        assertEquals("c", select.get());
-        // Now there should be changed listeners for a.value and
-        // b.value and c.name
-        assertEquals(1, a.numChangedListenersForNext);
-        assertEquals(0, a.numChangedListenersForName);
-        assertEquals(1, b.numChangedListenersForNext);
-        assertEquals(0, b.numChangedListenersForName);
-        assertEquals(0, c.numChangedListenersForNext);
-        assertEquals(1, c.numChangedListenersForName);
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAValidChangeIsBrokenBySettingTheRootToNullThenTheValueIsNull() {
-
-        assertEquals("c", select.get());
-        a.setNext(null);
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertNull(select.get());
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        log.checkFine(NullPointerException.class);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAnIncompleteChainIsMadeCompleteThatTheValueIsComputedCorrectly() {
-
-        a.setNext(null);
-        select.get(); // force it to be validated, for fun
-        log.reset();
-        a.setNext(b);
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertEquals("c", select.get());
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-        assertTrue(log.isEmpty());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAValidChangeIsBrokenBySettingTheMiddleToNullThenTheValueIsNull() {
-
-        assertEquals("c", select.get());
-        b.setNext(null);
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertNull(select.get());
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty()), dependencies);
-        log.checkFine(NullPointerException.class);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAnIncompleteChainIsMadeCompleteInTheMiddleThatTheValueIsComputedCorrectly() {
-
-        b.setNext(null);
-        select.get();
-        log.reset();
-        b.setNext(c);
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertEquals("c", select.get());
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-        assertTrue(log.isEmpty());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAValidChangeIsBrokenBySettingTheLastLinkToNullThenTheValueIsNull() {
-        log.reset();
-        assertEquals("c", select.get());
-        c.setName("d");
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertEquals("d", select.get());
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-        assertTrue(log.isEmpty());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testWhenAnIncompleteChainIsMadeCompleteAtTheEndThatTheValueIsComputedCorrectly() {
-        log.reset();
-        c.setName("d");
-        select.get();
-        c.setName("c");
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-        assertEquals("c", select.get());
-        assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-        assertTrue(log.isEmpty());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testSettingTheRootValueToNullInAChainShouldUnhookAllListeners() {
-        select.get();
-        a.setNext(null);
-
-        // All of the listeners should have been uninstalled
-        assertEquals(0, a.numChangedListenersForName);
-        assertEquals(1, a.numChangedListenersForNext);
-
-        assertEquals(0, b.numChangedListenersForName);
-        assertEquals(0, b.numChangedListenersForNext);
-
-        assertEquals(0, c.numChangedListenersForName);
-        assertEquals(0, c.numChangedListenersForNext);
-
-        assertEquals(0, d.numChangedListenersForName);
-        assertEquals(0, d.numChangedListenersForNext);
-
-        assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-    }
-
-    /**
-     * This test performs 10,000 random operations on the chain of a.b.c
-     * (setting different values for each step, sometimes doing multiple
-     * assignments between get() calls, random invalidate() calls). After each
-     * random iteration, we check to see if the listeners installed on the a, b,
-     * c objects are still correct. The goal is to catch any freak situations
-     * where we might have installed two listeners on the same property, or
-     * failed to remove a listener for a property under some circumstance.
-     *
-     * Do note that the only listeners that are installed in this method are
-     * done by the select binding.
-     */
-    @SuppressWarnings("unchecked")
-    @Test
-    public void stressTestRandomOperationsResultInCorrectListenersInstalled() {
-
-        final Level logLevel = Logging.getLogger().level();
-        Logging.getLogger().setLevel(Level.SEVERE);
-        List<String> steps = new ArrayList<String>();
-
-        Random rand = new Random(System.currentTimeMillis());
-        for (int i = 0; i < 10000; i++) {
-            switch (rand.nextInt(20)) {
-                case 0:
-                    a.setNext(null);
-                    steps.add("Assign a.value to null");
-                    break;
-                case 1:
-                    a.setNext(b);
-                    steps.add("Assign a.value to b");
-                    break;
-                case 2:
-                    b.setNext(null);
-                    steps.add("Assign b.value to null");
-                    break;
-                case 3:
-                    b.setNext(c);
-                    steps.add("Assign b.value to c");
-                    break;
-                case 4:
-                    c.setNext(null);
-                    steps.add("Assign c.value to null");
-                    break;
-                case 5:
-                    c.setNext(d);
-                    steps.add("Assign c.value to d");
-                    break;
-                case 6:
-                    c.setName(null);
-                    steps.add("Assign c.name to null");
-                    break;
-                case 7:
-                    c.setName("c");
-                    steps.add("Assign c.name to 'c'");
-                    break;
-                default:
-                    select.get();
-                    steps.add("Call select.get()");
-            }
-
-            // Now validate that the listeners are as we expected
-            int expected = 1;
-            int depsCount = expected;
-            assertEquals(0, a.numChangedListenersForName);
-            if (expected != a.numChangedListenersForNext) {
-                printSteps(i, steps);
-            }
-            assertEquals(expected, a.numChangedListenersForNext);
-
-            expected = select.isValid() && a.getNext() == b ? 1 : 0;
-            depsCount += expected;
-            assertEquals(0, b.numChangedListenersForName);
-            if (expected != b.numChangedListenersForNext) {
-                printSteps(i, steps);
-            }
-            assertEquals(expected, b.numChangedListenersForNext);
-
-            expected = select.isValid() && a.getNext() == b && b.getNext() == c ? 1 : 0;
-            depsCount += expected;
-            assertEquals(0, c.numChangedListenersForNext);
-            if (expected != c.numChangedListenersForName) {
-                printSteps(i, steps);
-            }
-            assertEquals(expected, c.numChangedListenersForName);
-
-            assertEquals(0, d.numChangedListenersForName);
-            assertEquals(0, d.numChangedListenersForNext);
-
-            switch (depsCount) {
-                case 0:
-                case 1:
-                    assertEquals(Arrays.asList(a.nextProperty()), dependencies);
-                    break;
-                case 2:
-                    assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty()), dependencies);
-                    break;
-                case 3:
-                    assertEquals(Arrays.asList(a.nextProperty(), b.nextProperty(), c.nameProperty()), dependencies);
-                    break;
-                default:
-                    fail("Should not reach here");
-            }
-        }
-        Logging.getLogger().setLevel(logLevel);
-    }
-
-    private void printSteps(int iteration, List<String> steps) {
-        System.err.println("Failed on iteration " + iteration + " for the following observableArrayList of changes");
-        for (String s : steps) {
-            System.err.println("\t" + s);
-        }
-    }
-}
--- a/modules/base/src/test/java/com/sun/javafx/binding/StringFormatterTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,404 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.binding;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Date;
-import java.util.IllegalFormatException;
-import java.util.Locale;
-
-import javafx.beans.binding.Bindings;
-import javafx.beans.binding.StringBinding;
-import javafx.beans.binding.StringExpression;
-import javafx.beans.property.BooleanProperty;
-import javafx.beans.property.DoubleProperty;
-import javafx.beans.property.FloatProperty;
-import javafx.beans.property.IntegerProperty;
-import javafx.beans.property.LongProperty;
-import javafx.beans.property.ObjectProperty;
-import javafx.beans.property.SimpleBooleanProperty;
-import javafx.beans.property.SimpleDoubleProperty;
-import javafx.beans.property.SimpleFloatProperty;
-import javafx.beans.property.SimpleIntegerProperty;
-import javafx.beans.property.SimpleLongProperty;
-import javafx.beans.property.SimpleObjectProperty;
-import javafx.beans.property.SimpleStringProperty;
-import javafx.beans.property.StringProperty;
-import javafx.binding.DependencyUtils;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("WebTest")
-public class StringFormatterTest {
-
-	private double double0;
-	private float float0;
-	private long long0;
-	private int int0;
-	private boolean boolean0;
-	private String string0;
-	private Date date0;
-
-	private double double1;
-	private float float1;
-	private long long1;
-	private int int1;
-	private boolean boolean1;
-	private String string1;
-	private Date date1;
-
-	private DoubleProperty doubleV;
-	private FloatProperty floatV;
-	private LongProperty longV;
-	private IntegerProperty intV;
-	private BooleanProperty booleanV;
-	private StringProperty stringV;
-	private ObjectProperty<Date> dateV;
-
-	@Before
-	public void setUp() {
-		double0 = 90.1243987;
-		float0 = -897.4509f;
-		long0 = -88793289779238972L;
-		int0 = -9872498;
-		boolean0 = false;
-		string0 = "Hello";
-		date0 = new Date(0);
-
-		double1 = 23341.9823;
-		float1 = 989823.8723f;
-		long1 = 98234892892389233L;
-		int1 = -897237894;
-		boolean1 = true;
-		string1 = "Goodbye";
-		date1 = new Date();
-
-		doubleV = new SimpleDoubleProperty(double0);
-		floatV = new SimpleFloatProperty(float0);
-		longV = new SimpleLongProperty(long0);
-		intV = new SimpleIntegerProperty(int0);
-		booleanV = new SimpleBooleanProperty(boolean0);
-		stringV = new SimpleStringProperty(string0);
-		dateV = new SimpleObjectProperty<Date>(date0);
-	}
-
-	@Test
-	public void testConvert() {
-		StringExpression s = Bindings.convert(doubleV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV);
-		assertEquals(Double.toString(double0), s.get());
-		doubleV.set(double1);
-		assertEquals(Double.toString(double1), s.get());
-
-		s = Bindings.convert(floatV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), floatV);
-		assertEquals(Float.toString(float0), s.get());
-		floatV.set(float1);
-		assertEquals(Float.toString(float1), s.get());
-
-		s = Bindings.convert(longV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), longV);
-		assertEquals(Long.toString(long0), s.get());
-		longV.set(long1);
-		assertEquals(Long.toString(long1), s.get());
-
-		s = Bindings.convert(intV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), intV);
-		assertEquals(Integer.toString(int0), s.get());
-		intV.set(int1);
-		assertEquals(Integer.toString(int1), s.get());
-
-		s = Bindings.convert(booleanV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), booleanV);
-		assertEquals(Boolean.toString(boolean0), s.get());
-		booleanV.set(boolean1);
-		assertEquals(Boolean.toString(boolean1), s.get());
-
-		s = Bindings.convert(dateV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-		assertEquals(date0.toString(), s.get());
-		dateV.set(date1);
-		assertEquals(date1.toString(), s.get());
-		dateV.set(null);
-		assertEquals("null", s.get());
-
-		s = Bindings.convert(stringV);
-		assertEquals(stringV, s);
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testConvert_Null() {
-		Bindings.convert(null);
-	}
-
-	@Test
-	public void testConcat() {
-		// empty
-		StringExpression s = Bindings.concat();
-		assertEquals("", s.get());
-		s = Bindings.concat(new Object[0]);
-		assertEquals("", s.get());
-
-		// one object
-		s = Bindings.concat(date1);
-		assertEquals(date1.toString(), s.get());
-
-		// one variable
-		s = Bindings.concat(dateV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-		assertEquals(date0.toString(), s.get());
-		dateV.set(date1);
-		assertEquals(date1.toString(), s.get());
-		dateV.set(null);
-		assertEquals("null", s.get());
-		dateV.set(date0);
-
-		// two objects
-		s = Bindings.concat(date0, date1);
-		assertEquals(date0.toString() + date1.toString(), s.get());
-
-		// test all
-		s = Bindings.concat(doubleV, double1, floatV, float1, longV, long1, intV, int1, booleanV, boolean1, stringV, string1, dateV, date1);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV, floatV, longV, intV, booleanV, stringV, dateV);
-		assertEquals("" + double0 + double1 + float0 + float1 + long0 + long1 + int0 + int1+ boolean0 + boolean1 + string0 + string1 + date0 + date1, s.get());
-        doubleV.set(double1);
-        floatV.set(float1);
-        longV.set(long1);
-        intV.set(int1);
-        booleanV.set(boolean1);
-        stringV.set(string1);
-        dateV.set(date1);
-        assertEquals("" + double1 + double1 + float1 + float1 + long1 + long1 + int1 + int1 + boolean1 + boolean1 + string1 + string1 + date1 + date1, s.get());
-        stringV.set(null);
-        dateV.set(null);
-        assertEquals("" + double1 + double1 + float1 + float1 + long1 + long1 + int1 + int1 + boolean1 + boolean1 + "null" + string1 + "null" + date1, s.get());
-	}
-
-	@Test
-	public void testConvertWithDefaultLocale() {
-		// empty
-		StringExpression s = Bindings.format("Empty String");
-		assertEquals("Empty String", s.get());
-
-		final Locale defaultLocale = Locale.getDefault();
-		try {
-			// German Locale
-			Locale.setDefault(Locale.GERMAN);
-			// one object
-			s = Bindings.format("Date: %tc", date1);
-			assertEquals(String.format(Locale.GERMAN, "Date: %tc", date1), s.get());
-			// one variable
-			s = Bindings.format("Date: %tc", dateV);
-			DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-			assertEquals(String.format(Locale.GERMAN, "Date: %tc", date0), s.get());
-            dateV.set(date1);
-            assertEquals(String.format(Locale.GERMAN, "Date: %tc", date1), s.get());
-            dateV.set(null);
-            assertEquals("Date: null", s.get());
-            dateV.set(date0);
-
-			// test all
-			s = Bindings.format("%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-					doubleV, double1, floatV, float1, longV, long1, intV, int1, booleanV, boolean1, stringV, string1, dateV, date1);
-			DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV, floatV, longV, intV, booleanV, stringV, dateV);
-			assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-					double0, double1, float0, float1, long0, long1, int0, int1, boolean0, boolean1, string0, string1, date0, date1), s.get());
-			doubleV.set(double1);
-			floatV.set(float1);
-			longV.set(long1);
-			intV.set(int1);
-			booleanV.set(boolean1);
-            stringV.set(string1);
-            dateV.set(date1);
-            assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-                    double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, string1, string1, date1, date1), s.get());
-            stringV.set(null);
-            dateV.set(null);
-            assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %s, %tc",
-                    double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, "null", string1, "null", date1), s.get());
-
-			// US Locale
-			Locale.setDefault(Locale.US);
-			doubleV.set(double0);
-			floatV.set(float0);
-			longV.set(long0);
-			intV.set(int0);
-			booleanV.set(boolean0);
-			stringV.set(string0);
-			dateV.set(date0);
-			// one object
-			s = Bindings.format("Date: %tc", date1);
-			assertEquals(String.format(Locale.US, "Date: %tc", date1), s.get());
-			// one variable
-			s = Bindings.format("Date: %tc", dateV);
-			DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-			assertEquals(String.format(Locale.US, "Date: %tc", date0), s.get());
-			dateV.set(date1);
-			assertEquals(String.format(Locale.US, "Date: %tc", date1), s.get());
-			dateV.set(null);
-			assertEquals("Date: null", s.get());
-			dateV.set(date0);
-
-			// test all
-			s = Bindings.format("%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-					doubleV, double1, floatV, float1, longV, long1, intV, int1, booleanV, boolean1, stringV, string1, dateV, date1);
-			DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV, floatV, longV, intV, booleanV, stringV, dateV);
-			assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-					double0, double1, float0, float1, long0, long1, int0, int1, boolean0, boolean1, string0, string1, date0, date1), s.get());
-			doubleV.set(double1);
-			floatV.set(float1);
-			longV.set(long1);
-			intV.set(int1);
-			booleanV.set(boolean1);
-            stringV.set(string1);
-            dateV.set(date1);
-            assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-                    double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, string1, string1, date1, date1), s.get());
-            stringV.set(null);
-            dateV.set(null);
-            assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %s, %tc",
-                    double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, "null", string1, "null", date1), s.get());
-		} finally {
-			Locale.setDefault(defaultLocale);
-		}
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testConvertWithDefaultLocale_Null() {
-		Bindings.format(null);
-	}
-
-	@Test(expected=IllegalFormatException.class)
-	public void testConvertWithDefaultLocale_IllegalObject() {
-		Bindings.format("%tc", double0);
-	}
-
-	@Test(expected=IllegalFormatException.class)
-	public void testConvertWithDefaultLocale_IllegalValueModel() {
-		Bindings.format("%tc", doubleV);
-	}
-
-	@Test
-	public void testConvertWithCustomLocale() {
-		// German Locale
-		// empty
-		StringExpression s = Bindings.format(Locale.GERMAN, "Empty String");
-		assertEquals("Empty String", s.get());
-		// one object
-		s = Bindings.format(Locale.GERMAN, "Date: %tc", date1);
-		assertEquals(String.format(Locale.GERMAN, "Date: %tc", date1), s.get());
-		// one variable
-		s = Bindings.format(Locale.GERMAN, "Date: %tc", dateV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-		assertEquals(String.format(Locale.GERMAN, "Date: %tc", date0), s.get());
-		dateV.set(date1);
-		assertEquals(String.format(Locale.GERMAN, "Date: %tc", date1), s.get());
-        dateV.set(null);
-        assertEquals("Date: null", s.get());
-        dateV.set(date0);
-
-		// test all
-		s = Bindings.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-				doubleV, double1, floatV, float1, longV, long1, intV, int1, booleanV, boolean1, stringV, string1, dateV, date1);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV, floatV, longV, intV, booleanV, stringV, dateV);
-		assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-				double0, double1, float0, float1, long0, long1, int0, int1, boolean0, boolean1, string0, string1, date0, date1), s.get());
-		doubleV.set(double1);
-		floatV.set(float1);
-		longV.set(long1);
-		intV.set(int1);
-		booleanV.set(boolean1);
-        stringV.set(string1);
-        dateV.set(date1);
-        assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-                double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, string1, string1, date1, date1), s.get());
-        stringV.set(null);
-        dateV.set(null);
-        assertEquals(String.format(Locale.GERMAN, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %s, %tc",
-                double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, "null", string1, "null", date1), s.get());
-
-		// US Locale
-		doubleV.set(double0);
-		floatV.set(float0);
-		longV.set(long0);
-		intV.set(int0);
-		booleanV.set(boolean0);
-		stringV.set(string0);
-		dateV.set(date0);
-		// empty
-		s = Bindings.format(Locale.US, "Empty String");
-		assertEquals("Empty String", s.get());
-		// one object
-		s = Bindings.format(Locale.US, "Date: %tc", date1);
-		assertEquals(String.format(Locale.US, "Date: %tc", date1), s.get());
-		// one variable
-		s = Bindings.format(Locale.US, "Date: %tc", dateV);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), dateV);
-		assertEquals(String.format(Locale.US, "Date: %tc", date0), s.get());
-		dateV.set(date1);
-		assertEquals(String.format(Locale.US, "Date: %tc", date1), s.get());
-        dateV.set(null);
-        assertEquals("Date: null", s.get());
-        dateV.set(date0);
-
-		// test all
-		s = Bindings.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-				doubleV, double1, floatV, float1, longV, long1, intV, int1, booleanV, boolean1, stringV, string1, dateV, date1);
-		DependencyUtils.checkDependencies(((StringBinding)s).getDependencies(), doubleV, floatV, longV, intV, booleanV, stringV, dateV);
-		assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-				double0, double1, float0, float1, long0, long1, int0, int1, boolean0, boolean1, string0, string1, date0, date1), s.get());
-		doubleV.set(double1);
-		floatV.set(float1);
-		longV.set(long1);
-		intV.set(int1);
-		booleanV.set(boolean1);
-		stringV.set(string1);
-		dateV.set(date1);
-		assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %tc, %tc",
-				double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, string1, string1, date1, date1), s.get());
-        stringV.set(null);
-        dateV.set(null);
-        assertEquals(String.format(Locale.US, "%8.3e, %8.3e, %6.3f, %6.3f, %d, %d, %d, %d, %s, %s, %s, %s, %s, %tc",
-                double1, double1, float1, float1, long1, long1, int1, int1, boolean1, boolean1, "null", string1, "null", date1), s.get());
-	}
-
-	@Test(expected=NullPointerException.class)
-	public void testConvertWithCustomLocale_Null() {
-		Bindings.format(Locale.US, null);
-	}
-
-	@Test(expected=IllegalFormatException.class)
-	public void testConvertWithCustomLocale_IllegalObject() {
-		Bindings.format(Locale.US, "%tc", double0);
-	}
-
-	@Test(expected=IllegalFormatException.class)
-	public void testConvertWithCustomLocale_IllegalValueModel() {
-		Bindings.format(Locale.US, "%tc", doubleV);
-	}
-}
--- a/modules/base/src/test/java/com/sun/javafx/collections/ListListenerHelperTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,741 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.collections;
-
-import com.sun.javafx.binding.ExpressionHelper;
-
-import javafx.beans.InvalidationListener;
-import javafx.beans.InvalidationListenerMock;
-import javafx.beans.Observable;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener;
-import javafx.collections.MockListObserver;
-import javafx.collections.ObservableList;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.BitSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ListListenerHelperTest {
-    
-    private InvalidationListenerMock[] invalidationListenerMock;
-
-    private MockListObserver<Object>[] changeListenerMock;
-
-    private ListListenerHelper<Object> helper;
-
-    private ObservableList<Object> list;
-    private ListChangeListener.Change<Object> change;
-
-    @Before
-    public void setUp() {
-        invalidationListenerMock = new InvalidationListenerMock[] {
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock()
-        };
-        changeListenerMock = new MockListObserver[] {
-                new MockListObserver<Object>(),
-                new MockListObserver<Object>(),
-                new MockListObserver<Object>(),
-                new MockListObserver<Object>()
-        };
-        helper = null;
-        list = FXCollections.emptyObservableList();
-        change = new NonIterableChange.SimpleRemovedChange<Object>(0, 1, new Object(), list);
-    }
-
-    private void resetAllListeners() {
-        for (final InvalidationListenerMock listener : invalidationListenerMock) {
-            listener.reset();
-        }
-        for (final MockListObserver<Object> listener : changeListenerMock) {
-            listener.clear();
-        }
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddInvalidationListener_Null() {
-        ListListenerHelper.addListener(helper, (InvalidationListener)null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveInvalidationListener_Null() {
-        ListListenerHelper.removeListener(helper, (InvalidationListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveListChangeListener_Null() {
-        ListListenerHelper.removeListener(helper, (ListChangeListener<Object>) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddListChangeListener_Null() {
-        ListListenerHelper.addListener(helper, (ListChangeListener<Object>) null);
-    }
-
-    @Test
-    public void testEmpty() {
-        assertFalse(ListListenerHelper.hasListeners(helper));
-
-        // these should be no-ops
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-    }
-
-    @Test
-    public void testInvalidation_Simple() {
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(null, 0);
-
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        changeListenerMock[0].check0();
-
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-    }
-
-    @Test
-    public void testInvalidation_AddInvalidation() {
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-    }
-
-    @Test
-    public void testInvalidation_AddChange() {
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        changeListenerMock[0].check1();
-    }
-    
-    @Test
-    public void testInvalidation_ChangeInPulse() {
-        final InvalidationListener listener = observable -> {
-            helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        };
-        helper = ListListenerHelper.addListener(helper, listener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, listener);
-        invalidationListenerMock[0].reset();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-    }
-
-    @Test
-    public void testChange_Simple() {
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[0].clear();
-
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check0();
-        changeListenerMock[0].clear();
-
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        invalidationListenerMock[0].check(null, 0);
-        changeListenerMock[0].clear();
-
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[0].clear();
-    }
-
-    @Test
-    public void testChange_AddInvalidation() {
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        invalidationListenerMock[0].check(list, 1);
-    }
-
-    @Test
-    public void testChange_AddChange() {
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-    }
-
-    @Test
-    public void testChange_ChangeInPulse() {
-        final ListChangeListener<Object> listener = c -> {
-            helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        };
-        helper = ListListenerHelper.addListener(helper, listener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, listener);
-        changeListenerMock[0].clear();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-    }
-
-    @Test
-    public void testGeneric_AddInvalidation() {
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-
-        // first invalidation listener creates the array
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-
-        // second and third invalidation listener enlarge the array
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[2]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-
-        // fourth invalidation listener fits into the array
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[3]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-        invalidationListenerMock[3].check(list, 1);
-    }
-    
-    @Test
-    public void testGeneric_AddInvalidationInPulse() {
-        final ListChangeListener<Object> addListener = new ListChangeListener<Object>() {
-            int counter;
-            @Override
-            public void onChanged(Change<? extends Object> c) {
-                helper = ListListenerHelper.addListener(helper, invalidationListenerMock[counter++]);
-            }
-        };
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-        invalidationListenerMock[3].check(list, 1);
-    }
-
-    @Test
-    public void testGeneric_RemoveInvalidation() {
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[2]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[3]);
-
-        // remove first element
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-        invalidationListenerMock[3].check(list, 1);
-
-        // remove middle element
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[2]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(list, 1);
-
-        // remove last element
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[3]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        // remove last invalidation with single change
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[1].check(null, 0);
-        changeListenerMock[0].check1();
-        changeListenerMock[0].clear();
-
-        // remove invalidation if array is empty
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[0].clear();
-        changeListenerMock[1].clear();
-
-        // remove last invalidation with two change
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-    }
-
-
-    @Test
-    public void testGeneric_RemoveInvalidationInPulse() {
-        final ListChangeListener<Object> removeListener = new ListChangeListener<Object>() {
-            int counter;
-            @Override
-            public void onChanged(Change<? extends Object> c) {
-                helper = ListListenerHelper.removeListener(helper, invalidationListenerMock[counter++]);
-            }
-        };
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[3]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[2]);
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        invalidationListenerMock[2].check(list, 1);
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(list, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(list, 1);
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(list, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-    }
-
-    @Test
-    public void testGeneric_AddChange() {
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-
-        // first change listener creates the array
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[0].clear();
-
-        // second and third change listener enlarge the array
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[2]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-        resetAllListeners();
-
-        // fourth change listener fits into the array
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[3]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-        changeListenerMock[3].check1();
-    }
-
-    @Test
-    public void testGeneric_AddChangeInPulse() {
-        final InvalidationListener addListener = new InvalidationListener() {
-            int counter;
-            @Override
-            public void invalidated(Observable observable) {
-                helper = ListListenerHelper.addListener(helper, changeListenerMock[counter++]);
-
-            }
-        };
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check0();
-        changeListenerMock[2].check0();
-        changeListenerMock[3].check0();
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check0();
-        changeListenerMock[3].check0();
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-        changeListenerMock[3].check0();
-
-        helper = ListListenerHelper.addListener(helper, addListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-        changeListenerMock[3].check1();
-    }
-
-    @Test
-    public void testGeneric_RemoveChange() {
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[2]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[3]);
-
-        // remove first element
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-        changeListenerMock[3].check1();
-        resetAllListeners();
-
-        // remove middle element
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[2]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check0();
-        changeListenerMock[3].check1();
-        resetAllListeners();
-
-        // remove last element
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[3]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check0();
-        changeListenerMock[3].check0();
-        resetAllListeners();
-
-        // remove last change with single invalidation
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[1]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        changeListenerMock[1].check0();
-        changeListenerMock[1].clear();
-
-        // remove change if array is empty
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        changeListenerMock[0].check0();
-        changeListenerMock[0].clear();
-
-        // remove last change with two invalidation
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.removeListener(helper, changeListenerMock[0]);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(list, 1);
-        invalidationListenerMock[1].check(list, 1);
-        changeListenerMock[0].check0();
-        changeListenerMock[0].clear();
-    }
-
-
-    @Test
-    public void testGeneric_RemoveChangeInPulse() {
-        final InvalidationListener removeListener = new InvalidationListener() {
-            int counter;
-            @Override
-            public void invalidated(Observable observable) {
-                helper = ListListenerHelper.removeListener(helper, changeListenerMock[counter++]);
-            }
-        };
-        helper = ListListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[3]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = ListListenerHelper.addListener(helper, changeListenerMock[2]);
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[3].check1();
-        changeListenerMock[1].check1();
-        changeListenerMock[2].check1();
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[3].check1();
-        changeListenerMock[1].check0();
-        changeListenerMock[2].check1();
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[3].check1();
-        changeListenerMock[1].check0();
-        changeListenerMock[2].check0();
-
-        helper = ListListenerHelper.addListener(helper, removeListener);
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        helper = ListListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        ListListenerHelper.fireValueChangedEvent(helper, change);
-        changeListenerMock[0].check0();
-        changeListenerMock[3].check0();
-        changeListenerMock[1].check0();
-        changeListenerMock[2].check0();
-    }
-
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleInvalidation() {
-        helper = ListListenerHelper.addListener(helper,(Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {called.set(0); throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {called.set(1); throw new RuntimeException();});
-
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleChange() {
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {
-            throw new RuntimeException();
-        });
-        helper.fireValueChangedEvent(change);
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChange() {
-        BitSet called = new BitSet();
-
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {called.set(0); throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {called.set(1); throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChangeAndInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {called.set(0); throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {called.set(1); throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {called.set(2); throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {called.set(3); throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-        assertTrue(called.get(2));
-        assertTrue(called.get(3));
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleInvalidation() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-
-        helper = ListListenerHelper.addListener(helper,(Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get());
-    }
-
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleChange() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChange() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChangeAndInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> { throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (ListChangeListener.Change<? extends Object> c) -> { throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> { throw new RuntimeException();});
-        helper = ListListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(4, called.get());
-    }
-
-}
--- a/modules/base/src/test/java/com/sun/javafx/collections/MapListenerHelperTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,740 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.collections;
-
-import com.sun.javafx.binding.MapExpressionHelper;
-
-import javafx.beans.InvalidationListener;
-import javafx.beans.InvalidationListenerMock;
-import javafx.beans.Observable;
-import javafx.collections.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.BitSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class MapListenerHelperTest {
-    
-    private InvalidationListenerMock[] invalidationListenerMock;
-
-    private MockMapObserver<Object, Object>[] changeListenerMock;
-
-    private MapListenerHelper<Object, Object> helper;
-
-    private ObservableMap<Object, Object> map;
-    private MapChangeListener.Change<Object, Object> change;
-
-    @Before
-    public void setUp() {
-        invalidationListenerMock = new InvalidationListenerMock[] {
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock(),
-                new InvalidationListenerMock()
-        };
-        changeListenerMock = new MockMapObserver[] {
-                new MockMapObserver<Object, Object>(),
-                new MockMapObserver<Object, Object>(),
-                new MockMapObserver<Object, Object>(),
-                new MockMapObserver<Object, Object>()
-        };
-        helper = null;
-        map = FXCollections.observableHashMap();
-        change = new MapExpressionHelper.SimpleChange<Object, Object>(map).setRemoved(new Object(), new Object());
-    }
-
-    private void resetAllListeners() {
-        for (final InvalidationListenerMock listener : invalidationListenerMock) {
-            listener.reset();
-        }
-        for (final MockMapObserver<Object, Object> listener : changeListenerMock) {
-            listener.clear();
-        }
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddInvalidationListener_Null() {
-        MapListenerHelper.addListener(helper, (InvalidationListener)null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveInvalidationListener_Null() {
-        MapListenerHelper.removeListener(helper, (InvalidationListener) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testRemoveMapChangeListener_Null() {
-        MapListenerHelper.removeListener(helper, (MapChangeListener<Object, Object>) null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void testAddMapChangeListener_Null() {
-        MapListenerHelper.addListener(helper, (MapChangeListener<Object, Object>) null);
-    }
-
-    @Test
-    public void testEmpty() {
-        assertFalse(MapListenerHelper.hasListeners(helper));
-
-        // these should be no-ops
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-    }
-
-    @Test
-    public void testInvalidation_Simple() {
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(null, 0);
-
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-    }
-
-    @Test
-    public void testInvalidation_AddInvalidation() {
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-    }
-
-    @Test
-    public void testInvalidation_AddChange() {
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-    }
-    
-    @Test
-    public void testInvalidation_ChangeInPulse() {
-        final InvalidationListener listener = observable -> {
-            helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        };
-        helper = MapListenerHelper.addListener(helper, listener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, listener);
-        invalidationListenerMock[0].reset();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-    }
-
-    @Test
-    public void testChange_Simple() {
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        changeListenerMock[0].clear();
-
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        invalidationListenerMock[0].check(null, 0);
-        changeListenerMock[0].clear();
-
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-    }
-
-    @Test
-    public void testChange_AddInvalidation() {
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        invalidationListenerMock[0].check(map, 1);
-    }
-
-    @Test
-    public void testChange_AddChange() {
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-    }
-
-    @Test
-    public void testChange_ChangeInPulse() {
-        final MapChangeListener<Object, Object> listener = change1 -> {
-            helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        };
-        helper = MapListenerHelper.addListener(helper, listener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, listener);
-        changeListenerMock[0].clear();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-    }
-
-    @Test
-    public void testGeneric_AddInvalidation() {
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-
-        // first invalidation listener creates the array
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-
-        // second and third invalidation listener enlarge the array
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[2]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-
-        // fourth invalidation listener fits into the array
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[3]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-        invalidationListenerMock[3].check(map, 1);
-    }
-    
-    @Test
-    public void testGeneric_AddInvalidationInPulse() {
-        final MapChangeListener<Object, Object> addListener = new MapChangeListener<Object, Object>() {
-            int counter;
-            @Override
-            public void onChanged(Change<? extends Object, ? extends Object> change) {
-                helper = MapListenerHelper.addListener(helper, invalidationListenerMock[counter++]);
-            }
-        };
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-        invalidationListenerMock[3].check(null, 0);
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-        invalidationListenerMock[3].check(map, 1);
-    }
-
-    @Test
-    public void testGeneric_RemoveInvalidation() {
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[2]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[3]);
-
-        // remove first element
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-        invalidationListenerMock[3].check(map, 1);
-
-        // remove middle element
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[2]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(map, 1);
-
-        // remove last element
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[3]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-
-        // remove last invalidation with single change
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[1].check(null, 0);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-
-        // remove invalidation if array is empty
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        changeListenerMock[0].clear();
-        changeListenerMock[1].clear();
-
-        // remove last invalidation with two change
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-    }
-
-
-    @Test
-    public void testGeneric_RemoveInvalidationInPulse() {
-        final MapChangeListener<Object, Object> removeListener = new MapChangeListener<Object, Object>() {
-            int counter;
-            @Override
-            public void onChanged(Change<? extends Object, ? extends Object> change) {
-                helper = MapListenerHelper.removeListener(helper, invalidationListenerMock[counter++]);
-            }
-        };
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[3]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[2]);
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        invalidationListenerMock[2].check(map, 1);
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(map, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(map, 1);
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(map, 1);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(null, 0);
-        invalidationListenerMock[3].check(null, 0);
-        invalidationListenerMock[1].check(null, 0);
-        invalidationListenerMock[2].check(null, 0);
-    }
-
-    @Test
-    public void testGeneric_AddChange() {
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-
-        // first change listener creates the array
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-
-        // second and third change listener enlarge the array
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[2]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-        resetAllListeners();
-
-        // fourth change listener fits into the array
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[3]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-    }
-
-    @Test
-    public void testGeneric_AddChangeInPulse() {
-        final InvalidationListener addListener = new InvalidationListener() {
-            int counter;
-            @Override
-            public void invalidated(Observable observable) {
-                helper = MapListenerHelper.addListener(helper, changeListenerMock[counter++]);
-
-            }
-        };
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-        assertEquals(0, changeListenerMock[3].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-        assertEquals(0, changeListenerMock[3].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-        assertEquals(0, changeListenerMock[3].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, addListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, addListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(1, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-    }
-
-    @Test
-    public void testGeneric_RemoveChange() {
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[2]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[3]);
-
-        // remove first element
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-        resetAllListeners();
-
-        // remove middle element
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[2]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-        resetAllListeners();
-
-        // remove last element
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[3]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-        assertEquals(0, changeListenerMock[3].getCallsNumber());
-        resetAllListeners();
-
-        // remove last change with single invalidation
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[1]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        changeListenerMock[1].clear();
-
-        // remove change if array is empty
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[1]);
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-
-        // remove last change with two invalidation
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.removeListener(helper, changeListenerMock[0]);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        invalidationListenerMock[0].check(map, 1);
-        invalidationListenerMock[1].check(map, 1);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        changeListenerMock[0].clear();
-    }
-
-
-    @Test
-    public void testGeneric_RemoveChangeInPulse() {
-        final InvalidationListener removeListener = new InvalidationListener() {
-            int counter;
-            @Override
-            public void invalidated(Observable observable) {
-                helper = MapListenerHelper.removeListener(helper, changeListenerMock[counter++]);
-            }
-        };
-        helper = MapListenerHelper.addListener(helper, invalidationListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[0]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[3]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[1]);
-        helper = MapListenerHelper.addListener(helper, changeListenerMock[2]);
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-        assertEquals(1, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        assertEquals(1, changeListenerMock[2].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(1, changeListenerMock[3].getCallsNumber());
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-
-        helper = MapListenerHelper.addListener(helper, removeListener);
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        helper = MapListenerHelper.removeListener(helper, removeListener);
-        resetAllListeners();
-        MapListenerHelper.fireValueChangedEvent(helper, change);
-        assertEquals(0, changeListenerMock[0].getCallsNumber());
-        assertEquals(0, changeListenerMock[3].getCallsNumber());
-        assertEquals(0, changeListenerMock[1].getCallsNumber());
-        assertEquals(0, changeListenerMock[2].getCallsNumber());
-    }
-
-
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleInvalidation() {
-        helper = MapListenerHelper.addListener(helper,(Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {called.set(0); throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {called.set(1); throw new RuntimeException();});
-
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromSingleChange() {
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object,? extends Object> c) -> {
-            throw new RuntimeException();
-        });
-        helper.fireValueChangedEvent(change);
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChange() {
-        BitSet called = new BitSet();
-
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object,? extends Object> c) -> {called.set(0); throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object,? extends Object> c) -> {called.set(1); throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-    }
-
-    @Test
-    public void testExceptionNotPropagatedFromMultipleChangeAndInvalidation() {
-        BitSet called = new BitSet();
-
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object,? extends Object> c) -> {called.set(0); throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object,? extends Object> c) -> {called.set(1); throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {called.set(2); throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {called.set(3); throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get(0));
-        assertTrue(called.get(1));
-        assertTrue(called.get(2));
-        assertTrue(called.get(3));
-    }
-
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleInvalidation() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-
-        helper = MapListenerHelper.addListener(helper,(Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get());
-    }
-
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInSingleChange() {
-        AtomicBoolean called = new AtomicBoolean(false);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.set(true));
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object, ? extends Object> c) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertTrue(called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChange() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object, ? extends Object> c) -> {throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object, ? extends Object> c) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(2, called.get());
-    }
-
-    @Test
-    public void testExceptionHandledByThreadUncaughtHandlerInMultipleChangeAndInvalidation() {
-        AtomicInteger called = new AtomicInteger(0);
-
-        Thread.currentThread().setUncaughtExceptionHandler((t, e) -> called.incrementAndGet());
-
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object, ? extends Object> c) -> { throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (MapChangeListener.Change<? extends Object, ? extends Object> c) -> { throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> { throw new RuntimeException();});
-        helper = MapListenerHelper.addListener(helper, (Observable o) -> {throw new RuntimeException();});
-        helper.fireValueChangedEvent(change);
-
-        assertEquals(4, called.get());
-    }
-
-}
--- a/modules/base/src/test/java/com/sun/javafx/collections/MappingChangeTest.java	Wed Sep 02 23:04:54 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.javafx.collections;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener.Change;
-import javafx.collections.ObservableList;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-public class MappingChangeTest {
-
-    ObservableList<Integer> originalList;
-    ObservableList<String> list;
-
-    @Before
-    public void setUp() {
-        originalList = FXCollections.observableArrayList(1, 2, 3, 4, 5);
-        list = FXCollections.observableArrayList("1", "2", "3", "4", "5");
-    }
-
-    @Test
-    public void testAddRemove() {
-        Change<Integer> change = new NonIterableChange.SimpleRemovedChange<Integer>(0, 1, new Integer(5), originalList);
-        MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
-                e -> e.toString(), list);
-        
-        assertTrue(mapChange.next());
-        assertEquals(0, mapChange.getFrom());
-        assertEquals(1, mapChange.getTo());
-        assertEquals(Arrays.asList("5"), mapChange.getRemoved());
-        assertNotNull(mapChange.toString());
-        
-        assertFalse(mapChange.next());
-    }
-
-    @Test
-    public void testUpdate() {
-        Change<Integer> change = new NonIterableChange.SimpleUpdateChange<Integer>(0, 1, originalList);
-        MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
-                e -> e.toString(), list);
-        
-        assertTrue(mapChange.next());
-        assertEquals(0, mapChange.getFrom());
-        assertEquals(1, mapChange.getTo());
-        assertTrue(mapChange.wasUpdated());
-        assertNotNull(mapChange.toString());
-        
-        assertFalse(mapChange.next());
-    }
-    
-    @Test
-    public void testPermutation() {
-        Change<Integer> change = new NonIterableChange.SimplePermutationChange<Integer>(0, 2, new int[] {1, 0}, originalList);
-        MappingChange<Integer, String> mapChange = new MappingChange<Integer, String>(change,
-                e -> e.toString(), list);
-        
-        assertTrue(mapChange.next());
-        assertEquals(0, mapChange.getFrom());
-        assertEquals(2, mapChange.getTo());
-        assertTrue(mapChange.wasPermutated());
-        assertNotNull(mapChange.toString());
-        
-        assertFalse(mapChange.next());
-    }
-    
-    @Test
-    public void testComplex() {
-        Change<Integer> change = new Change(originalList) {
-            int[][] added= new int[][]{ new int[] {0, 1}, new int[] {2, 3}, new int[] {4, 5}};
-            
-            int pointer = -1;
-            
-            @Override
-            public boolean next() {
-                if (pointer == added.length - 1) {
-                    return false;
-                }
-                ++pointer;
-                return true;
-            }
-            
-            @Override
-            public void reset() {<