jenkins-bot has submitted this change and it was merged.
Change subject: Expand testReprUnicode to validate the result ......................................................................
Expand testReprUnicode to validate the result
The repr(Page) test was very simple, only checking the type returned. This expanded set of tests passes if applied before 1e54a7d6 so that any fix to Page.__repr__ after 1e54a7d6 can behave the same as before unicode_literals.
Change-Id: I5e0ce794d38c047fef2c72c50664830175fbc64a --- M tests/page_tests.py 1 file changed, 39 insertions(+), 11 deletions(-)
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/page_tests.py b/tests/page_tests.py index d170cab..94a1c2a 100644 --- a/tests/page_tests.py +++ b/tests/page_tests.py @@ -14,7 +14,7 @@ import pywikibot.page
from tests.aspects import unittest, TestCase, DefaultSiteTestCase -from tests.utils import allowed_failure +from tests.utils import allowed_failure, expected_failure_if
if sys.version_info[0] > 2: basestring = (str, ) @@ -492,16 +492,6 @@ mainpage_unpickled = pickle.loads(mainpage_str) self.assertEqual(mainpage, mainpage_unpickled)
- def testRepr(self): - mainpage = self.get_mainpage() - s = repr(mainpage) - self.assertIsInstance(s, str) - - def testReprUnicode(self): - page = pywikibot.Page(self.get_site(), u'Ō') - s = repr(page) - self.assertIsInstance(s, str) - def test_redirect(self): """Test that the redirect option is set correctly.""" site = self.get_site() @@ -522,6 +512,44 @@ self.assertTrue(page_copy.isRedirectPage())
+class TestPageRepr(DefaultSiteTestCase): + + """Test Page representation.""" + + cached = True + + def test_mainpage_type(self): + u"""Test the return type of repr(Page(<main page>)) is str.""" + mainpage = self.get_mainpage() + self.assertIsInstance(repr(mainpage), str) + + def test_unicode_type(self): + """Test the return type of repr(Page(u'<non-ascii>')) is str.""" + page = pywikibot.Page(self.get_site(), u'Ō') + self.assertIsInstance(repr(page), str) + + @expected_failure_if(sys.version_info[0] > 2) + def test_unicode_value(self): + """Test repr(Page(u'<non-ascii>')) is represented simply as utf8.""" + page = pywikibot.Page(self.get_site(), u'Ō') + self.assertEqual(repr(page), b'Page(\xc5\x8c)') + + @unittest.skipIf(sys.version_info[0] > 2, 'Python 2 specific test') + def test_unicode_percent_r_failure(self): + """Test u'{x!r}'.format(Page(u'<non-ascii>')) raises exception on Python 2.""" + # This raises an exception on Python 2, but passes on Python 3 + page = pywikibot.Page(self.get_site(), u'Ō') + self.assertRaisesRegex(UnicodeDecodeError, '', unicode.format, u'{0!r}', page) + + @unittest.skipIf(sys.version_info[0] < 3, 'Python 3+ specific test') + def test_unicode_value_py3(self): + """Test to capture actual Python 3 result pre unicode_literals.""" + page = pywikibot.Page(self.get_site(), u'Ō') + self.assertEqual(repr(page), "Page(b'\xc5\x8c')") + self.assertEqual(u'%r' % page, "Page(b'\xc5\x8c')") + self.assertEqual(u'{0!r}'.format(page), "Page(b'\xc5\x8c')") + + class TestPageBotMayEdit(TestCase):
"""Test Page.botMayEdit() method."""
pywikibot-commits@lists.wikimedia.org