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]