1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.beep4j.internal;
17
18 import java.nio.ByteBuffer;
19 import java.nio.charset.Charset;
20
21 import junit.framework.TestCase;
22
23 import org.easymock.MockControl;
24
25 public class HeaderStateTest extends TestCase {
26
27 public void testProcessMappingFrame() throws Exception {
28 MockControl control = MockControl.createControl(ParseStateContext.class);
29 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
30 ParseStateContext context = (ParseStateContext) control.getMock();
31
32 context.handleHeader(new String[] { "SEQ", "0", "0", "4096" });
33 control.replay();
34
35 Charset charset = Charset.forName("US-ASCII");
36 ByteBuffer buffer = charset.encode("SEQ 0 0 4096\r\n");
37
38 ParseState state = new HeaderState();
39 assertFalse(state.process(buffer, context));
40
41 assertEquals(14, buffer.position());
42
43 control.verify();
44 }
45
46 public void testProcessDataFrame() throws Exception {
47 MockControl control = MockControl.createControl(ParseStateContext.class);
48 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
49 ParseStateContext context = (ParseStateContext) control.getMock();
50
51 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
52 control.replay();
53
54 Charset charset = Charset.forName("US-ASCII");
55 ByteBuffer buffer = charset.encode("MSG 0 0 . 0 100\r\nbluberi");
56
57 ParseState state = new HeaderState();
58 assertTrue(state.process(buffer, context));
59
60 assertEquals(17, buffer.position());
61
62 control.verify();
63 }
64
65 public void testProcessMultiPass() throws Exception {
66 MockControl control = MockControl.createControl(ParseStateContext.class);
67 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
68 ParseStateContext context = (ParseStateContext) control.getMock();
69
70 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
71 control.replay();
72
73 Charset charset = Charset.forName("US-ASCII");
74 ByteBuffer buffer = charset.encode("MSG 0 0 .");
75
76 ParseState state = new HeaderState();
77 assertFalse(state.process(buffer, context));
78 assertEquals(9, buffer.position());
79
80 buffer = charset.encode(" 0 100\r\nbluberi");
81 assertTrue(state.process(buffer, context));
82 assertEquals(8, buffer.position());
83
84 control.verify();
85 }
86
87 public void testProcessComplex() throws Exception {
88 MockControl control = MockControl.createControl(ParseStateContext.class);
89 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
90 ParseStateContext context = (ParseStateContext) control.getMock();
91
92 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
93 context.handleHeader(new String[] { "MSG", "2", "1", ".", "0", "100" });
94 control.replay();
95
96 Charset charset = Charset.forName("US-ASCII");
97 ParseState state = new HeaderState();
98
99 ByteBuffer buffer = charset.encode("MSG 0 0 . 0 100\r\n");
100 assertFalse(state.process(buffer, context));
101 assertEquals(17, buffer.position());
102
103 buffer = charset.encode("MSG 2 1 . 0 100\r\n");
104 assertFalse(state.process(buffer, context));
105 assertEquals(17, buffer.position());
106
107 control.verify();
108 }
109
110 public void testProcessNonZeroPosition() throws Exception {
111 MockControl control = MockControl.createControl(ParseStateContext.class);
112 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
113 ParseStateContext context = (ParseStateContext) control.getMock();
114
115 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
116 control.replay();
117
118 Charset charset = Charset.forName("US-ASCII");
119 ParseState state = new HeaderState();
120
121 ByteBuffer buffer = charset.encode("abcdefgMSG 0 0 . 0 100\r\n");
122 buffer.position(7);
123 assertFalse(state.process(buffer, context));
124 assertEquals(24, buffer.position());
125
126 control.verify();
127 }
128
129 public void testProcessSplitHeader() throws Exception {
130 MockControl control = MockControl.createControl(ParseStateContext.class);
131 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
132 ParseStateContext context = (ParseStateContext) control.getMock();
133
134 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
135 control.replay();
136
137 Charset charset = Charset.forName("US-ASCII");
138 ByteBuffer buffer1 = charset.encode("MSG 0 0 . 0 100\r");
139
140 ParseState state = new HeaderState();
141 assertFalse(state.process(buffer1, context));
142 assertEquals(16, buffer1.position());
143
144 ByteBuffer buffer2 = charset.encode("\nbluberi");
145
146 assertTrue(state.process(buffer2, context));
147 assertEquals(1, buffer2.position());
148
149 control.verify();
150 }
151
152 public void testProcessFullySplitHeader() throws Exception {
153 MockControl control = MockControl.createControl(ParseStateContext.class);
154 control.setDefaultMatcher(MockControl.ARRAY_MATCHER);
155 ParseStateContext context = (ParseStateContext) control.getMock();
156
157 context.handleHeader(new String[] { "MSG", "0", "0", ".", "0", "100" });
158 control.replay();
159
160 Charset charset = Charset.forName("US-ASCII");
161
162 char[] toSplit = "MSG 0 0 . 0 100\r\n".toCharArray();
163
164 ParseState state = new HeaderState();
165
166 for (char ch : toSplit) {
167 ByteBuffer buffer = charset.encode(String.valueOf(ch));
168
169 assertFalse(state.process(buffer, context));
170 assertEquals(1, buffer.position());
171 }
172
173 control.verify();
174 }
175
176 }