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 }