Skip to content

Commit 52d5049

Browse files
[3.11] gh-106368: Increase Argument Clinic test coverage (#106369) (#106374)
Add tests for 'self' and 'defining_class' converter requirements. (cherry picked from commit 7f4c812)
1 parent e0d951d commit 52d5049

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

Lib/test/test_clinic.py

+57
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,63 @@ def test_other_bizarre_things_in_annotations_fail(self):
812812
)
813813
self.assertEqual(s, expected_failure_message)
814814

815+
def test_self_param_placement(self):
816+
expected_error_msg = (
817+
"Error on line 0:\n"
818+
"A 'self' parameter, if specified, must be the very first thing "
819+
"in the parameter block.\n"
820+
)
821+
block = """
822+
module foo
823+
foo.func
824+
a: int
825+
self: self(type="PyObject *")
826+
"""
827+
out = self.parse_function_should_fail(block)
828+
self.assertEqual(out, expected_error_msg)
829+
830+
def test_self_param_cannot_be_optional(self):
831+
expected_error_msg = (
832+
"Error on line 0:\n"
833+
"A 'self' parameter cannot be marked optional.\n"
834+
)
835+
block = """
836+
module foo
837+
foo.func
838+
self: self(type="PyObject *") = None
839+
"""
840+
out = self.parse_function_should_fail(block)
841+
self.assertEqual(out, expected_error_msg)
842+
843+
def test_defining_class_param_placement(self):
844+
expected_error_msg = (
845+
"Error on line 0:\n"
846+
"A 'defining_class' parameter, if specified, must either be the "
847+
"first thing in the parameter block, or come just after 'self'.\n"
848+
)
849+
block = """
850+
module foo
851+
foo.func
852+
self: self(type="PyObject *")
853+
a: int
854+
cls: defining_class
855+
"""
856+
out = self.parse_function_should_fail(block)
857+
self.assertEqual(out, expected_error_msg)
858+
859+
def test_defining_class_param_cannot_be_optional(self):
860+
expected_error_msg = (
861+
"Error on line 0:\n"
862+
"A 'defining_class' parameter cannot be marked optional.\n"
863+
)
864+
block = """
865+
module foo
866+
foo.func
867+
cls: defining_class(type="PyObject *") = None
868+
"""
869+
out = self.parse_function_should_fail(block)
870+
self.assertEqual(out, expected_error_msg)
871+
815872
def parse(self, text):
816873
c = FakeClinic()
817874
parser = DSLParser(c)

0 commit comments

Comments
 (0)