Write a check_tokens() test helper that checks an input string against a list of tokens

This commit is contained in:
Eryn Wells 2016-12-28 17:41:35 -05:00
parent c061d9732c
commit 872d07e6b7

View file

@ -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);