From d4aa062441382bf83124ed664ab5e852201ac42a Mon Sep 17 00:00:00 2001 From: Gyubong Date: Fri, 16 Sep 2022 17:12:54 +0900 Subject: [PATCH] Fix `set_name` error message when arguments are invalid --- Lib/test/test_property.py | 2 -- vm/src/builtins/property.rs | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py index 77c8d344d2..09123e08ae 100644 --- a/Lib/test/test_property.py +++ b/Lib/test/test_property.py @@ -216,8 +216,6 @@ class PropertyTests(unittest.TestCase): return 'Second' self.assertEqual(A.__doc__, 'Second') - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_property_set_name_incorrect_args(self): p = property() diff --git a/vm/src/builtins/property.rs b/vm/src/builtins/property.rs index d4ee442b44..fde9eb4036 100644 --- a/vm/src/builtins/property.rs +++ b/vm/src/builtins/property.rs @@ -3,6 +3,7 @@ */ use super::{PyType, PyTypeRef}; use crate::common::lock::PyRwLock; +use crate::function::PosArgs; use crate::{ class::PyClassImpl, function::{FuncArgs, PySetterValue}, @@ -122,6 +123,23 @@ impl PyProperty { *self.doc.write() = value; } + #[pymethod(magic)] + fn set_name(&self, args: PosArgs, vm: &VirtualMachine) -> PyResult<()> { + let arg_len = args.into_vec().len(); + + if arg_len != 2 { + Err(vm.new_exception_msg( + vm.ctx.exceptions.type_error.to_owned(), + format!( + "__set_name__() takes 2 positional arguments but {} were given", + arg_len + ), + )) + } else { + Ok(()) + } + } + // Python builder functions #[pymethod]