event listener is now used by the xml router and the publish method of the gateway is
[xmlrouter] / listener / src / test / java / org / wamblee / xmlrouter / listener / CompositeEventListenerTest.java
1 /*
2  * Copyright 2005-2011 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.xmlrouter.listener;
17
18 import static junit.framework.Assert.*;
19 import static org.mockito.Matchers.*;
20 import static org.mockito.Mockito.*;
21
22 import java.util.ArrayList;
23
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.wamblee.xmlrouter.config.Transformation;
27
28 public class CompositeEventListenerTest {
29
30     private static final String DESTINATION_NAME = "dest";
31     private static final long DESTINATION_ID = 12L;
32     private CompositeEventListener composite;
33
34     private EventInfo source;
35
36     @Before
37     public void setUp() {
38         composite = new CompositeEventListener();
39         source = mock(EventInfo.class);
40     }
41
42     @Test
43     public void testNoListeners() {
44         // verify no exceptions occur.
45         composite.delivered(mock(EventInfo.class), getTransformations(),
46             DESTINATION_ID, DESTINATION_NAME, true);
47         composite.notDelivered(mock(EventInfo.class));
48     }
49
50     @Test
51     public void testOneListener() {
52         EventListener listener = mock(EventListener.class);
53         composite.addListener(listener);
54
55         invokeAndVerifyListenerInvoked(listener);
56     }
57
58     private void invokeAndVerifyListenerInvoked(EventListener... listeners) {
59         invokeDelivered();
60
61         for (EventListener listener : listeners) {
62             checkInvokeDelivered(listener);
63             verifyNoMoreInteractions(listener);
64             reset(listener);
65         }
66
67         invokeNotDelivered();
68         for (EventListener listener : listeners) {
69             verify(listener).notDelivered(same(source));
70             verifyNoMoreInteractions(listener);
71             reset(listener);
72         }
73     }
74
75     private void invokeDelivered() {
76         composite.delivered(source, getTransformations(), DESTINATION_ID,
77             DESTINATION_NAME, true);
78     }
79
80     private void invokeNotDelivered() {
81         composite.notDelivered(source);
82     }
83
84     private void checkInvokeDelivered(EventListener listener) {
85         verify(listener).delivered(same(source), eq(getTransformations()),
86             eq(DESTINATION_ID), eq(DESTINATION_NAME), eq(true));
87     }
88
89     @Test
90     public void testRemoveListener() {
91         EventListener listener1 = mock(EventListener.class);
92         composite.addListener(listener1);
93
94         EventListener listener2 = mock(EventListener.class);
95         assertFalse(composite.removeListener(listener2));
96
97         invokeAndVerifyListenerInvoked(listener1);
98
99         assertTrue(composite.removeListener(listener1));
100         invokeDelivered();
101         verifyNoMoreInteractions(listener1);
102         invokeNotDelivered();
103         verifyNoMoreInteractions(listener1);
104     }
105
106     private ArrayList<Transformation> getTransformations() {
107         return new ArrayList<Transformation>();
108     }
109
110     @Test
111     public void testMultipleListeners() {
112         EventListener listener1 = mock(EventListener.class);
113         EventListener listener2 = mock(EventListener.class);
114         composite.addListener(listener1);
115         composite.addListener(listener2);
116
117         invokeAndVerifyListenerInvoked(listener1, listener2);
118     }
119 }