127 match parse_result { |
126 match parse_result { |
128 Ok((tail, msg)) => { |
127 Ok((tail, msg)) => { |
129 let consumed = buf.len() - tail.len(); |
128 let consumed = buf.len() - tail.len(); |
130 |
129 |
131 Some((consumed, msg)) |
130 Some((consumed, msg)) |
132 }, |
131 } |
133 Err(Err::Incomplete(_)) => None, |
132 Err(Err::Incomplete(_)) => None, |
134 Err(Err::Error(_)) | Err(Err::Failure(_)) => unreachable!(), |
133 Err(Err::Error(_)) | Err(Err::Failure(_)) => unreachable!(), |
135 } |
134 } |
136 } |
135 } |
137 |
136 |
138 #[test] |
137 #[cfg(test)] |
139 fn parse_length() { |
138 mod tests { |
140 assert_eq!(length_specifier(b"\x01"), Ok((&b""[..], 1))); |
139 use crate::messages::UnsyncedEngineMessage::*; |
141 assert_eq!(length_specifier(b"\x00"), Ok((&b""[..], 0))); |
140 use crate::parser::*; |
142 assert_eq!(length_specifier(b"\x3f"), Ok((&b""[..], 63))); |
141 |
143 assert_eq!(length_specifier(b"\x40\x00"), Ok((&b""[..], 64))); |
142 #[test] |
144 assert_eq!( |
143 fn parse_length() { |
145 length_specifier(b"\xff\xff"), |
144 assert_eq!(length_specifier(b"\x01"), Ok((&b""[..], 1))); |
146 Ok((&b""[..], EngineMessage::MAX_LEN)) |
145 assert_eq!(length_specifier(b"\x00"), Ok((&b""[..], 0))); |
147 ); |
146 assert_eq!(length_specifier(b"\x3f"), Ok((&b""[..], 63))); |
|
147 assert_eq!(length_specifier(b"\x40\x00"), Ok((&b""[..], 64))); |
|
148 assert_eq!( |
|
149 length_specifier(b"\xff\xff"), |
|
150 Ok((&b""[..], EngineMessage::MAX_LEN)) |
|
151 ); |
|
152 } |
|
153 |
|
154 #[test] |
|
155 fn parse_synced_messages() { |
|
156 assert_eq!( |
|
157 message(b"\x03L\x01\x02"), |
|
158 Ok((&b""[..], Synced(Left(Press), 258))) |
|
159 ); |
|
160 |
|
161 assert_eq!(message(b"\x01#"), Ok((&b""[..], Synced(TimeWrap, 65535)))); |
|
162 |
|
163 assert_eq!( |
|
164 message(&vec![9, b'p', 255, 133, 151, 1, 0, 2, 0, 0]), |
|
165 Ok((&b""[..], Synced(Put(-31337, 65538), 0))) |
|
166 ); |
|
167 } |
|
168 |
|
169 #[test] |
|
170 fn parse_unsynced_messages() { |
|
171 assert_eq!( |
|
172 message(b"\x06shello"), |
|
173 Ok((&b""[..], Unsynced(ChatMessage(String::from("hello"))))) |
|
174 ); |
|
175 } |
|
176 |
|
177 #[test] |
|
178 fn parse_incorrect_messages() { |
|
179 assert_eq!(message(b"\x00"), Ok((&b""[..], Empty))); |
|
180 assert_eq!(message(b"\x01\x00"), Ok((&b""[..], Unknown))); |
|
181 |
|
182 // garbage after correct message |
|
183 assert_eq!(message(b"\x04La\x01\x02"), Ok((&b""[..], Unknown))); |
|
184 } |
|
185 |
|
186 #[test] |
|
187 fn parse_config_messages() { |
|
188 assert_eq!(message(b"\x01C"), Ok((&b""[..], Config(ConfigRequest)))); |
|
189 } |
|
190 |
|
191 #[test] |
|
192 fn parse_test_general() { |
|
193 assert_eq!(string_tail(b"abc"), Ok((&b""[..], String::from("abc")))); |
|
194 |
|
195 assert_eq!(extract_message(b"\x02#"), None); |
|
196 assert_eq!( |
|
197 extract_message(b"\x01#"), |
|
198 Some((2, Synced(TimeWrap, 65535))) |
|
199 ); |
|
200 } |
148 } |
201 } |
149 |
|
150 #[test] |
|
151 fn parse_synced_messages() { |
|
152 assert_eq!( |
|
153 message(b"\x03L\x01\x02"), |
|
154 Ok((&b""[..], Synced(Left(Press), 258))) |
|
155 ); |
|
156 |
|
157 assert_eq!(message(b"\x01#"), Ok((&b""[..], Synced(TimeWrap, 65535)))); |
|
158 |
|
159 assert_eq!(message(&vec![9, b'p', 255, 133, 151, 1, 0, 2, 0, 0]), Ok((&b""[..], Synced(Put(-31337, 65538), 0)))); |
|
160 } |
|
161 |
|
162 #[test] |
|
163 fn parse_unsynced_messages() { |
|
164 assert_eq!( |
|
165 message(b"\x06shello"), |
|
166 Ok((&b""[..], Unordered(ChatMessage(String::from("hello"))))) |
|
167 ); |
|
168 } |
|
169 |
|
170 #[test] |
|
171 fn parse_incorrect_messages() { |
|
172 assert_eq!(message(b"\x00"), Ok((&b""[..], Empty))); |
|
173 assert_eq!(message(b"\x01\x00"), Ok((&b""[..], Unknown))); |
|
174 |
|
175 // garbage after correct message |
|
176 assert_eq!(message(b"\x04La\x01\x02"), Ok((&b""[..], Unknown))); |
|
177 } |
|
178 |
|
179 #[test] |
|
180 fn parse_config_messages() { |
|
181 assert_eq!(message(b"\x01C"), Ok((&b""[..], Config(ConfigRequest)))); |
|
182 } |
|
183 |
|
184 #[test] |
|
185 fn parse_test_general() { |
|
186 assert_eq!(string_tail(b"abc"), Ok((&b""[..], String::from("abc")))); |
|
187 |
|
188 assert_eq!(extract_message(b"\x02#"), None); |
|
189 assert_eq!(extract_message(b"\x01#"), Some((2, Synced(TimeWrap, 65535)))); |
|
190 } |
|