From 69970ba3b92b67684591338eada5852ef545ffe9 Mon Sep 17 00:00:00 2001 From: Stepan Shamaiev <59963936+skippdot@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:51:50 +0300 Subject: [PATCH 1/2] fix: enable strict positional enforcement for the test suite under pytest - Set `positional_parameters_enforcement = POSITIONAL_EXCEPTION` at import time in tests/__init__.py and delete the nose-era `setup_package()` hook, which pytest never calls, leaving the suite in warning-only mode - Save and restore the enforcement setting in PositionalTests, whose methods mutate the module-level flag and previously leaked whatever value the last-run test set, making other tests pass or fail depending on order - The suite only passed in full runs by accident: alphabetical ordering left `test_usage` (EXCEPTION) as the last write; any other order, or running test_discovery.py alone, failed `test_tests_should_be_run_with_strict_positional_enforcement` Fixes #2755 --- tests/__init__.py | 9 +++++---- tests/test__helpers.py | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tests/__init__.py b/tests/__init__.py index b4f509dda7e..cb3d054cbb6 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -18,7 +18,8 @@ from googleapiclient import _helpers as util - -def setup_package(): - """Run on testing package.""" - util.positional_parameters_enforcement = "EXCEPTION" +# The test suite is written against strict positional parameter enforcement: +# violations must raise TypeError rather than only log a warning. This used to +# be configured in a nose-era setup_package() hook, which pytest never calls, +# so set it at import time instead. +util.positional_parameters_enforcement = util.POSITIONAL_EXCEPTION diff --git a/tests/test__helpers.py b/tests/test__helpers.py index 56df6f88079..43a4d04361d 100644 --- a/tests/test__helpers.py +++ b/tests/test__helpers.py @@ -22,6 +22,14 @@ class PositionalTests(unittest.TestCase): + def setUp(self): + self._saved_enforcement = _helpers.positional_parameters_enforcement + + def tearDown(self): + # These tests mutate the module-level enforcement setting; restore it + # so the rest of the suite keeps running in strict mode. + _helpers.positional_parameters_enforcement = self._saved_enforcement + def test_usage(self): _helpers.positional_parameters_enforcement = _helpers.POSITIONAL_EXCEPTION From fee2e33a211c6846cb8338e6a56af570caf3b242 Mon Sep 17 00:00:00 2001 From: Stepan Shamaiev <59963936+skippdot@users.noreply.github.com> Date: Tue, 1 Sep 2026 17:55:38 +0300 Subject: [PATCH 2/2] fix: use addCleanup to restore enforcement setting - Replace the setUp/tearDown pair in PositionalTests with a single setUp registering addCleanup, as suggested in review - Cleanup now runs even if setUp or the test itself fails midway --- tests/test__helpers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test__helpers.py b/tests/test__helpers.py index 43a4d04361d..4322d623c76 100644 --- a/tests/test__helpers.py +++ b/tests/test__helpers.py @@ -23,12 +23,12 @@ class PositionalTests(unittest.TestCase): def setUp(self): - self._saved_enforcement = _helpers.positional_parameters_enforcement - - def tearDown(self): # These tests mutate the module-level enforcement setting; restore it # so the rest of the suite keeps running in strict mode. - _helpers.positional_parameters_enforcement = self._saved_enforcement + saved_enforcement = _helpers.positional_parameters_enforcement + self.addCleanup( + setattr, _helpers, "positional_parameters_enforcement", saved_enforcement + ) def test_usage(self): _helpers.positional_parameters_enforcement = _helpers.POSITIONAL_EXCEPTION