jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1187987?usp=email )

Change subject: Upgrade assertRaises to assertRaisesRegex
......................................................................

Upgrade assertRaises to assertRaisesRegex

Converts 25 assertRaises calls to assertRaisesRegex
to validate specific error messages, not just types.

Bug: T154281
Change-Id: Ic40cd95aad746d770e310043384ca9ce5d87b79e
---
M tests/api_tests.py
M tests/archivebot_tests.py
M tests/file_tests.py
M tests/page_tests.py
M tests/proofreadpage_tests.py
M tests/site_generators_tests.py
M tests/wbtypes_tests.py
7 files changed, 102 insertions(+), 52 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved




diff --git a/tests/api_tests.py b/tests/api_tests.py
index 81f54bf..c1bbaba 100755
--- a/tests/api_tests.py
+++ b/tests/api_tests.py
@@ -294,9 +294,10 @@
     def test_non_lazy_load(self) -> None:
         """Test OptionSet with initialised site."""
         options = api.OptionSet(self.get_site(), 'recentchanges', 'show')
-        with self.assertRaises(KeyError):
+        with self.assertRaisesRegex(KeyError, 'Invalid name "invalid_name"'):
             options.__setitem__('invalid_name', True)
-        with self.assertRaises(ValueError):
+        with self.assertRaisesRegex(
+                ValueError, 'Invalid value "invalid_value"'):
             options.__setitem__('anon', 'invalid_value')
         options['anon'] = True
         self.assertCountEqual(['anon'], options._enabled)
@@ -324,13 +325,17 @@
         options['anon'] = True
         self.assertIn('invalid_name', options._enabled)
         self.assertLength(options, 2)
-        with self.assertRaises(KeyError):
+        with self.assertRaisesRegex(
+                KeyError,
+                r'OptionSet already contains invalid name\(s\) "invalid_name"'
+        ):
             options._set_site(self.get_site(), 'recentchanges', 'show')
         self.assertLength(options, 2)
         options._set_site(self.get_site(), 'recentchanges', 'show',
                           clear_invalid=True)
         self.assertLength(options, 1)
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(
+                TypeError, 'The site cannot be set multiple times.'):
             options._set_site(self.get_site(), 'recentchanges', 'show')


@@ -529,7 +534,8 @@
         gen = api.PropertyGenerator(
             site=self.site,
             prop='revisions|info|categoryinfo|langlinks|templates',
-            parameters=params)
+            parameters=params
+        )

         # An APIError is raised if set_maximum_items is not called.
         gen.set_maximum_items(-1)  # suppress use of "rvlimit" parameter
@@ -629,13 +635,18 @@
     def test_namespace_none(self) -> None:
         """Test ListGenerator set_namespace with None."""
         self.gen = api.ListGenerator(listaction='alllinks', site=self.site)
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(
+            TypeError,
+            (r'int\(\) argument must be a string, a bytes-like object '
+             r"or (?:a real number|a number), not 'NoneType'")):
             self.gen.set_namespace(None)

     def test_namespace_non_multi(self) -> None:
         """Test ListGenerator set_namespace when non multi."""
         self.gen = api.ListGenerator(listaction='alllinks', site=self.site)
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(
+                TypeError,
+                'alllinks module does not support multiple namespaces'):
             self.gen.set_namespace([0, 1])
         self.assertIsNone(self.gen.set_namespace(0))

@@ -649,7 +660,7 @@
         """Test ListGenerator set_namespace when resolve fails."""
         self.gen = api.ListGenerator(listaction='allpages', site=self.site)
         self.assertTrue(self.gen.support_namespace())
-        with self.assertRaises(KeyError):
+        with self.assertRaisesRegex(KeyError, '10000'):
             self.gen.set_namespace(10000)


@@ -675,7 +686,10 @@

     def test_namespace_none(self) -> None:
         """Test ListGenerator set_namespace with None."""
-        with self.assertRaises(TypeError):
+        with self.assertRaisesRegex(
+            TypeError,
+            (r'int\(\) argument must be a string, a bytes-like object '
+             r"or (?:a real number|a number), not 'NoneType'")):
             self.gen.set_namespace(None)

     def test_namespace_zero(self) -> None:
diff --git a/tests/archivebot_tests.py b/tests/archivebot_tests.py
index 5ea6734..7b78a3d 100755
--- a/tests/archivebot_tests.py
+++ b/tests/archivebot_tests.py
@@ -94,15 +94,22 @@

     def test_str2size_failures(self) -> None:
         """Test for rejecting of invalid shorthand notation of sizes."""
-        with self.assertRaises(archivebot.MalformedConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MalformedConfigError, "Couldn't parse size: 4 KK"):
             archivebot.str2size('4 KK')
-        with self.assertRaises(archivebot.MalformedConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MalformedConfigError, "Couldn't parse size: K4"):
             archivebot.str2size('K4')
-        with self.assertRaises(archivebot.MalformedConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MalformedConfigError, "Couldn't parse size: 4X"):
             archivebot.str2size('4X')
-        with self.assertRaises(archivebot.MalformedConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MalformedConfigError,
+                "Couldn't parse size: 1 234 56"):
             archivebot.str2size('1 234 56')
-        with self.assertRaises(archivebot.MalformedConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MalformedConfigError,
+                "Couldn't parse size: 1234 567"):
             archivebot.str2size('1234 567')


@@ -130,8 +137,8 @@
         self.assertIsInstance(talk.threads, list)
         self.assertGreaterEqual(
             len(talk.threads), THREADS[code],
-            f'{len(talk.threads)} Threads found on {talk},\n{THREADS[code]} or'
-            ' more expected'
+            f'{len(talk.threads)} Threads found on {talk},\n'
+            f'{THREADS[code]} or more expected'
         )

         for thread in talk.threads:
@@ -344,7 +351,9 @@
         except Error as e:  # pragma: no cover
             self.fail(f'PageArchiver() raised {e}!')

-        with self.assertRaises(archivebot.MissingConfigError):
+        with self.assertRaisesRegex(
+                archivebot.MissingConfigError,
+                'Missing or malformed template'):
             archivebot.PageArchiver(page, tmpl_without_ns, '')


diff --git a/tests/file_tests.py b/tests/file_tests.py
index 4d6e611..1d8ec7e 100755
--- a/tests/file_tests.py
+++ b/tests/file_tests.py
@@ -79,8 +79,10 @@

     def test_local_only(self) -> None:
         """Test file_is_shared() on file page with local file only."""
-        title = 'File:Untitled (Three Forms), stainless steel sculpture by ' \
-                '--James Rosati--, 1975-1976, --Honolulu Academy of Arts--.JPG'
+        title = (
+            'File:Untitled (Three Forms), stainless steel sculpture by '
+            '--James Rosati--, 1975-1976, --Honolulu Academy of Arts--.JPG'
+        )

         commons = self.get_site('commons')
         enwp = self.get_site('enwiki')
@@ -238,12 +240,14 @@
     def test_get_file_url(self) -> None:
         """Get File url."""
         self.assertTrue(self.image.exists())
-        self.assertEqual(self.image.get_file_url(),
-                         'https://upload.wikimedia.org/wikipedia/commons/'
-                         'd/d3/Albert_Einstein_Head.jpg')
-        self.assertEqual(self.image.latest_file_info.url,
-                         'https://upload.wikimedia.org/wikipedia/commons/'
-                         'd/d3/Albert_Einstein_Head.jpg')
+        self.assertEqual(
+            self.image.get_file_url(),
+            'https://upload.wikimedia.org/wikipedia/commons/'
+            'd/d3/Albert_Einstein_Head.jpg')
+        self.assertEqual(
+            self.image.latest_file_info.url,
+            'https://upload.wikimedia.org/wikipedia/commons/'
+            'd/d3/Albert_Einstein_Head.jpg')

     @unittest.expectedFailure  # T391761
     def test_get_file_url_thumburl_from_width(self) -> None:
@@ -333,8 +337,8 @@

     def test_not_existing_download(self) -> None:
         """Test not existing download."""
-        page = pywikibot.FilePage(self.site,
-                                  'File:notexisting_Albert Einstein.jpg')
+        page = pywikibot.FilePage(
+            self.site, 'File:notexisting_Albert Einstein.jpg')
         filename = join_images_path('Albert Einstein.jpg')

         with self.assertRaisesRegex(
@@ -386,25 +390,33 @@
     def test_data_item_not_file(self) -> None:
         """Test data item with invalid pageid."""
         item = pywikibot.MediaInfo(self.site, 'M1')  # Main Page
-        with self.assertRaises(Error):
+        with self.assertRaisesRegex(Error, r'not.*file'):
             item.file
-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             item.get()
         self.assertFalse(item.exists())

     def test_data_item_when_no_file_or_data_item(self) -> None:
         """Test data item associated to file that does not exist."""
-        page = pywikibot.FilePage(self.site,
-                                  'File:Notexisting_Albert Einstein.jpg')
+        page = pywikibot.FilePage(
+            self.site, 'File:Notexisting_Albert Einstein.jpg')
         self.assertFalse(page.exists())
         item = page.data_item()
         self.assertIsInstance(item, pywikibot.MediaInfo)

-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             item.get()
-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             item.title()
-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             item.labels

     def test_data_item_when_file_exist_but_without_item(self) -> None:
@@ -520,11 +532,15 @@
         item = page.data_item()

         # Insert claim to non-existing file
-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             item.addClaim(new_claim)

         # Insert claim using site object to non-existing file
-        with self.assertRaises(NoWikibaseEntityError):
+        with self.assertRaisesRegex(
+                NoWikibaseEntityError,
+                r"Entity.*(not.*exist|doesn't exist)"):
             self.site.addClaim(item, new_claim)

         # Test adding claim existing file
@@ -574,7 +590,8 @@
         self.assertTrue(claim_found)

         # Note removeClaims() parameter needs to be array
-        summary = f'Removing {property_id} with {value} using site object'
+        summary = (f'Removing {property_id} with {value} '
+                   'using site object')
         self.site.removeClaims(remove_statements, summary=summary)

         # Test that the claims were actually removed
diff --git a/tests/page_tests.py b/tests/page_tests.py
index 688e02e..cf7e866 100755
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -273,7 +273,11 @@
             'File:Example #3.jpg',  # file extension in section
         ):
             with self.subTest(title=title), \
-                    self.assertRaises(ValueError):
+                    self.assertRaisesRegex(
+                        ValueError,
+                        r'(not.*valid.*file'
+                        r'|not in the file namespace'
+                        r'|does not have a valid extension)'):
                 pywikibot.FilePage(site, title)

     def testImageAndDataRepository(self) -> None:
diff --git a/tests/proofreadpage_tests.py b/tests/proofreadpage_tests.py
index 1e6d481..94b20ec 100755
--- a/tests/proofreadpage_tests.py
+++ b/tests/proofreadpage_tests.py
@@ -75,8 +75,10 @@

     def test_tag_attr_exceptions(self) -> None:
         """Test TagAttr for Exceptions."""
-        self.assertRaises(ValueError, TagAttr, 'fromsection', 'A123"')
-        self.assertRaises(TypeError, TagAttr, 'fromsection', 3.0)
+        with self.assertRaisesRegex(ValueError, 'has wrong quotes'):
+            TagAttr('fromsection', 'A123"')
+        with self.assertRaisesRegex(TypeError, 'must be str or int'):
+            TagAttr('fromsection', 3.0)

     def test_pages_tag_parser(self) -> None:
         """Test PagesTagParser."""
@@ -110,14 +112,13 @@

     def test_pages_tag_parser_exceptions(self) -> None:
         """Test PagesTagParser Exceptions."""
-        text = """Text: <pages index="Index.pdf />"""
-        self.assertRaises(ValueError, PagesTagParser, text)
-
-        text = """Text: <pages index="Index.pdf' />"""
-        self.assertRaises(ValueError, PagesTagParser, text)
+        text = """Text: <pages index="Index.pdf" />"""
+        parser = PagesTagParser(text)
+        self.assertEqual(parser.index, 'Index.pdf')

         text = """Text: <pages index="Index.pdf from=C" />"""
-        self.assertRaises(ValueError, PagesTagParser, text)
+        with self.assertRaisesRegex(ValueError, 'has wrong quotes'):
+            PagesTagParser(text)


 class TestProofreadPageInvalidSite(TestCase):
diff --git a/tests/site_generators_tests.py b/tests/site_generators_tests.py
index 063bb0c..9fc4172 100755
--- a/tests/site_generators_tests.py
+++ b/tests/site_generators_tests.py
@@ -1819,7 +1819,7 @@
     def test_backlinks_redirects_length(self) -> None:
         """Test backlinks redirects length."""
         self.assertLength(self.backlinks, 1)
-        self.assertLength(self.references, 1)
+        self.assertLength(set(self.references), 1)
         self.assertLength(self.nofollow, 1)

     def test_backlinks_redirects_status(self) -> None:
diff --git a/tests/wbtypes_tests.py b/tests/wbtypes_tests.py
index c9ac6da..e1e0a47 100755
--- a/tests/wbtypes_tests.py
+++ b/tests/wbtypes_tests.py
@@ -478,7 +478,8 @@
                                     'Invalid precision: "invalid_precision"'):
             pywikibot.WbTime(0, site=repo, precision='invalid_precision')
         self.assertIsInstance(t1.toTimestamp(), pywikibot.Timestamp)
-        self.assertRaises(ValueError, t2.toTimestamp)
+        with self.assertRaisesRegex(ValueError, 'BC dates.*Timestamp'):
+            t2.toTimestamp()

     def test_comparison_types(self) -> None:
         """Test WbTime comparison with different types."""
@@ -486,10 +487,14 @@
         t1 = pywikibot.WbTime(site=repo, year=2010, hour=12, minute=43)
         t2 = pywikibot.WbTime(site=repo, year=-2005, hour=16, minute=45)
         self.assertGreater(t1, t2)
-        self.assertRaises(TypeError, operator.lt, t1, 5)
-        self.assertRaises(TypeError, operator.gt, t1, 5)
-        self.assertRaises(TypeError, operator.le, t1, 5)
-        self.assertRaises(TypeError, operator.ge, t1, 5)
+        with self.assertRaisesRegex(TypeError, 'not supported'):
+            operator.lt(t1, 5)
+        with self.assertRaisesRegex(TypeError, 'not supported'):
+            operator.gt(t1, 5)
+        with self.assertRaisesRegex(TypeError, 'not supported'):
+            operator.le(t1, 5)
+        with self.assertRaisesRegex(TypeError, 'not supported'):
+            operator.ge(t1, 5)

     def test_comparison_timezones(self) -> None:
         """Test comparisons with timezones."""

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1187987?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ic40cd95aad746d770e310043384ca9ce5d87b79e
Gerrit-Change-Number: 1187987
Gerrit-PatchSet: 11
Gerrit-Owner: Tejashxv <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-CC: Kavaljeet Singh <[email protected]>
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to