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