001 /*
002 * Copyright 2002-2008 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.value.support;
017
018 import junit.framework.TestCase;
019
020 import org.easymock.EasyMock;
021 import org.springframework.binding.value.ValueChangeDetector;
022 import org.springframework.rules.closure.Closure;
023 import org.springframework.richclient.application.ApplicationServices;
024 import org.springframework.richclient.application.ApplicationServicesLocator;
025
026 /**
027 * Testcase for <code>RefreshableValueHolder</code>
028 *
029 * @author Peter De Bruycker
030 */
031 public class RefreshableValueHolderTests extends TestCase {
032 public void testWithLazyInitTrueAndAlwaysRefreshFalse() {
033 Object returnValue = new Object();
034
035 Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
036 EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue);
037 EasyMock.replay(refreshFunction);
038
039 RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction);
040 // lazy init
041 assertNull(valueHolder.getValue());
042 valueHolder.refresh();
043 assertSame(returnValue, valueHolder.getValue());
044
045 EasyMock.verify(refreshFunction);
046 }
047
048 public void testWithLazyInitFalseAndAlwaysRefreshFalse() {
049 Object returnValue = new Object();
050
051 Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
052 EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue);
053 EasyMock.replay(refreshFunction);
054
055 RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction, false, false);
056 assertSame(returnValue, valueHolder.getValue());
057
058 EasyMock.verify(refreshFunction);
059 }
060
061 public void testWithLazyInitFalseAndAlwaysRefreshTrue() {
062 Object returnValue1 = new Object();
063 Object returnValue2 = new Object();
064 Object returnValue3 = new Object();
065
066 Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
067 EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue1);
068 EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue2);
069 EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue3);
070 EasyMock.replay(refreshFunction);
071
072 RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction, true, true);
073 assertSame(returnValue1, valueHolder.getValue());
074 assertSame(returnValue2, valueHolder.getValue());
075 assertSame(returnValue3, valueHolder.getValue());
076
077 EasyMock.verify(refreshFunction);
078 }
079
080 protected void setUp() throws Exception {
081 ApplicationServices services = new ApplicationServices() {
082
083 public Object getService(Class serviceType) {
084 return new DefaultValueChangeDetector();
085 }
086
087 public boolean containsService(Class serviceType) {
088 return ValueChangeDetector.class.equals(serviceType);
089 }
090
091 };
092 ApplicationServicesLocator.load(new ApplicationServicesLocator(services));
093 }
094 }