1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.binding.form.support;
17
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import org.springframework.binding.form.FieldMetadata;
22 import org.springframework.binding.support.TestPropertyChangeListener;
23 import org.springframework.binding.value.support.ValueHolder;
24 import org.springframework.richclient.test.SpringRichTestCase;
25
26
27
28
29
30 public class DefaultFieldMetadataTests extends SpringRichTestCase {
31
32 public void testDirtyChangeTrackingOnValueChange() {
33 FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
34 DefaultFormModel fm = new DefaultFormModel(new Object());
35 DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null);
36 TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY);
37 m.addPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY, pcl);
38 assertTrue(!m.isDirty());
39 assertEquals(0, pcl.eventCount());
40
41 vm.setValue("v1");
42 assertEquals(0, pcl.eventCount());
43 assertTrue(!m.isDirty());
44
45 vm.setValue("v2");
46 assertEquals(1, pcl.eventCount());
47 assertTrue(m.isDirty());
48
49 vm.setValue("v3");
50 assertEquals(1, pcl.eventCount());
51 assertTrue(m.isDirty());
52
53 vm.setValue("v1");
54 assertEquals(2, pcl.eventCount());
55 assertTrue(!m.isDirty());
56
57 vm.setValue(null);
58 assertEquals(3, pcl.eventCount());
59 assertTrue(m.isDirty());
60
61 vm.clearDirty();
62 assertEquals(4, pcl.eventCount());
63 assertTrue(!m.isDirty());
64
65 vm.setValue(null);
66 assertEquals(4, pcl.eventCount());
67 assertTrue(!m.isDirty());
68 }
69
70 public void testEnabledChange() {
71 FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1"));
72 DefaultFormModel fm = new DefaultFormModel(new Object());
73 DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null);
74 TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY);
75 m.addPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY, pcl);
76 assertEquals(0, pcl.eventCount());
77 assertTrue(m.isEnabled());
78
79 m.setEnabled(true);
80 assertEquals(0, pcl.eventCount());
81 assertTrue(m.isEnabled());
82
83 m.setEnabled(false);
84 assertEquals(1, pcl.eventCount());
85 assertTrue(!m.isEnabled());
86
87 fm.setEnabled(false);
88 assertEquals(1, pcl.eventCount());
89 assertTrue(!m.isEnabled());
90
91 m.setEnabled(true);
92 assertEquals(1, pcl.eventCount());
93 assertTrue(!m.isEnabled());
94
95 fm.setEnabled(true);
96 assertEquals(2, pcl.eventCount());
97 assertTrue(m.isEnabled());
98 }
99
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 }