jenkins-bot has submitted this change and it was merged.

Change subject: Tests for TestTextfilePageGenerator
......................................................................


Tests for TestTextfilePageGenerator

Amend documentation for -file to mention titles may be
separated by new lines.

Also adds TestCaseBase.assertPagelistTitles to check the
loaded results from TextfilePageGenerator and other
pagegenerators.

Change-Id: I20bb62247e6b0b8d7a13a425cde210e60eb7d730
---
M pywikibot/pagegenerators.py
M tests/aspects.py
A tests/data/pagelist-brackets.txt
A tests/data/pagelist-lines.txt
M tests/pagegenerators_tests.py
5 files changed, 85 insertions(+), 12 deletions(-)

Approvals:
  John Vandenberg: Looks good to me, but someone else must approve
  Mpaa: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index 319089e..6a95aa3 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -76,7 +76,8 @@
 -uncatfiles       Work on all files which are not categorised.
 
 -file             Read a list of pages to treat from the named text file.
-                  Page titles in the file must be enclosed with [[brackets]].
+                  Page titles in the file may be either enclosed with
+                  [[brackets]], or be separated by new lines.
                   Argument can also be given as "-file:filename".
 
 -filelinks        Work on all pages that use a certain image/media file.
diff --git a/tests/aspects.py b/tests/aspects.py
index b19df47..d0cfe31 100644
--- a/tests/aspects.py
+++ b/tests/aspects.py
@@ -29,6 +29,7 @@
         UITestCase:
             Not integrated; direct subclass of unittest.TestCase.
 """
+import collections
 import time
 import sys
 import os
@@ -133,6 +134,32 @@
         else:
             self.assertEqual(set(page_namespaces), namespaces)
 
+    def assertPagelistTitles(self, gen, titles):
+        """
+        Test that pages in gen match expected titles.
+
+        If the expected titles is a tuple, assert that the generator yields
+        pages with the same number and order of titles.
+
+        @param gen: Page generator
+        @type gen: generator of Page
+        @param titles: Expected titles
+        @type titles: tuple or list
+        """
+        if isinstance(titles, tuple):
+            working_set = collections.deque(titles)
+
+        for page in gen:
+            title = page.title()
+            self.assertIn(title, titles)
+            if isinstance(titles, tuple):
+                self.assertIn(title, working_set)
+                self.assertEqual(title, working_set[0])
+                working_set.popleft()
+
+        if isinstance(titles, tuple):
+            self.assertEqual(working_set, collections.deque([]))
+
 
 class TestLoggingMixin(TestCaseBase):
 
diff --git a/tests/data/pagelist-brackets.txt b/tests/data/pagelist-brackets.txt
new file mode 100644
index 0000000..6c7ef0f
--- /dev/null
+++ b/tests/data/pagelist-brackets.txt
@@ -0,0 +1,5 @@
+[[file]] [[bracket]]
+[[MediaWiki:Test|foo]] with
+[[under_score]]
+and
+text.
diff --git a/tests/data/pagelist-lines.txt b/tests/data/pagelist-lines.txt
new file mode 100644
index 0000000..4f8ad01
--- /dev/null
+++ b/tests/data/pagelist-lines.txt
@@ -0,0 +1,4 @@
+file
+bracket
+MediaWiki:Test|foo
+under_score
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index a816031..2cfe6b9 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -7,10 +7,13 @@
 # Distributed under the terms of the MIT license.
 __version__ = '$Id$'
 
+import os
 import sys
+
 import pywikibot
 from pywikibot import pagegenerators
 
+from tests import _data_dir
 from tests.aspects import (
     unittest,
     TestCase,
@@ -29,7 +32,7 @@
 
     dry = True
 
-    titles = [
+    titles = (
         # just a bunch of randomly selected titles
         u"Cities in Burkina Faso",
         u"Eastern Sayan",
@@ -44,7 +47,7 @@
         u"Template:Template",
         u"Template:Template/Doc",
         u"Template:Template/Meta",
-    ]
+    )
 
     def setUp(self):
         super(TestPageGenerators, self).setUp()
@@ -60,7 +63,7 @@
     def test_PagesFromTitlesGenerator(self):
         self.assertFunction("PagesFromTitlesGenerator")
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
-        self.assertEqual(len(self.titles), len(tuple(gen)))
+        self.assertPagelistTitles(gen, self.titles)
 
     def test_NamespaceFilterPageGenerator(self):
         self.assertFunction("NamespaceFilterPageGenerator")
@@ -81,14 +84,19 @@
         self.assertFunction("RegexFilterPageGenerator")
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, '/doc')
-        self.assertEqual(len(tuple(gen)), 2)
+        self.assertPagelistTitles(gen,
+                                  ('Template:!/Doc', 'Template:Template/Doc'))
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, '/doc',
                                                       quantifier='none')
         self.assertEqual(len(tuple(gen)), 11)
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'])
-        self.assertEqual(len(tuple(gen)), 4)
+        self.assertPagelistTitles(gen,
+                                  ('Template:!/Doc',
+                                   'Template:!/Meta',
+                                   'Template:Template/Doc',
+                                   'Template:Template/Meta'))
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'],
                                                       quantifier='none')
@@ -96,15 +104,19 @@
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'],
                                                       quantifier='all')
-        self.assertEqual(len(tuple(gen)), 0)
+        self.assertPagelistTitles(gen, ())
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['Template', 
'/meta'],
                                                       quantifier='all')
-        self.assertEqual(len(tuple(gen)), 1)
+        self.assertPagelistTitles(gen, ('Template:Template/Meta'))
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['template', 
'/meta'],
                                                       quantifier='any')
-        self.assertEqual(len(tuple(gen)), 4)
+        self.assertPagelistTitles(gen,
+                                  ('Template:!/Meta',
+                                   'Template:Template',
+                                   'Template:Template/Doc',
+                                   'Template:Template/Meta'))
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles,
                                                       site=self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['template', 
'/meta'],
@@ -116,7 +128,9 @@
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['template', 
'/meta'],
                                                       quantifier='all',
                                                       ignore_namespace=False)
-        self.assertEqual(len(tuple(gen)), 2)
+        self.assertPagelistTitles(gen,
+                                  ('Template:!/Meta',
+                                   'Template:Template/Meta'))
         gen = pagegenerators.PagesFromTitlesGenerator(self.titles,
                                                       site=self.site)
         gen = pagegenerators.RegexFilterPageGenerator(gen, ['template', 
'/meta'],
@@ -133,9 +147,10 @@
             p.text = u"This is the content of %s as a sample" % p.title()
             pages.append(p)
         gen = pagegenerators.RegexBodyFilterPageGenerator(iter(pages), '/doc')
-        self.assertEqual(len(tuple(gen)), 2)
+        self.assertPagelistTitles(gen,
+                                  ('Template:!/Doc', 'Template:Template/Doc'))
         gen = pagegenerators.RegexBodyFilterPageGenerator(iter(pages), 'This')
-        self.assertEqual(len(tuple(gen)), 13)
+        self.assertPagelistTitles(gen, self.titles)
         gen = pagegenerators.RegexBodyFilterPageGenerator(iter(pages), 'talk',
                                                           quantifier='none')
         self.assertEqual(len(tuple(gen)), 9)
@@ -169,6 +184,27 @@
         self.assertEqual(len(set(item['revid'] for item in items)), 4)
 
 
+class TestTextfilePageGenerator(DefaultSiteTestCase):
+
+    """Test loading pages from a textfile."""
+
+    dry = True
+
+    expected_titles = ('File', 'Bracket', 'MediaWiki:Test', 'Under score')
+
+    def test_brackets(self):
+        filename = os.path.join(_data_dir, 'pagelist-brackets.txt')
+        site = self.get_site()
+        titles = list(pagegenerators.TextfilePageGenerator(filename, site))
+        self.assertPagelistTitles(titles, self.expected_titles)
+
+    def test_lines(self):
+        filename = os.path.join(_data_dir, 'pagelist-lines.txt')
+        site = self.get_site()
+        titles = list(pagegenerators.TextfilePageGenerator(filename, site))
+        self.assertPagelistTitles(titles, self.expected_titles)
+
+
 class TestDequePreloadingGenerator(DefaultSiteTestCase):
 
     """Test preloading generator on lists."""

-- 
To view, visit https://gerrit.wikimedia.org/r/169657
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I20bb62247e6b0b8d7a13a425cde210e60eb7d730
Gerrit-PatchSet: 4
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Mpaa <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to