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

Change subject: tests: Add assertHasItems helper for non-empty iterables
......................................................................

tests: Add assertHasItems helper for non-empty iterables

Bug: T433792
Change-Id: Ib33242b0608433302efd6482d7ed33e9a24e83a7
---
M tests/aspects.py
1 file changed, 49 insertions(+), 5 deletions(-)

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




diff --git a/tests/aspects.py b/tests/aspects.py
index 589bd97..9486323 100644
--- a/tests/aspects.py
+++ b/tests/aspects.py
@@ -22,6 +22,8 @@
 from contextlib import contextmanager, suppress
 from functools import wraps
 from http import HTTPStatus
+from itertools import chain
+from typing import TypeVar
 from unittest.util import safe_repr

 import pywikibot
@@ -58,6 +60,7 @@
 )


+T = TypeVar('T')
 OSWIN32 = (sys.platform == 'win32')
 SIZED_ERROR = 'seq argument is not a Sized class containing __len__'

@@ -249,22 +252,32 @@
     """Base class for all tests."""

     def assertIsEmpty(self, seq, msg=None) -> None:
-        """Check that the sequence is empty."""
+        """Check that the sequence is empty.
+
+        .. version-added:: 3.0.20200703
+        """
         self.assertIsInstance(seq, Sized, SIZED_ERROR)
         if seq:
             msg = self._formatMessage(msg, f'{safe_repr(seq)} is not empty')
             self.fail(msg)

     def assertIsNotEmpty(self, seq, msg=None) -> None:
-        """Check that the sequence is not empty."""
+        """Check that the sequence is not empty.
+
+        .. version-added:: 3.0.20200703
+        """
         self.assertIsInstance(seq, Sized, SIZED_ERROR)
         if not seq:
             msg = self._formatMessage(msg, f'{safe_repr(seq)} is empty')
             self.fail(msg)

     def assertLength(self, seq, other, msg=None) -> None:
-        """Verify that a sequence seq has the length of other."""
-        # the other parameter may be given as a sequence too
+        """Verify that a sequence seq has the length of other.
+
+        The *other* parameter may be given as a sequence too
+
+        .. version-added:: 3.0.20200703
+        """
         self.assertIsInstance(seq, Sized, SIZED_ERROR)
         first_len = len(seq)
         try:
@@ -277,6 +290,37 @@
                 msg, f'len({safe_repr(seq)}): {first_len} != {second_len}')
             self.fail(msg)

+    def assertHasItems(
+        self,
+        iterable: Iterable[T],
+        msg: str | None = None,
+    ) -> Iterator[T]:
+        """Assert that an iterable yields at least one item.
+
+        Return an iterator yielding all items from *iterable*, including
+        the first one.
+
+        .. note::
+           If *iterable* is an iterator, use the returned iterator
+           instead of the original one.
+
+        .. version-added:: 11.7
+
+        :param iterable: Iterable to check.
+        :param msg: The message to be shown on failure.
+        :return: An iterator yielding all items from *iterable*.
+        """
+        missing = sentinel('MISSING')
+        iterator = iter(iterable)
+        first = next(iterator, missing)
+
+        if first is missing:
+            msg = self._formatMessage(
+                msg, f'{safe_repr(iterable)} yields no items')
+            self.fail(msg)
+
+        return chain((first,), iterator)
+
     def assertPageInNamespaces(self, page, namespaces: int | set[int]) -> None:
         """Assert that Pages is in namespaces.

@@ -301,7 +345,7 @@
            the *count* parameter was dropped; all pages from *gen* are
            tested.

-        :param gen: Page generator
+        :param gen: Page iterable
         :param site: Site of expected pages
         :meta public:
         """

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1319943?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: Ib33242b0608433302efd6482d7ed33e9a24e83a7
Gerrit-Change-Number: 1319943
Gerrit-PatchSet: 2
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]

Reply via email to