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 }