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 }