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

Change subject: [bugfix] L10N tests for site.lang key
......................................................................


[bugfix] L10N tests for site.lang key

Keys of i18n json files has been changed from site.code to site.lang.
After updating the L10N test is broken due to some sites has different
lang and code property.

- Now check templates for all sites in languages_by_size list.
- skip known problems
- create method name with code
- Check whether a given language has a corresponding site
- Give more precise message for assert error

The original commit in the master branch fdef82ff introduced a problem with
testing that it needed to query many Wikipedias to get their language for the
translations. The follow-up patch 5e83b6e0 is incorporated into this patch.

Co-Author: Fabian Neundorf <[email protected]>
Change-Id: I43131490147846d3486a6d457dc055ecb7593077
---
M tests/l10n_tests.py
1 file changed, 45 insertions(+), 21 deletions(-)

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



diff --git a/tests/l10n_tests.py b/tests/l10n_tests.py
index 46981a7..294914a 100644
--- a/tests/l10n_tests.py
+++ b/tests/l10n_tests.py
@@ -29,39 +29,43 @@
 
     def __new__(cls, name, bases, dct):
         """Create the new class."""
-        # this comment is to avoid senseless flake8 warning
-
-        def test_method(msg, code):
+        def test_method(site):
 
             def test_template(self):
                 """Test validity of template."""
+                lang = site.lang
+                if lang not in keys:
+                    return
+                msg = i18n.twtranslate(lang, package, fallback=False)
                 if msg:
                     # check whether the message contains a template
                     template = re.findall(u'.*?{{(.*?)[|}]', msg)
                     self.assertTrue(template)
 
-                    if template:
-                        # check whether site is valid
-                        site = pywikibot.Site('en', 'wikipedia')
-                        self.assertTrue(code in site.languages())
-
-                        # check whether template exists
-                        title = template[0]
-                        site = pywikibot.Site(code, 'wikipedia')
-                        page = pywikibot.Page(site, title, ns=10)
-                        self.assertTrue(page.exists())
+                    # known problem
+                    if site.code == 'simple':
+                        raise unittest.SkipTest(
+                            "'simple' wiki has 'en' language  code but "
+                            "missing template. Must be solved by the "
+                            "corresponding script.")
+                    # check whether template exists
+                    title = template[0]
+                    page = pywikibot.Page(site, title, ns=10)
+                    self.assertTrue(page.exists())
 
             return test_template
 
         # create test methods for package messages processed by unittest
+        site = pywikibot.Site(dct['code'], dct['family'])
+        codes = site.family.languages_by_size
+        del site
         for package in PACKAGES:
-            for lang in i18n.twget_keys(package):
-                template_msg = i18n.twtranslate(lang, package, fallback=False)
-                if template_msg is None:
-                    continue
-                test_name = "test_%s_%s" % (package.replace('-', '_'), lang)
-                dct[test_name] = test_method(template_msg, lang)
-        return type.__new__(cls, name, bases, dct)
+            keys = i18n.twget_keys(package)
+            for code in codes:
+                current_site = pywikibot.Site(code, dct['family'])
+                test_name = ("test_%s_%s" % (package, code)).replace('-', '_')
+                dct[test_name] = test_method(current_site)
+        return super(TestValidTemplateMeta, cls).__new__(cls, name, bases, dct)
 
 
 @add_metaclass
@@ -71,7 +75,27 @@
 
     __metaclass__ = TestValidTemplateMeta
 
-    net = True  # magic flag tells jenkins to not run the test.
+    family = 'wikipedia'
+    code = 'en'
+
+
+class TestSites(TestCase):
+
+    """Other test L10N cases processed by unittest."""
+
+    family = 'wikipedia'
+    code = 'en'
+
+    def test_valid_sites(self):
+        """Test whether language key has a corresponding site."""
+        codes = self.site.family.languages_by_size
+        languages = [pywikibot.Site(code, self.family).lang for code in codes]
+        for package in PACKAGES:
+            keys = i18n.twget_keys(package)
+            for key in keys:
+                self.assertIn(key, languages,
+                              "'%s' - json key '%s' is not a site language"
+                              % (package, key))
 
 
 if __name__ == '__main__':

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I43131490147846d3486a6d457dc055ecb7593077
Gerrit-PatchSet: 10
Gerrit-Project: pywikibot/core
Gerrit-Branch: 2.0
Gerrit-Owner: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to