1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.handler.demux;
21
22 import org.apache.mina.core.session.IoSession;
23 import org.easymock.EasyMock;
24 import org.junit.Before;
25 import org.junit.Test;
26
27
28
29
30
31
32 @SuppressWarnings("unchecked")
33 public class DemuxingIoHandlerTest {
34 MessageHandler handler1;
35
36 MessageHandler handler2;
37
38 MessageHandler handler3;
39
40 IoSession session;
41
42 Object[] msg;
43
44 @Before
45 public void setUp() throws Exception {
46
47
48
49 msg = new Object[9];
50 msg[0] = new C1();
51 msg[1] = new C2();
52 msg[2] = new C3();
53 msg[3] = new C1();
54 msg[4] = new C2();
55 msg[5] = new C3();
56 msg[6] = new C1();
57 msg[7] = new C2();
58 msg[8] = new C3();
59
60
61
62
63 handler1 = EasyMock.createMock(MessageHandler.class);
64 handler2 = EasyMock.createMock(MessageHandler.class);
65 handler3 = EasyMock.createMock(MessageHandler.class);
66
67 session = EasyMock.createMock(IoSession.class);
68 }
69
70 @Test
71 public void testFindHandlerByClass() throws Exception {
72
73
74
75 handler1.handleMessage(session, msg[0]);
76 handler1.handleMessage(session, msg[1]);
77 handler1.handleMessage(session, msg[2]);
78 handler1.handleMessage(session, msg[3]);
79 handler2.handleMessage(session, msg[4]);
80 handler2.handleMessage(session, msg[5]);
81 handler1.handleMessage(session, msg[6]);
82 handler2.handleMessage(session, msg[7]);
83 handler3.handleMessage(session, msg[8]);
84
85
86
87
88 EasyMock.replay(handler1);
89 EasyMock.replay(handler2);
90 EasyMock.replay(handler3);
91
92 DemuxingIoHandler ioHandler = new DemuxingIoHandler();
93
94
95
96
97 ioHandler.addReceivedMessageHandler(C1.class, handler1);
98 ioHandler.messageReceived(session, msg[0]);
99 ioHandler.messageReceived(session, msg[1]);
100 ioHandler.messageReceived(session, msg[2]);
101
102
103
104
105
106 ioHandler.addReceivedMessageHandler(C2.class, handler2);
107 ioHandler.messageReceived(session, msg[3]);
108 ioHandler.messageReceived(session, msg[4]);
109 ioHandler.messageReceived(session, msg[5]);
110
111
112
113
114
115 ioHandler.addReceivedMessageHandler(C3.class, handler3);
116 ioHandler.messageReceived(session, msg[6]);
117 ioHandler.messageReceived(session, msg[7]);
118 ioHandler.messageReceived(session, msg[8]);
119
120
121
122
123 EasyMock.verify(handler1);
124 EasyMock.verify(handler2);
125 EasyMock.verify(handler3);
126 }
127
128 @Test
129 public void testFindHandlerByInterface() throws Exception {
130
131
132
133 handler1.handleMessage(session, msg[0]);
134 handler1.handleMessage(session, msg[1]);
135 handler1.handleMessage(session, msg[2]);
136 handler1.handleMessage(session, msg[3]);
137 handler2.handleMessage(session, msg[4]);
138 handler1.handleMessage(session, msg[5]);
139 handler3.handleMessage(session, msg[6]);
140 handler2.handleMessage(session, msg[7]);
141 handler3.handleMessage(session, msg[8]);
142
143
144
145
146 EasyMock.replay(handler1);
147 EasyMock.replay(handler2);
148 EasyMock.replay(handler3);
149
150 DemuxingIoHandler ioHandler = new DemuxingIoHandler();
151
152
153
154
155 ioHandler.addReceivedMessageHandler(I4.class, handler1);
156 ioHandler.messageReceived(session, msg[0]);
157 ioHandler.messageReceived(session, msg[1]);
158 ioHandler.messageReceived(session, msg[2]);
159
160
161
162
163
164 ioHandler.addReceivedMessageHandler(I6.class, handler2);
165 ioHandler.messageReceived(session, msg[3]);
166 ioHandler.messageReceived(session, msg[4]);
167 ioHandler.messageReceived(session, msg[5]);
168
169
170
171
172
173 ioHandler.addReceivedMessageHandler(I3.class, handler3);
174 ioHandler.messageReceived(session, msg[6]);
175 ioHandler.messageReceived(session, msg[7]);
176 ioHandler.messageReceived(session, msg[8]);
177
178
179
180
181 EasyMock.verify(handler1);
182 EasyMock.verify(handler2);
183 EasyMock.verify(handler3);
184 }
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 public interface I1 {
202
203 }
204
205 public interface I2 extends I3 {
206
207 }
208
209 public interface I3 {
210
211 }
212
213 public interface I4 {
214
215 }
216
217 public static class C1 implements I1, I2, I4 {
218
219 }
220
221 public interface I5 {
222
223 }
224
225 public interface I6 {
226
227 }
228
229 public static class C2 extends C1 implements I5, I6 {
230
231 }
232
233 public interface I7 extends I8 {
234
235 }
236
237 public interface I8 {
238
239 }
240
241 public interface I9 extends I3, I4 {
242
243 }
244
245 public static class C3 extends C2 implements I7, I9 {
246
247 }
248 }