Write a check_tokens() test helper that checks an input string against a list of tokens
This commit is contained in:
parent
c061d9732c
commit
872d07e6b7
1 changed files with 21 additions and 8 deletions
|
@ -712,18 +712,17 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn lexes_simple_expression() {
|
fn lexes_simple_expression() {
|
||||||
let mut lexer = Lexer::new("(+ 3.4 6.8)");
|
let mut lexer = Lexer::new("(+ 3.4 6.8)");
|
||||||
assert_next_token(&mut lexer, &Token::LeftParen(String::from("(")));
|
check_tokens("(+ 3.4 6.8)", vec![
|
||||||
assert_next_token(&mut lexer, &Token::Identifier(String::from("+")));
|
Token::LeftParen(String::from("(")),
|
||||||
assert_next_token(&mut lexer, &Token::Number(Number::new(3.4)));
|
Token::Identifier(String::from("+")),
|
||||||
assert_next_token(&mut lexer, &Token::Number(Number::new(6.8)));
|
Token::Number(Number::new(3.4)),
|
||||||
assert_next_token(&mut lexer, &Token::RightParen(String::from(")")));
|
Token::Number(Number::new(6.8)),
|
||||||
|
Token::RightParen(String::from(")"))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lexes_quoted_identifier() {
|
fn lexes_quoted_identifier() {
|
||||||
let mut lexer = Lexer::new("'abc");
|
check_tokens("'abc", vec![Token::Quote, Token::Identifier(String::from("abc"))]);
|
||||||
assert_next_token(&mut lexer, &Token::Quote);
|
|
||||||
assert_next_token(&mut lexer, &Token::Identifier(String::from("abc")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_single_token(input: &str, expected: Token) {
|
fn check_single_token(input: &str, expected: Token) {
|
||||||
|
@ -731,6 +730,20 @@ mod tests {
|
||||||
assert_next_token(&mut lexer, &expected);
|
assert_next_token(&mut lexer, &expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn check_tokens(input: &str, expected: Vec<Token>) {
|
||||||
|
let lexer = Lexer::new(input);
|
||||||
|
let mut expected_iter = expected.iter();
|
||||||
|
for lex in lexer {
|
||||||
|
if let Some(expected_token) = expected_iter.next() {
|
||||||
|
assert_eq!(lex.token, *expected_token);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert!(false, "Found a token we didn't expect: {:?}", lex.token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: Check that all expected tokens are consumed.
|
||||||
|
}
|
||||||
|
|
||||||
fn assert_next_token(lexer: &mut Lexer, expected: &Token) {
|
fn assert_next_token(lexer: &mut Lexer, expected: &Token) {
|
||||||
let lex = lexer.next().unwrap();
|
let lex = lexer.next().unwrap();
|
||||||
assert_eq!(lex.token, *expected);
|
assert_eq!(lex.token, *expected);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue