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.
charred-rs/src/tests/test_token_reader.rs

58 lines
1.4 KiB
Rust

use crate::token::{EOFToken, Token};
use crate::token_reader::TokenReader;
struct AToken;
struct BToken;
struct CToken;
fn get_reader() -> TokenReader {
let tokens = vec![
Token::new(AToken),
Token::new(BToken),
Token::new(AToken),
Token::new(CToken),
Token::new(CToken),
Token::new(EOFToken),
];
TokenReader::new(tokens)
}
#[test]
fn peek_does_not_consume() {
let reader = get_reader();
assert!(reader.peek_is::<AToken>());
assert!(!reader.peek_is::<BToken>());
assert!(reader.peek_is::<AToken>());
}
#[test]
fn consume_does_consume() {
let mut reader = get_reader();
assert!(reader.consume_as::<AToken>().is_some());
assert!(reader.consume_as::<BToken>().is_some());
assert!(reader.consume_as::<AToken>().is_some());
assert!(reader.consume_as::<CToken>().is_some());
}
#[test]
fn check_eof_works() {
let mut reader = get_reader();
reader.seek(4);
assert!(!reader.check_eof());
reader.seek(5);
assert!(reader.check_eof());
}
#[test]
fn peek_and_consume_returns_eof_on_input_end() {
let mut reader = get_reader();
reader.seek(4);
assert!(reader.consume_as::<EOFToken>().is_none());
assert!(reader.consume_as::<EOFToken>().is_some());
assert!(reader.consume_as::<EOFToken>().is_some());
assert!(reader.consume_as::<EOFToken>().is_some());
reader.seek(0);
assert!(reader.consume_as::<EOFToken>().is_none());
}