|
@@ -73,9 +73,10 @@ mod test {
|
|
|
use super::*;
|
|
|
|
|
|
#[test]
|
|
|
- fn parses() {
|
|
|
+ fn parses_one_iteration() {
|
|
|
let buf = &[
|
|
|
- 0x06, 0x74, 0x78, 0x74, 0x20, 0x6d, 0x65, // message
|
|
|
+ 0x06, // message chunk length
|
|
|
+ 0x74, 0x78, 0x74, 0x20, 0x6d, 0x65, // message chunk
|
|
|
];
|
|
|
|
|
|
assert_eq!(TXT::read(buf.len() as _, &mut Cursor::new(buf)).unwrap(),
|
|
@@ -85,8 +86,65 @@ mod test {
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
- fn empty() {
|
|
|
+ fn parses_two_iterations() {
|
|
|
+ let buf = &[
|
|
|
+ 0xFF, // message chunk length
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
|
|
|
+ 0x41, 0x41, // exactly two hundred and fifty five ‘A’s (screaming)
|
|
|
+ 0x04, // message chunk length
|
|
|
+ 0x41, 0x41, 0x41, 0x41, // four more ‘A’s (the scream abruptly stops)
|
|
|
+ ];
|
|
|
+
|
|
|
+ assert_eq!(TXT::read(buf.len() as _, &mut Cursor::new(buf)).unwrap(),
|
|
|
+ TXT {
|
|
|
+ message: String::from("AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
|
|
|
+ AAAAAAAAAAAAAAAAAAAAAAAAAAA"),
|
|
|
+ });
|
|
|
+ // did you know you can just _write_ code like this, and nobody will stop you?
|
|
|
+ }
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn record_empty() {
|
|
|
assert_eq!(TXT::read(0, &mut Cursor::new(&[])),
|
|
|
Err(WireError::IO));
|
|
|
}
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn buffer_ends_abruptly() {
|
|
|
+ let buf = &[
|
|
|
+ 0x06, 0x74, // the start of a message
|
|
|
+ ];
|
|
|
+
|
|
|
+ assert_eq!(TXT::read(23, &mut Cursor::new(buf)),
|
|
|
+ Err(WireError::IO));
|
|
|
+ }
|
|
|
}
|