mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 22:55:08 +00:00
Audit unittest assert methods (#1736)
I ran the following code in Python 3.10 to automatically generate a list of enums. ```python import unittest print( ",\n".join( sorted( m.removeprefix("assert") if m != "assert_" else "Underscore" for m in dir(unittest.TestCase) if m.startswith("assert") ) ) ) ```
This commit is contained in:
parent
0152814a00
commit
498134b7ee
1 changed files with 34 additions and 40 deletions
|
@ -8,9 +8,14 @@ use rustpython_ast::{
|
||||||
|
|
||||||
use crate::ast::helpers::{create_expr, create_stmt};
|
use crate::ast::helpers::{create_expr, create_stmt};
|
||||||
|
|
||||||
|
/// An enum to represent the different types of assertions present in the
|
||||||
|
/// `unittest` module. Note: any variants that can't be replaced with plain
|
||||||
|
/// `assert` statements are commented out.
|
||||||
pub enum UnittestAssert {
|
pub enum UnittestAssert {
|
||||||
AlmostEqual,
|
AlmostEqual,
|
||||||
AlmostEquals,
|
AlmostEquals,
|
||||||
|
CountEqual,
|
||||||
|
DictContainsSubset,
|
||||||
DictEqual,
|
DictEqual,
|
||||||
Equal,
|
Equal,
|
||||||
Equals,
|
Equals,
|
||||||
|
@ -23,11 +28,12 @@ pub enum UnittestAssert {
|
||||||
IsNone,
|
IsNone,
|
||||||
IsNot,
|
IsNot,
|
||||||
IsNotNone,
|
IsNotNone,
|
||||||
ItemsEqual,
|
|
||||||
Less,
|
Less,
|
||||||
LessEqual,
|
LessEqual,
|
||||||
ListEqual,
|
ListEqual,
|
||||||
|
// Logs,
|
||||||
MultiLineEqual,
|
MultiLineEqual,
|
||||||
|
// NoLogs,
|
||||||
NotAlmostEqual,
|
NotAlmostEqual,
|
||||||
NotAlmostEquals,
|
NotAlmostEquals,
|
||||||
NotEqual,
|
NotEqual,
|
||||||
|
@ -36,9 +42,9 @@ pub enum UnittestAssert {
|
||||||
NotIsInstance,
|
NotIsInstance,
|
||||||
NotRegex,
|
NotRegex,
|
||||||
NotRegexpMatches,
|
NotRegexpMatches,
|
||||||
Raises,
|
// Raises,
|
||||||
RaisesMessage,
|
// RaisesRegex,
|
||||||
RaisesRegexp,
|
// RaisesRegexp,
|
||||||
Regex,
|
Regex,
|
||||||
RegexpMatches,
|
RegexpMatches,
|
||||||
SequenceEqual,
|
SequenceEqual,
|
||||||
|
@ -46,6 +52,8 @@ pub enum UnittestAssert {
|
||||||
True,
|
True,
|
||||||
TupleEqual,
|
TupleEqual,
|
||||||
Underscore,
|
Underscore,
|
||||||
|
// Warns,
|
||||||
|
// WarnsRegex,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for UnittestAssert {
|
impl std::fmt::Display for UnittestAssert {
|
||||||
|
@ -53,7 +61,9 @@ impl std::fmt::Display for UnittestAssert {
|
||||||
match self {
|
match self {
|
||||||
UnittestAssert::AlmostEqual => write!(f, "assertAlmostEqual"),
|
UnittestAssert::AlmostEqual => write!(f, "assertAlmostEqual"),
|
||||||
UnittestAssert::AlmostEquals => write!(f, "assertAlmostEquals"),
|
UnittestAssert::AlmostEquals => write!(f, "assertAlmostEquals"),
|
||||||
|
UnittestAssert::CountEqual => write!(f, "assertCountEqual"),
|
||||||
UnittestAssert::DictEqual => write!(f, "assertDictEqual"),
|
UnittestAssert::DictEqual => write!(f, "assertDictEqual"),
|
||||||
|
UnittestAssert::DictContainsSubset => write!(f, "assertDictContainsSubset"),
|
||||||
UnittestAssert::Equal => write!(f, "assertEqual"),
|
UnittestAssert::Equal => write!(f, "assertEqual"),
|
||||||
UnittestAssert::Equals => write!(f, "assertEquals"),
|
UnittestAssert::Equals => write!(f, "assertEquals"),
|
||||||
UnittestAssert::False => write!(f, "assertFalse"),
|
UnittestAssert::False => write!(f, "assertFalse"),
|
||||||
|
@ -65,7 +75,6 @@ impl std::fmt::Display for UnittestAssert {
|
||||||
UnittestAssert::IsNone => write!(f, "assertIsNone"),
|
UnittestAssert::IsNone => write!(f, "assertIsNone"),
|
||||||
UnittestAssert::IsNot => write!(f, "assertIsNot"),
|
UnittestAssert::IsNot => write!(f, "assertIsNot"),
|
||||||
UnittestAssert::IsNotNone => write!(f, "assertIsNotNone"),
|
UnittestAssert::IsNotNone => write!(f, "assertIsNotNone"),
|
||||||
UnittestAssert::ItemsEqual => write!(f, "assertItemsEqual"),
|
|
||||||
UnittestAssert::Less => write!(f, "assertLess"),
|
UnittestAssert::Less => write!(f, "assertLess"),
|
||||||
UnittestAssert::LessEqual => write!(f, "assertLessEqual"),
|
UnittestAssert::LessEqual => write!(f, "assertLessEqual"),
|
||||||
UnittestAssert::ListEqual => write!(f, "assertListEqual"),
|
UnittestAssert::ListEqual => write!(f, "assertListEqual"),
|
||||||
|
@ -78,9 +87,6 @@ impl std::fmt::Display for UnittestAssert {
|
||||||
UnittestAssert::NotIsInstance => write!(f, "assertNotIsInstance"),
|
UnittestAssert::NotIsInstance => write!(f, "assertNotIsInstance"),
|
||||||
UnittestAssert::NotRegex => write!(f, "assertNotRegex"),
|
UnittestAssert::NotRegex => write!(f, "assertNotRegex"),
|
||||||
UnittestAssert::NotRegexpMatches => write!(f, "assertNotRegexpMatches"),
|
UnittestAssert::NotRegexpMatches => write!(f, "assertNotRegexpMatches"),
|
||||||
UnittestAssert::Raises => write!(f, "assertRaises"),
|
|
||||||
UnittestAssert::RaisesMessage => write!(f, "assertRaisesMessage"),
|
|
||||||
UnittestAssert::RaisesRegexp => write!(f, "assertRaisesRegexp"),
|
|
||||||
UnittestAssert::Regex => write!(f, "assertRegex"),
|
UnittestAssert::Regex => write!(f, "assertRegex"),
|
||||||
UnittestAssert::RegexpMatches => write!(f, "assertRegexpMatches"),
|
UnittestAssert::RegexpMatches => write!(f, "assertRegexpMatches"),
|
||||||
UnittestAssert::SequenceEqual => write!(f, "assertSequenceEqual"),
|
UnittestAssert::SequenceEqual => write!(f, "assertSequenceEqual"),
|
||||||
|
@ -99,6 +105,8 @@ impl TryFrom<&str> for UnittestAssert {
|
||||||
match value {
|
match value {
|
||||||
"assertAlmostEqual" => Ok(UnittestAssert::AlmostEqual),
|
"assertAlmostEqual" => Ok(UnittestAssert::AlmostEqual),
|
||||||
"assertAlmostEquals" => Ok(UnittestAssert::AlmostEquals),
|
"assertAlmostEquals" => Ok(UnittestAssert::AlmostEquals),
|
||||||
|
"assertCountEqual" => Ok(UnittestAssert::CountEqual),
|
||||||
|
"assertDictContainsSubset" => Ok(UnittestAssert::DictContainsSubset),
|
||||||
"assertDictEqual" => Ok(UnittestAssert::DictEqual),
|
"assertDictEqual" => Ok(UnittestAssert::DictEqual),
|
||||||
"assertEqual" => Ok(UnittestAssert::Equal),
|
"assertEqual" => Ok(UnittestAssert::Equal),
|
||||||
"assertEquals" => Ok(UnittestAssert::Equals),
|
"assertEquals" => Ok(UnittestAssert::Equals),
|
||||||
|
@ -111,7 +119,6 @@ impl TryFrom<&str> for UnittestAssert {
|
||||||
"assertIsNone" => Ok(UnittestAssert::IsNone),
|
"assertIsNone" => Ok(UnittestAssert::IsNone),
|
||||||
"assertIsNot" => Ok(UnittestAssert::IsNot),
|
"assertIsNot" => Ok(UnittestAssert::IsNot),
|
||||||
"assertIsNotNone" => Ok(UnittestAssert::IsNotNone),
|
"assertIsNotNone" => Ok(UnittestAssert::IsNotNone),
|
||||||
"assertItemsEqual" => Ok(UnittestAssert::ItemsEqual),
|
|
||||||
"assertLess" => Ok(UnittestAssert::Less),
|
"assertLess" => Ok(UnittestAssert::Less),
|
||||||
"assertLessEqual" => Ok(UnittestAssert::LessEqual),
|
"assertLessEqual" => Ok(UnittestAssert::LessEqual),
|
||||||
"assertListEqual" => Ok(UnittestAssert::ListEqual),
|
"assertListEqual" => Ok(UnittestAssert::ListEqual),
|
||||||
|
@ -124,9 +131,6 @@ impl TryFrom<&str> for UnittestAssert {
|
||||||
"assertNotIsInstance" => Ok(UnittestAssert::NotIsInstance),
|
"assertNotIsInstance" => Ok(UnittestAssert::NotIsInstance),
|
||||||
"assertNotRegex" => Ok(UnittestAssert::NotRegex),
|
"assertNotRegex" => Ok(UnittestAssert::NotRegex),
|
||||||
"assertNotRegexpMatches" => Ok(UnittestAssert::NotRegexpMatches),
|
"assertNotRegexpMatches" => Ok(UnittestAssert::NotRegexpMatches),
|
||||||
"assertRaises" => Ok(UnittestAssert::Raises),
|
|
||||||
"assertRaisesMessage" => Ok(UnittestAssert::RaisesMessage),
|
|
||||||
"assertRaisesRegexp" => Ok(UnittestAssert::RaisesRegexp),
|
|
||||||
"assertRegex" => Ok(UnittestAssert::Regex),
|
"assertRegex" => Ok(UnittestAssert::Regex),
|
||||||
"assertRegexpMatches" => Ok(UnittestAssert::RegexpMatches),
|
"assertRegexpMatches" => Ok(UnittestAssert::RegexpMatches),
|
||||||
"assertSequenceEqual" => Ok(UnittestAssert::SequenceEqual),
|
"assertSequenceEqual" => Ok(UnittestAssert::SequenceEqual),
|
||||||
|
@ -181,19 +185,22 @@ impl UnittestAssert {
|
||||||
UnittestAssert::AlmostEquals => {
|
UnittestAssert::AlmostEquals => {
|
||||||
Arguments::new(vec!["first", "second"], vec!["places", "msg", "delta"])
|
Arguments::new(vec!["first", "second"], vec!["places", "msg", "delta"])
|
||||||
}
|
}
|
||||||
UnittestAssert::DictEqual => Arguments::new(vec!["d1", "d2"], vec!["msg"]),
|
UnittestAssert::CountEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
|
UnittestAssert::DictContainsSubset => {
|
||||||
|
Arguments::new(vec!["subset", "dictionary"], vec!["msg"])
|
||||||
|
}
|
||||||
|
UnittestAssert::DictEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::Equal => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::Equal => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::Equals => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::Equals => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::False => Arguments::new(vec!["expr"], vec!["msg"]),
|
UnittestAssert::False => Arguments::new(vec!["expr"], vec!["msg"]),
|
||||||
UnittestAssert::Greater => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::Greater => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::GreaterEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::GreaterEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::In => Arguments::new(vec!["member", "container"], vec!["msg"]),
|
UnittestAssert::In => Arguments::new(vec!["member", "container"], vec!["msg"]),
|
||||||
UnittestAssert::Is => Arguments::new(vec!["expr1", "expr2"], vec!["msg"]),
|
UnittestAssert::Is => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::IsInstance => Arguments::new(vec!["obj", "cls"], vec!["msg"]),
|
UnittestAssert::IsInstance => Arguments::new(vec!["obj", "cls"], vec!["msg"]),
|
||||||
UnittestAssert::IsNone => Arguments::new(vec!["expr"], vec!["msg"]),
|
UnittestAssert::IsNone => Arguments::new(vec!["expr"], vec!["msg"]),
|
||||||
UnittestAssert::IsNot => Arguments::new(vec!["expr1", "expr2"], vec!["msg"]),
|
UnittestAssert::IsNot => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::IsNotNone => Arguments::new(vec!["expr"], vec!["msg"]),
|
UnittestAssert::IsNotNone => Arguments::new(vec!["expr"], vec!["msg"]),
|
||||||
UnittestAssert::ItemsEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
|
||||||
UnittestAssert::Less => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::Less => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::LessEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::LessEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::ListEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::ListEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
|
@ -206,12 +213,11 @@ impl UnittestAssert {
|
||||||
UnittestAssert::NotIsInstance => Arguments::new(vec!["obj", "cls"], vec!["msg"]),
|
UnittestAssert::NotIsInstance => Arguments::new(vec!["obj", "cls"], vec!["msg"]),
|
||||||
UnittestAssert::NotRegex => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
UnittestAssert::NotRegex => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
||||||
UnittestAssert::NotRegexpMatches => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
UnittestAssert::NotRegexpMatches => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
||||||
UnittestAssert::Raises => Arguments::new(vec!["exception"], vec!["msg"]),
|
|
||||||
UnittestAssert::RaisesMessage => Arguments::new(vec!["exception", "msg"], vec!["msg"]),
|
|
||||||
UnittestAssert::RaisesRegexp => Arguments::new(vec!["exception", "regex"], vec!["msg"]),
|
|
||||||
UnittestAssert::Regex => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
UnittestAssert::Regex => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
||||||
UnittestAssert::RegexpMatches => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
UnittestAssert::RegexpMatches => Arguments::new(vec!["text", "regex"], vec!["msg"]),
|
||||||
UnittestAssert::SequenceEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::SequenceEqual => {
|
||||||
|
Arguments::new(vec!["first", "second"], vec!["msg", "seq_type"])
|
||||||
|
}
|
||||||
UnittestAssert::SetEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::SetEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
UnittestAssert::True => Arguments::new(vec!["expr"], vec!["msg"]),
|
UnittestAssert::True => Arguments::new(vec!["expr"], vec!["msg"]),
|
||||||
UnittestAssert::TupleEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
UnittestAssert::TupleEqual => Arguments::new(vec!["first", "second"], vec!["msg"]),
|
||||||
|
@ -273,7 +279,9 @@ impl UnittestAssert {
|
||||||
| UnittestAssert::Greater
|
| UnittestAssert::Greater
|
||||||
| UnittestAssert::GreaterEqual
|
| UnittestAssert::GreaterEqual
|
||||||
| UnittestAssert::Less
|
| UnittestAssert::Less
|
||||||
| UnittestAssert::LessEqual => {
|
| UnittestAssert::LessEqual
|
||||||
|
| UnittestAssert::Is
|
||||||
|
| UnittestAssert::IsNot => {
|
||||||
let first = args
|
let first = args
|
||||||
.get("first")
|
.get("first")
|
||||||
.ok_or_else(|| anyhow!("Missing argument `first`"))?;
|
.ok_or_else(|| anyhow!("Missing argument `first`"))?;
|
||||||
|
@ -288,27 +296,13 @@ impl UnittestAssert {
|
||||||
UnittestAssert::GreaterEqual => Cmpop::GtE,
|
UnittestAssert::GreaterEqual => Cmpop::GtE,
|
||||||
UnittestAssert::Less => Cmpop::Lt,
|
UnittestAssert::Less => Cmpop::Lt,
|
||||||
UnittestAssert::LessEqual => Cmpop::LtE,
|
UnittestAssert::LessEqual => Cmpop::LtE,
|
||||||
|
UnittestAssert::Is => Cmpop::Is,
|
||||||
|
UnittestAssert::IsNot => Cmpop::IsNot,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
let expr = compare(first, cmpop, second);
|
let expr = compare(first, cmpop, second);
|
||||||
Ok(assert(&expr, msg))
|
Ok(assert(&expr, msg))
|
||||||
}
|
}
|
||||||
UnittestAssert::Is | UnittestAssert::IsNot => {
|
|
||||||
let expr1 = args
|
|
||||||
.get("expr1")
|
|
||||||
.ok_or_else(|| anyhow!("Missing argument `expr1`"))?;
|
|
||||||
let expr2 = args
|
|
||||||
.get("expr2")
|
|
||||||
.ok_or_else(|| anyhow!("Missing argument `expr2`"))?;
|
|
||||||
let msg = args.get("msg").copied();
|
|
||||||
let cmpop = if matches!(self, UnittestAssert::Is) {
|
|
||||||
Cmpop::Is
|
|
||||||
} else {
|
|
||||||
Cmpop::IsNot
|
|
||||||
};
|
|
||||||
let expr = compare(expr1, cmpop, expr2);
|
|
||||||
Ok(assert(&expr, msg))
|
|
||||||
}
|
|
||||||
UnittestAssert::In | UnittestAssert::NotIn => {
|
UnittestAssert::In | UnittestAssert::NotIn => {
|
||||||
let member = args
|
let member = args
|
||||||
.get("member")
|
.get("member")
|
||||||
|
@ -375,12 +369,12 @@ impl UnittestAssert {
|
||||||
| UnittestAssert::RegexpMatches
|
| UnittestAssert::RegexpMatches
|
||||||
| UnittestAssert::NotRegex
|
| UnittestAssert::NotRegex
|
||||||
| UnittestAssert::NotRegexpMatches => {
|
| UnittestAssert::NotRegexpMatches => {
|
||||||
let regex = args
|
|
||||||
.get("regex")
|
|
||||||
.ok_or_else(|| anyhow!("Missing argument `regex`"))?;
|
|
||||||
let text = args
|
let text = args
|
||||||
.get("text")
|
.get("text")
|
||||||
.ok_or_else(|| anyhow!("Missing argument `text`"))?;
|
.ok_or_else(|| anyhow!("Missing argument `text`"))?;
|
||||||
|
let regex = args
|
||||||
|
.get("regex")
|
||||||
|
.ok_or_else(|| anyhow!("Missing argument `regex`"))?;
|
||||||
let msg = args.get("msg").copied();
|
let msg = args.get("msg").copied();
|
||||||
let re_search = create_expr(ExprKind::Call {
|
let re_search = create_expr(ExprKind::Call {
|
||||||
func: Box::new(create_expr(ExprKind::Attribute {
|
func: Box::new(create_expr(ExprKind::Attribute {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue