use crate::{AmeError, Iter};
use std::io::{self, Cursor};
#[test]
fn empty() {
let reader = Cursor::new(include_str!("tests/empty"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_none());
}
#[test]
fn only_preamble() {
let reader = Cursor::new(include_str!("tests/only_preamble"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_none());
}
#[test]
fn only_preamble_and_headers() {
let reader = Cursor::new(include_str!("tests/only_preamble_and_headers"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_none());
}
#[test]
fn no_preamble() {
let reader = Cursor::new(include_str!("tests/no_preamble"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_none());
}
#[test]
fn pre_preamble() {
let reader = Cursor::new(include_str!("tests/pre_preamble"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_some());
assert!(iter.next().is_none());
}
#[test]
fn too_many_page_feeds() {
let reader = Cursor::new(include_str!("tests/too_many_page_feeds"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_some());
assert!(iter.next().is_none());
}
#[test]
fn extra_headers() {
let reader = Cursor::new(include_str!("tests/extra_headers"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_some());
assert!(iter.next().is_none());
}
#[test]
fn single() {
let reader = Cursor::new(include_str!("tests/single"));
let mut iter = Iter::new(reader);
assert!(iter.next().is_some());
assert!(iter.next().is_none());
}
#[test]
fn too_short_line() {
let reader = Cursor::new(include_str!("tests/too_short_line"));
let mut iter = Iter::new(reader);
assert_eq!(iter.next().unwrap(), Err(AmeError::TooShortLine));
assert_eq!(iter.next().unwrap(), Err(AmeError::TooShortLine));
assert!(iter.next().is_none());
}
#[test]
fn str_index() {
let reader = Cursor::new(include_str!("tests/str_index_1"));
let mut iter = Iter::new(reader);
assert_eq!(iter.next().unwrap(), Err(AmeError::StrIndex));
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("tests/str_index_2"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseFloat(_))));
assert!(iter.next().is_none());
}
#[test]
fn non_utf8() {
let reader = Cursor::new(include_bytes!("tests/non_utf8"));
let mut iter = Iter::new(reader);
assert_eq!(
iter.next().unwrap(),
Err(AmeError::Io(io::ErrorKind::InvalidData))
);
}
#[test]
fn io_error() {
use std::{fs::File, io::BufReader};
let reader = File::open("src").unwrap();
let reader = BufReader::new(reader);
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::Io(_))));
}
#[test]
fn parse_error() {
let reader = Cursor::new(include_str!("tests/parse_int_error_1"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseInt(_))));
let reader = Cursor::new(include_str!("tests/parse_int_error_2"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseInt(_))));
let reader = Cursor::new(include_str!("tests/parse_int_error_3"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseInt(_))));
let reader = Cursor::new(include_str!("tests/parse_float_error_1"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseFloat(_))));
let reader = Cursor::new(include_str!("tests/parse_float_error_2"));
let mut iter = Iter::new(reader);
assert!(matches!(iter.next().unwrap(), Err(AmeError::ParseFloat(_))));
}
#[test]
fn multi() {
let reader = Cursor::new(include_str!("tests/multi"));
let iter = Iter::new(reader);
assert!(matches!(iter.collect::<Result<Vec<_>, _>>(), Ok(_)));
}