Source code for tests.interwiki_link_tests

#!/usr/bin/env python3
"""Test Interwiki Link functionality."""
#
# (C) Pywikibot team, 2014-2022
#
# Distributed under the terms of the MIT license.
#
from __future__ import annotations

from contextlib import suppress

from pywikibot import config
from pywikibot.exceptions import InvalidTitleError
from pywikibot.page import Link
from tests.aspects import AlteredDefaultSiteTestCase as LinkTestCase
from tests.aspects import TestCase, unittest


[docs] class TestPartiallyQualifiedLinkDifferentCodeParser(LinkTestCase): """Tests for interwiki links to local sites.""" family = 'wikipedia' code = 'en' cached = True
[docs] def test_partially_qualified_NS0_family(self): """Test that Link uses config.family for namespace 0.""" config.mylang = 'de' config.family = 'wikipedia' link = Link('en:Main Page') link.parse() self.assertEqual(link.site, self.get_site()) self.assertEqual(link.title, 'Main Page') self.assertEqual(link.namespace, 0)
[docs] def test_partially_qualified_NS1_family(self): """Test that Link uses config.family for namespace 1.""" config.mylang = 'de' config.family = 'wikipedia' link = Link('en:Talk:Main Page') link.parse() self.assertEqual(link.site, self.get_site()) self.assertEqual(link.title, 'Main Page') self.assertEqual(link.namespace, 1)
[docs] class TestInterwikiLinksToNonLocalSites(TestCase): """Tests for interwiki links to non local sites.""" sites = { 'wp': { 'family': 'wikipedia', 'code': 'en' }, 'tw': { 'family': 'i18n', 'code': 'i18n' } }
[docs] def test_direct_non_local(self): """Test translatewiki:Main Page on English Wikipedia.""" link = Link('translatewiki:Main Page', self.get_site('wp')) link.parse() self.assertEqual(link.site, self.get_site('tw')) self.assertEqual(link.title, 'Main Page') self.assertEqual(link.namespace, 0)
[docs] def test_indirect_non_local(self): """Test en:translatewiki:Main Page on English Wikipedia.""" link = Link('en:translatewiki:Main Page', self.get_site('wp')) link.parse() self.assertEqual(link.site, self.get_site('tw')) self.assertEqual(link.title, 'Main Page') self.assertEqual(link.namespace, 0)
[docs] def test_via_local_non_local(self): """Test de:translatewiki:Main Page on English Wikipedia.""" link = Link('de:translatewiki:Main Page', self.get_site('wp')) with self.assertRaisesRegex( InvalidTitleError, 'de:translatewiki:Main Page links to a non local ' 'site i18n:i18n ' 'via an interwiki link to wikipedia:de'): link.parse()
if __name__ == '__main__': with suppress(SystemExit): unittest.main()