#![cfg(all(feature = "unstable", feature = "unstable_ascii_char"))]
#![feature(ascii_char)]
#![feature(concat_bytes)]
#![feature(assert_matches)]
mod slice {
use std::assert_matches::assert_matches;
use data_streams::{AsciiError, DataSource, Error};
#[test]
fn empty() -> data_streams::Result {
assert_eq!((&[][..]).read_ascii(&mut [0; 256])?, &[]);
Ok(())
}
#[test]
fn nominal() -> data_streams::Result {
const STR: &[u8] = b"hello world!";
let mut input = STR;
assert_eq!(
input.read_ascii(&mut [0; 256])?,
unsafe { STR.as_ascii_unchecked() }
);
assert_eq!(input, &[]);
Ok(())
}
#[test]
fn error_end() -> data_streams::Result {
const STR: &[u8] = concat_bytes!(b"hello world!", [0xFF]);
let mut input = STR;
let mut buf = [0; 256];
assert_matches!(
input.read_ascii(&mut buf),
Err(Error::Ascii(AsciiError { invalid_byte: 0xFF, valid_up_to: 12, consumed_count: 12 }))
);
assert_eq!(&buf[..12], b"hello world!");
assert_eq!(input, [0xFF]);
Ok(())
}
#[test]
fn error_middle() -> data_streams::Result {
const STR: &[u8] = concat_bytes!(b"hello", [0xFF], b" world!");
let mut input = STR;
let mut buf = [0; 256];
assert_matches!(
input.read_ascii(&mut buf),
Err(Error::Ascii(AsciiError { invalid_byte: 0xFF, valid_up_to: 5, consumed_count: 5 }))
);
assert_eq!(&buf[..5], b"hello");
assert_eq!(input, &STR[5..]);
Ok(())
}
}