View Javadoc
1   package com.atlassian.cache.impl;
2   
3   import com.atlassian.cache.CachedReferenceListener;
4   
5   import org.junit.Test;
6   
7   import static org.junit.Assert.assertEquals;
8   import static org.mockito.Mockito.mock;
9   import static org.mockito.Mockito.times;
10  import static org.mockito.Mockito.verify;
11  import static org.mockito.Mockito.verifyNoMoreInteractions;
12  
13  public class LazyCachedReferenceListenerSupportTest
14  {
15      @Test
16      public void testLazyCreate()
17      {
18          LazyCachedReferenceListenerSupport<String> listenerSupport = new LazyCachedReferenceListenerSupport<String>()
19          {
20              @Override
21              protected void init()
22              {
23                  throw new RuntimeException("Init called");
24              }
25          };
26  
27          listenerSupport.remove(mock(CachedReferenceListener.class));
28          listenerSupport.notifyEvict("EVICT");
29          listenerSupport.notifySet("SET");
30          listenerSupport.notifyReset("RESET");
31  
32          try
33          {
34              listenerSupport.add(mock(CachedReferenceListener.class), true);
35          }
36          catch(RuntimeException exc)
37          {
38              assertEquals("java.lang.RuntimeException: Init called", exc.getMessage());
39          }
40      }
41  
42      @Test
43      public void testCallDelegate()
44      {
45          final CachedReferenceListenerSupport<String> delegateSupport = mock(CachedReferenceListenerSupport.class);
46  
47          LazyCachedReferenceListenerSupport<String> listenerSupport = new LazyCachedReferenceListenerSupport<String>()
48          {
49              @Override
50              protected CachedReferenceListenerSupport<String> createDelegate()
51              {
52                  return delegateSupport;
53              }
54          };
55  
56          CachedReferenceListener<String> listener = mock(CachedReferenceListener.class);
57          listenerSupport.add(listener, true);
58          listenerSupport.notifyEvict("EVICT");
59          listenerSupport.notifySet("SET");
60          listenerSupport.notifyReset("RESET");
61          listenerSupport.remove(listener);
62          listenerSupport.notifyEvict("EVICT");
63          listenerSupport.notifySet("SET");
64          listenerSupport.notifyReset("RESET");
65  
66          verify(delegateSupport).add(listener, true);
67          verify(delegateSupport, times(2)).notifyEvict("EVICT");
68          verify(delegateSupport, times(2)).notifySet("SET");
69          verify(delegateSupport, times(2)).notifyReset("RESET");
70          verify(delegateSupport).remove(listener);
71          verifyNoMoreInteractions(delegateSupport);
72      }
73  }