jenkins-bot has submitted this change and it was merged.
Change subject: Add site detection tests
......................................................................
Add site detection tests
Bug: T88601
Change-Id: I73506739c68c42c1150270c991ad1217cf7d3793
---
M tests/__init__.py
A tests/site_detect_tests.py
M tox.ini
3 files changed, 177 insertions(+), 1 deletion(-)
Approvals:
John Vandenberg: Looks good to me, but someone else must approve
XZise: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/__init__.py b/tests/__init__.py
index 82757ed..c5a7d42 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -101,7 +101,10 @@
disabled_tests = {
'textlib': [
'test_interwiki_format', # example; very slow test
- ]
+ ],
+ 'site_detect': [
+ 'test_IWM', # very slow and tests include unnecessary sites
+ ],
}
diff --git a/tests/site_detect_tests.py b/tests/site_detect_tests.py
new file mode 100644
index 0000000..a914a3b
--- /dev/null
+++ b/tests/site_detect_tests.py
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+"""Test for site detection."""
+#
+# (C) Pywikibot team, 2014-2015
+#
+# Distributed under the terms of the MIT license.
+#
+from __future__ import unicode_literals
+
+__version__ = '$Id$'
+
+from pywikibot.site_detect import MWSite
+from pywikibot.tools import PY2
+
+from tests.aspects import unittest, TestCase
+
+if not PY2:
+ basestring = (str,)
+
+
+class TestWikiSiteDetection(TestCase):
+
+ """Test Case for MediaWiki detection and site object creation."""
+
+ family = 'meta'
+ code = 'meta'
+ net = True
+
+ def setUp(self):
+ """Set up test."""
+ self.failures = {}
+ self.errors = {}
+ self.pass_no = 0
+ self.total = 0
+ super(TestWikiSiteDetection, self).setUp()
+
+ def tearDown(self):
+ """Tear Down test."""
+ super(TestWikiSiteDetection, self).tearDown()
+ print('Out of %d sites, %d tests passed, %d tests failed '
+ 'and %d tests raised an error'
+ % (self.total, self.pass_no, len(self.failures), len(self.errors)
+ )
+ )
+ if self.failures or self.errors:
+ print('Failures:\n' + '\n'.join('%s : %s'
+ % (key, value) for (key, value) in self.failures.items()))
+ print('Errors:\n' + '\n'.join('%s : %s'
+ % (key, value) for (key, value) in self.errors.items()))
+
+ def _wiki_detection(self, url, result):
+ """Perform one load test."""
+ self.total += 1
+ try:
+ site = MWSite(url)
+ except Exception as e:
+ print('failed on ' + url)
+ self.errors[url] = e
+ return
+ try:
+ if result is None:
+ self.assertIsNone(site)
+ else:
+ self.assertIsInstance(site, result)
+ self.pass_no += 1
+ except AssertionError as error:
+ self.failures[url] = error
+
+ def assertSite(self, url):
+ """Assert a MediaWiki site can be loaded from the url."""
+ self._wiki_detection(url, MWSite)
+
+ def assertNoSite(self, url):
+ """Assert a url is not a MediaWiki site."""
+ self._wiki_detection(url, None)
+
+ def test_IWM(self):
+ """Test the load_site method for MW sites on the IWM list."""
+ data = self.get_site().siteinfo['interwikimap']
+ for item in data:
+ if 'local' not in item:
+ self.total += 1
+ url = item['url']
+ try:
+ site = MWSite(url)
+ except Exception as error:
+ print('failed to load ' + url)
+ self.errors[url] = error
+ continue
+ if type(site) is MWSite:
+ try:
+ version = site.version
+ except Exception as error:
+ print('failed to get version of ' + url)
+ self.errors[url] = error
+ else:
+ try:
+ self.assertIsInstance(version, basestring)
+ self.assertRegex(version, r'^\d\.\d+.*')
+ self.pass_no += 1
+ except AssertionError as error:
+ print('failed to parse version of ' + url)
+ self.failures[url] = error
+
+ def test_detect_site(self):
+ """Test detection of MediaWiki sites."""
+ self.assertSite('http://botwiki.sno.cc/wiki/$1')
+ self.assertSite('http://glossary.reuters.com/index.php?title=$1')
+ self.assertSite('http://www.livepedia.gr/index.php?title=$1')
+ self.assertSite('http://guildwars.wikia.com/wiki/$1')
+ self.assertSite('http://www.gutenberg.org/wiki/$1')
+ self.assertSite('http://www.hrwiki.org/index.php/$1')
+ self.assertSite('http://wiki.rennkuckuck.de/index.php/$1')
+ self.assertSite('http://www.proofwiki.org/wiki/$1')
+ self.assertSite('http://wiki.rennkuckuck.de/index.php/$1')
+ self.assertSite('http://www.gutenberg.org/wiki/$1')
+ self.assertSite(
+ 'http://www.ck-wissen.de/ckwiki/index.php?title=$1')
+ self.assertSite('http://en.citizendium.org/wiki/$1')
+ self.assertSite(
+ 'http://www.lojban.org/tiki/tiki-index.php?page=$1')
+ self.assertSite('http://www.EcoReality.org/wiki/$1')
+ self.assertSite('http://www.wikichristian.org/index.php?title=$1')
+ self.assertSite('http://wikitree.org/index.php?title=$1')
+ self.assertEqual(self.pass_no, 16)
+ self.assertEqual(len(self.failures), 0)
+ self.assertEqual(len(self.errors), 0)
+
+ def test_detect_failure(self):
+ """Test detection failure for MediaWiki sites with an API."""
+ self.assertNoSite('https://en.wikifur.com/wiki/$1')
+ # api.php is not available
+ self.assertNoSite('http://wiki.animutationportal.com/index.php/$1')
+ # API is disabled
+ self.assertNoSite('http://wiki.linuxquestions.org/wiki/$1')
+ # offline
+ self.assertNoSite('http://seattlewiki.org/wiki/$1')
+ self.assertEqual(len(self.errors), 4)
+
+ def test_pre_api_sites(self):
+ """Test detection of MediaWiki sites prior to the API."""
+ self.assertNoSite('http://www.wikif1.org/$1')
+ self.assertNoSite('http://www.thelemapedia.org/index.php/$1')
+ self.assertNoSite('http://esperanto.blahus.cz/cxej/vikio/index.php/$1')
+ self.assertNoSite('http://www.werelate.org/wiki/$1')
+ self.assertNoSite('http://www.otterstedt.de/wiki/index.php/$1')
+ self.assertNoSite('http://kb.mozillazine.org/$1')
+ self.assertEqual(len(self.errors), 6)
+
+ def test_detect_nosite(self):
+ """Test detection of non-wiki sites."""
+ self.assertNoSite('http://bluwiki.com/go/$1')
+ self.assertNoSite('http://www.imdb.com/name/nm$1/')
+ self.assertNoSite('http://www.ecyrd.com/JSPWiki/Wiki.jsp?page=$1')
+ self.assertNoSite('http://operawiki.info/$1')
+ self.assertNoSite(
+ 'http://www.tvtropes.org/pmwiki/pmwiki.php/Main/$1')
+ self.assertNoSite('http://c2.com/cgi/wiki?$1')
+ self.assertNoSite('https://phabricator.wikimedia.org/$1')
+ self.assertNoSite(
+
'http://www.merriam-webster.com/cgi-bin/dictionary?book=Dictionary&va=$1')
+ self.assertNoSite('http://arxiv.org/abs/$1')
+ self.assertNoSite('http://musicbrainz.org/doc/$1')
+ self.assertNoSite('http://wiki.animutationportal.com/index.php/$1')
+ self.assertEqual(len(self.errors), 11)
+
+
+if __name__ == '__main__':
+ try:
+ unittest.main()
+ except SystemExit:
+ pass
diff --git a/tox.ini b/tox.ini
index 5679523..c85de9f 100644
--- a/tox.ini
+++ b/tox.ini
@@ -143,6 +143,7 @@
tests/pwb/ \
tests/pwb_tests.py \
tests/script_tests.py \
+ tests/site_detect_tests.py \
tests/tests_tests.py \
tests/timestripper_tests.py \
tests/thread_tests.py \
--
To view, visit https://gerrit.wikimedia.org/r/220452
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I73506739c68c42c1150270c991ad1217cf7d3793
Gerrit-PatchSet: 8
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: Maverick <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: VcamX <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits