Xqt has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1172863?usp=email )
Change subject: Tests: Enforce setup_page() in BasePageTestBase and improve
test structure
......................................................................
Tests: Enforce setup_page() in BasePageTestBase and improve test structure
- Make BasePageTestBase abstract by replacing ABC inheritance with a
combined metaclass of ABCMeta and TestCase metaclass to resolve conflicts
- Enforce setup_page() implementation as an abstract method in the base class
- Ensure all concrete test classes implement setup_page() and define
test_ methods calling helpers
- Use assert methods instead of bare assert statements in setup
Change-Id: I0fc910d0f192dfc57427e06d86e47eff6c8aa61a
---
M tests/basepage.py
M tests/proofreadpage_tests.py
M tests/site_tests.py
M tests/wikibase_tests.py
4 files changed, 43 insertions(+), 30 deletions(-)
Approvals:
Xqt: Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/basepage.py b/tests/basepage.py
index 975d30e..a611768 100644
--- a/tests/basepage.py
+++ b/tests/basepage.py
@@ -6,11 +6,21 @@
#
from __future__ import annotations
+from abc import ABCMeta, abstractmethod
+
from pywikibot.page import BasePage
from tests.aspects import TestCase
-class BasePageTestBase(TestCase):
+class ABCTestCaseMeta(ABCMeta, type(TestCase)):
+
+ """Enable abstract methods in TestCase-based base classes.
+
+ .. versionadded:: 10.3
+ """
+
+
+class BasePageTestBase(TestCase, metaclass=ABCTestCaseMeta):
"""Base of BasePage test classes."""
@@ -19,8 +29,17 @@
def setUp(self) -> None:
"""Set up test."""
super().setUp()
- assert self._page, 'setUp() must create an empty BasePage in _page'
- assert isinstance(self._page, BasePage)
+ self.setup_page()
+ self.assertIsInstance(self._page, BasePage,
+ 'setUp() must assign a BasePage to _page, not '
+ f'{type(self._page).__name__}')
+
+ @abstractmethod
+ def setup_page(self) -> None:
+ """Subclasses must implement this to assign self._page.
+
+ .. versionadded:: 10.3
+ """
class BasePageLoadRevisionsCachingTestBase(BasePageTestBase):
@@ -38,7 +57,7 @@
def setUp(self) -> None:
"""Set up test."""
super().setUp()
- assert self.cached is False, 'Tests do not support caching'
+ self.assertFalse(self.cached, 'Tests do not support caching')
def _test_page_text(self) -> None:
"""Test site.loadrevisions() with .text."""
@@ -61,9 +80,9 @@
self.assertHasAttr(page, '_revisions')
self.assertLength(page._revisions, 1)
self.assertIn(page._revid, page._revisions)
-
self.assertEqual(page._text, custom_text)
self.assertEqual(page.text, page._text)
+
del page.text
self.assertNotHasAttr(page, '_text')
@@ -71,13 +90,14 @@
self.assertIsNone(page._latest_cached_revision())
page.text = custom_text
-
self.site.loadrevisions(page, total=1, content=True)
self.assertIsNotNone(page._latest_cached_revision())
self.assertEqual(page._text, custom_text)
self.assertEqual(page.text, page._text)
+
del page.text
+
self.assertNotHasAttr(page, '_text')
# Verify that calling .text doesn't call loadrevisions again
diff --git a/tests/proofreadpage_tests.py b/tests/proofreadpage_tests.py
index 4d908d9..1e6d481 100755
--- a/tests/proofreadpage_tests.py
+++ b/tests/proofreadpage_tests.py
@@ -142,11 +142,11 @@
family = 'wikisource'
code = 'en'
- def setUp(self) -> None:
- """Set up test case."""
+ def setup_page(self) -> None:
+ """Set up test page."""
self._page = ProofreadPage(
- self.site, 'Page:Popular Science Monthly Volume 1.djvu/12')
- super().setUp()
+ self.site, 'Page:Popular Science Monthly Volume 1.djvu/12'
+ )
def test_basepage_methods(self) -> None:
"""Test ProofreadPage methods inherited from superclass BasePage."""
@@ -162,11 +162,10 @@
family = 'wikisource'
code = 'en'
- def setUp(self) -> None:
- """Set up test case."""
+ def setup_page(self) -> None:
+ """Set up test page."""
self._page = ProofreadPage(
self.site, 'Page:Popular Science Monthly Volume 1.djvu/12')
- super().setUp()
def test_page_text(self) -> None:
"""Test site.loadrevisions() with Page.text."""
@@ -637,11 +636,10 @@
family = 'wikisource'
code = 'en'
- def setUp(self) -> None:
- """Set up test case."""
+ def setup_page(self) -> None:
+ """Set up test page."""
self._page = IndexPage(
self.site, 'Index:Popular Science Monthly Volume 1.djvu')
- super().setUp()
def test_basepage_methods(self) -> None:
"""Test IndexPage methods inherited from superclass BasePage."""
@@ -657,11 +655,10 @@
family = 'wikisource'
code = 'en'
- def setUp(self) -> None:
- """Set up test case."""
+ def setup_page(self) -> None:
+ """Set up test page."""
self._page = IndexPage(
self.site, 'Index:Popular Science Monthly Volume 1.djvu')
- super().setUp()
def test_page_text(self) -> None:
"""Test site.loadrevisions() with Page.text."""
diff --git a/tests/site_tests.py b/tests/site_tests.py
index b061b18..937cccb 100755
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -823,10 +823,9 @@
"""Test site.loadrevisions() caching."""
- def setUp(self) -> None:
- """Setup tests."""
+ def setup_page(self) -> None:
+ """Setup test page."""
self._page = self.get_mainpage(force=True)
- super().setUp()
def test_page_text(self) -> None:
"""Test site.loadrevisions() with Page.text."""
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index b07adb1..4d1d77f 100755
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -50,10 +50,9 @@
"""Test site.loadrevisions() caching."""
- def setUp(self) -> None:
- """Setup test."""
+ def setup_page(self) -> None:
+ """Setup test page."""
self._page = ItemPage(self.get_repo(), 'Q15169668')
- super().setUp()
def test_page_text(self) -> None:
"""Test site.loadrevisions() with Page.text."""
@@ -1013,10 +1012,9 @@
"""Test behavior of ItemPage methods inherited from BasePage."""
- def setUp(self) -> None:
- """Setup tests."""
+ def setup_page(self) -> None:
+ """Setup test page."""
self._page = ItemPage(self.get_repo(), 'Q60')
- super().setUp()
def test_basepage_methods(self) -> None:
"""Test ItemPage methods inherited from superclass BasePage."""
@@ -1033,10 +1031,9 @@
"""Test behavior of Page methods for wikibase item."""
- def setUp(self) -> None:
+ def setup_page(self) -> None:
"""Setup tests."""
self._page = pywikibot.Page(self.site, 'Q60')
- super().setUp()
def test_basepage_methods(self) -> None:
"""Test Page methods inherited from superclass BasePage with Q60."""
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1172863?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: I0fc910d0f192dfc57427e06d86e47eff6c8aa61a
Gerrit-Change-Number: 1172863
Gerrit-PatchSet: 6
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]