1 /* 2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.beans.property; 27 28 29 import static org.junit.Assert.assertEquals; 30 import static org.junit.Assert.fail; 31 import javafx.beans.InvalidationListener; 32 import javafx.beans.value.ChangeListener; 33 import javafx.beans.value.ObservableValue; 34 35 import org.junit.Test; 36 37 public class ObjectPropertyTest { 38 39 private static final Object NO_BEAN = null; 40 private static final String NO_NAME_1 = null; 41 private static final String NO_NAME_2 = ""; 42 private static final Object VALUE_1 = new Object(); 43 private static final Object VALUE_2 = new Object(); 44 private static final Object DEFAULT = null; 45 46 @Test 47 public void testBindBidirectional() { 48 final ObjectProperty<Object> p1 = new SimpleObjectProperty<Object>(VALUE_2); 49 final ObjectProperty<Object> p2 = new SimpleObjectProperty<Object>(VALUE_1); 50 51 p1.bindBidirectional(p2); 52 assertEquals(VALUE_1, p1.get()); 53 assertEquals(VALUE_1, p2.get()); 54 55 p1.set(VALUE_2); 56 assertEquals(VALUE_2, p1.get()); 57 assertEquals(VALUE_2, p2.get()); 58 59 p2.set(VALUE_1); 60 assertEquals(VALUE_1, p1.get()); 61 assertEquals(VALUE_1, p2.get()); 62 63 p1.unbindBidirectional(p2); 64 p1.set(VALUE_2); 65 assertEquals(VALUE_2, p1.get()); 66 assertEquals(VALUE_1, p2.get()); 67 68 p1.set(VALUE_1); 69 p2.set(VALUE_2); 70 assertEquals(VALUE_1, p1.get()); 71 assertEquals(VALUE_2, p2.get()); 72 } 73 74 @Test 75 public void testToString() { 76 final ObjectProperty<Object> v0 = new ObjectPropertyStub(NO_BEAN, NO_NAME_1); 77 assertEquals("ObjectProperty [value: " + DEFAULT + "]", v0.toString()); 78 79 final ObjectProperty<Object> v1 = new ObjectPropertyStub(NO_BEAN, NO_NAME_2); 80 assertEquals("ObjectProperty [value: " + DEFAULT + "]", v1.toString()); 81 82 final Object bean = new Object(); 83 final String name = "My name"; 84 final ObjectProperty<Object> v2 = new ObjectPropertyStub(bean, name); 85 assertEquals("ObjectProperty [bean: " + bean.toString() + ", name: My name, value: " + DEFAULT + "]", v2.toString()); 86 v2.set(VALUE_1); 87 assertEquals("ObjectProperty [bean: " + bean.toString() + ", name: My name, value: " + VALUE_1 + "]", v2.toString()); 88 89 final ObjectProperty<Object> v3 = new ObjectPropertyStub(bean, NO_NAME_1); 90 assertEquals("ObjectProperty [bean: " + bean.toString() + ", value: " + DEFAULT + "]", v3.toString()); 91 v3.set(VALUE_1); 92 assertEquals("ObjectProperty [bean: " + bean.toString() + ", value: " + VALUE_1 + "]", v3.toString()); 93 94 final ObjectProperty<Object> v4 = new ObjectPropertyStub(bean, NO_NAME_2); 95 assertEquals("ObjectProperty [bean: " + bean.toString() + ", value: " + DEFAULT + "]", v4.toString()); 96 v4.set(VALUE_1); 97 assertEquals("ObjectProperty [bean: " + bean.toString() + ", value: " + VALUE_1 + "]", v4.toString()); 98 99 final ObjectProperty<Object> v5 = new ObjectPropertyStub(NO_BEAN, name); 100 assertEquals("ObjectProperty [name: My name, value: " + DEFAULT + "]", v5.toString()); 101 v5.set(VALUE_1); 102 assertEquals("ObjectProperty [name: My name, value: " + VALUE_1 + "]", v5.toString()); 103 } 104 105 private class ObjectPropertyStub extends ObjectProperty<Object> { 106 107 private final Object bean; 108 private final String name; 109 private Object value; 110 111 private ObjectPropertyStub(Object bean, String name) { 112 this.bean = bean; 113 this.name = name; 114 } 115 116 @Override 117 public Object getBean() { 118 return bean; 119 } 120 121 @Override 122 public String getName() { 123 return name; 124 } 125 126 @Override 127 public Object get() { 128 return value; 129 } 130 131 @Override 132 public void set(Object value) { 133 this.value = value; 134 } 135 136 @Override 137 public void bind(ObservableValue<? extends Object> observable) { 138 fail("Not in use"); 139 } 140 141 @Override 142 public void unbind() { 143 fail("Not in use"); 144 } 145 146 @Override 147 public boolean isBound() { 148 fail("Not in use"); 149 return false; 150 } 151 152 @Override 153 public void addListener(ChangeListener<? super Object> listener) { 154 fail("Not in use"); 155 } 156 157 @Override 158 public void removeListener(ChangeListener<? super Object> listener) { 159 fail("Not in use"); 160 } 161 162 @Override 163 public void addListener(InvalidationListener listener) { 164 fail("Not in use"); 165 } 166 167 @Override 168 public void removeListener(InvalidationListener listener) { 169 fail("Not in use"); 170 } 171 172 } 173 }