001 /* 002 * Copyright 2002-2004 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.richclient.settings; 017 018 import java.util.Arrays; 019 020 import junit.framework.TestCase; 021 022 import org.springframework.core.enums.LabeledEnum; 023 024 /** 025 * @author Peter De Bruycker 026 */ 027 public abstract class SettingsAbstractTests extends TestCase { 028 private Settings settings; 029 030 private TestablePropertyChangeListener propertyChangeListener; 031 032 protected final void setUp() throws Exception { 033 doSetUp(); 034 035 settings = createSettings(); 036 propertyChangeListener = new TestablePropertyChangeListener(); 037 settings.addPropertyChangeListener( propertyChangeListener ); 038 039 assertNotNull( "settings cannot be null", settings ); 040 } 041 042 protected void doSetUp() throws Exception { 043 044 } 045 046 public final void testGetSettings() { 047 Settings childSettings = settings.getSettings( "child" ); 048 assertTrue( Arrays.asList( settings.getChildSettings() ).contains( "child" ) ); 049 050 assertNotNull( childSettings ); 051 assertEquals( "child", childSettings.getName() ); 052 assertEquals( settings, childSettings.getParent() ); 053 } 054 055 public final void testRemove() { 056 settings.setString( "key", "value" ); 057 assertTrue( settings.contains( "key" ) ); 058 settings.remove( "key" ); 059 assertFalse( settings.contains( "key" ) ); 060 } 061 062 public final void testRemoveSettings() { 063 Settings childSettings = settings.getSettings( "child" ); 064 assertTrue( Arrays.asList( settings.getChildSettings() ).contains( "child" ) ); 065 066 childSettings.removeSettings(); 067 068 assertFalse( Arrays.asList( settings.getChildSettings() ).contains( "child" ) ); 069 } 070 071 public final void testBoolean() { 072 String key = "boolean-value"; 073 Boolean defaultValue = Boolean.FALSE; 074 Boolean newValue = Boolean.TRUE; 075 076 // default value 077 assertEquals( defaultValue.booleanValue(), settings.getBoolean( key ) ); 078 assertEquals( defaultValue.booleanValue(), settings.getDefaultBoolean( key ) ); 079 assertTrue( settings.isDefault( key ) ); 080 assertFalse( settings.contains( key ) ); 081 082 // change the value 083 settings.setBoolean( key, newValue.booleanValue() ); 084 085 assertEquals( newValue.booleanValue(), settings.getBoolean( key ) ); 086 assertFalse( settings.isDefault( key ) ); 087 assertTrue( settings.contains( key ) ); 088 089 // check property change event 090 assertPropertyChangeEventFired( key, defaultValue, newValue ); 091 propertyChangeListener.reset(); 092 093 // change the value to the same value, no property change event should 094 // be fired 095 settings.setBoolean( key, newValue.booleanValue() ); 096 assertEquals( 0, propertyChangeListener.getCount() ); 097 } 098 099 public final void testInt() { 100 String key = "int-value"; 101 Integer defaultValue = new Integer( 0 ); 102 Integer newValue = new Integer( 5 ); 103 104 // default value 105 assertEquals( defaultValue.intValue(), settings.getInt( key ) ); 106 assertEquals( defaultValue.intValue(), settings.getDefaultInt( key ) ); 107 assertTrue( settings.isDefault( key ) ); 108 assertFalse( settings.contains( key ) ); 109 110 // change the value 111 settings.setInt( key, newValue.intValue() ); 112 113 assertEquals( newValue.intValue(), settings.getInt( key ) ); 114 assertFalse( settings.isDefault( key ) ); 115 assertTrue( settings.contains( key ) ); 116 117 // check property change event 118 assertPropertyChangeEventFired( key, defaultValue, newValue ); 119 propertyChangeListener.reset(); 120 121 // change the value to the same value, no property change event should 122 // be fired 123 settings.setInt( key, newValue.intValue() ); 124 assertEquals( 0, propertyChangeListener.getCount() ); 125 } 126 127 public final void testLong() { 128 String key = "long-value"; 129 Long defaultValue = new Long( 0 ); 130 Long newValue = new Long( 555L ); 131 132 // default value 133 assertEquals( defaultValue.longValue(), settings.getLong( key ) ); 134 assertEquals( defaultValue.longValue(), settings.getDefaultLong( key ) ); 135 assertTrue( settings.isDefault( key ) ); 136 assertFalse( settings.contains( key ) ); 137 138 // change the value 139 settings.setLong( key, newValue.longValue() ); 140 141 assertEquals( newValue.longValue(), settings.getLong( key ) ); 142 assertFalse( settings.isDefault( key ) ); 143 assertTrue( settings.contains( key ) ); 144 145 // check property change event 146 assertPropertyChangeEventFired( key, defaultValue, newValue ); 147 propertyChangeListener.reset(); 148 149 // change the value to the same value, no property change event should 150 // be fired 151 settings.setLong( key, newValue.longValue() ); 152 assertEquals( 0, propertyChangeListener.getCount() ); 153 } 154 155 public final void testFloat() { 156 String key = "float-value"; 157 Float defaultValue = new Float( 0.0f ); 158 Float newValue = new Float( 1.23f ); 159 160 // default value 161 assertEquals( defaultValue.floatValue(), settings.getFloat( key ), 0.0f ); 162 assertEquals( defaultValue.floatValue(), settings.getDefaultFloat( key ), 0.0f ); 163 assertTrue( settings.isDefault( key ) ); 164 assertFalse( settings.contains( key ) ); 165 166 // change the value 167 settings.setFloat( key, newValue.floatValue() ); 168 169 assertEquals( newValue.floatValue(), settings.getFloat( key ), 0.0f ); 170 assertFalse( settings.isDefault( key ) ); 171 assertTrue( settings.contains( key ) ); 172 173 // check property change event 174 assertPropertyChangeEventFired( key, defaultValue, newValue ); 175 propertyChangeListener.reset(); 176 177 // change the value to the same value, no property change event should 178 // be fired 179 settings.setFloat( key, newValue.floatValue() ); 180 assertEquals( 0, propertyChangeListener.getCount() ); 181 } 182 183 public final void testDouble() { 184 String key = "double-value"; 185 Double defaultValue = new Double( 0.0 ); 186 Double newValue = new Double( 1.23 ); 187 188 // default value 189 assertEquals( defaultValue.doubleValue(), settings.getDouble( key ), 0.0 ); 190 assertEquals( defaultValue.doubleValue(), settings.getDefaultDouble( key ), 0.0 ); 191 assertTrue( settings.isDefault( key ) ); 192 assertFalse( settings.contains( key ) ); 193 194 // change the value 195 settings.setDouble( key, newValue.doubleValue() ); 196 197 assertEquals( newValue.doubleValue(), settings.getDouble( key ), 0.0 ); 198 assertFalse( settings.isDefault( key ) ); 199 assertTrue( settings.contains( key ) ); 200 201 // check property change event 202 assertPropertyChangeEventFired( key, defaultValue, newValue ); 203 propertyChangeListener.reset(); 204 205 // change the value to the same value, no property change event should 206 // be fired 207 settings.setDouble( key, newValue.doubleValue() ); 208 assertEquals( 0, propertyChangeListener.getCount() ); 209 } 210 211 public final void testString() { 212 String key = "string-value"; 213 String defaultValue = ""; 214 String newValue = "value"; 215 216 // default value 217 assertEquals( defaultValue, settings.getString( key ) ); 218 assertEquals( defaultValue, settings.getDefaultString( key ) ); 219 assertTrue( settings.isDefault( key ) ); 220 assertFalse( settings.contains( key ) ); 221 222 // change the value 223 settings.setString( key, newValue ); 224 225 assertEquals( newValue, settings.getString( key ) ); 226 assertFalse( settings.isDefault( key ) ); 227 assertTrue( settings.contains( key ) ); 228 229 // check property change event 230 assertPropertyChangeEventFired( key, defaultValue, newValue ); 231 propertyChangeListener.reset(); 232 233 // change the value to the same value, no property change event should 234 // be fired 235 settings.setString( key, newValue ); 236 assertEquals( 0, propertyChangeListener.getCount() ); 237 } 238 239 public final void testEnum() { 240 String key = "enum-value"; 241 LabeledEnum defaultValue = null; 242 LabeledEnum newValue = TestEnum.ENUM2; 243 244 // default value 245 assertEquals( defaultValue, settings.getLabeledEnum( key ) ); 246 assertEquals( defaultValue, settings.getDefaultLabeledEnum( key ) ); 247 assertTrue( settings.isDefault( key ) ); 248 assertFalse( settings.contains( key ) ); 249 250 // change the value 251 settings.setLabeledEnum( key, newValue ); 252 253 assertEquals( newValue, settings.getLabeledEnum( key ) ); 254 assertFalse( settings.isDefault( key ) ); 255 assertTrue( settings.contains( key ) ); 256 257 // check property change event 258 assertPropertyChangeEventFired( key, defaultValue, newValue ); 259 propertyChangeListener.reset(); 260 261 // change the value to the same value, no property change event should 262 // be fired 263 settings.setLabeledEnum( key, newValue ); 264 assertEquals( 0, propertyChangeListener.getCount() ); 265 } 266 267 private void assertPropertyChangeEventFired( String key, Object oldValue, Object newValue ) { 268 assertEquals( 1, propertyChangeListener.getCount() ); 269 assertEquals( key, propertyChangeListener.getEvent().getPropertyName() ); 270 assertEquals( newValue, propertyChangeListener.getEvent().getNewValue() ); 271 assertEquals( oldValue, propertyChangeListener.getEvent().getOldValue() ); 272 } 273 274 protected abstract Settings createSettings() throws Exception; 275 }