summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_clinic.py
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2023-08-07 11:28:08 (GMT)
committerGitHub <noreply@github.com>2023-08-07 11:28:08 (GMT)
commit33cb0b06efe33968eb32463fa1b02b5a729a17f8 (patch)
tree03943530bbfb086afa1ba2965b544fa53335f1a3 /Lib/test/test_clinic.py
parent3c8e8f3ceeae08fc43d885f5a4c65a3ee4b1a2c8 (diff)
downloadcpython-33cb0b06efe33968eb32463fa1b02b5a729a17f8.zip
cpython-33cb0b06efe33968eb32463fa1b02b5a729a17f8.tar.gz
cpython-33cb0b06efe33968eb32463fa1b02b5a729a17f8.tar.bz2
gh-95065: Add Argument Clinic support for deprecating positional use of parameters (#95151)
It is now possible to deprecate passing parameters positionally with Argument Clinic, using the new '* [from X.Y]' syntax. (To be read as "keyword-only from Python version X.Y") Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib/test/test_clinic.py')
-rw-r--r--Lib/test/test_clinic.py96
1 files changed, 95 insertions, 1 deletions
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index f30fad2..f594e39 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -1478,11 +1478,105 @@ class ClinicParserTest(TestCase):
"module foo\nfoo.bar\n this: int\n *",
"module foo\nfoo.bar\n this: int\n *\nDocstring.",
)
- err = "Function 'bar' specifies '*' without any parameters afterwards."
+ err = "Function 'foo.bar' specifies '*' without any parameters afterwards."
for block in dataset:
with self.subTest(block=block):
self.expect_failure(block, err)
+ def test_parameters_required_after_depr_star(self):
+ dataset = (
+ "module foo\nfoo.bar\n * [from 3.14]",
+ "module foo\nfoo.bar\n * [from 3.14]\nDocstring here.",
+ "module foo\nfoo.bar\n this: int\n * [from 3.14]",
+ "module foo\nfoo.bar\n this: int\n * [from 3.14]\nDocstring.",
+ )
+ err = "Function 'foo.bar' specifies '* [from 3.14]' without any parameters afterwards."
+ for block in dataset:
+ with self.subTest(block=block):
+ self.expect_failure(block, err)
+
+ def test_depr_star_invalid_format_1(self):
+ block = """
+ module foo
+ foo.bar
+ this: int
+ * [from 3]
+ Docstring.
+ """
+ err = (
+ "Function 'foo.bar': expected format '* [from major.minor]' "
+ "where 'major' and 'minor' are integers; got '3'"
+ )
+ self.expect_failure(block, err, lineno=3)
+
+ def test_depr_star_invalid_format_2(self):
+ block = """
+ module foo
+ foo.bar
+ this: int
+ * [from a.b]
+ Docstring.
+ """
+ err = (
+ "Function 'foo.bar': expected format '* [from major.minor]' "
+ "where 'major' and 'minor' are integers; got 'a.b'"
+ )
+ self.expect_failure(block, err, lineno=3)
+
+ def test_depr_star_invalid_format_3(self):
+ block = """
+ module foo
+ foo.bar
+ this: int
+ * [from 1.2.3]
+ Docstring.
+ """
+ err = (
+ "Function 'foo.bar': expected format '* [from major.minor]' "
+ "where 'major' and 'minor' are integers; got '1.2.3'"
+ )
+ self.expect_failure(block, err, lineno=3)
+
+ def test_parameters_required_after_depr_star(self):
+ block = """
+ module foo
+ foo.bar
+ this: int
+ * [from 3.14]
+ Docstring.
+ """
+ err = (
+ "Function 'foo.bar' specifies '* [from ...]' without "
+ "any parameters afterwards"
+ )
+ self.expect_failure(block, err, lineno=4)
+
+ def test_depr_star_must_come_before_star(self):
+ block = """
+ module foo
+ foo.bar
+ this: int
+ *
+ * [from 3.14]
+ Docstring.
+ """
+ err = "Function 'foo.bar': '* [from ...]' must come before '*'"
+ self.expect_failure(block, err, lineno=4)
+
+ def test_depr_star_duplicate(self):
+ block = """
+ module foo
+ foo.bar
+ a: int
+ * [from 3.14]
+ b: int
+ * [from 3.14]
+ c: int
+ Docstring.
+ """
+ err = "Function 'foo.bar' uses '[from ...]' more than once"
+ self.expect_failure(block, err, lineno=5)
+
def test_single_slash(self):
block = """
module foo