Skip to content

Commit 7f4c812

Browse files
gh-106368: Increase Argument Clinic test coverage (#106369)
Add tests for 'self' and 'defining_class' converter requirements.
1 parent bf06c68 commit 7f4c812

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
@@ -829,6 +829,63 @@ def test_kwarg_splats_disallowed_in_function_call_annotations(self):
829829
out = self.parse_function_should_fail(fn)
830830
self.assertEqual(out, expected_error_msg)
831831

832+
def test_self_param_placement(self):
833+
expected_error_msg = (
834+
"Error on line 0:\n"
835+
"A 'self' parameter, if specified, must be the very first thing "
836+
"in the parameter block.\n"
837+
)
838+
block = """
839+
module foo
840+
foo.func
841+
a: int
842+
self: self(type="PyObject *")
843+
"""
844+
out = self.parse_function_should_fail(block)
845+
self.assertEqual(out, expected_error_msg)
846+
847+
def test_self_param_cannot_be_optional(self):
848+
expected_error_msg = (
849+
"Error on line 0:\n"
850+
"A 'self' parameter cannot be marked optional.\n"
851+
)
852+
block = """
853+
module foo
854+
foo.func
855+
self: self(type="PyObject *") = None
856+
"""
857+
out = self.parse_function_should_fail(block)
858+
self.assertEqual(out, expected_error_msg)
859+
860+
def test_defining_class_param_placement(self):
861+
expected_error_msg = (
862+
"Error on line 0:\n"
863+
"A 'defining_class' parameter, if specified, must either be the "
864+
"first thing in the parameter block, or come just after 'self'.\n"
865+
)
866+
block = """
867+
module foo
868+
foo.func
869+
self: self(type="PyObject *")
870+
a: int
871+
cls: defining_class
872+
"""
873+
out = self.parse_function_should_fail(block)
874+
self.assertEqual(out, expected_error_msg)
875+
876+
def test_defining_class_param_cannot_be_optional(self):
877+
expected_error_msg = (
878+
"Error on line 0:\n"
879+
"A 'defining_class' parameter cannot be marked optional.\n"
880+
)
881+
block = """
882+
module foo
883+
foo.func
884+
cls: defining_class(type="PyObject *") = None
885+
"""
886+
out = self.parse_function_should_fail(block)
887+
self.assertEqual(out, expected_error_msg)
888+
832889
def test_unused_param(self):
833890
block = self.parse("""
834891
module foo

0 commit comments

Comments
 (0)