Skip to content

Commit ab03728

Browse files
authored
Add some tests. (#8)
1 parent 0dc88d0 commit ab03728

File tree

2 files changed

+212
-0
lines changed

2 files changed

+212
-0
lines changed

src/parse.rs

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,144 @@ impl fmt::Display for ShortInput {
289289
#[cfg(feature = "std")]
290290
impl std::error::Error for ShortInput {}
291291

292+
293+
//============ Testing =======================================================
294+
295+
#[cfg(test)]
296+
mod test {
297+
use super::*;
298+
299+
#[test]
300+
fn pos_seek_remaining() {
301+
let mut parser = Parser::from_static(b"0123456789");
302+
assert_eq!(parser.peek(1).unwrap(), b"0");
303+
assert_eq!(parser.pos(), 0);
304+
assert_eq!(parser.remaining(), 10);
305+
assert_eq!(parser.seek(2), Ok(()));
306+
assert_eq!(parser.pos(), 2);
307+
assert_eq!(parser.remaining(), 8);
308+
assert_eq!(parser.peek(1).unwrap(), b"2");
309+
assert_eq!(parser.seek(10), Ok(()));
310+
assert_eq!(parser.pos(), 10);
311+
assert_eq!(parser.remaining(), 0);
312+
assert_eq!(parser.peek_all(), b"");
313+
assert!(parser.seek(11).is_err());
314+
assert_eq!(parser.pos(), 10);
315+
assert_eq!(parser.remaining(), 0);
316+
}
317+
318+
#[test]
319+
fn peek_check_len() {
320+
let mut parser = Parser::from_static(b"0123456789");
321+
assert_eq!(parser.peek(2), Ok(b"01".as_ref()));
322+
assert_eq!(parser.check_len(2), Ok(()));
323+
assert_eq!(parser.peek(10), Ok(b"0123456789".as_ref()));
324+
assert_eq!(parser.check_len(10), Ok(()));
325+
assert!(parser.peek(11).is_err());
326+
assert!(parser.check_len(11).is_err());
327+
parser.advance(2).unwrap();
328+
assert_eq!(parser.peek(2), Ok(b"23".as_ref()));
329+
assert_eq!(parser.check_len(2), Ok(()));
330+
assert_eq!(parser.peek(8), Ok(b"23456789".as_ref()));
331+
assert_eq!(parser.check_len(8), Ok(()));
332+
assert!(parser.peek(9).is_err());
333+
assert!(parser.check_len(9).is_err());
334+
}
335+
336+
#[test]
337+
fn peek_all() {
338+
let mut parser = Parser::from_static(b"0123456789");
339+
assert_eq!(parser.peek_all(), b"0123456789");
340+
parser.advance(2).unwrap();
341+
assert_eq!(parser.peek_all(), b"23456789");
342+
}
343+
344+
#[test]
345+
fn advance() {
346+
let mut parser = Parser::from_static(b"0123456789");
347+
assert_eq!(parser.pos(), 0);
348+
assert_eq!(parser.peek(1).unwrap(), b"0");
349+
assert_eq!(parser.advance(2), Ok(()));
350+
assert_eq!(parser.pos(), 2);
351+
assert_eq!(parser.peek(1).unwrap(), b"2");
352+
assert!(parser.advance(9).is_err());
353+
assert_eq!(parser.advance(8), Ok(()));
354+
assert_eq!(parser.pos(), 10);
355+
assert_eq!(parser.peek_all(), b"");
356+
}
357+
358+
#[test]
359+
fn parse_octets() {
360+
let mut parser = Parser::from_static(b"0123456789");
361+
assert_eq!(parser.parse_octets(2).unwrap(), b"01");
362+
assert_eq!(parser.parse_octets(2).unwrap(), b"23");
363+
assert!(parser.parse_octets(7).is_err());
364+
assert_eq!(parser.parse_octets(6).unwrap(), b"456789");
365+
}
366+
367+
#[test]
368+
fn parse_buf() {
369+
let mut parser = Parser::from_static(b"0123456789");
370+
let mut buf = [0u8; 2];
371+
assert_eq!(parser.parse_buf(&mut buf), Ok(()));
372+
assert_eq!(&buf, b"01");
373+
assert_eq!(parser.parse_buf(&mut buf), Ok(()));
374+
assert_eq!(&buf, b"23");
375+
let mut buf = [0u8; 7];
376+
assert!(parser.parse_buf(&mut buf).is_err());
377+
let mut buf = [0u8; 6];
378+
assert_eq!(parser.parse_buf(&mut buf), Ok(()));
379+
assert_eq!(&buf, b"456789");
380+
}
381+
382+
#[test]
383+
fn parse_i8() {
384+
let mut parser = Parser::from_static(b"\x12\xd6");
385+
assert_eq!(parser.parse_i8(), Ok(0x12));
386+
assert_eq!(parser.parse_i8(), Ok(-42));
387+
assert!(parser.parse_i8().is_err());
388+
}
389+
390+
#[test]
391+
fn parse_u8() {
392+
let mut parser = Parser::from_static(b"\x12\xd6");
393+
assert_eq!(parser.parse_u8(), Ok(0x12));
394+
assert_eq!(parser.parse_u8(), Ok(0xd6));
395+
assert!(parser.parse_u8().is_err());
396+
}
397+
398+
#[test]
399+
fn parse_i16() {
400+
let mut parser = Parser::from_static(b"\x12\x34\xef\x6e\0");
401+
assert_eq!(parser.parse_i16(), Ok(0x1234));
402+
assert_eq!(parser.parse_i16(), Ok(-4242));
403+
assert!(parser.parse_i16().is_err());
404+
}
405+
406+
#[test]
407+
fn parse_u16() {
408+
let mut parser = Parser::from_static(b"\x12\x34\xef\x6e\0");
409+
assert_eq!(parser.parse_u16(), Ok(0x1234));
410+
assert_eq!(parser.parse_u16(), Ok(0xef6e));
411+
assert!(parser.parse_u16().is_err());
412+
}
413+
414+
#[test]
415+
fn parse_i32() {
416+
let mut parser =
417+
Parser::from_static(b"\x12\x34\x56\x78\xfd\x78\xa8\x4e\0\0\0");
418+
assert_eq!(parser.parse_i32(), Ok(0x12345678));
419+
assert_eq!(parser.parse_i32(), Ok(-42424242));
420+
assert!(parser.parse_i32().is_err());
421+
}
422+
423+
#[test]
424+
fn parse_u32() {
425+
let mut parser =
426+
Parser::from_static(b"\x12\x34\x56\x78\xfd\x78\xa8\x4e\0\0\0");
427+
assert_eq!(parser.parse_u32(), Ok(0x12345678));
428+
assert_eq!(parser.parse_u32(), Ok(0xfd78a84e));
429+
assert!(parser.parse_u32().is_err());
430+
}
431+
}
432+

src/str.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,3 +580,74 @@ impl<Octets> fmt::Display for FromUtf8Error<Octets> {
580580
impl<Octets> std::error::Error for FromUtf8Error<Octets> {}
581581

582582

583+
//============ Testing =======================================================
584+
585+
#[cfg(test)]
586+
mod test {
587+
use super::*;
588+
589+
// Most of the test cases herein have been borrowed from the test cases
590+
// of the Rust standard library.
591+
592+
#[test]
593+
#[cfg(feature = "std")]
594+
fn from_utf8_lossy() {
595+
fn check(src: impl AsRef<[u8]>) {
596+
assert_eq!(
597+
StrBuilder::from_utf8_lossy(std::vec::Vec::from(src.as_ref())),
598+
std::string::String::from_utf8_lossy(src.as_ref())
599+
);
600+
}
601+
602+
check(b"hello");
603+
check("ศไทย中华Việt Nam");
604+
check(b"Hello\xC2 There\xFF Goodbye");
605+
check(b"Hello\xC0\x80 There\xE6\x83 Goodbye");
606+
check(b"\xF5foo\xF5\x80bar");
607+
check(b"\xF1foo\xF1\x80bar\xF1\x80\x80baz");
608+
check(b"\xF4foo\xF4\x80bar\xF4\xBFbaz");
609+
check(b"\xF0\x80\x80\x80foo\xF0\x90\x80\x80bar");
610+
check(b"\xED\xA0\x80foo\xED\xBF\xBFbar");
611+
}
612+
613+
#[test]
614+
#[cfg(feature = "std")]
615+
fn push_str() {
616+
let mut s = StrBuilder::<std::vec::Vec<u8>>::new();
617+
s.push_str("");
618+
assert_eq!(&s[0..], "");
619+
s.push_str("abc");
620+
assert_eq!(&s[0..], "abc");
621+
s.push_str("ประเทศไทย中华Việt Nam");
622+
assert_eq!(&s[0..], "abcประเทศไทย中华Việt Nam");
623+
}
624+
625+
#[test]
626+
#[cfg(feature = "std")]
627+
fn push() {
628+
let mut data = StrBuilder::from_utf8(
629+
std::vec::Vec::from("ประเทศไทย中".as_bytes())
630+
).unwrap();
631+
data.push('华');
632+
data.push('b'); // 1 byte
633+
data.push('¢'); // 2 byte
634+
data.push('€'); // 3 byte
635+
data.push('𤭢'); // 4 byte
636+
assert_eq!(data, "ประเทศไทย中华b¢€𤭢");
637+
}
638+
639+
#[test]
640+
#[cfg(feature = "std")]
641+
fn pop() {
642+
let mut data = StrBuilder::from_utf8(
643+
std::vec::Vec::from("ประเทศไทย中华b¢€𤭢".as_bytes())
644+
).unwrap();
645+
assert_eq!(data.pop().unwrap(), '𤭢'); // 4 bytes
646+
assert_eq!(data.pop().unwrap(), '€'); // 3 bytes
647+
assert_eq!(data.pop().unwrap(), '¢'); // 2 bytes
648+
assert_eq!(data.pop().unwrap(), 'b'); // 1 bytes
649+
assert_eq!(data.pop().unwrap(), '华');
650+
assert_eq!(data, "ประเทศไทย中");
651+
}
652+
}
653+

0 commit comments

Comments
 (0)