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