gh-106368: Increase Argument Clinic test coverage (#106369)

Add tests for 'self' and 'defining_class' converter requirements.
This commit is contained in:
Erlend E. Aasland 2023-07-03 22:16:50 +02:00 committed by GitHub
parent bf06c6825c
commit 7f4c8121db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 57 additions and 0 deletions

View File

@ -829,6 +829,63 @@ Annotations must be either a name, a function call, or a string.
out = self.parse_function_should_fail(fn)
self.assertEqual(out, expected_error_msg)
def test_self_param_placement(self):
expected_error_msg = (
"Error on line 0:\n"
"A 'self' parameter, if specified, must be the very first thing "
"in the parameter block.\n"
)
block = """
module foo
foo.func
a: int
self: self(type="PyObject *")
"""
out = self.parse_function_should_fail(block)
self.assertEqual(out, expected_error_msg)
def test_self_param_cannot_be_optional(self):
expected_error_msg = (
"Error on line 0:\n"
"A 'self' parameter cannot be marked optional.\n"
)
block = """
module foo
foo.func
self: self(type="PyObject *") = None
"""
out = self.parse_function_should_fail(block)
self.assertEqual(out, expected_error_msg)
def test_defining_class_param_placement(self):
expected_error_msg = (
"Error on line 0:\n"
"A 'defining_class' parameter, if specified, must either be the "
"first thing in the parameter block, or come just after 'self'.\n"
)
block = """
module foo
foo.func
self: self(type="PyObject *")
a: int
cls: defining_class
"""
out = self.parse_function_should_fail(block)
self.assertEqual(out, expected_error_msg)
def test_defining_class_param_cannot_be_optional(self):
expected_error_msg = (
"Error on line 0:\n"
"A 'defining_class' parameter cannot be marked optional.\n"
)
block = """
module foo
foo.func
cls: defining_class(type="PyObject *") = None
"""
out = self.parse_function_should_fail(block)
self.assertEqual(out, expected_error_msg)
def test_unused_param(self):
block = self.parse("""
module foo