1   /*
2    * Copyright 2002-2008 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    * 
8    * http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.binding.value.support;
17  
18  import junit.framework.TestCase;
19  
20  import org.easymock.EasyMock;
21  import org.springframework.binding.value.ValueChangeDetector;
22  import org.springframework.rules.closure.Closure;
23  import org.springframework.richclient.application.ApplicationServices;
24  import org.springframework.richclient.application.ApplicationServicesLocator;
25  
26  /**
27   * Testcase for <code>RefreshableValueHolder</code>
28   * 
29   * @author Peter De Bruycker
30   */
31  public class RefreshableValueHolderTests extends TestCase {
32      public void testWithLazyInitTrueAndAlwaysRefreshFalse() {
33          Object returnValue = new Object();
34  
35          Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
36          EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue);
37          EasyMock.replay(refreshFunction);
38  
39          RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction);
40          // lazy init
41          assertNull(valueHolder.getValue());
42          valueHolder.refresh();
43          assertSame(returnValue, valueHolder.getValue());
44  
45          EasyMock.verify(refreshFunction);
46      }
47  
48      public void testWithLazyInitFalseAndAlwaysRefreshFalse() {
49          Object returnValue = new Object();
50  
51          Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
52          EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue);
53          EasyMock.replay(refreshFunction);
54  
55          RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction, false, false);
56          assertSame(returnValue, valueHolder.getValue());
57  
58          EasyMock.verify(refreshFunction);
59      }
60  
61      public void testWithLazyInitFalseAndAlwaysRefreshTrue() {
62          Object returnValue1 = new Object();
63          Object returnValue2 = new Object();
64          Object returnValue3 = new Object();
65  
66          Closure refreshFunction = (Closure) EasyMock.createMock(Closure.class);
67          EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue1);
68          EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue2);
69          EasyMock.expect(refreshFunction.call(null)).andReturn(returnValue3);
70          EasyMock.replay(refreshFunction);
71  
72          RefreshableValueHolder valueHolder = new RefreshableValueHolder(refreshFunction, true, true);
73          assertSame(returnValue1, valueHolder.getValue());
74          assertSame(returnValue2, valueHolder.getValue());
75          assertSame(returnValue3, valueHolder.getValue());
76  
77          EasyMock.verify(refreshFunction);
78      }
79  
80      protected void setUp() throws Exception {
81          ApplicationServices services = new ApplicationServices() {
82  
83              public Object getService(Class serviceType) {
84                  return new DefaultValueChangeDetector();
85              }
86  
87              public boolean containsService(Class serviceType) {
88                  return ValueChangeDetector.class.equals(serviceType);
89              }
90  
91          };
92          ApplicationServicesLocator.load(new ApplicationServicesLocator(services));
93      }
94  }