port `PyAny` tests to `Bound` API (#4140)
This commit is contained in:
parent
4616838ee1
commit
82c00a2fe4
|
@ -2324,12 +2324,11 @@ impl<'py> Bound<'py, PyAny> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg_attr(not(feature = "gil-refs"), allow(deprecated))]
|
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::{
|
use crate::{
|
||||||
basic::CompareOp,
|
basic::CompareOp,
|
||||||
types::{any::PyAnyMethods, IntoPyDict, PyAny, PyBool, PyList, PyLong, PyModule},
|
types::{IntoPyDict, PyAny, PyAnyMethods, PyBool, PyList, PyLong, PyModule, PyTypeMethods},
|
||||||
Bound, PyNativeType, PyTypeInfo, Python, ToPyObject,
|
Bound, PyTypeInfo, Python, ToPyObject,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -2407,7 +2406,7 @@ class NonHeapNonDescriptorInt:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_call_for_non_existing_method() {
|
fn test_call_for_non_existing_method() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let a = py.eval("42", None, None).unwrap();
|
let a = py.eval_bound("42", None, None).unwrap();
|
||||||
a.call_method0("__str__").unwrap(); // ok
|
a.call_method0("__str__").unwrap(); // ok
|
||||||
assert!(a.call_method("nonexistent_method", (1,), None).is_err());
|
assert!(a.call_method("nonexistent_method", (1,), None).is_err());
|
||||||
assert!(a.call_method0("nonexistent_method").is_err());
|
assert!(a.call_method0("nonexistent_method").is_err());
|
||||||
|
@ -2455,7 +2454,7 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_type() {
|
fn test_type() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let obj = py.eval("42", None, None).unwrap();
|
let obj = py.eval_bound("42", None, None).unwrap();
|
||||||
assert_eq!(obj.get_type().as_type_ptr(), obj.get_type_ptr());
|
assert_eq!(obj.get_type().as_type_ptr(), obj.get_type_ptr());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2463,11 +2462,11 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_dir() {
|
fn test_dir() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let obj = py.eval("42", None, None).unwrap();
|
let obj = py.eval_bound("42", None, None).unwrap();
|
||||||
let dir = py
|
let dir = py
|
||||||
.eval("dir(42)", None, None)
|
.eval_bound("dir(42)", None, None)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.downcast::<PyList>()
|
.downcast_into::<PyList>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let a = obj
|
let a = obj
|
||||||
.dir()
|
.dir()
|
||||||
|
@ -2482,7 +2481,7 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_hasattr() {
|
fn test_hasattr() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let x = 5.to_object(py).into_ref(py);
|
let x = 5.to_object(py).into_bound(py);
|
||||||
assert!(x.is_instance_of::<PyLong>());
|
assert!(x.is_instance_of::<PyLong>());
|
||||||
|
|
||||||
assert!(x.hasattr("to_bytes").unwrap());
|
assert!(x.hasattr("to_bytes").unwrap());
|
||||||
|
@ -2509,7 +2508,7 @@ class SimpleClass:
|
||||||
|
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let obj = Py::new(py, GetattrFail).unwrap();
|
let obj = Py::new(py, GetattrFail).unwrap();
|
||||||
let obj = obj.as_ref(py).as_ref();
|
let obj = obj.bind(py).as_ref();
|
||||||
|
|
||||||
assert!(obj
|
assert!(obj
|
||||||
.hasattr("foo")
|
.hasattr("foo")
|
||||||
|
@ -2521,18 +2520,18 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_nan_eq() {
|
fn test_nan_eq() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let nan = py.eval("float('nan')", None, None).unwrap();
|
let nan = py.eval_bound("float('nan')", None, None).unwrap();
|
||||||
assert!(nan.compare(nan).is_err());
|
assert!(nan.compare(&nan).is_err());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_any_is_instance_of() {
|
fn test_any_is_instance_of() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let x = 5.to_object(py).into_ref(py);
|
let x = 5.to_object(py).into_bound(py);
|
||||||
assert!(x.is_instance_of::<PyLong>());
|
assert!(x.is_instance_of::<PyLong>());
|
||||||
|
|
||||||
let l = vec![x, x].to_object(py).into_ref(py);
|
let l = vec![&x, &x].to_object(py).into_bound(py);
|
||||||
assert!(l.is_instance_of::<PyList>());
|
assert!(l.is_instance_of::<PyList>());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2540,15 +2539,15 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_any_is_instance() {
|
fn test_any_is_instance() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let l = vec![1u8, 2].to_object(py).into_ref(py);
|
let l = vec![1u8, 2].to_object(py).into_bound(py);
|
||||||
assert!(l.is_instance(py.get_type::<PyList>()).unwrap());
|
assert!(l.is_instance(&py.get_type_bound::<PyList>()).unwrap());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_any_is_exact_instance_of() {
|
fn test_any_is_exact_instance_of() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let x = 5.to_object(py).into_ref(py);
|
let x = 5.to_object(py).into_bound(py);
|
||||||
assert!(x.is_exact_instance_of::<PyLong>());
|
assert!(x.is_exact_instance_of::<PyLong>());
|
||||||
|
|
||||||
let t = PyBool::new_bound(py, true);
|
let t = PyBool::new_bound(py, true);
|
||||||
|
@ -2556,7 +2555,7 @@ class SimpleClass:
|
||||||
assert!(!t.is_exact_instance_of::<PyLong>());
|
assert!(!t.is_exact_instance_of::<PyLong>());
|
||||||
assert!(t.is_exact_instance_of::<PyBool>());
|
assert!(t.is_exact_instance_of::<PyBool>());
|
||||||
|
|
||||||
let l = vec![x, x].to_object(py).into_ref(py);
|
let l = vec![&x, &x].to_object(py).into_bound(py);
|
||||||
assert!(l.is_exact_instance_of::<PyList>());
|
assert!(l.is_exact_instance_of::<PyList>());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2565,11 +2564,9 @@ class SimpleClass:
|
||||||
fn test_any_is_exact_instance() {
|
fn test_any_is_exact_instance() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let t = PyBool::new_bound(py, true);
|
let t = PyBool::new_bound(py, true);
|
||||||
assert!(t
|
assert!(t.is_instance(&py.get_type_bound::<PyLong>()).unwrap());
|
||||||
.is_instance(&py.get_type::<PyLong>().as_borrowed())
|
assert!(!t.is_exact_instance(&py.get_type_bound::<PyLong>()));
|
||||||
.unwrap());
|
assert!(t.is_exact_instance(&py.get_type_bound::<PyBool>()));
|
||||||
assert!(!t.is_exact_instance(&py.get_type::<PyLong>().as_borrowed()));
|
|
||||||
assert!(t.is_exact_instance(&py.get_type::<PyBool>().as_borrowed()));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2577,7 +2574,7 @@ class SimpleClass:
|
||||||
fn test_any_contains() {
|
fn test_any_contains() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let v: Vec<i32> = vec![1, 1, 2, 3, 5, 8];
|
let v: Vec<i32> = vec![1, 1, 2, 3, 5, 8];
|
||||||
let ob = v.to_object(py).into_ref(py);
|
let ob = v.to_object(py).into_bound(py);
|
||||||
|
|
||||||
let bad_needle = 7i32.to_object(py);
|
let bad_needle = 7i32.to_object(py);
|
||||||
assert!(!ob.contains(&bad_needle).unwrap());
|
assert!(!ob.contains(&bad_needle).unwrap());
|
||||||
|
@ -2589,7 +2586,7 @@ class SimpleClass:
|
||||||
assert!(ob.contains(&type_coerced_needle).unwrap());
|
assert!(ob.contains(&type_coerced_needle).unwrap());
|
||||||
|
|
||||||
let n: u32 = 42;
|
let n: u32 = 42;
|
||||||
let bad_haystack = n.to_object(py).into_ref(py);
|
let bad_haystack = n.to_object(py).into_bound(py);
|
||||||
let irrelevant_needle = 0i32.to_object(py);
|
let irrelevant_needle = 0i32.to_object(py);
|
||||||
assert!(bad_haystack.contains(&irrelevant_needle).is_err());
|
assert!(bad_haystack.contains(&irrelevant_needle).is_err());
|
||||||
});
|
});
|
||||||
|
@ -2603,12 +2600,12 @@ class SimpleClass:
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
for a in list {
|
for a in list {
|
||||||
for b in list {
|
for b in list {
|
||||||
let a_py = a.to_object(py).into_ref(py);
|
let a_py = a.to_object(py).into_bound(py);
|
||||||
let b_py = b.to_object(py).into_ref(py);
|
let b_py = b.to_object(py).into_bound(py);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.lt(b),
|
a.lt(b),
|
||||||
a_py.lt(b_py).unwrap(),
|
a_py.lt(&b_py).unwrap(),
|
||||||
"{} < {} should be {}.",
|
"{} < {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2616,7 +2613,7 @@ class SimpleClass:
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.le(b),
|
a.le(b),
|
||||||
a_py.le(b_py).unwrap(),
|
a_py.le(&b_py).unwrap(),
|
||||||
"{} <= {} should be {}.",
|
"{} <= {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2624,7 +2621,7 @@ class SimpleClass:
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.eq(b),
|
a.eq(b),
|
||||||
a_py.eq(b_py).unwrap(),
|
a_py.eq(&b_py).unwrap(),
|
||||||
"{} == {} should be {}.",
|
"{} == {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2632,7 +2629,7 @@ class SimpleClass:
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.ne(b),
|
a.ne(b),
|
||||||
a_py.ne(b_py).unwrap(),
|
a_py.ne(&b_py).unwrap(),
|
||||||
"{} != {} should be {}.",
|
"{} != {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2640,7 +2637,7 @@ class SimpleClass:
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.gt(b),
|
a.gt(b),
|
||||||
a_py.gt(b_py).unwrap(),
|
a_py.gt(&b_py).unwrap(),
|
||||||
"{} > {} should be {}.",
|
"{} > {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2648,7 +2645,7 @@ class SimpleClass:
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
a.ge(b),
|
a.ge(b),
|
||||||
a_py.ge(b_py).unwrap(),
|
a_py.ge(&b_py).unwrap(),
|
||||||
"{} >= {} should be {}.",
|
"{} >= {} should be {}.",
|
||||||
a_py,
|
a_py,
|
||||||
b_py,
|
b_py,
|
||||||
|
@ -2695,10 +2692,10 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_rich_compare_type_error() {
|
fn test_rich_compare_type_error() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let py_int = 1.to_object(py).into_ref(py);
|
let py_int = 1.to_object(py).into_bound(py);
|
||||||
let py_str = "1".to_object(py).into_ref(py);
|
let py_str = "1".to_object(py).into_bound(py);
|
||||||
|
|
||||||
assert!(py_int.rich_compare(py_str, CompareOp::Lt).is_err());
|
assert!(py_int.rich_compare(&py_str, CompareOp::Lt).is_err());
|
||||||
assert!(!py_int
|
assert!(!py_int
|
||||||
.rich_compare(py_str, CompareOp::Eq)
|
.rich_compare(py_str, CompareOp::Eq)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
@ -2736,13 +2733,13 @@ class SimpleClass:
|
||||||
#[test]
|
#[test]
|
||||||
fn test_is_empty() {
|
fn test_is_empty() {
|
||||||
Python::with_gil(|py| {
|
Python::with_gil(|py| {
|
||||||
let empty_list: &PyAny = PyList::empty(py);
|
let empty_list = PyList::empty_bound(py).into_any();
|
||||||
assert!(empty_list.is_empty().unwrap());
|
assert!(empty_list.is_empty().unwrap());
|
||||||
|
|
||||||
let list: &PyAny = PyList::new(py, vec![1, 2, 3]);
|
let list = PyList::new_bound(py, vec![1, 2, 3]).into_any();
|
||||||
assert!(!list.is_empty().unwrap());
|
assert!(!list.is_empty().unwrap());
|
||||||
|
|
||||||
let not_container = 5.to_object(py).into_ref(py);
|
let not_container = 5.to_object(py).into_bound(py);
|
||||||
assert!(not_container.is_empty().is_err());
|
assert!(not_container.is_empty().is_err());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue