mirror of https://github.com/boa-dev/boa.git
Browse Source
* Added unit tests for `boa_ast::Keyword` * Removed the ut_ prefix on test functionspull/2899/head
Iban Eguia Moraza
2 years ago
committed by
GitHub
2 changed files with 359 additions and 5 deletions
@ -0,0 +1,354 @@ |
|||||||
|
#![allow(clippy::cognitive_complexity)] |
||||||
|
|
||||||
|
use super::*; |
||||||
|
|
||||||
|
/// Gets a list of all the keywords.
|
||||||
|
fn all_keywords() -> impl Iterator<Item = Keyword> { |
||||||
|
[ |
||||||
|
Keyword::Await, |
||||||
|
Keyword::Async, |
||||||
|
Keyword::Break, |
||||||
|
Keyword::Case, |
||||||
|
Keyword::Catch, |
||||||
|
Keyword::Class, |
||||||
|
Keyword::Continue, |
||||||
|
Keyword::Const, |
||||||
|
Keyword::Debugger, |
||||||
|
Keyword::Default, |
||||||
|
Keyword::Delete, |
||||||
|
Keyword::Do, |
||||||
|
Keyword::Else, |
||||||
|
Keyword::Enum, |
||||||
|
Keyword::Export, |
||||||
|
Keyword::Extends, |
||||||
|
Keyword::False, |
||||||
|
Keyword::Finally, |
||||||
|
Keyword::For, |
||||||
|
Keyword::Function, |
||||||
|
Keyword::If, |
||||||
|
Keyword::In, |
||||||
|
Keyword::InstanceOf, |
||||||
|
Keyword::Import, |
||||||
|
Keyword::Let, |
||||||
|
Keyword::New, |
||||||
|
Keyword::Null, |
||||||
|
Keyword::Of, |
||||||
|
Keyword::Return, |
||||||
|
Keyword::Super, |
||||||
|
Keyword::Switch, |
||||||
|
Keyword::This, |
||||||
|
Keyword::Throw, |
||||||
|
Keyword::True, |
||||||
|
Keyword::Try, |
||||||
|
Keyword::TypeOf, |
||||||
|
Keyword::Var, |
||||||
|
Keyword::Void, |
||||||
|
Keyword::While, |
||||||
|
Keyword::With, |
||||||
|
Keyword::Yield, |
||||||
|
] |
||||||
|
.into_iter() |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn as_binary_op() { |
||||||
|
for k in all_keywords() { |
||||||
|
match k.as_binary_op() { |
||||||
|
Some(BinaryOp::Relational(RelationalOp::InstanceOf)) => { |
||||||
|
assert_eq!(k, Keyword::InstanceOf); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::In)) => assert_eq!(k, Keyword::In), |
||||||
|
None => { |
||||||
|
assert_ne!(k, Keyword::InstanceOf); |
||||||
|
assert_ne!(k, Keyword::In); |
||||||
|
} |
||||||
|
_ => unreachable!("unknown binary operator for keyword {k:?} found"), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn as_str() { |
||||||
|
for k in all_keywords() { |
||||||
|
match k.as_str() { |
||||||
|
("await", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Await); |
||||||
|
assert_eq!(utf16, utf16!("await")); |
||||||
|
} |
||||||
|
("async", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Async); |
||||||
|
assert_eq!(utf16, utf16!("async")); |
||||||
|
} |
||||||
|
("break", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Break); |
||||||
|
assert_eq!(utf16, utf16!("break")); |
||||||
|
} |
||||||
|
("case", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Case); |
||||||
|
assert_eq!(utf16, utf16!("case")); |
||||||
|
} |
||||||
|
("catch", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Catch); |
||||||
|
assert_eq!(utf16, utf16!("catch")); |
||||||
|
} |
||||||
|
("class", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Class); |
||||||
|
assert_eq!(utf16, utf16!("class")); |
||||||
|
} |
||||||
|
("continue", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Continue); |
||||||
|
assert_eq!(utf16, utf16!("continue")); |
||||||
|
} |
||||||
|
("const", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Const); |
||||||
|
assert_eq!(utf16, utf16!("const")); |
||||||
|
} |
||||||
|
("debugger", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Debugger); |
||||||
|
assert_eq!(utf16, utf16!("debugger")); |
||||||
|
} |
||||||
|
("default", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Default); |
||||||
|
assert_eq!(utf16, utf16!("default")); |
||||||
|
} |
||||||
|
("delete", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Delete); |
||||||
|
assert_eq!(utf16, utf16!("delete")); |
||||||
|
} |
||||||
|
("do", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Do); |
||||||
|
assert_eq!(utf16, utf16!("do")); |
||||||
|
} |
||||||
|
("else", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Else); |
||||||
|
assert_eq!(utf16, utf16!("else")); |
||||||
|
} |
||||||
|
("enum", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Enum); |
||||||
|
assert_eq!(utf16, utf16!("enum")); |
||||||
|
} |
||||||
|
("extends", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Extends); |
||||||
|
assert_eq!(utf16, utf16!("extends")); |
||||||
|
} |
||||||
|
("export", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Export); |
||||||
|
assert_eq!(utf16, utf16!("export")); |
||||||
|
} |
||||||
|
("false", utf16) => { |
||||||
|
assert_eq!(k, Keyword::False); |
||||||
|
assert_eq!(utf16, utf16!("false")); |
||||||
|
} |
||||||
|
("finally", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Finally); |
||||||
|
assert_eq!(utf16, utf16!("finally")); |
||||||
|
} |
||||||
|
("for", utf16) => { |
||||||
|
assert_eq!(k, Keyword::For); |
||||||
|
assert_eq!(utf16, utf16!("for")); |
||||||
|
} |
||||||
|
("function", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Function); |
||||||
|
assert_eq!(utf16, utf16!("function")); |
||||||
|
} |
||||||
|
("if", utf16) => { |
||||||
|
assert_eq!(k, Keyword::If); |
||||||
|
assert_eq!(utf16, utf16!("if")); |
||||||
|
} |
||||||
|
("in", utf16) => { |
||||||
|
assert_eq!(k, Keyword::In); |
||||||
|
assert_eq!(utf16, utf16!("in")); |
||||||
|
} |
||||||
|
("instanceof", utf16) => { |
||||||
|
assert_eq!(k, Keyword::InstanceOf); |
||||||
|
assert_eq!(utf16, utf16!("instanceof")); |
||||||
|
} |
||||||
|
("import", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Import); |
||||||
|
assert_eq!(utf16, utf16!("import")); |
||||||
|
} |
||||||
|
("let", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Let); |
||||||
|
assert_eq!(utf16, utf16!("let")); |
||||||
|
} |
||||||
|
("new", utf16) => { |
||||||
|
assert_eq!(k, Keyword::New); |
||||||
|
assert_eq!(utf16, utf16!("new")); |
||||||
|
} |
||||||
|
("null", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Null); |
||||||
|
assert_eq!(utf16, utf16!("null")); |
||||||
|
} |
||||||
|
("of", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Of); |
||||||
|
assert_eq!(utf16, utf16!("of")); |
||||||
|
} |
||||||
|
("return", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Return); |
||||||
|
assert_eq!(utf16, utf16!("return")); |
||||||
|
} |
||||||
|
("super", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Super); |
||||||
|
assert_eq!(utf16, utf16!("super")); |
||||||
|
} |
||||||
|
("switch", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Switch); |
||||||
|
assert_eq!(utf16, utf16!("switch")); |
||||||
|
} |
||||||
|
("this", utf16) => { |
||||||
|
assert_eq!(k, Keyword::This); |
||||||
|
assert_eq!(utf16, utf16!("this")); |
||||||
|
} |
||||||
|
("throw", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Throw); |
||||||
|
assert_eq!(utf16, utf16!("throw")); |
||||||
|
} |
||||||
|
("true", utf16) => { |
||||||
|
assert_eq!(k, Keyword::True); |
||||||
|
assert_eq!(utf16, utf16!("true")); |
||||||
|
} |
||||||
|
("try", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Try); |
||||||
|
assert_eq!(utf16, utf16!("try")); |
||||||
|
} |
||||||
|
("typeof", utf16) => { |
||||||
|
assert_eq!(k, Keyword::TypeOf); |
||||||
|
assert_eq!(utf16, utf16!("typeof")); |
||||||
|
} |
||||||
|
("var", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Var); |
||||||
|
assert_eq!(utf16, utf16!("var")); |
||||||
|
} |
||||||
|
("void", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Void); |
||||||
|
assert_eq!(utf16, utf16!("void")); |
||||||
|
} |
||||||
|
("while", utf16) => { |
||||||
|
assert_eq!(k, Keyword::While); |
||||||
|
assert_eq!(utf16, utf16!("while")); |
||||||
|
} |
||||||
|
("with", utf16) => { |
||||||
|
assert_eq!(k, Keyword::With); |
||||||
|
assert_eq!(utf16, utf16!("with")); |
||||||
|
} |
||||||
|
("yield", utf16) => { |
||||||
|
assert_eq!(k, Keyword::Yield); |
||||||
|
assert_eq!(utf16, utf16!("yield")); |
||||||
|
} |
||||||
|
(_, _) => unreachable!("unknown keyword {k:?} found"), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn to_sym() { |
||||||
|
for k in all_keywords() { |
||||||
|
match k.to_sym() { |
||||||
|
Sym::AWAIT => assert_eq!(k, Keyword::Await), |
||||||
|
Sym::ASYNC => assert_eq!(k, Keyword::Async), |
||||||
|
Sym::BREAK => assert_eq!(k, Keyword::Break), |
||||||
|
Sym::CASE => assert_eq!(k, Keyword::Case), |
||||||
|
Sym::CATCH => assert_eq!(k, Keyword::Catch), |
||||||
|
Sym::CLASS => assert_eq!(k, Keyword::Class), |
||||||
|
Sym::CONTINUE => assert_eq!(k, Keyword::Continue), |
||||||
|
Sym::CONST => assert_eq!(k, Keyword::Const), |
||||||
|
Sym::DEBUGGER => assert_eq!(k, Keyword::Debugger), |
||||||
|
Sym::DEFAULT => assert_eq!(k, Keyword::Default), |
||||||
|
Sym::DELETE => assert_eq!(k, Keyword::Delete), |
||||||
|
Sym::DO => assert_eq!(k, Keyword::Do), |
||||||
|
Sym::ELSE => assert_eq!(k, Keyword::Else), |
||||||
|
Sym::ENUM => assert_eq!(k, Keyword::Enum), |
||||||
|
Sym::EXPORT => assert_eq!(k, Keyword::Export), |
||||||
|
Sym::EXTENDS => assert_eq!(k, Keyword::Extends), |
||||||
|
Sym::FALSE => assert_eq!(k, Keyword::False), |
||||||
|
Sym::FINALLY => assert_eq!(k, Keyword::Finally), |
||||||
|
Sym::FOR => assert_eq!(k, Keyword::For), |
||||||
|
Sym::FUNCTION => assert_eq!(k, Keyword::Function), |
||||||
|
Sym::IF => assert_eq!(k, Keyword::If), |
||||||
|
Sym::IN => assert_eq!(k, Keyword::In), |
||||||
|
Sym::INSTANCEOF => assert_eq!(k, Keyword::InstanceOf), |
||||||
|
Sym::IMPORT => assert_eq!(k, Keyword::Import), |
||||||
|
Sym::LET => assert_eq!(k, Keyword::Let), |
||||||
|
Sym::NEW => assert_eq!(k, Keyword::New), |
||||||
|
Sym::NULL => assert_eq!(k, Keyword::Null), |
||||||
|
Sym::OF => assert_eq!(k, Keyword::Of), |
||||||
|
Sym::RETURN => assert_eq!(k, Keyword::Return), |
||||||
|
Sym::SUPER => assert_eq!(k, Keyword::Super), |
||||||
|
Sym::SWITCH => assert_eq!(k, Keyword::Switch), |
||||||
|
Sym::THIS => assert_eq!(k, Keyword::This), |
||||||
|
Sym::THROW => assert_eq!(k, Keyword::Throw), |
||||||
|
Sym::TRUE => assert_eq!(k, Keyword::True), |
||||||
|
Sym::TRY => assert_eq!(k, Keyword::Try), |
||||||
|
Sym::TYPEOF => assert_eq!(k, Keyword::TypeOf), |
||||||
|
Sym::VAR => assert_eq!(k, Keyword::Var), |
||||||
|
Sym::VOID => assert_eq!(k, Keyword::Void), |
||||||
|
Sym::WHILE => assert_eq!(k, Keyword::While), |
||||||
|
Sym::WITH => assert_eq!(k, Keyword::With), |
||||||
|
Sym::YIELD => assert_eq!(k, Keyword::Yield), |
||||||
|
_ => unreachable!("unknown keyword {k:?} found"), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn try_into_binary_op() { |
||||||
|
for k in all_keywords() { |
||||||
|
match k { |
||||||
|
Keyword::InstanceOf | Keyword::In => assert!(BinaryOp::try_from(k).is_ok()), |
||||||
|
Keyword::Await |
||||||
|
| Keyword::Async |
||||||
|
| Keyword::Break |
||||||
|
| Keyword::Case |
||||||
|
| Keyword::Catch |
||||||
|
| Keyword::Class |
||||||
|
| Keyword::Continue |
||||||
|
| Keyword::Const |
||||||
|
| Keyword::Debugger |
||||||
|
| Keyword::Default |
||||||
|
| Keyword::Delete |
||||||
|
| Keyword::Do |
||||||
|
| Keyword::Else |
||||||
|
| Keyword::Enum |
||||||
|
| Keyword::Export |
||||||
|
| Keyword::Extends |
||||||
|
| Keyword::False |
||||||
|
| Keyword::Finally |
||||||
|
| Keyword::For |
||||||
|
| Keyword::Function |
||||||
|
| Keyword::If |
||||||
|
| Keyword::Import |
||||||
|
| Keyword::Let |
||||||
|
| Keyword::New |
||||||
|
| Keyword::Null |
||||||
|
| Keyword::Of |
||||||
|
| Keyword::Return |
||||||
|
| Keyword::Super |
||||||
|
| Keyword::Switch |
||||||
|
| Keyword::This |
||||||
|
| Keyword::Throw |
||||||
|
| Keyword::True |
||||||
|
| Keyword::Try |
||||||
|
| Keyword::TypeOf |
||||||
|
| Keyword::Var |
||||||
|
| Keyword::Void |
||||||
|
| Keyword::While |
||||||
|
| Keyword::With |
||||||
|
| Keyword::Yield => assert!(BinaryOp::try_from(k).is_err()), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn from_str() { |
||||||
|
for k in all_keywords() { |
||||||
|
let str = k.as_str().0; |
||||||
|
assert_eq!(str.parse::<Keyword>().unwrap(), k); |
||||||
|
} |
||||||
|
|
||||||
|
for invalid in ["", "testing", "invalid keyword"] { |
||||||
|
let result = invalid.parse::<Keyword>(); |
||||||
|
let error = result.unwrap_err(); |
||||||
|
|
||||||
|
assert_eq!(error.to_string(), "invalid token"); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue