jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/482503 )
Change subject: [tests] Provide additional assert methods for TestCase ......................................................................
[tests] Provide additional assert methods for TestCase
- assertIsEmpty tests whether a seqence is empty - assertIsNotEmpty tests whether a sequence is not empty - assertLength tests whether a sequence has a given length or whether its length is equal than another sequence
This methods are for easier tests and more informative messages when failing
- use the new introduce methods if they are appropriate - tests added to verify them
Change-Id: I18a01044d9543a3d9984330468071aecf70f0cbe --- M tests/__init__.py M tests/aspects.py M tests/basepage_tests.py M tests/category_tests.py M tests/deletionbot_tests.py M tests/diff_tests.py M tests/eventstreams_tests.py M tests/file_tests.py M tests/flow_edit_tests.py M tests/flow_tests.py M tests/interwikidata_tests.py M tests/l10n_tests.py M tests/namespace_tests.py M tests/oauth_tests.py M tests/page_tests.py M tests/pagegenerators_tests.py M tests/protectbot_tests.py M tests/reflinks_tests.py M tests/replacebot_tests.py M tests/site_tests.py M tests/sparql_tests.py M tests/template_bot_tests.py M tests/tests_tests.py M tests/tools_ip_tests.py M tests/tools_tests.py M tests/ui_tests.py M tests/upload_tests.py M tests/user_tests.py M tests/wikibase_tests.py M tests/xmlreader_tests.py 30 files changed, 259 insertions(+), 185 deletions(-)
Approvals: D3r1ck01: Looks good to me, approved jenkins-bot: Verified
diff --git a/tests/__init__.py b/tests/__init__.py index d62d9ce..1dca767 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -22,6 +22,7 @@ # - mwparserfromhell is optional, so is only imported in textlib_tests import requests import unittest +from unittest.util import safe_repr
from pywikibot import config import pywikibot.data.api @@ -30,6 +31,7 @@ from pywikibot import i18n from pywikibot.tools import PYTHON_VERSION
+ try: import unittest.mock as mock from unittest.mock import MagicMock, Mock, patch @@ -37,6 +39,7 @@ import mock from mock import MagicMock, Mock, patch
+assert safe_repr # pyflakes workaround _root_dir = os.path.split(os.path.split(__file__)[0])[0]
diff --git a/tests/aspects.py b/tests/aspects.py index 6d4e7c7..c7d7ebf 100644 --- a/tests/aspects.py +++ b/tests/aspects.py @@ -38,7 +38,8 @@
import tests
-from tests import unittest, patch_request, unpatch_request, unittest_print +from tests import ( + safe_repr, unittest, patch_request, unpatch_request, unittest_print) from tests.utils import ( add_metaclass, execute_pwb, DrySite, DryRequest, WarningSourceSkipContextManager, AssertAPIErrorContextManager, @@ -99,6 +100,32 @@ """ return self.assertItemsEqual(*args, **kwargs)
+ def assertIsEmpty(self, seq, msg=None): + """Check that the sequence is empty.""" + if seq: + msg = self._formatMessage(msg, '%s is not empty' % safe_repr(seq)) + raise self.failureException(msg) + + def assertIsNotEmpty(self, seq, msg=None): + """Check that the sequence is not empty.""" + if not seq: + msg = self._formatMessage(msg, '%s is empty' % safe_repr(seq)) + raise self.failureException(msg) + + def assertLength(self, seq, other, msg=None): + """Verify that a sequence expr has the length of other.""" + # the other parameter may be given as a sequence too + first_len = len(seq) + try: + second_len = len(other) + except TypeError: + second_len = other + + if first_len != second_len: + msg = self._formatMessage( + msg, 'len(%s) != %s' % (safe_repr(seq), second_len)) + raise self.failureException(msg) + def _addUnexpectedSuccess(self, result): """Report and ignore.""" unittest_print(' unexpected success ', end='') diff --git a/tests/basepage_tests.py b/tests/basepage_tests.py index b0ae97c..8964049 100644 --- a/tests/basepage_tests.py +++ b/tests/basepage_tests.py @@ -57,7 +57,7 @@
self.assertTrue(hasattr(page, '_revid')) self.assertTrue(hasattr(page, '_revisions')) - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIn(page._revid, page._revisions)
self.assertFalse(hasattr(page, '_text')) diff --git a/tests/category_tests.py b/tests/category_tests.py index 2e38ff7..19f667f 100644 --- a/tests/category_tests.py +++ b/tests/category_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the Category class.""" # -# (C) Pywikibot team, 2014-2018 +# (C) Pywikibot team, 2014-2019 # # Distributed under the terms of the MIT license. # @@ -91,7 +91,7 @@ self.assertNotIn(p3, members_namespace)
members_total = list(cat.members(total=2)) - self.assertEqual(len(members_total), 2) + self.assertLength(members_total, 2)
def test_subcategories(self): """Test the subcategories method.""" @@ -105,7 +105,7 @@ self.assertNotIn(c2, subcategories)
subcategories_total = list(cat.subcategories(total=2)) - self.assertEqual(len(subcategories_total), 2) + self.assertLength(subcategories_total, 2)
def test_subcategories_recurse(self): """Test the subcategories method with recurse=True.""" @@ -138,7 +138,7 @@ self.assertNotIn(p2, articles_namespace)
articles_total = list(cat.articles(total=2)) - self.assertEqual(len(articles_total), 2) + self.assertLength(articles_total, 2)
def test_redirects(self): """Test the redirects method.""" diff --git a/tests/deletionbot_tests.py b/tests/deletionbot_tests.py index 6607df7..1e433c7 100644 --- a/tests/deletionbot_tests.py +++ b/tests/deletionbot_tests.py @@ -30,12 +30,12 @@ site = self.get_site() cat = pywikibot.Category(site, 'Pywikibot Delete Test') delete.main('-cat:Pywikibot_Delete_Test', '-always') - self.assertEqual(len(list(cat.members())), 0) + self.assertEmpty(list(cat.members())) delete.main('-page:User:Unicodesnowman/DeleteTest1', '-always', '-undelete', '-summary=pywikibot unit tests') delete.main('-page:User:Unicodesnowman/DeleteTest2', '-always', '-undelete', '-summary=pywikibot unit tests') - self.assertEqual(len(list(cat.members())), 2) + self.assertLength(list(cat.members()), 2)
def test_undelete_existing(self): """Test undeleting an existing page.""" diff --git a/tests/diff_tests.py b/tests/diff_tests.py index d53b6f1..5d2f08d 100644 --- a/tests/diff_tests.py +++ b/tests/diff_tests.py @@ -80,8 +80,8 @@ site = self.get_site() diff_html = site.compare(139992, 139993) output = html_comparator(diff_html) - self.assertEqual(len(output['added-context']), 1) - self.assertEqual(len(output['deleted-context']), 1) + self.assertLength(output['added-context'], 1) + self.assertLength(output['deleted-context'], 1)
@patch('{0}.__import__'.format('__builtin__' if PY2 else 'builtins'), diff --git a/tests/eventstreams_tests.py b/tests/eventstreams_tests.py index 2c845df..4007e97 100644 --- a/tests/eventstreams_tests.py +++ b/tests/eventstreams_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the eventstreams module.""" # -# (C) Pywikibot team, 2017-2018 +# (C) Pywikibot team, 2017-2019 # # Distributed under the terms of the MIT license. # @@ -154,7 +154,7 @@ self.es.register_filter(foo='bar') self.assertTrue(callable(self.es.filter['all'][0])) self.es.register_filter(bar='baz') - self.assertEqual(len(self.es.filter['all']), 2) + self.assertLength(self.es.filter['all'], 2)
class TestEventStreamsFilterTests(TestCase): diff --git a/tests/file_tests.py b/tests/file_tests.py index 297a9e2..1e7b50b 100644 --- a/tests/file_tests.py +++ b/tests/file_tests.py @@ -280,7 +280,7 @@ page = pywikibot.FilePage(self.site, 'File:Albert Einstein.jpg') latest = page.getLatestUploader() self.assertOneDeprecation() - self.assertEqual(len(latest), 2) + self.assertLength(latest, 2) self.assertIsInstance(latest[0], unicode) self.assertIsInstance(latest[1], unicode)
diff --git a/tests/flow_edit_tests.py b/tests/flow_edit_tests.py index bc60a16..4d08b5b 100644 --- a/tests/flow_edit_tests.py +++ b/tests/flow_edit_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Edit tests for the flow module.""" # -# (C) Pywikibot team, 2015-2018 +# (C) Pywikibot team, 2015-2019 # # Distributed under the terms of the MIT license. # @@ -70,7 +70,7 @@ self.assertEqual(wikitext, content) # Test reply list in topic new_replies = topic.replies(force=True) - self.assertEqual(len(new_replies), len(old_replies) + 1) + self.assertLength(new_replies, len(old_replies) + 1)
def test_reply_to_topic_root(self): """Test replying to the topic's root post directly.""" @@ -90,7 +90,7 @@ self.assertEqual(wikitext, content) # Test reply list in topic new_replies = topic_root.replies(force=True) - self.assertEqual(len(new_replies), len(old_replies) + 1) + self.assertLength(new_replies, len(old_replies) + 1)
def test_reply_to_post(self): """Test replying to an ordinary post.""" @@ -109,7 +109,7 @@ self.assertEqual(wikitext, content) # Test reply list in topic new_replies = root_post.replies(force=True) - self.assertEqual(len(new_replies), len(old_replies) + 1) + self.assertLength(new_replies, len(old_replies) + 1)
def test_nested_reply(self): """Test replying to a previous reply to a topic.""" @@ -130,7 +130,7 @@ self.assertEqual(first_wikitext, first_content) # Test reply list in topic new_root_replies = topic_root.replies(force=True) - self.assertEqual(len(new_root_replies), len(old_root_replies) + 1) + self.assertLength(new_root_replies, len(old_root_replies) + 1)
# Nested reply old_nested_replies = first_reply_post.replies(force=True)[:] @@ -147,13 +147,12 @@ # Test reply list in first reply # Broken due to current Flow reply structure (T105438) # new_nested_replies = first_reply_post.replies(force=True) - # self.assertEqual(len(new_nested_replies), - # len(old_nested_replies) + 1) + # self.assertLength(new_nested_replies, len(old_nested_replies) + 1)
# Current test for nested reply list self.assertListEqual(old_nested_replies, []) more_root_replies = topic_root.replies(force=True) - self.assertEqual(len(more_root_replies), len(new_root_replies) + 1) + self.assertLength(more_root_replies, len(new_root_replies) + 1)
class TestFlowLockTopic(TestCase): diff --git a/tests/flow_tests.py b/tests/flow_tests.py index 4b8df96..ae24720 100644 --- a/tests/flow_tests.py +++ b/tests/flow_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the flow module.""" # -# (C) Pywikibot team, 2015-2018 +# (C) Pywikibot team, 2015-2019 # # Distributed under the terms of the MIT license. # @@ -226,7 +226,7 @@ topic = Topic(self.site, 'Topic:U5y4l1rzitlplyc5') self.assertEqual(topic.root.uuid, 'u5y4l1rzitlplyc5') replies = topic.replies() - self.assertEqual(len(replies), 3) + self.assertLength(replies, 3) self.assertTrue(all(isinstance(reply, Post) for reply in replies)) self.assertEqual(replies[1].uuid, 'u5y5lysqcvyne4k1') diff --git a/tests/interwikidata_tests.py b/tests/interwikidata_tests.py index 5694969..ca3cfe7 100644 --- a/tests/interwikidata_tests.py +++ b/tests/interwikidata_tests.py @@ -63,7 +63,7 @@ text = page.get()
# The page looks as expected. - self.assertEqual(len(page.langlinks()), 1) + self.assertLength(page.langlinks(), 1) iw_link = page.langlinks()[0] self.assertIsInstance(iw_link, Link) self.assertEqual(iw_link.canonical_title(), 'کاربر:Ladsgroup') diff --git a/tests/l10n_tests.py b/tests/l10n_tests.py index 6c2ae31..2b86318 100644 --- a/tests/l10n_tests.py +++ b/tests/l10n_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test valid templates.""" # -# (C) Pywikibot team, 2015-2018 +# (C) Pywikibot team, 2015-2019 # # Distributed under the terms of the MIT license. # @@ -40,7 +40,7 @@ # check whether the message contains a template templates = extract_templates_and_params_regex_simple(msg) self.assertIsInstance(templates, list) - self.assertGreater(len(templates), 0) + self.assertIsNotEmpty(templates)
# known problem if site.code == 'simple': diff --git a/tests/namespace_tests.py b/tests/namespace_tests.py index e8e364f..6d563e8 100644 --- a/tests/namespace_tests.py +++ b/tests/namespace_tests.py @@ -96,7 +96,7 @@ self.assertIn('Image', y.aliases) self.assertIn('Immagine', y.aliases)
- self.assertEqual(len(y), 4) + self.assertLength(y, 4) self.assertEqual(list(y), ['dummy', 'File', 'Image', 'Immagine']) self.assertEqual(y.case, 'first-letter')
@@ -343,7 +343,7 @@
namespaces_set = set(namespaces)
- self.assertEqual(len(namespaces), len(namespaces_set)) + self.assertLength(namespaces, namespaces_set) self.assertTrue(all(isinstance(x, int) for x in namespaces_set))
def test_set_minus(self): @@ -354,8 +354,8 @@
positive_namespaces = set(namespaces) - excluded_namespaces
- self.assertEqual(len(namespaces), - len(positive_namespaces) + len(excluded_namespaces)) + self.assertLength(namespaces, + len(positive_namespaces) + len(excluded_namespaces))
class TestNamespacesDictLookupName(TestCase): diff --git a/tests/oauth_tests.py b/tests/oauth_tests.py index e211ae9..996d14e 100644 --- a/tests/oauth_tests.py +++ b/tests/oauth_tests.py @@ -42,7 +42,7 @@ tokens = self._get_oauth_tokens() if tokens is None: self.skipTest('OAuth tokens not set') - self.assertEqual(len(tokens), 4) + self.assertLength(tokens, 4) self.consumer_token = tokens[:2] self.access_token = tokens[2:]
diff --git a/tests/page_tests.py b/tests/page_tests.py index 462f056..4f361ce 100644 --- a/tests/page_tests.py +++ b/tests/page_tests.py @@ -678,7 +678,7 @@ page = pywikibot.FilePage(self.site, 'File:Example.jpg') gen = page.globalusage(total=3) pages = list(gen) - self.assertEqual(len(pages), 3) + self.assertLength(pages, 3) self.assertTrue(any(isinstance(p), pywikibot.Page) for p in pages) self.assertTrue(any(p.site != self.site for p in pages))
@@ -894,12 +894,12 @@
top_two = cnt.most_common(2) self.assertIsInstance(top_two, list) - self.assertEqual(len(top_two), 2) + self.assertLength(top_two, 2) self.assertIsInstance(top_two[0], tuple) self.assertIsInstance(top_two[0][0], basestring) self.assertIsInstance(top_two[0][1], int) top_two_usernames = {top_two[0][0], top_two[1][0]} - self.assertEqual(len(top_two_usernames), 2) + self.assertLength(top_two_usernames, 2) top_two_counts = ([top_two[0][1], top_two[1][1]]) top_two_edit_count = mp.revision_count(top_two_usernames) self.assertIsInstance(top_two_edit_count, int) @@ -1023,7 +1023,7 @@ p.markDeletedRevision, 123) p.undelete(reason='pywikibot unit test') revs = list(p.revisions()) - self.assertEqual(len(revs), 2) + self.assertLength(revs, 2) self.assertEqual(revs[1].revid, revid)
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py index 7440e6a..041d3fb 100755 --- a/tests/pagegenerators_tests.py +++ b/tests/pagegenerators_tests.py @@ -94,20 +94,20 @@ site = self.site gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator(gen, 0, site) - self.assertEqual(len(tuple(gen)), 3) + self.assertLength(tuple(gen), 3) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator(gen, 1, site) - self.assertEqual(len(tuple(gen)), 4) + self.assertLength(tuple(gen), 4) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator(gen, 10, site) - self.assertEqual(len(tuple(gen)), 6) + self.assertLength(tuple(gen), 6) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator(gen, (1, 10), site) - self.assertEqual(len(tuple(gen)), 10) + self.assertLength(tuple(gen), 10) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator( gen, ('Talk', 'Template'), site) - self.assertEqual(len(tuple(gen)), 10) + self.assertLength(tuple(gen), 10)
def test_RegexFilterPageGenerator(self): """Test RegexFilterPageGenerator.""" @@ -119,7 +119,7 @@ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site) gen = pagegenerators.RegexFilterPageGenerator(gen, '/doc', quantifier='none') - self.assertEqual(len(tuple(gen)), 11) + self.assertLength(tuple(gen), 11) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site) gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta']) self.assertPageTitlesEqual(gen, @@ -130,7 +130,7 @@ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site) gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'], quantifier='none') - self.assertEqual(len(tuple(gen)), 9) + self.assertLength(tuple(gen), 9) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site) gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'], quantifier='all') @@ -152,7 +152,7 @@ gen = pagegenerators.RegexFilterPageGenerator( gen, ['template', '/meta'], quantifier='any', ignore_namespace=False) - self.assertEqual(len(tuple(gen)), 6) + self.assertLength(tuple(gen), 6) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site=self.site) gen = pagegenerators.RegexFilterPageGenerator( @@ -166,7 +166,7 @@ gen = pagegenerators.RegexFilterPageGenerator( gen, ['template', '/meta'], quantifier='none', ignore_namespace=False) - self.assertEqual(len(tuple(gen)), 7) + self.assertLength(tuple(gen), 7)
def test_RegexBodyFilterPageGenerator(self): """Test RegexBodyFilterPageGenerator.""" @@ -184,7 +184,7 @@ self.assertPageTitlesEqual(gen, self.titles) gen = pagegenerators.RegexBodyFilterPageGenerator(iter(pages), 'talk', quantifier='none') - self.assertEqual(len(tuple(gen)), 9) + self.assertLength(tuple(gen), 9)
class TestPagesFromPageidGenerator(TestCase): @@ -240,7 +240,7 @@ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.CategoryFilterPageGenerator( gen, self.catfilter_list, site) - self.assertEqual(len(tuple(gen)), 10) + self.assertLength(tuple(gen), 10)
class TestQualityFilterPageGenerator(TestCase): @@ -265,11 +265,11 @@ site = self.site gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.QualityFilterPageGenerator(gen, [0]) - self.assertEqual(len(tuple(gen)), 7) + self.assertLength(tuple(gen), 7) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) gen = pagegenerators.NamespaceFilterPageGenerator(gen, [4]) gen = pagegenerators.PagesFromTitlesGenerator(self.titles, site) - self.assertEqual(len(tuple(gen)), 10) + self.assertLength(tuple(gen), 10)
class EdittimeFilterPageGeneratorTestCase(TestCase): @@ -309,22 +309,22 @@ gen = PagesFromTitlesGenerator(['Wikipedia:Sandbox'], self.site) gen = pagegenerators.EdittimeFilterPageGenerator( gen, last_edit_start=two_days_ago) - self.assertEqual(len(list(gen)), 1) + self.assertLength(list(gen), 1)
gen = PagesFromTitlesGenerator(['Wikipedia:Sandbox'], self.site) gen = pagegenerators.EdittimeFilterPageGenerator( gen, last_edit_end=two_days_ago) - self.assertEqual(len(list(gen)), 0) + self.assertIsEmpty(list(gen))
gen = PagesFromTitlesGenerator(['Template:Side box'], self.site) gen = pagegenerators.EdittimeFilterPageGenerator( gen, last_edit_end=nine_days_ago) - self.assertEqual(len(list(gen)), 1) + self.assertLength(list(gen), 1)
gen = PagesFromTitlesGenerator(['Template:Side box'], self.site) gen = pagegenerators.EdittimeFilterPageGenerator( gen, last_edit_start=nine_days_ago) - self.assertEqual(len(list(gen)), 0) + self.assertIsEmpty(list(gen))
class SubpageFilterGeneratorTestCase(TestCase): @@ -401,12 +401,12 @@ namespaces=[0], total=self.length) ) - self.assertEqual(len(items), self.length) + self.assertLength(items, self.length) timestamps = [pywikibot.Timestamp.fromISOformat(item['timestamp']) for item in items] self.assertEqual(sorted(timestamps), timestamps) self.assertTrue(all(item['ns'] == 0 for item in items)) - self.assertEqual(len({item['revid'] for item in items}), self.length) + self.assertLength({item['revid'] for item in items}, self.length)
class TestTextfilePageGenerator(DefaultSiteTestCase): @@ -433,7 +433,7 @@ filename = join_data_path('pagelist-brackets.txt') site = self.get_site() titles = list(pagegenerators.TextfilePageGenerator(filename, site)) - self.assertEqual(len(titles), len(self.expected_titles)) + self.assertLength(titles, self.expected_titles) expected_titles = [ expected_title[self.title_columns[site.namespaces[page.namespace()] .case]] @@ -445,7 +445,7 @@ filename = join_data_path('pagelist-lines.txt') site = self.get_site() titles = list(pagegenerators.TextfilePageGenerator(filename, site)) - self.assertEqual(len(titles), len(self.expected_titles)) + self.assertLength(titles, self.expected_titles) expected_titles = [ expected_title[self.title_columns[site.namespaces[page.namespace()] .case]] @@ -551,11 +551,11 @@ for page in PreloadingGenerator(links, groupsize=20): self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 - self.assertEqual(len(links), count) + self.assertLength(links, count)
def test_low_step(self): """Test PreloadingGenerator with a list of pages.""" @@ -566,11 +566,11 @@ for page in PreloadingGenerator(links, groupsize=10): self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 - self.assertEqual(len(links), count) + self.assertLength(links, count)
def test_order(self): """Test outcome is following same order of input.""" @@ -581,12 +581,12 @@ for page in PreloadingGenerator(links, groupsize=10): self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) self.assertEqual(page, links[count]) count += 1 - self.assertEqual(len(links), count) + self.assertLength(links, count)
class TestDequePreloadingGenerator(DefaultSiteTestCase): @@ -610,7 +610,7 @@ pywikibot.Page) for page in pages_out)) self.assertIn(mainpage, pages_out) self.assertIn(mainpage.toggleTalkPage(), pages_out) - self.assertEqual(len(pages_out), 2) + self.assertLength(pages_out, 2) self.assertTrue(pages_out[1].isTalkPage())
@@ -769,7 +769,10 @@ gen = pagegenerators.ItemClaimFilterPageGenerator([item], prop, claim, qualifiers, negate) pages = set(gen) - self.assertEqual(len(pages), 1 if valid else 0) + if valid: + self.assertLength(pages, 1) + else: + self.assertIsEmpty(pages)
def _get_council_page(self): """Return United Nations Security Council Wikidata page.""" @@ -1053,7 +1056,7 @@ gf.handleArg('-limit:10') gen = gf.getCombinedGenerator() pages = list(gen) - self.assertEqual(len(pages), 10) + self.assertLength(pages, 10) # pipe-separated used as test reference. pageids = '|'.join(str(page.pageid) for page in pages)
@@ -1063,7 +1066,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages_from_pageid = list(gen) - self.assertEqual(len(pages_from_pageid), 10) + self.assertLength(pages_from_pageid, 10) for page_a, page_b in zip(pages, pages_from_pageid): self.assertIsInstance(page_a, pywikibot.Page) self.assertIsInstance(page_b, pywikibot.Page) @@ -1083,7 +1086,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages = set(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1)
def test_random_generator_ns(self): """Test random generator with namespace.""" @@ -1111,7 +1114,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages = set(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1)
def test_randomredirect_generator_ns(self): """Test random generator with namespace.""" @@ -1300,7 +1303,7 @@ 'pages. If not, create a new page on the site to make the test ' \ 'pass again.'.format(url=newpages_url)
- self.assertGreater(len(pages), 0, failure_message) + self.assertIsNotEmpty(pages, msg=failure_message)
def test_newpages_ns_default(self, key): """Test newpages generator with limit argument.""" @@ -1379,7 +1382,7 @@ 'Metallurgy\, and Materials')) gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) - self.assertEqual(len(set(gen)), 1) + self.assertLength(set(gen), 1)
def test_onlyifnot(self): """Test -onlyifnot without qualifiers.""" @@ -1389,7 +1392,7 @@ 'Metallurgy\, and Materials') gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) - self.assertEqual(len(set(gen)), 0) + self.assertIsEmpty(set(gen))
def test_onlyif_qualifiers(self): """Test -onlyif with qualifiers.""" @@ -1398,7 +1401,7 @@ gf.handleArg('-onlyif:P47=Q837,P805=Q3088768') gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) - self.assertEqual(len(set(gen)), 1) + self.assertLength(set(gen), 1)
def test_searchitem(self): """Test -searchitem.""" @@ -1484,7 +1487,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages = set(gen) - self.assertGreater(len(pages), 0) + self.assertIsNotEmpty(pages) self.assertTrue(all(isinstance(item, pywikibot.User) for item in pages))
@@ -1495,7 +1498,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages = set(gen) - self.assertEqual(len(pages), 0) + self.assertIsEmpty(pages)
def test_logevents_with_total(self): """Test -logevents which uses total.""" @@ -1504,7 +1507,7 @@ gen = gf.getCombinedGenerator() self.assertIsNotNone(gen) pages = set(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertTrue(all(isinstance(item, pywikibot.User) for item in pages))
@@ -1572,7 +1575,7 @@ pagegenerator = pagegenerators.LiveRCPageGenerator(site, total=self.length) entries = list(pagegenerator) - self.assertEqual(len(entries), self.length) + self.assertLength(entries, self.length)
testentry = entries[0] self.assertEqual(testentry.site, site) diff --git a/tests/protectbot_tests.py b/tests/protectbot_tests.py index 94aea91..08b5009 100644 --- a/tests/protectbot_tests.py +++ b/tests/protectbot_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for scripts/protect.py.""" # -# (C) Pywikibot team, 2014-2018 +# (C) Pywikibot team, 2014-2019 # # Distributed under the terms of the MIT license. # @@ -31,11 +31,11 @@ protect.main('-page:User:Sn1per/ProtectTest1', '-always', '-unprotect', '-summary=Pywikibot protect.py unit tests') page = pywikibot.Page(site, 'User:Sn1per/ProtectTest1') - self.assertEqual(len(list(page.protection())), 0) + self.assertIsEmpty(list(page.protection())) protect.main('-page:User:Sn1per/ProtectTest1', '-always', '-default', '-summary=Pywikibot protect.py unit tests') page = pywikibot.Page(site, 'User:Sn1per/ProtectTest1') - self.assertEqual(len(list(page.protection())), 2) + self.assertLength(list(page.protection()), 2)
def test_summary(self): """Test automatic (un)protection summary on the test wiki.""" diff --git a/tests/reflinks_tests.py b/tests/reflinks_tests.py index cdd2555..ab8c57c 100644 --- a/tests/reflinks_tests.py +++ b/tests/reflinks_tests.py @@ -30,7 +30,7 @@ namespaces=[0, 1], site=self.get_site()) pages = list(gen) - self.assertEqual(len(pages), 0) + self.assertIsEmpty(pages)
def test_simple_bare_refs(self): """Test simple bare references in multiple namespaces.""" diff --git a/tests/replacebot_tests.py b/tests/replacebot_tests.py index e203dd8..c533495 100644 --- a/tests/replacebot_tests.py +++ b/tests/replacebot_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the replace script and ReplaceRobot class.""" # -# (C) Pywikibot team, 2015-2018 +# (C) Pywikibot team, 2015-2019 # # Distributed under the terms of the MIT license. # @@ -128,17 +128,17 @@ self.assertIsInstance(replacement.fix_set, list) self.assertIn(replacement, replacement.fix_set) self.assertIs(replacement, replacement.fix_set[offset]) - self.assertEqual(len(replacement.fix_set), length) + self.assertLength(replacement.fix_set, length)
def _get_bot(self, only_confirmation, *args): """Run with arguments, assert and return one bot.""" self.assertIsNone(self._run(*args)) - self.assertEqual(len(self.bots), 1) + self.assertLength(self.bots, 1) bot = self.bots[0] if only_confirmation is not None: self.assertIn(self.SUMMARY_CONFIRMATION, self.inputs) if only_confirmation is True: - self.assertEqual(len(self.inputs), 1) + self.assertLength(self.inputs, 1) else: self.assertNotIn(self.SUMMARY_CONFIRMATION, self.inputs) self.assertEqual(bot.site, self.site) @@ -164,38 +164,38 @@ def test_only_cmd(self): """Test command line replacements only.""" bot = self._get_bot(True, '1', '2') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_replacement(bot.replacements[0])
def test_cmd_automatic(self): """Test command line replacements with automatic summary.""" bot = self._get_bot(None, '1', '2', '-automaticsummary') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_replacement(bot.replacements[0]) self.assertEqual(self.inputs, [])
def test_only_fix_global_message(self): """Test fixes replacements only.""" bot = self._get_bot(None, '-fix:has-msg') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0])
def test_only_fix_global_message_tw(self): """Test fixes replacements only.""" bot = self._get_bot(None, '-fix:has-msg-tw') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0])
def test_only_fix_no_message(self): """Test fixes replacements only.""" bot = self._get_bot(True, '-fix:no-msg') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0])
def test_only_fix_all_replacement_summary(self): """Test fixes replacements only.""" bot = self._get_bot(None, '-fix:all-repl-msg') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0], msg=True)
def test_only_fix_partial_replacement_summary(self): @@ -203,26 +203,26 @@ bot = self._get_bot(True, '-fix:partial-repl-msg') for offset, replacement in enumerate(bot.replacements): self._test_fix_replacement(replacement, 2, offset, offset == 0) - self.assertEqual(len(bot.replacements), 2) + self.assertLength(bot.replacements, 2)
def test_only_fix_multiple(self): """Test fixes replacements only.""" bot = self._get_bot(None, '-fix:has-msg-multiple') for offset, replacement in enumerate(bot.replacements): self._test_fix_replacement(replacement, 3, offset) - self.assertEqual(len(bot.replacements), 3) + self.assertLength(bot.replacements, 3)
def test_cmd_and_fix(self): """Test command line and fix replacements together.""" bot = self._get_bot(True, '1', '2', '-fix:has-msg') - self.assertEqual(len(bot.replacements), 2) + self.assertLength(bot.replacements, 2) self._test_replacement(bot.replacements[0]) self._test_fix_replacement(bot.replacements[1])
def test_except_title(self): """Test excepting and requiring a title specific to fix.""" bot = self._get_bot(True, '-fix:no-msg-title-exceptions') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0]) self.assertIn('title', bot.replacements[0].exceptions) self.assertIn('require-title', bot.replacements[0].exceptions) @@ -233,7 +233,7 @@ def test_fix_callable(self): """Test fix replacements using a callable.""" bot = self._get_bot(True, '-fix:no-msg-callable') - self.assertEqual(len(bot.replacements), 1) + self.assertLength(bot.replacements, 1) self._test_fix_replacement(bot.replacements[0]) self.assertTrue(callable(bot.replacements[0].new))
diff --git a/tests/site_tests.py b/tests/site_tests.py index 5c9069c..0c905ca 100644 --- a/tests/site_tests.py +++ b/tests/site_tests.py @@ -404,7 +404,7 @@ about_msgs = self.site.mediawiki_messages(msg) self.assertIsInstance(mysite.mediawiki_messages(msg), dict) self.assertTrue(mysite.mediawiki_messages(msg)) - self.assertEqual(len(about_msgs), 2) + self.assertLength(about_msgs, 2) self.assertIn(msg[0], about_msgs)
# mediawiki_messages must be given a list; using a string will split it @@ -420,12 +420,11 @@ self.assertRegex(ts, r'(19|20)\d\d[0-1]\d[0-3]\d[0-2]\d[0-5]\d[0-5]\d')
self.assertIsInstance(mysite.months_names, list) - self.assertEqual(len(mysite.months_names), 12) + self.assertLength(mysite.months_names, 12) self.assertTrue(all(isinstance(month, tuple) for month in mysite.months_names)) - self.assertTrue(all(len(month) == 2 - for month in mysite.months_names)) - + for month in mysite.months_names: + self.assertLength(month, 2) self.assertEqual(mysite.list_to_text(('pywikibot',)), 'pywikibot')
def test_english_specific_methods(self): @@ -458,7 +457,7 @@ self.assertRaises(pywikibot.IsNotRedirectPage, mysite.getredirtarget, mainpage) a = list(mysite.preloadpages([mainpage])) - self.assertEqual(len(a), int(mainpage.exists())) + self.assertLength(a, int(mainpage.exists())) if a: self.assertEqual(a[0], mainpage)
@@ -2046,7 +2045,7 @@ '2014-12-21T06:07:31Z'])
revs = list(p.revisions()) - self.assertEqual(len(revs), 2) + self.assertLength(revs, 2) self.assertEqual(revs[0].revid, 219995) self.assertEqual(revs[1].revid, 219994)
@@ -2067,7 +2066,7 @@ """Test the site.users() method with bot username.""" mysite = self.get_site() us = list(mysite.users(mysite.user())) - self.assertEqual(len(us), 1) + self.assertLength(us, 1) self.assertIsInstance(us[0], dict)
@@ -2161,7 +2160,7 @@ pages.append(rndpage) if len(pages) == 11: break - self.assertEqual(len(pages), 11) + self.assertLength(pages, 11)
def test_limit_10(self): """Test site.randompages() with limit.""" @@ -2372,25 +2371,25 @@ gen = mysite.pagecategories(mypage, total=12) gen.set_query_increment = 5 cats = [c for c in gen] - self.assertEqual(len(cats), 12) + self.assertLength(cats, 12)
gen = mysite.categorymembers(mycat, total=12) gen.set_query_increment = 5 cat_members = [cm for cm in gen] - self.assertEqual(len(cat_members), 12) + self.assertLength(cat_members, 12)
gen = mysite.pageimages(mypage, total=5) gen.set_query_increment = 3 images = [im for im in gen] - self.assertEqual(len(images), 5) + self.assertLength(images, 5)
gen = mysite.pagetemplates(mypage, total=5) gen.set_query_increment = 3 templates = [tl for tl in gen] - self.assertEqual(len(templates), 5) + self.assertLength(templates, 5)
mysite.loadrevisions(mypage, step=5, total=12) - self.assertEqual(len(mypage._revisions), 12) + self.assertLength(mypage._revisions, 12)
class TestSiteInfo(DefaultSiteTestCase): @@ -2460,7 +2459,7 @@ mysite = self.site self.assertRaises(KeyError, mysite.siteinfo.__getitem__, not_exists) self.assertNotIn(not_exists, mysite.siteinfo) - self.assertEqual(len(mysite.siteinfo.get(not_exists)), 0) + self.assertIsEmpty(mysite.siteinfo.get(not_exists)) self.assertFalse(entered_loop(mysite.siteinfo.get(not_exists))) if PY2: self.assertFalse( @@ -2544,7 +2543,7 @@ self.mysite.loadrevisions(self.mainpage, total=15) self.mysite.loadrevisions(self.mainpage) self.assertFalse(hasattr(self.mainpage, '_text')) - self.assertEqual(len(self.mainpage._revisions), 15) + self.assertLength(self.mainpage._revisions, 15) self.assertIn(self.mainpage._revid, self.mainpage._revisions) self.assertIsNone(self.mainpage._revisions[self.mainpage._revid].text) # The revision content will be loaded by .text @@ -2583,17 +2582,17 @@ def test_loadrevisions_querycontinue(self): """Test the site.loadrevisions() method with query-continue.""" self.mysite.loadrevisions(self.mainpage, step=5, total=12) - self.assertEqual(len(self.mainpage._revisions), 12) + self.assertLength(self.mainpage._revisions, 12)
def test_loadrevisions_revdir(self): """Test the site.loadrevisions() method with rvdir=True.""" self.mysite.loadrevisions(self.mainpage, rvdir=True, total=15) - self.assertEqual(len(self.mainpage._revisions), 15) + self.assertLength(self.mainpage._revisions, 15)
def test_loadrevisions_timestamp(self): """Test the site.loadrevisions() method, listing based on timestamp.""" self.mysite.loadrevisions(self.mainpage, rvdir=True, total=15) - self.assertEqual(len(self.mainpage._revisions), 15) + self.assertLength(self.mainpage._revisions, 15) revs = self.mainpage._revisions timestamps = [str(revs[rev].timestamp) for rev in revs] self.assertTrue(all(ts < '2002-01-31T00:00:00Z' for ts in timestamps)) @@ -2615,7 +2614,7 @@ def test_loadrevisions_rev_id(self): """Test the site.loadrevisions() method, listing based on rev_id.""" self.mysite.loadrevisions(self.mainpage, rvdir=True, total=15) - self.assertEqual(len(self.mainpage._revisions), 15) + self.assertLength(self.mainpage._revisions, 15) revs = self.mainpage._revisions self.assertTrue(all(139900 <= rev <= 140100 for rev in revs))
@@ -2696,9 +2695,9 @@
def test_backlinks_redirects_length(self): """Test backlinks redirects length.""" - self.assertEqual(len(self.backlinks), 1) - self.assertEqual(len(self.references), 1) - self.assertEqual(len(self.nofollow), 1) + self.assertLength(self.backlinks, 1) + self.assertLength(self.references, 1) + self.assertLength(self.nofollow, 1)
def test_backlinks_redirects_status(self): """Test backlinks redirects statur.""" @@ -2779,10 +2778,10 @@ self.assertEqual(image_namespace.custom_prefix(), ':Fil:') self.assertEqual(image_namespace.canonical_prefix(), ':File:') self.assertEqual(sorted(image_namespace.aliases), ['Bilde', 'Image']) - self.assertEqual(len(image_namespace), 4) + self.assertLength(image_namespace, 4)
- self.assertEqual(len(namespaces[1].aliases), 0) - self.assertEqual(len(namespaces[4].aliases), 1) + self.assertIsEmpty(namespaces[1].aliases) + self.assertLength(namespaces[4].aliases, 1) self.assertEqual(namespaces[4].aliases[0], 'WP') self.assertIn('WP', namespaces[4])
@@ -2943,7 +2942,7 @@ self.assertIsInstance(page.exists(), bool) if page.exists(): self.assertTrue(hasattr(page, '_revid')) - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIn(page._revid, page._revisions) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) @@ -2969,7 +2968,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -2986,7 +2985,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -3012,7 +3011,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -3037,7 +3036,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -3065,7 +3064,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -3094,7 +3093,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) count += 1 @@ -3135,7 +3134,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) self.assertTrue(hasattr(page, '_langlinks')) @@ -3150,12 +3149,12 @@ mainpage = self.get_mainpage() links = list(mysite.pagelinks(mainpage, total=20)) pages = list(mysite.preloadpages(links, groupsize=5, langlinks=True)) - self.assertEqual(len(links), len(pages)) + self.assertLength(links, pages) for page in pages: self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) if pages: @@ -3175,13 +3174,13 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) self.assertTrue(hasattr(page, '_langlinks')) count += 1
- self.assertEqual(len(links), count) + self.assertLength(links, count)
@allowed_failure def test_preload_templates(self): @@ -3195,7 +3194,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) self.assertTrue(hasattr(page, '_templates')) @@ -3215,7 +3214,7 @@ self.assertIsInstance(page, pywikibot.Page) self.assertIsInstance(page.exists(), bool) if page.exists(): - self.assertEqual(len(page._revisions), 1) + self.assertLength(page._revisions, 1) self.assertIsNotNone(page._revisions[page._revid].text) self.assertFalse(hasattr(page, '_pageprops')) self.assertTrue(hasattr(page, '_templates')) @@ -3241,7 +3240,7 @@ self.assertTrue(hasattr(item, '_content')) self.assertNotIn(item, seen) seen.append(item) - self.assertEqual(len(seen), 5) + self.assertLength(seen, 5)
def test_item_as_page(self): """Test that ItemPage preloading works for Page objects.""" @@ -3256,7 +3255,7 @@ self.assertTrue(hasattr(item, '_content')) self.assertNotIn(item, seen) seen.append(item) - self.assertEqual(len(seen), 5) + self.assertLength(seen, 5)
def test_property(self): """Test that preloading works for properties.""" diff --git a/tests/sparql_tests.py b/tests/sparql_tests.py index 7a84956..d418c20 100644 --- a/tests/sparql_tests.py +++ b/tests/sparql_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test cases for the SPARQL API.""" # -# (C) Pywikibot team, 2016-2018 +# (C) Pywikibot team, 2016-2019 # # Distributed under the terms of the MIT license. # @@ -102,7 +102,7 @@ q = sparql.SparqlQuery() res = q.select('SELECT * WHERE { ?x ?y ?z }') self.assertIsInstance(res, list, 'Result is not a list') - self.assertEqual(len(res), 2) + self.assertLength(res, 2)
self.assertDictEqual( res[0], @@ -124,7 +124,7 @@ q = sparql.SparqlQuery() res = q.select('SELECT * WHERE { ?x ?y ?z }', full_data=True) self.assertIsInstance(res, list, 'Result is not a list') - self.assertEqual(len(res), 2) + self.assertLength(res, 2)
self.assertIsInstance(res[0]['cat'], sparql.URI, 'Wrong type for URI') self.assertEqual(repr(res[0]['cat']), diff --git a/tests/template_bot_tests.py b/tests/template_bot_tests.py index 658369d..9bb077f 100644 --- a/tests/template_bot_tests.py +++ b/tests/template_bot_tests.py @@ -35,7 +35,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 0) + self.assertIsEmpty(pages)
def test_match(self): """Test pages with one match without parameters.""" @@ -47,7 +47,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual(pages, ['Pear'], site=self.site)
def test_match_with_params(self): @@ -60,7 +60,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual(pages, ['Pear'], site=self.site)
def test_match_any(self): @@ -75,7 +75,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual(pages, ['Pear'], site=self.site)
# reorder templates @@ -85,7 +85,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual(pages, ['Pear'], site=self.site)
def test_match_msg(self): @@ -99,7 +99,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual(pages, ['Fake page with msg'], site=self.site)
@@ -114,7 +114,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual( pages, ['Fake page with unnecessary template prefix'], site=self.site) @@ -129,7 +129,7 @@ site=self.site, text_predicate=predicate) pages = list(gen) - self.assertEqual(len(pages), 1) + self.assertLength(pages, 1) self.assertPageTitlesEqual( pages, ['Fake page with nested template'], site=self.site) diff --git a/tests/tests_tests.py b/tests/tests_tests.py index 39232c9..4114a09 100755 --- a/tests/tests_tests.py +++ b/tests/tests_tests.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """Tests for the tests package.""" # -# (C) Pywikibot team, 2014-2018 +# (C) Pywikibot team, 2014-2019 # # Distributed under the terms of the MIT license. from __future__ import absolute_import, division, unicode_literals @@ -44,9 +44,52 @@ pages = [pywikibot.Page(self.site, 'Foo'), pywikibot.Page(self.site, 'Bar'), pywikibot.Page(self.site, 'Baz')] - self.assertPageTitlesEqual(pages, - ['Foo'], - self.site) + self.assertPageTitlesEqual(pages, ['Foo'], self.site) + + +class TestLengthAssert(TestCase): + + """Test length assertion methods.""" + + net = False + + seq1 = ('foo', 'bar', 'baz') + seq2 = 'foo' + + def test_assert_is_emtpy(self): + """Test assertIsEmpty method.""" + self.assertIsEmpty([]) + self.assertIsEmpty('') + + @unittest.expectedFailure + def test_assert_is_emtpy_fail(self): + """Test assertIsEmpty method failing.""" + self.assertIsEmpty(self.seq1) + self.assertIsEmpty(self.seq2) + + def test_assert_is_not_emtpy(self): + """Test assertIsNotEmpty method.""" + self.assertIsNotEmpty(self.seq1) + self.assertIsNotEmpty(self.seq2) + + @unittest.expectedFailure + def test_assert_is_not_emtpy_fail(self): + """Test assertIsNotEmpty method.""" + self.assertIsNotEmpty([]) + self.assertIsNotEmpty('') + + def test_assert_length(self): + """Test assertIsNotEmpty method.""" + self.assertLength([], 0) + self.assertLength(self.seq1, 3) + self.assertLength(self.seq1, self.seq2) + + @unittest.expectedFailure + def test_assert_length_fail(self): + """Test assertIsNotEmpty method.""" + self.assertLength([], 1) + self.assertLength(self.seq1, 0) + self.assertLength(None, self.seq)
if __name__ == '__main__': # pragma: no cover diff --git a/tests/tools_ip_tests.py b/tests/tools_ip_tests.py index e53a611..bc2a4d8 100644 --- a/tests/tools_ip_tests.py +++ b/tests/tools_ip_tests.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """Test IP module/regex.""" # -# (C) Pywikibot team, 2012-2018 +# (C) Pywikibot team, 2012-2019 # # Distributed under the terms of the MIT license. from __future__ import absolute_import, division, unicode_literals @@ -676,7 +676,7 @@ self._test_T105443_failures() self.assertEqual(self.fail, 0) self.assertDeprecationParts('page.ip_regexp', 'tools.ip.is_IP') - self.assertEqual(self.total, len(self.deprecation_messages)) + self.assertLength(self.deprecation_messages, self.total)
class IPAddressModuleTestCase(TestIPBase): diff --git a/tests/tools_tests.py b/tests/tools_tests.py index 900f366..b507f9e 100644 --- a/tests/tools_tests.py +++ b/tests/tools_tests.py @@ -362,7 +362,7 @@ """Test marker is shown without kwargs.""" stop = 2 it = list(tools.islice_with_ellipsis(self.it, stop)) - self.assertEqual(len(it), stop + 1) # +1 to consider marker. + self.assertLength(it, stop + 1) # +1 to consider marker. self.assertEqual(it[:-1], self.it[:stop]) self.assertEqual(it[-1], '…')
@@ -370,7 +370,7 @@ """Test correct marker is shown with kwargs..""" stop = 2 it = list(tools.islice_with_ellipsis(self.it, stop, marker='new')) - self.assertEqual(len(it), stop + 1) # +1 to consider marker. + self.assertLength(it, stop + 1) # +1 to consider marker. self.assertEqual(it[:-1], self.it[:stop]) self.assertNotEqual(it[-1], '…') self.assertEqual(it[-1], 'new') @@ -380,7 +380,7 @@ start = 1 stop = 3 it = list(tools.islice_with_ellipsis(self.it, start, stop)) - self.assertEqual(len(it), stop - start + 1) # +1 to consider marker. + self.assertLength(it, stop - start + 1) # +1 to consider marker. self.assertEqual(it[:-1], self.it[start:stop]) self.assertEqual(it[-1], '…')
@@ -390,7 +390,7 @@ stop = 3 it = list(tools.islice_with_ellipsis( self.it, start, stop, marker='new')) - self.assertEqual(len(it), stop - start + 1) # +1 to consider marker. + self.assertLength(it, stop - start + 1) # +1 to consider marker. self.assertEqual(it[:-1], self.it[start:stop]) self.assertNotEqual(it[-1], '…') self.assertEqual(it[-1], 'new') @@ -399,14 +399,14 @@ """Test marker is shown with stop for non empty iterable.""" stop = 0 it = list(tools.islice_with_ellipsis(self.it, stop)) - self.assertEqual(len(it), stop + 1) # +1 to consider marker. + self.assertLength(it, stop + 1) # +1 to consider marker. self.assertEqual(it[-1], '…')
def test_do_not_show_marker_with_stop_zero(self): """Test marker is shown with stop for empty iterable.""" stop = 0 it = list(tools.islice_with_ellipsis(self.it_null, stop)) - self.assertEqual(len(it), stop) + self.assertLength(it, stop)
def test_do_not_show_marker(self): """Test marker is not shown when no marker is specified.""" @@ -420,7 +420,7 @@ """Test marker is not shown when all elements are retrieved.""" stop = None it = list(tools.islice_with_ellipsis(self.it, stop)) - self.assertEqual(len(it), len(self.it)) + self.assertLength(it, len(self.it)) self.assertEqual(it, self.it) self.assertNotEqual(it[-1], '…')
@@ -507,7 +507,7 @@ if not key: key = passthrough
- self.assertEqual(len(deduped), 0) + self.assertIsEmpty(deduped)
self.assertEqual(next(deduper), 1) self.assertEqual(next(deduper), 3) @@ -538,7 +538,7 @@ if not key: key = passthrough
- self.assertEqual(len(deduped), 0) + self.assertIsEmpty(deduped)
self.assertEqual(next(deduper), '1') self.assertEqual(next(deduper), '3') @@ -607,7 +607,7 @@ # Two objects which may be equal do not necessary have the same id. deduped = set() deduper = tools.filter_unique(self.decs, container=deduped, key=id) - self.assertEqual(len(deduped), 0) + self.assertIsEmpty(deduped) for _ in self.decs: self.assertEqual(id(next(deduper)), deduped.pop()) self.assertRaises(StopIteration, next, deduper) diff --git a/tests/ui_tests.py b/tests/ui_tests.py index 18d0c97..0c01d86 100644 --- a/tests/ui_tests.py +++ b/tests/ui_tests.py @@ -288,7 +288,7 @@ with warnings.catch_warnings(record=True) as w: pywikibot.output('output', toStdout=True) self.assertEqual(newstdout.getvalue(), 'output\n') - self.assertEqual(len(w), 1) + self.assertLength(w, 1) self.assertEqual(w[0].category, DeprecationWarning) message = str(w[0].message) self.assertStringMethod(str.startswith, message, @@ -817,8 +817,8 @@ expected_color = self._colors[self._index][0] self._index += 1 self.assertEqual(color, expected_color) - self.assertEqual(len(self.stream.getvalue()), - sum(e[1] for e in self._colors[:self._index])) + self.assertLength(self.stream.getvalue(), + sum(e[1] for e in self._colors[:self._index]))
class FakeWin32Test(FakeUIColorizedTestBase, FakeUITest): @@ -861,8 +861,8 @@ self._index += 1 color = terminal_interface_win32.windowsColors[color] self.assertEqual(attribute, color) - self.assertEqual(len(self.stream.getvalue()), - sum(e[1] for e in self._colors[:self._index])) + self.assertLength(self.stream.getvalue(), + sum(e[1] for e in self._colors[:self._index]))
class FakeWin32UncolorizedTest(FakeWin32Test): diff --git a/tests/upload_tests.py b/tests/upload_tests.py index 632c836..8dd80a1 100644 --- a/tests/upload_tests.py +++ b/tests/upload_tests.py @@ -5,7 +5,7 @@ These tests write to the wiki. """ # -# (C) Pywikibot team, 2014-2018 +# (C) Pywikibot team, 2014-2019 # # Distributed under the terms of the MIT license. # @@ -49,8 +49,8 @@ """A simple callback not automatically finishing the upload.""" self.assertCountEqual([w.code for w in warnings], expected_warns) # by now we know there are only two but just make sure - assert len(warnings) == len(expected_warns) - assert len(expected_warns) in [1, 2] + self.assertLength(warnings, expected_warns) + self.assertIn(len(expected_warns), [1, 2]) if len(expected_warns) == 2: self.assertEqual(warnings[0].file_key, warnings[1].file_key) self.assertEqual(warnings[0].offset, warnings[1].offset) diff --git a/tests/user_tests.py b/tests/user_tests.py index 12246eb..45da6aa 100644 --- a/tests/user_tests.py +++ b/tests/user_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for the User page.""" # -# (C) Pywikibot team, 2016-2018 +# (C) Pywikibot team, 2016-2019 # # Distributed under the terms of the MIT license. # @@ -81,7 +81,7 @@ 'Benutzer Diskussion:Xqt/pwb')) self.assertTrue(user.is_thankable) contribs = user.contributions(total=10) - self.assertEqual(len(list(contribs)), 10) + self.assertLenth(list(contribs), 10) self.assertTrue(all(isinstance(contrib, tuple) for contrib in contribs)) self.assertTrue(all('user' in contrib @@ -178,7 +178,7 @@ last = uc[0] for contrib in uc: self.assertIsInstance(contrib, tuple) - self.assertEqual(len(contrib), 4) + self.assertLenth(contrib, 4) p, i, t, c = contrib self.assertIsInstance(p, Page) self.assertIsInstance(i, int) diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py index 4f0eb36..25e0c71 100644 --- a/tests/wikibase_tests.py +++ b/tests/wikibase_tests.py @@ -55,7 +55,7 @@ def _test_hashable(self, representation): """Test that the representation is hashable.""" list_of_dupes = [representation, representation] - self.assertEqual(len(set(list_of_dupes)), 1) + self.assertLength(set(list_of_dupes), 1)
class TestLoadRevisionsCaching(BasePageLoadRevisionsCachingTestBase, @@ -1646,7 +1646,7 @@ def test_item_is_hashable(self): """Ensure that ItemPages are hashable.""" list_of_dupes = [self._page, self._page] - self.assertEqual(len(set(list_of_dupes)), 1) + self.assertLength(set(list_of_dupes), 1)
class TestPageMethodsWithItemTitle(WikidataTestCase, BasePageMethodsTestBase): @@ -1740,8 +1740,8 @@ wikilinks = list(self.wdp.iterlinks('wikipedia')) wvlinks = list(self.wdp.iterlinks('wikivoyage'))
- self.assertEqual(len(wikilinks), 3) - self.assertEqual(len(wvlinks), 2) + self.assertLength(wikilinks, 3) + self.assertLength(wvlinks, 2)
class TestWriteNormalizeLang(TestCase): diff --git a/tests/xmlreader_tests.py b/tests/xmlreader_tests.py index ebd84ba..b3c6198 100644 --- a/tests/xmlreader_tests.py +++ b/tests/xmlreader_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Tests for xmlreader module.""" # -# (C) Pywikibot team, 2009-2018 +# (C) Pywikibot team, 2009-2019 # # Distributed under the terms of the MIT license. # @@ -34,7 +34,7 @@ def test_XmlDumpAllRevs(self): """Test loading all revisions.""" pages = self._get_entries('article-pear.xml', allrevisions=True) - self.assertEqual(4, len(pages)) + self.assertLength(pages, 4) self.assertEqual('Automated conversion', pages[0].comment) self.assertEqual('Pear', pages[0].title) self.assertEqual('24278', pages[0].id) @@ -45,7 +45,7 @@ def test_XmlDumpFirstRev(self): """Test loading the first revision.""" pages = self._get_entries('article-pear.xml', allrevisions=False) - self.assertEqual(1, len(pages)) + self.assertLength(pages, 1) self.assertEqual('Automated conversion', pages[0].comment) self.assertEqual('Pear', pages[0].title) self.assertEqual('24278', pages[0].id) @@ -93,7 +93,7 @@ def test_pair(self): """Test reading the main page/user talk page pair file.""" entries = self._get_entries('pair-0.10.xml', allrevisions=True) - self.assertEqual(4, len(entries)) + self.assertLength(entries, 4) self.assertTrue(all(entry.username == 'Carlossuarez46' for entry in entries)) self.assertTrue(all(entry.isredirect is False for entry in entries)) @@ -101,7 +101,7 @@ articles = entries[0:2] talks = entries[2:4]
- self.assertEqual(2, len(articles)) + self.assertLength(articles, 2) self.assertTrue(all(entry.id == '19252820' for entry in articles)) self.assertTrue(all(entry.title == 'Çullu, Agdam' for entry in articles)) @@ -109,7 +109,7 @@ for entry in articles)) self.assertEqual(articles[0].text, '#REDIRECT [[Çullu, Quzanlı]]')
- self.assertEqual(2, len(talks)) + self.assertLength(talks, 2) self.assertTrue(all(entry.id == '19252824' for entry in talks)) self.assertTrue(all(entry.title == 'Talk:Çullu, Agdam' for entry in talks))
pywikibot-commits@lists.wikimedia.org