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.
58 lines
1.4 KiB
Rust
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());
|
|
}
|