Skip to content

Commit 28f0fa4

Browse files
Fix abc error messages (RustPython#5140)
Co-authored-by: Jeong, YunWon <jeong@youknowone.org>
1 parent 1983138 commit 28f0fa4

File tree

3 files changed

+4
-15
lines changed

3 files changed

+4
-15
lines changed

Lib/test/test_abc.py

-12
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,6 @@ def foo(): return 4
149149
self.assertEqual(D.foo(), 4)
150150
self.assertEqual(D().foo(), 4)
151151

152-
# TODO: RUSTPYTHON
153-
@unittest.expectedFailure
154152
def test_object_new_with_one_abstractmethod(self):
155153
class C(metaclass=abc_ABCMeta):
156154
@abc.abstractmethod
@@ -159,8 +157,6 @@ def method_one(self):
159157
msg = r"class C without an implementation for abstract method 'method_one'"
160158
self.assertRaisesRegex(TypeError, msg, C)
161159

162-
# TODO: RUSTPYTHON
163-
@unittest.expectedFailure
164160
def test_object_new_with_many_abstractmethods(self):
165161
class C(metaclass=abc_ABCMeta):
166162
@abc.abstractmethod
@@ -526,8 +522,6 @@ def foo(self):
526522
self.assertEqual(A.__abstractmethods__, set())
527523
A()
528524

529-
# TODO: RUSTPYTHON
530-
@unittest.expectedFailure
531525
def test_update_new_abstractmethods(self):
532526
class A(metaclass=abc_ABCMeta):
533527
@abc.abstractmethod
@@ -544,8 +538,6 @@ def updated_foo(self):
544538
msg = "class A without an implementation for abstract methods 'bar', 'foo'"
545539
self.assertRaisesRegex(TypeError, msg, A)
546540

547-
# TODO: RUSTPYTHON
548-
@unittest.expectedFailure
549541
def test_update_implementation(self):
550542
class A(metaclass=abc_ABCMeta):
551543
@abc.abstractmethod
@@ -597,8 +589,6 @@ def updated_foo(self):
597589
A()
598590
self.assertFalse(hasattr(A, '__abstractmethods__'))
599591

600-
# TODO: RUSTPYTHON
601-
@unittest.expectedFailure
602592
def test_update_del_implementation(self):
603593
class A(metaclass=abc_ABCMeta):
604594
@abc.abstractmethod
@@ -618,8 +608,6 @@ def foo(self):
618608
msg = "class B without an implementation for abstract method 'foo'"
619609
self.assertRaisesRegex(TypeError, msg, B)
620610

621-
# TODO: RUSTPYTHON
622-
@unittest.expectedFailure
623611
def test_update_layered_implementation(self):
624612
class A(metaclass=abc_ABCMeta):
625613
@abc.abstractmethod

Lib/test/test_dataclasses.py

+1
Original file line numberDiff line numberDiff line change
@@ -3676,6 +3676,7 @@ class Date(Ordered):
36763676
self.assertFalse(inspect.isabstract(Date))
36773677
self.assertGreater(Date(2020,12,25), Date(2020,8,31))
36783678

3679+
@unittest.expectedFailure
36793680
def test_maintain_abc(self):
36803681
class A(abc.ABC):
36813682
@abc.abstractmethod

vm/src/builtins/object.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl Constructor for PyBaseObject {
4141
if let Some(unimplemented_abstract_method_count) = abs_methods.length_opt(vm) {
4242
let methods: Vec<PyStrRef> = abs_methods.try_to_value(vm)?;
4343
let methods: String =
44-
Itertools::intersperse(methods.iter().map(|name| name.as_str()), ", ")
44+
Itertools::intersperse(methods.iter().map(|name| name.as_str()), "', '")
4545
.collect();
4646

4747
let unimplemented_abstract_method_count = unimplemented_abstract_method_count?;
@@ -51,13 +51,13 @@ impl Constructor for PyBaseObject {
5151
0 => {}
5252
1 => {
5353
return Err(vm.new_type_error(format!(
54-
"Can't instantiate abstract class {} with abstract method {}",
54+
"class {} without an implementation for abstract method '{}'",
5555
name, methods
5656
)));
5757
}
5858
2.. => {
5959
return Err(vm.new_type_error(format!(
60-
"Can't instantiate abstract class {} with abstract methods {}",
60+
"class {} without an implementation for abstract methods '{}'",
6161
name, methods
6262
)));
6363
}

0 commit comments

Comments
 (0)