View Javadoc

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