c268779be8feaa7ba697d9e593423d9930e693c3
[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 javax.print.attribute.standard.Destination;
25 import javax.xml.transform.dom.DOMSource;
26
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.wamblee.xmlrouter.common.Id;
30 import org.wamblee.xmlrouter.config.Transformation;
31
32 public class CompositeEventListenerTest {
33
34     private static final String DESTINATION_NAME = "dest";
35     private static final Id<Destination> DESTINATION_ID = new Id<Destination>(
36         12);
37     private static final Id<DOMSource> EVENT_ID = new Id<DOMSource>(1);
38     private static final String DOCTYPE = "doc";
39     private CompositeEventListener composite;
40
41     private DOMSource source;
42
43     @Before
44     public void setUp() {
45         composite = new CompositeEventListener();
46         source = mock(DOMSource.class);
47     }
48
49     @Test
50     public void testNoListeners() {
51         // verify no exceptions occur.
52         composite.delivered(DOCTYPE, EVENT_ID, mock(DOMSource.class),
53             getTransformations(), DESTINATION_ID, DESTINATION_NAME, true);
54         composite.notDelivered(DOCTYPE, EVENT_ID, mock(DOMSource.class));
55     }
56
57     @Test
58     public void testOneListener() {
59         EventListener listener = mock(EventListener.class);
60         composite.addListener(listener);
61
62         invokeAndVerifyListenerInvoked(listener);
63     }
64
65     private void invokeAndVerifyListenerInvoked(EventListener... listeners) {
66         invokeDelivered();
67
68         for (EventListener listener : listeners) {
69             checkInvokeDelivered(listener);
70             verifyNoMoreInteractions(listener);
71             reset(listener);
72         }
73
74         invokeNotDelivered();
75         for (EventListener listener : listeners) {
76             verify(listener).notDelivered(eq(DOCTYPE), eq(EVENT_ID),
77                 same(source));
78             verifyNoMoreInteractions(listener);
79             reset(listener);
80         }
81     }
82
83     private void invokeDelivered() {
84         composite.delivered(DOCTYPE, EVENT_ID, source, getTransformations(),
85             DESTINATION_ID, DESTINATION_NAME, true);
86     }
87
88     private void invokeNotDelivered() {
89         composite.notDelivered(DOCTYPE, EVENT_ID, source);
90     }
91
92     private void checkInvokeDelivered(EventListener listener) {
93         verify(listener).delivered(eq(DOCTYPE), eq(EVENT_ID), same(source),
94             eq(getTransformations()), eq(DESTINATION_ID), eq(DESTINATION_NAME),
95             eq(true));
96     }
97
98     @Test
99     public void testRemoveListener() {
100         EventListener listener1 = mock(EventListener.class);
101         composite.addListener(listener1);
102
103         EventListener listener2 = mock(EventListener.class);
104         assertFalse(composite.removeListener(listener2));
105
106         invokeAndVerifyListenerInvoked(listener1);
107
108         assertTrue(composite.removeListener(listener1));
109         invokeDelivered();
110         verifyNoMoreInteractions(listener1);
111         invokeNotDelivered();
112         verifyNoMoreInteractions(listener1);
113     }
114
115     private ArrayList<Transformation> getTransformations() {
116         return new ArrayList<Transformation>();
117     }
118
119     @Test
120     public void testMultipleListeners() {
121         EventListener listener1 = mock(EventListener.class);
122         EventListener listener2 = mock(EventListener.class);
123         composite.addListener(listener1);
124         composite.addListener(listener2);
125
126         invokeAndVerifyListenerInvoked(listener1, listener2);
127     }
128 }