< prev index next >

modules/base/src/test/java/javafx/beans/property/PropertyBaseTest.java

Print this page
rev 9211 : 8130458: Memory leak in bind/unbind of [Primitive]PropertyBase

@@ -26,13 +26,15 @@
 package javafx.beans.property;
 
 import com.sun.javafx.binding.ExpressionHelperUtility;
 import java.util.Arrays;
 import java.util.List;
+import javafx.beans.value.ObservableNumberValue;
+import javafx.beans.value.ObservableValue;
+import javafx.beans.value.ObservableValueBase;
 import static org.junit.Assert.assertEquals;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 @RunWith(Parameterized.class)

@@ -68,10 +70,35 @@
         public T getValue() {
             return value;
         }
     }
 
+    private static class NumberPropertyMock extends ObservableValueBase<Number>
+            implements ObservableNumberValue, Property<Number>
+    {
+        private Number value = 0;
+
+        @Override public int intValue()       { return value.intValue(); }
+        @Override public long longValue()     { return value.longValue(); }
+        @Override public float floatValue()   { return value.floatValue(); }
+        @Override public double doubleValue() { return value.doubleValue(); }
+        @Override public Number getValue()    { return value; }
+        @Override public void setValue(Number value) {
+            this.value = value;
+            fireValueChangedEvent();
+        }
+
+        @Override public void bind(ObservableValue<? extends Number> observable) {}
+        @Override public void unbind() {}
+        @Override public boolean isBound() { return false; }
+        @Override public void bindBidirectional(Property<Number> other) {}
+        @Override public void unbindBidirectional(Property<Number> other) {}
+
+        @Override public Object getBean() { return null; }
+        @Override public String getName() { return ""; }
+    }
+
     @Parameterized.Parameters
     public static List<Object[]> data() {
         return Arrays.asList(new Object[][] {
             // primitive binding
             // Property->Listener->Value

@@ -82,13 +109,17 @@
             { new Factory(() -> new SimpleLongProperty(), () -> new SimpleLongProperty(), 1L) },
             // generic with wrapper
             // Property->Listener->Binding->BindingHelperObserver->Value
             { new Factory(() -> new SimpleBooleanProperty(), () -> new SimpleObjectProperty<>(), true) },
             { new Factory(() -> new SimpleDoubleProperty(), () -> new SimpleObjectProperty<>(), 1.0) },
+            { new Factory(() -> new SimpleDoubleProperty(), () -> new NumberPropertyMock(), 1.0) },
             { new Factory(() -> new SimpleFloatProperty(), () -> new SimpleObjectProperty<>(), 1.0f) },
+            { new Factory(() -> new SimpleFloatProperty(), () -> new NumberPropertyMock(), 1.0f) },
             { new Factory(() -> new SimpleIntegerProperty(), () -> new SimpleObjectProperty<>(), 1) },
+            { new Factory(() -> new SimpleIntegerProperty(), () -> new NumberPropertyMock(), 1) },
             { new Factory(() -> new SimpleLongProperty(), () -> new SimpleObjectProperty<>(), 1L) },
+            { new Factory(() -> new SimpleLongProperty(), () -> new NumberPropertyMock(), 1L) },
             // generic
             // Property->Listener->Value
             { new Factory(() -> new SimpleObjectProperty(), () -> new SimpleObjectProperty<>(), new Object()) },
             { new Factory(() -> new SimpleStringProperty(), () -> new SimpleObjectProperty<>(), "1") },
             // the same as generic

@@ -138,11 +169,10 @@
 
         property.bind(observable); // calls trim
         assertEquals(1, ExpressionHelperUtility.getInvalidationListeners(observable).size());
     }
 
-    @Ignore("8130458")
     @Test
     public void testUnbindGenericWrapper() {
         property.bind(observable);
         assertEquals(1, ExpressionHelperUtility.getInvalidationListeners(observable).size());
 
< prev index next >