mirror of https://github.com/boa-dev/boa.git
Browse Source
* Added unit tests for `boa_ast::Punctuator` * Removed ut_ prefix from testspull/2900/head
Iban Eguia Moraza
2 years ago
committed by
GitHub
2 changed files with 311 additions and 9 deletions
@ -0,0 +1,287 @@ |
|||||||
|
#![allow(clippy::cognitive_complexity)] |
||||||
|
|
||||||
|
use super::*; |
||||||
|
|
||||||
|
/// Gets an iterator over all the existing punctuators.
|
||||||
|
fn all_punctuators() -> impl Iterator<Item = Punctuator> { |
||||||
|
[ |
||||||
|
Punctuator::Add, |
||||||
|
Punctuator::And, |
||||||
|
Punctuator::Arrow, |
||||||
|
Punctuator::Assign, |
||||||
|
Punctuator::AssignAdd, |
||||||
|
Punctuator::AssignAnd, |
||||||
|
Punctuator::AssignBoolAnd, |
||||||
|
Punctuator::AssignBoolOr, |
||||||
|
Punctuator::AssignCoalesce, |
||||||
|
Punctuator::AssignDiv, |
||||||
|
Punctuator::AssignLeftSh, |
||||||
|
Punctuator::AssignMod, |
||||||
|
Punctuator::AssignMul, |
||||||
|
Punctuator::AssignOr, |
||||||
|
Punctuator::AssignPow, |
||||||
|
Punctuator::AssignRightSh, |
||||||
|
Punctuator::AssignSub, |
||||||
|
Punctuator::AssignURightSh, |
||||||
|
Punctuator::AssignXor, |
||||||
|
Punctuator::BoolAnd, |
||||||
|
Punctuator::BoolOr, |
||||||
|
Punctuator::CloseBlock, |
||||||
|
Punctuator::CloseBracket, |
||||||
|
Punctuator::CloseParen, |
||||||
|
Punctuator::Coalesce, |
||||||
|
Punctuator::Colon, |
||||||
|
Punctuator::Comma, |
||||||
|
Punctuator::Dec, |
||||||
|
Punctuator::Div, |
||||||
|
Punctuator::Dot, |
||||||
|
Punctuator::Eq, |
||||||
|
Punctuator::GreaterThan, |
||||||
|
Punctuator::GreaterThanOrEq, |
||||||
|
Punctuator::Inc, |
||||||
|
Punctuator::LeftSh, |
||||||
|
Punctuator::LessThan, |
||||||
|
Punctuator::LessThanOrEq, |
||||||
|
Punctuator::Mod, |
||||||
|
Punctuator::Mul, |
||||||
|
Punctuator::Neg, |
||||||
|
Punctuator::Not, |
||||||
|
Punctuator::NotEq, |
||||||
|
Punctuator::OpenBlock, |
||||||
|
Punctuator::OpenBracket, |
||||||
|
Punctuator::OpenParen, |
||||||
|
Punctuator::Optional, |
||||||
|
Punctuator::Or, |
||||||
|
Punctuator::Exp, |
||||||
|
Punctuator::Question, |
||||||
|
Punctuator::RightSh, |
||||||
|
Punctuator::Semicolon, |
||||||
|
Punctuator::Spread, |
||||||
|
Punctuator::StrictEq, |
||||||
|
Punctuator::StrictNotEq, |
||||||
|
Punctuator::Sub, |
||||||
|
Punctuator::URightSh, |
||||||
|
Punctuator::Xor, |
||||||
|
] |
||||||
|
.into_iter() |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn as_assign_op() { |
||||||
|
for p in all_punctuators() { |
||||||
|
match p.as_assign_op() { |
||||||
|
Some(AssignOp::Assign) => assert_eq!(p, Punctuator::Assign), |
||||||
|
Some(AssignOp::Add) => assert_eq!(p, Punctuator::AssignAdd), |
||||||
|
Some(AssignOp::And) => assert_eq!(p, Punctuator::AssignAnd), |
||||||
|
Some(AssignOp::BoolAnd) => assert_eq!(p, Punctuator::AssignBoolAnd), |
||||||
|
Some(AssignOp::BoolOr) => assert_eq!(p, Punctuator::AssignBoolOr), |
||||||
|
Some(AssignOp::Coalesce) => assert_eq!(p, Punctuator::AssignCoalesce), |
||||||
|
Some(AssignOp::Div) => assert_eq!(p, Punctuator::AssignDiv), |
||||||
|
Some(AssignOp::Shl) => assert_eq!(p, Punctuator::AssignLeftSh), |
||||||
|
Some(AssignOp::Mod) => assert_eq!(p, Punctuator::AssignMod), |
||||||
|
Some(AssignOp::Mul) => assert_eq!(p, Punctuator::AssignMul), |
||||||
|
Some(AssignOp::Or) => assert_eq!(p, Punctuator::AssignOr), |
||||||
|
Some(AssignOp::Exp) => assert_eq!(p, Punctuator::AssignPow), |
||||||
|
Some(AssignOp::Shr) => assert_eq!(p, Punctuator::AssignRightSh), |
||||||
|
Some(AssignOp::Sub) => assert_eq!(p, Punctuator::AssignSub), |
||||||
|
Some(AssignOp::Ushr) => assert_eq!(p, Punctuator::AssignURightSh), |
||||||
|
Some(AssignOp::Xor) => assert_eq!(p, Punctuator::AssignXor), |
||||||
|
None => assert!(![ |
||||||
|
Punctuator::Assign, |
||||||
|
Punctuator::AssignAdd, |
||||||
|
Punctuator::AssignAnd, |
||||||
|
Punctuator::AssignBoolAnd, |
||||||
|
Punctuator::AssignBoolOr, |
||||||
|
Punctuator::AssignCoalesce, |
||||||
|
Punctuator::AssignDiv, |
||||||
|
Punctuator::AssignLeftSh, |
||||||
|
Punctuator::AssignMod, |
||||||
|
Punctuator::AssignMul, |
||||||
|
Punctuator::AssignOr, |
||||||
|
Punctuator::AssignPow, |
||||||
|
Punctuator::AssignRightSh, |
||||||
|
Punctuator::AssignSub, |
||||||
|
Punctuator::AssignURightSh, |
||||||
|
Punctuator::AssignXor, |
||||||
|
] |
||||||
|
.contains(&p)), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn as_binary_op() { |
||||||
|
for p in all_punctuators() { |
||||||
|
match p.as_binary_op() { |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Add)) => assert_eq!(p, Punctuator::Add), |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Sub)) => assert_eq!(p, Punctuator::Sub), |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Mul)) => assert_eq!(p, Punctuator::Mul), |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Div)) => assert_eq!(p, Punctuator::Div), |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Mod)) => assert_eq!(p, Punctuator::Mod), |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::And)) => assert_eq!(p, Punctuator::And), |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::Or)) => assert_eq!(p, Punctuator::Or), |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::Xor)) => assert_eq!(p, Punctuator::Xor), |
||||||
|
Some(BinaryOp::Logical(LogicalOp::And)) => assert_eq!(p, Punctuator::BoolAnd), |
||||||
|
Some(BinaryOp::Logical(LogicalOp::Or)) => assert_eq!(p, Punctuator::BoolOr), |
||||||
|
Some(BinaryOp::Logical(LogicalOp::Coalesce)) => assert_eq!(p, Punctuator::Coalesce), |
||||||
|
Some(BinaryOp::Relational(RelationalOp::Equal)) => assert_eq!(p, Punctuator::Eq), |
||||||
|
Some(BinaryOp::Relational(RelationalOp::NotEqual)) => assert_eq!(p, Punctuator::NotEq), |
||||||
|
Some(BinaryOp::Relational(RelationalOp::StrictEqual)) => { |
||||||
|
assert_eq!(p, Punctuator::StrictEq); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::StrictNotEqual)) => { |
||||||
|
assert_eq!(p, Punctuator::StrictNotEq); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::LessThan)) => { |
||||||
|
assert_eq!(p, Punctuator::LessThan); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::GreaterThan)) => { |
||||||
|
assert_eq!(p, Punctuator::GreaterThan); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::GreaterThanOrEqual)) => { |
||||||
|
assert_eq!(p, Punctuator::GreaterThanOrEq); |
||||||
|
} |
||||||
|
Some(BinaryOp::Relational(RelationalOp::LessThanOrEqual)) => { |
||||||
|
assert_eq!(p, Punctuator::LessThanOrEq); |
||||||
|
} |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::Shl)) => assert_eq!(p, Punctuator::LeftSh), |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::Shr)) => assert_eq!(p, Punctuator::RightSh), |
||||||
|
Some(BinaryOp::Bitwise(BitwiseOp::UShr)) => assert_eq!(p, Punctuator::URightSh), |
||||||
|
Some(BinaryOp::Comma) => assert_eq!(p, Punctuator::Comma), |
||||||
|
Some(BinaryOp::Arithmetic(ArithmeticOp::Exp)) => { |
||||||
|
assert_eq!(p, Punctuator::Exp); |
||||||
|
} |
||||||
|
None => assert!(![ |
||||||
|
Punctuator::Add, |
||||||
|
Punctuator::Sub, |
||||||
|
Punctuator::Mul, |
||||||
|
Punctuator::Div, |
||||||
|
Punctuator::Mod, |
||||||
|
Punctuator::And, |
||||||
|
Punctuator::Or, |
||||||
|
Punctuator::Xor, |
||||||
|
Punctuator::BoolAnd, |
||||||
|
Punctuator::BoolOr, |
||||||
|
Punctuator::Coalesce, |
||||||
|
Punctuator::Eq, |
||||||
|
Punctuator::NotEq, |
||||||
|
Punctuator::StrictEq, |
||||||
|
Punctuator::StrictNotEq, |
||||||
|
Punctuator::LessThan, |
||||||
|
Punctuator::GreaterThan, |
||||||
|
Punctuator::GreaterThanOrEq, |
||||||
|
Punctuator::LessThanOrEq, |
||||||
|
Punctuator::LeftSh, |
||||||
|
Punctuator::RightSh, |
||||||
|
Punctuator::URightSh, |
||||||
|
Punctuator::Comma |
||||||
|
] |
||||||
|
.contains(&p)), |
||||||
|
Some(BinaryOp::Relational(RelationalOp::In | RelationalOp::InstanceOf)) => { |
||||||
|
unreachable!() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn as_str() { |
||||||
|
for p in all_punctuators() { |
||||||
|
match p.as_str() { |
||||||
|
"+" => assert_eq!(p, Punctuator::Add), |
||||||
|
"&" => assert_eq!(p, Punctuator::And), |
||||||
|
"=>" => assert_eq!(p, Punctuator::Arrow), |
||||||
|
"=" => assert_eq!(p, Punctuator::Assign), |
||||||
|
"+=" => assert_eq!(p, Punctuator::AssignAdd), |
||||||
|
"&=" => assert_eq!(p, Punctuator::AssignAnd), |
||||||
|
"&&=" => assert_eq!(p, Punctuator::AssignBoolAnd), |
||||||
|
"||=" => assert_eq!(p, Punctuator::AssignBoolOr), |
||||||
|
"??=" => assert_eq!(p, Punctuator::AssignCoalesce), |
||||||
|
"/=" => assert_eq!(p, Punctuator::AssignDiv), |
||||||
|
"<<=" => assert_eq!(p, Punctuator::AssignLeftSh), |
||||||
|
"%=" => assert_eq!(p, Punctuator::AssignMod), |
||||||
|
"*=" => assert_eq!(p, Punctuator::AssignMul), |
||||||
|
"|=" => assert_eq!(p, Punctuator::AssignOr), |
||||||
|
"**=" => assert_eq!(p, Punctuator::AssignPow), |
||||||
|
">>=" => assert_eq!(p, Punctuator::AssignRightSh), |
||||||
|
"-=" => assert_eq!(p, Punctuator::AssignSub), |
||||||
|
">>>=" => assert_eq!(p, Punctuator::AssignURightSh), |
||||||
|
"^=" => assert_eq!(p, Punctuator::AssignXor), |
||||||
|
"&&" => assert_eq!(p, Punctuator::BoolAnd), |
||||||
|
"||" => assert_eq!(p, Punctuator::BoolOr), |
||||||
|
"??" => assert_eq!(p, Punctuator::Coalesce), |
||||||
|
"}" => assert_eq!(p, Punctuator::CloseBlock), |
||||||
|
"]" => assert_eq!(p, Punctuator::CloseBracket), |
||||||
|
")" => assert_eq!(p, Punctuator::CloseParen), |
||||||
|
":" => assert_eq!(p, Punctuator::Colon), |
||||||
|
"," => assert_eq!(p, Punctuator::Comma), |
||||||
|
"--" => assert_eq!(p, Punctuator::Dec), |
||||||
|
"/" => assert_eq!(p, Punctuator::Div), |
||||||
|
"." => assert_eq!(p, Punctuator::Dot), |
||||||
|
"==" => assert_eq!(p, Punctuator::Eq), |
||||||
|
">" => assert_eq!(p, Punctuator::GreaterThan), |
||||||
|
">=" => assert_eq!(p, Punctuator::GreaterThanOrEq), |
||||||
|
"++" => assert_eq!(p, Punctuator::Inc), |
||||||
|
"<<" => assert_eq!(p, Punctuator::LeftSh), |
||||||
|
"<" => assert_eq!(p, Punctuator::LessThan), |
||||||
|
"<=" => assert_eq!(p, Punctuator::LessThanOrEq), |
||||||
|
"%" => assert_eq!(p, Punctuator::Mod), |
||||||
|
"*" => assert_eq!(p, Punctuator::Mul), |
||||||
|
"~" => assert_eq!(p, Punctuator::Neg), |
||||||
|
"!" => assert_eq!(p, Punctuator::Not), |
||||||
|
"!=" => assert_eq!(p, Punctuator::NotEq), |
||||||
|
"{" => assert_eq!(p, Punctuator::OpenBlock), |
||||||
|
"[" => assert_eq!(p, Punctuator::OpenBracket), |
||||||
|
"(" => assert_eq!(p, Punctuator::OpenParen), |
||||||
|
"?." => assert_eq!(p, Punctuator::Optional), |
||||||
|
"|" => assert_eq!(p, Punctuator::Or), |
||||||
|
"**" => assert_eq!(p, Punctuator::Exp), |
||||||
|
"?" => assert_eq!(p, Punctuator::Question), |
||||||
|
">>" => assert_eq!(p, Punctuator::RightSh), |
||||||
|
";" => assert_eq!(p, Punctuator::Semicolon), |
||||||
|
"..." => assert_eq!(p, Punctuator::Spread), |
||||||
|
"===" => assert_eq!(p, Punctuator::StrictEq), |
||||||
|
"!==" => assert_eq!(p, Punctuator::StrictNotEq), |
||||||
|
"-" => assert_eq!(p, Punctuator::Sub), |
||||||
|
">>>" => assert_eq!(p, Punctuator::URightSh), |
||||||
|
"^" => assert_eq!(p, Punctuator::Xor), |
||||||
|
_ => unreachable!("unknown punctuator {p:?} found"), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn try_into_assign_op() { |
||||||
|
for p in all_punctuators() { |
||||||
|
if p.as_assign_op().is_some() { |
||||||
|
assert!(TryInto::<AssignOp>::try_into(p).is_ok()); |
||||||
|
} else { |
||||||
|
assert!(TryInto::<AssignOp>::try_into(p).is_err()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn try_into_binary_op() { |
||||||
|
for p in all_punctuators() { |
||||||
|
if p.as_binary_op().is_some() { |
||||||
|
assert!(TryInto::<BinaryOp>::try_into(p).is_ok()); |
||||||
|
} else { |
||||||
|
assert!(TryInto::<BinaryOp>::try_into(p).is_err()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn display() { |
||||||
|
for p in all_punctuators() { |
||||||
|
assert_eq!(p.as_str(), p.to_string()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn into_box() { |
||||||
|
for p in all_punctuators() { |
||||||
|
assert_eq!(p.as_str(), Box::<str>::from(p).as_ref()); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue