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 }