001 /*
002 * Copyright 2002-2005 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.binding.form.support;
017
018 import java.util.HashMap;
019 import java.util.Map;
020
021 import org.springframework.binding.form.FieldMetadata;
022 import org.springframework.binding.support.TestPropertyChangeListener;
023 import org.springframework.binding.value.support.ValueHolder;
024 import org.springframework.richclient.test.SpringRichTestCase;
025
026 /**
027 *
028 * @author Oliver Hutchison
029 */
030 public class DefaultFieldMetadataTests extends SpringRichTestCase {
031
032 public void testDirtyChangeTrackingOnValueChange() {
033 FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
034 DefaultFormModel fm = new DefaultFormModel(new Object());
035 DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null);
036 TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY);
037 m.addPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY, pcl);
038 assertTrue(!m.isDirty());
039 assertEquals(0, pcl.eventCount());
040
041 vm.setValue("v1");
042 assertEquals(0, pcl.eventCount());
043 assertTrue(!m.isDirty());
044
045 vm.setValue("v2");
046 assertEquals(1, pcl.eventCount());
047 assertTrue(m.isDirty());
048
049 vm.setValue("v3");
050 assertEquals(1, pcl.eventCount());
051 assertTrue(m.isDirty());
052
053 vm.setValue("v1");
054 assertEquals(2, pcl.eventCount());
055 assertTrue(!m.isDirty());
056
057 vm.setValue(null);
058 assertEquals(3, pcl.eventCount());
059 assertTrue(m.isDirty());
060
061 vm.clearDirty();
062 assertEquals(4, pcl.eventCount());
063 assertTrue(!m.isDirty());
064
065 vm.setValue(null);
066 assertEquals(4, pcl.eventCount());
067 assertTrue(!m.isDirty());
068 }
069
070 public void testEnabledChange() {
071 FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
072 DefaultFormModel fm = new DefaultFormModel(new Object());
073 DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null);
074 TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY);
075 m.addPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY, pcl);
076 assertEquals(0, pcl.eventCount());
077 assertTrue(m.isEnabled());
078
079 m.setEnabled(true);
080 assertEquals(0, pcl.eventCount());
081 assertTrue(m.isEnabled());
082
083 m.setEnabled(false);
084 assertEquals(1, pcl.eventCount());
085 assertTrue(!m.isEnabled());
086
087 fm.setEnabled(false);
088 assertEquals(1, pcl.eventCount());
089 assertTrue(!m.isEnabled());
090
091 m.setEnabled(true);
092 assertEquals(1, pcl.eventCount());
093 assertTrue(!m.isEnabled());
094
095 fm.setEnabled(true);
096 assertEquals(2, pcl.eventCount());
097 assertTrue(m.isEnabled());
098 }
099
100
101 public void testCustomMetaData() {
102 final FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
103 final DefaultFormModel fm = new DefaultFormModel(new Object());
104 final Map customMeta = new HashMap();
105 customMeta.put("custom1", "a");
106 customMeta.put("custom2", "b");
107 final DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, customMeta);
108
109 assertNull(m.getUserMetadata("custom3"));
110 assertEquals("a", m.getUserMetadata("custom1"));
111 assertEquals("b", m.getUserMetadata("custom2"));
112 }
113
114 public void testMutableCustomMetaData() {
115 final FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
116 final DefaultFormModel fm = new DefaultFormModel(new Object());
117 final DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null);
118 final String name = "customProperty";
119 final String othername = "othername";
120 final TestPropertyChangeListener pcl = new TestPropertyChangeListener(name);
121 final TestPropertyChangeListener pclOther = new TestPropertyChangeListener(othername);
122
123 m.addPropertyChangeListener(name, pcl);
124 m.addPropertyChangeListener(othername, pclOther);
125
126 assertNull(m.getUserMetadata(name));
127 pcl.assertEventCount(0);
128
129 m.setUserMetadata(name, "a");
130 assertEquals("a", m.getUserMetadata(name));
131 pcl.assertEventCount(1);
132 assertNull(pcl.lastEvent().getOldValue());
133 assertEquals("a", pcl.lastEvent().getNewValue());
134
135 m.setUserMetadata(name, "b");
136 assertEquals("b", m.getUserMetadata(name));
137 pcl.assertEventCount(2);
138 assertEquals("a", pcl.lastEvent().getOldValue());
139 assertEquals("b", pcl.lastEvent().getNewValue());
140
141 m.setUserMetadata(name, "b");
142 pcl.assertEventCount(2);
143
144 m.setUserMetadata(name, null);
145 assertNull(m.getUserMetadata(name));
146 pcl.assertEventCount(3);
147 assertEquals("b", pcl.lastEvent().getOldValue());
148 assertNull(pcl.lastEvent().getNewValue());
149
150 pclOther.assertEventCount(0);
151 m.setUserMetadata(othername, "1");
152 pcl.assertEventCount(3);
153 pclOther.assertEventCount(1);
154
155 m.clearUserMetadata();
156
157 assertNull(m.getUserMetadata(name));
158 assertNull(m.getUserMetadata(othername));
159 pcl.assertEventCount(3);
160 pclOther.assertEventCount(2);
161 assertEquals("1", pclOther.lastEvent().getOldValue());
162 assertEquals(null, pclOther.lastEvent().getNewValue());
163 }
164 }