use crate::{error::ReaclibError, Format, Iter};
use std::io::{self, Cursor};
#[test]
fn empty() {
let reader = Cursor::new(include_str!("v2/empty"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().is_none());
}
#[test]
fn single() {
let reader = Cursor::new(include_str!("v2/single"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().is_some());
assert!(iter.next().is_none());
}
#[test]
fn unfinished_line() {
let reader = Cursor::new(include_str!("v2/unfinished_line_1"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().unwrap().is_ok());
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("v2/unfinished_line_2"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(iter.next().unwrap(), Err(ReaclibError::TooShortLine));
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("v2/unfinished_line_3"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(iter.next().unwrap(), Err(ReaclibError::TooShortLine));
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("v2/unfinished_line_4"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().unwrap().is_ok());
assert!(iter.next().is_none());
}
#[test]
fn too_few_lines() {
let reader = Cursor::new(include_str!("v2/too_few_lines_1"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(iter.next().unwrap(), Err(ReaclibError::TooFewLines));
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("v2/too_few_lines_2"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().unwrap().is_ok());
assert_eq!(iter.next().unwrap(), Err(ReaclibError::TooFewLines));
assert!(iter.next().is_none());
}
#[test]
fn str_index() {
let reader = Cursor::new(include_str!("v2/str_index_1"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(iter.next().unwrap(), Err(ReaclibError::StrIndex));
assert!(iter.next().is_none());
let reader = Cursor::new(include_str!("v2/str_index_2"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::ParseFloat(_))
));
assert!(iter.next().is_none());
}
#[test]
fn non_utf8() {
let reader = Cursor::new(include_bytes!("v2/non_utf8"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(
iter.next().unwrap(),
Err(ReaclibError::Io(io::ErrorKind::InvalidData))
);
}
#[test]
fn unknown_chapter() {
let reader = Cursor::new(include_str!("v2/unknown_chapter"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(iter.next().unwrap().is_ok());
assert_eq!(iter.next().unwrap(), Err(ReaclibError::UnknownChapter(12)));
}
#[test]
fn unknown_resonance() {
use crate::Resonance as R;
let reader = Cursor::new(include_str!("v2/unknown_resonance"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert_eq!(iter.next().unwrap().unwrap().resonance, R::Resonant);
assert_eq!(iter.next().unwrap().unwrap().resonance, R::NonResonant);
assert_eq!(iter.next().unwrap().unwrap().resonance, R::NonResonant);
assert_eq!(iter.next().unwrap().unwrap().resonance, R::Weak);
assert_eq!(iter.next().unwrap().unwrap().resonance, R::S);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::UnknownResonance(_))
));
}
#[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, Format::Reaclib2);
assert!(matches!(iter.next().unwrap(), Err(ReaclibError::Io(_))));
}
#[test]
fn parse_error() {
let reader = Cursor::new(include_str!("v2/parse_int_error_1"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::ParseInt(_))
));
let reader = Cursor::new(include_str!("v2/parse_int_error_2"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::ParseInt(_))
));
let reader = Cursor::new(include_str!("v2/parse_float_error_1"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::ParseFloat(_))
));
let reader = Cursor::new(include_str!("v2/parse_float_error_2"));
let mut iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(
iter.next().unwrap(),
Err(ReaclibError::ParseFloat(_))
));
}
#[test]
fn multi() {
let reader = Cursor::new(include_str!("v2/multi"));
let iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(iter.collect::<Result<Vec<_>, _>>(), Ok(_)));
}
#[test]
fn multi_v2() {
let reader = Cursor::new(include_str!("v1/multi"));
let iter = Iter::new(reader, Format::Reaclib2);
assert!(matches!(iter.collect::<Result<Vec<_>, _>>(), Err(_)));
}