diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index a0d9527a1..7666e95cc 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -45,7 +45,6 @@ class DictTest(unittest.TestCase): self.assertIs(bool({}), False) self.assertIs(bool({1: 2}), True) - @unittest.skip("TODO: RUSTPYTHON") def test_keys(self): d = {} self.assertEqual(set(d.keys()), set()) @@ -59,7 +58,6 @@ class DictTest(unittest.TestCase): self.assertRaises(TypeError, d.keys, None) self.assertEqual(repr(dict(a=1).keys()), "dict_keys(['a'])") - @unittest.skip("TODO: RUSTPYTHON") def test_values(self): d = {} self.assertEqual(set(d.values()), set()) @@ -68,7 +66,6 @@ class DictTest(unittest.TestCase): self.assertRaises(TypeError, d.values, None) self.assertEqual(repr(dict(a=1).values()), "dict_values([1])") - @unittest.skip("TODO: RUSTPYTHON") def test_items(self): d = {} self.assertEqual(set(d.items()), set()) diff --git a/vm/src/obj/objdict.rs b/vm/src/obj/objdict.rs index ffb6ba5f2..c46c6a488 100644 --- a/vm/src/obj/objdict.rs +++ b/vm/src/obj/objdict.rs @@ -516,6 +516,22 @@ macro_rules! dict_iterator { fn len(&self, vm: &VirtualMachine) -> usize { self.dict.clone().len(vm) } + + #[pymethod(name = "__repr__")] + #[allow(clippy::redundant_closure_call)] + fn repr(zelf: PyRef, vm: &VirtualMachine) -> PyResult { + let s = if let Some(_guard) = ReprGuard::enter(zelf.as_object()) { + let mut str_parts = vec![]; + for (key, value) in zelf.dict.clone() { + let s = vm.to_repr(&$result_fn(vm, &key, &value))?; + str_parts.push(s.as_str().to_string()); + } + format!("{}([{}])", $class_name, str_parts.join(", ")) + } else { + "{...}".to_string() + }; + Ok(s) + } } impl PyValue for $name { @@ -589,7 +605,7 @@ dict_iterator! { PyDictKeyIterator, dictkeys_type, dictkeyiterator_type, - "dictkeys", + "dict_keys", "dictkeyiterator", |_vm: &VirtualMachine, key: &PyObjectRef, _value: &PyObjectRef| key.clone() } @@ -599,7 +615,7 @@ dict_iterator! { PyDictValueIterator, dictvalues_type, dictvalueiterator_type, - "dictvalues", + "dict_values", "dictvalueiterator", |_vm: &VirtualMachine, _key: &PyObjectRef, value: &PyObjectRef| value.clone() } @@ -609,7 +625,7 @@ dict_iterator! { PyDictItemIterator, dictitems_type, dictitemiterator_type, - "dictitems", + "dict_items", "dictitemiterator", |vm: &VirtualMachine, key: &PyObjectRef, value: &PyObjectRef| vm.ctx.new_tuple(vec![key.clone(), value.clone()])