You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.5 KiB
Rust

use crate::error::{TapeError, TapeResult};
use crate::input_reader::InputReader;
use std::io::Cursor;
fn get_reader() -> InputReader {
let data = "ABCDEFG HIJKLMNOP 12345567890\nSecond Line\n\n";
InputReader::new(Cursor::new(data))
}
#[tokio::test]
async fn it_peeks() {
let mut reader = get_reader();
assert_eq!(reader.peek().await.unwrap(), 'A');
assert_eq!(reader.peek().await.unwrap(), 'A');
assert_eq!(reader.peek().await.unwrap(), 'A');
}
#[tokio::test]
async fn it_reads_the_previous() {
let mut reader = get_reader();
assert!(reader.previous().await.is_none());
reader.consume().await.unwrap();
assert_eq!(reader.previous().await.unwrap(), 'A');
assert_eq!(reader.previous().await.unwrap(), 'A');
reader.consume().await.unwrap();
assert_eq!(reader.previous().await.unwrap(), 'B');
}
#[tokio::test]
async fn it_consumes() {
let mut reader = get_reader();
assert_eq!(reader.consume().await.unwrap(), 'A');
assert_eq!(reader.consume().await.unwrap(), 'B');
assert_eq!(reader.consume().await.unwrap(), 'C');
}
#[tokio::test]
async fn it_checks_for_eof() {
let mut reader = get_reader();
assert!(!is_eof(reader.seek_to(29).await));
assert!(!reader.check_eof().await);
assert!(!is_eof(reader.seek_to(47).await));
assert!(is_eof(reader.consume().await.map(|_| ())));
assert!(reader.check_eof().await);
}
fn is_eof(result: TapeResult<()>) -> bool {
match result {
Err(TapeError::EOF) => true,
_ => false,
}
}