jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/463498 )
Change subject: [cleanup] cleanup tests/[l10n_tests.py-oauth_tests.py] ......................................................................
[cleanup] cleanup tests/[l10n_tests.py-oauth_tests.py]
- use single quotes for string literals - remove preleading "u" fron strings - indentation to make sure code lines are less than 79 characters - use str.format(...) instead of modulo for type specifier arguments
Change-Id: Iadc49eb171d0b4953958440be247fb4de624102b --- M tests/l10n_tests.py M tests/link_tests.py M tests/logentry_tests.py M tests/login_tests.py M tests/mediawikiversion_tests.py M tests/namespace_tests.py 6 files changed, 151 insertions(+), 135 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/tests/l10n_tests.py b/tests/l10n_tests.py index 316a161..2e4f26d 100644 --- a/tests/l10n_tests.py +++ b/tests/l10n_tests.py @@ -44,8 +44,8 @@ if site.code == 'simple': raise unittest.SkipTest( "'simple' wiki has 'en' language code but " - "missing template. Must be solved by the " - "corresponding script.") + 'missing template. Must be solved by the ' + 'corresponding script.') # check whether template exists title = templates[0][0] page = pywikibot.Page(site, title, ns=10) @@ -60,8 +60,8 @@
# create test methods for package messages processed by unittest if not i18n.messages_available(): - raise unittest.SkipTest("i18n messages package '%s' not available." - % i18n._messages_package_name) + raise unittest.SkipTest("i18n messages package '{}' not available." + .format(i18n._messages_package_name))
site = pywikibot.Site(dct['code'], dct['family']) codes = site.family.languages_by_size @@ -70,7 +70,8 @@ keys = i18n.twget_keys(package) for code in codes: current_site = pywikibot.Site(code, dct['family']) - test_name = ("test_%s_%s" % (package, code)).replace('-', '_') + test_name = ('test_{}_{}' + .format(package, code)).replace('-', '_') cls.add_method( dct, test_name, test_method(current_site), doc_suffix='{0} and language {1}'.format( @@ -105,8 +106,8 @@ keys = i18n.twget_keys(package) for key in keys: self.assertIn(key, languages, - "'%s' - json key '%s' is not a site language" - % (package, key)) + "'{}' - json key '{}' is not a site language" + .format(package, key))
if __name__ == '__main__': # pragma: no cover diff --git a/tests/link_tests.py b/tests/link_tests.py index 1e7cc72..2e22a5b 100644 --- a/tests/link_tests.py +++ b/tests/link_tests.py @@ -76,21 +76,28 @@ self.assertEqual(Link('~', self.get_site()).title, '~') self.assertEqual(Link('"', self.get_site()).title, '"') self.assertEqual(Link(''', self.get_site()).title, ''') - self.assertEqual(Link('Talk:Sandbox', self.get_site()).title, 'Sandbox') - self.assertEqual(Link('Talk:Foo:Sandbox', self.get_site()).title, 'Foo:Sandbox') - self.assertEqual(Link('File:Example.svg', self.get_site()).title, 'Example.svg') - self.assertEqual(Link('File_talk:Example.svg', self.get_site()).title, 'Example.svg') - self.assertEqual(Link('Foo/.../Sandbox', self.get_site()).title, 'Foo/.../Sandbox') - self.assertEqual(Link('Sandbox/...', self.get_site()).title, 'Sandbox/...') + self.assertEqual(Link('Talk:Sandbox', self.get_site()).title, + 'Sandbox') + self.assertEqual(Link('Talk:Foo:Sandbox', self.get_site()).title, + 'Foo:Sandbox') + self.assertEqual(Link('File:Example.svg', self.get_site()).title, + 'Example.svg') + self.assertEqual(Link('File_talk:Example.svg', self.get_site()).title, + 'Example.svg') + self.assertEqual(Link('Foo/.../Sandbox', self.get_site()).title, + 'Foo/.../Sandbox') + self.assertEqual(Link('Sandbox/...', self.get_site()).title, + 'Sandbox/...') self.assertEqual(Link('A~~', self.get_site()).title, 'A~~') self.assertEqual(Link(':A', self.get_site()).title, 'A') # Length is 256 total, but only title part matters - self.assertEqual(Link('Category:' + 'X' * 248, self.get_site()).title, 'X' * 248) + self.assertEqual(Link('Category:' + 'X' * 248, self.get_site()).title, + 'X' * 248) self.assertEqual(Link('X' * 252, self.get_site()).title, 'X' * 252) self.assertEqual(Link('A%20B', self.get_site()).title, 'A B') - self.assertEqual(Link('A é B', self.get_site()).title, u'A é B') - self.assertEqual(Link('A é B', self.get_site()).title, u'A é B') - self.assertEqual(Link('A é B', self.get_site()).title, u'A é B') + self.assertEqual(Link('A é B', self.get_site()).title, 'A é B') + self.assertEqual(Link('A é B', self.get_site()).title, 'A é B') + self.assertEqual(Link('A é B', self.get_site()).title, 'A é B') self.assertEqual(Link('A B', self.get_site()).title, 'A B') self.assertEqual(Link('A   B', self.get_site()).title, 'A B')
@@ -119,9 +126,8 @@ # Bad characters forbidden regardless of wgLegalTitleChars def generate_contains_illegal_chars_exc_regex(text): exc_regex = ( - r'^(u|)'%s' contains illegal char(s) (u|)'%s'$' % ( - re.escape(text), re.escape(text[2]) - )) + r'^(u|)'{}' contains illegal char(s) (u|)'{}'$' + .format(re.escape(text), re.escape(text[2]))) return exc_regex
texts_to_test = ['A [ B', 'A ] B', 'A { B', 'A } B', 'A < B', 'A > B'] @@ -149,10 +155,8 @@
# Directory navigation def generate_contains_dot_combinations_exc_regex(text): - exc_regex = ( - r'^(contains . / combinations): (u|)'%s'$' % re.escape( - text) - ) + exc_regex = (r'^(contains . / combinations): (u|)'{}'$' + .format(re.escape(text))) return exc_regex
texts_to_test = ['.', '..', './Sandbox', '../Sandbox', 'Foo/./Sandbox', @@ -192,7 +196,7 @@
# Namespace prefix without actual title def generate_has_no_title_exc_regex(text): - exc_regex = r'^(u|)'%s' has no title.$' % re.escape(text) + exc_regex = r'^(u|)'{}' has no title.$'.format(re.escape(text)) return exc_regex
texts_to_test = ['Talk:', 'Category: ', 'Category: #bar'] @@ -831,7 +835,7 @@ self.assertEqual(link.namespace, 4)
def test_fully_qualified_NS1_code(self): - """Test 'en:wikipedia:Talk:Main Page' on wikidata is not namespace 1.""" + """Test 'en:wikipedia:Talk:Main Page' on wikidata isn't namespace 1.""" config.mylang = 'wikidata' config.family = 'wikidata' link = Link('en:wikipedia:Talk:Main Page') @@ -984,7 +988,8 @@ """Test that Link doesn't allow empty.""" link = Link('', self.get_site()) self.assertRaisesRegex( - InvalidTitle, "The link does not contain a page title", link.parse) + InvalidTitle, 'The link does not contain a page title', + link.parse)
def test_namespace_lookalike(self): """Test that Link does only detect valid namespaces.""" diff --git a/tests/logentry_tests.py b/tests/logentry_tests.py index b163211..264a305 100644 --- a/tests/logentry_tests.py +++ b/tests/logentry_tests.py @@ -30,10 +30,11 @@ """ Base class for log entry tests.
- It uses the German Wikipedia for a current representation of the log entries - and the test Wikipedia for the future representation. It also tests on a - wiki with MW 1.19 or older to check that it can still read the older format. - It currently uses lyricwiki which as of this commit uses 1.19.24. + It uses the German Wikipedia for a current representation of the + log entries and the test Wikipedia for the future representation. + It also tests on a wiki with MW 1.19 or older to check that it can + still read the older format. It currently uses lyricwiki which as of + this commit uses 1.19.24. """
sites = { @@ -123,7 +124,7 @@
# create test methods for the support logtype classes for logtype in LogEntryFactory._logtypes: - cls.add_method(dct, 'test_%sEntry' % logtype.title(), + cls.add_method(dct, 'test_{}Entry'.format(logtype.title()), test_method(logtype))
return super(TestLogentriesMeta, cls).__new__(cls, name, bases, dct) @@ -144,8 +145,8 @@ def test_simple_entries(self, key): """Test those entries which don't have an extra LogEntry subclass.""" # Unfortunately it's not possible to use the metaclass to create a - # bunch of test methods for this too as the site instances haven't been - # initialized yet. + # bunch of test methods for this too as the site instances haven't + # been initialized yet. for simple_type in (self.site.logtypes - set(LogEntryFactory._logtypes)): if not simple_type: @@ -172,10 +173,13 @@ # Check that there are no empty strings self.assertTrue(all(logentry.flags())) if logentry.expiry() is not None: - self.assertIsInstance(logentry.expiry(), pywikibot.Timestamp) - self.assertIsInstance(logentry.duration(), datetime.timedelta) - self.assertEqual(logentry.timestamp() + logentry.duration(), - logentry.expiry()) + self.assertIsInstance(logentry.expiry(), + pywikibot.Timestamp) + self.assertIsInstance(logentry.duration(), + datetime.timedelta) + self.assertEqual( + logentry.timestamp() + logentry.duration(), + logentry.expiry()) else: self.assertIsNone(logentry.duration()) break @@ -305,8 +309,8 @@ with self.assertRaises(pywikibot.NoPage): self.get_mainpage(site).getMovedTarget()
- self.assertOneDeprecationParts('pywikibot.page.BasePage.getMovedTarget', - 'moved_target()') + self.assertOneDeprecationParts( + 'pywikibot.page.BasePage.getMovedTarget', 'moved_target()')
def test_moved_target_fail_de(self): """Test getMovedTarget method failing on de-wiki.""" @@ -314,8 +318,8 @@ with self.assertRaises(pywikibot.NoPage): page.getMovedTarget()
- self.assertOneDeprecationParts('pywikibot.page.BasePage.getMovedTarget', - 'moved_target()') + self.assertOneDeprecationParts( + 'pywikibot.page.BasePage.getMovedTarget', 'moved_target()')
if __name__ == '__main__': # pragma: no cover diff --git a/tests/login_tests.py b/tests/login_tests.py index d46f1b9..1eb85b4 100644 --- a/tests/login_tests.py +++ b/tests/login_tests.py @@ -27,17 +27,17 @@ class FakeFamily(object): """Mock."""
- name = "~FakeFamily" + name = '~FakeFamily'
class FakeSite(object): """Mock."""
- code = "~FakeCode" + code = '~FakeCode' family = FakeFamily
-FakeUsername = "~FakeUsername" +FakeUsername = '~FakeUsername'
class FakeConfig(object): @@ -47,8 +47,8 @@ usernames[FakeFamily.name] = {FakeSite.code: FakeUsername}
-@mock.patch("pywikibot.Site", FakeSite) -@mock.patch("pywikibot.login.config", FakeConfig) +@mock.patch('pywikibot.Site', FakeSite) +@mock.patch('pywikibot.login.config', FakeConfig) class TestOfflineLoginManager(DefaultDrySiteTestCase): """Test offline operation of login.LoginManager."""
@@ -82,7 +82,7 @@ self.assertEqual(lm.username, FakeUsername)
-@mock.patch("pywikibot.Site", FakeSite) +@mock.patch('pywikibot.Site', FakeSite) class TestPasswordFile(DefaultDrySiteTestCase): """Test parsing password files."""
@@ -95,18 +95,18 @@ def setUp(self): """Patch a variety of dependencies.""" super(TestPasswordFile, self).setUp() - self.config = self.patch("pywikibot.login.config") + self.config = self.patch('pywikibot.login.config') self.config.usernames = FakeConfig.usernames - self.config.password_file = "~FakeFile" + self.config.password_file = '~FakeFile' self.config.private_files_permission = 0o600 - self.config.base_dir = "" # ensure that no path modifies password_file + self.config.base_dir = '' # ensure that no path modifies password_file
- self.stat = self.patch("os.stat") + self.stat = self.patch('os.stat') self.stat.return_value.st_mode = 0o100600
- self.chmod = self.patch("os.chmod") + self.chmod = self.patch('os.chmod')
- self.open = self.patch("codecs.open") + self.open = self.patch('codecs.open') self.open.return_value = StringIO()
def test_auto_chmod_OK(self): @@ -142,43 +142,43 @@ """Test global username/password declaration.""" self._test_pwfile(""" ('~FakeUsername', '~FakePassword') - """, "~FakePassword") + """, '~FakePassword')
def test_match_family_username(self): """Test matching by family.""" self._test_pwfile(""" ('~FakeFamily', '~FakeUsername', '~FakePassword') - """, "~FakePassword") + """, '~FakePassword')
def test_match_code_username(self): """Test matching by full configuration.""" self._test_pwfile(""" ('~FakeCode', '~FakeFamily', '~FakeUsername', '~FakePassword') - """, "~FakePassword") + """, '~FakePassword')
def test_ordering(self): """Test that the last matching password is selected.""" self._test_pwfile(""" ('~FakeCode', '~FakeFamily', '~FakeUsername', '~FakePasswordA') ('~FakeUsername', '~FakePasswordB') - """, "~FakePasswordB") + """, '~FakePasswordB')
self._test_pwfile(""" ('~FakeUsername', '~FakePasswordA') ('~FakeCode', '~FakeFamily', '~FakeUsername', '~FakePasswordB') - """, "~FakePasswordB") + """, '~FakePasswordB')
def test_BotPassword(self): """Test BotPassword entries.
- When a BotPassword is used, the login_name changes to contain a suffix, - while the password is read from an object (instead of being read from - the password file directly). + When a BotPassword is used, the login_name changes to contain a + suffix, while the password is read from an object (instead of being + read from the password file directly). """ obj = self._test_pwfile(""" ('~FakeUsername', BotPassword('~FakeSuffix', '~FakePassword')) """, '~FakePassword') - self.assertEqual(obj.login_name, "~FakeUsername@~FakeSuffix") + self.assertEqual(obj.login_name, '~FakeUsername@~FakeSuffix')
if __name__ == '__main__': # pragma: no cover diff --git a/tests/mediawikiversion_tests.py b/tests/mediawikiversion_tests.py index 1d8cecc..495e5ba 100644 --- a/tests/mediawikiversion_tests.py +++ b/tests/mediawikiversion_tests.py @@ -74,9 +74,12 @@
def test_invalid_versions(self): """Verify that insufficient version fail creating.""" - self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, MediaWikiVersion, 'invalid') - self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, MediaWikiVersion, '1number') - self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, MediaWikiVersion, '1.missing') + self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, + MediaWikiVersion, 'invalid') + self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, + MediaWikiVersion, '1number') + self.assertRaisesRegex(ValueError, self.INVALID_VERSION_RE, + MediaWikiVersion, '1.missing')
self.assertRaisesRegex(AssertionError, 'Found "wmf" in "wmf-1"', MediaWikiVersion, '1.23wmf-1') @@ -86,7 +89,8 @@ self.assertEqual(MediaWikiVersion.from_generator('MediaWiki 1.2.3'), self._make('1.2.3')) self.assertRaisesRegex(ValueError, self.GENERATOR_STRING_RE, - MediaWikiVersion.from_generator, 'Invalid 1.2.3') + MediaWikiVersion.from_generator, + 'Invalid 1.2.3')
if __name__ == '__main__': # pragma: no cover diff --git a/tests/namespace_tests.py b/tests/namespace_tests.py index 11904e9..ae870f0 100644 --- a/tests/namespace_tests.py +++ b/tests/namespace_tests.py @@ -46,7 +46,8 @@ file_builtin_ns = dict(_base_builtin_ns) file_builtin_ns['File'] = 6 file_builtin_ns['File talk'] = 7 -builtin_ns = dict(list(image_builtin_ns.items()) + list(file_builtin_ns.items())) +builtin_ns = dict(list(image_builtin_ns.items()) + + list(file_builtin_ns.items()))
def builtin_NamespacesDict(): @@ -80,37 +81,37 @@
def testNamespaceConstructor(self): """Test Namespace constructor.""" - kwargs = {u'case': u'first-letter'} - y = Namespace(id=6, custom_name=u'dummy', canonical_name=u'File', - aliases=[u'Image', u'Immagine'], **kwargs) + kwargs = {'case': 'first-letter'} + y = Namespace(id=6, custom_name='dummy', canonical_name='File', + aliases=['Image', 'Immagine'], **kwargs)
self.assertEqual(y.id, 6) - self.assertEqual(y.custom_name, u'dummy') - self.assertEqual(y.canonical_name, u'File') + self.assertEqual(y.custom_name, 'dummy') + self.assertEqual(y.canonical_name, 'File')
- self.assertNotEqual(y.custom_name, u'Dummy') - self.assertNotEqual(y.canonical_name, u'file') + self.assertNotEqual(y.custom_name, 'Dummy') + self.assertNotEqual(y.canonical_name, 'file')
- self.assertIn(u'Image', y.aliases) - self.assertIn(u'Immagine', y.aliases) + self.assertIn('Image', y.aliases) + self.assertIn('Immagine', y.aliases)
self.assertEqual(len(y), 4) - self.assertEqual(list(y), ['dummy', u'File', u'Image', u'Immagine']) - self.assertEqual(y.case, u'first-letter') + self.assertEqual(list(y), ['dummy', 'File', 'Image', 'Immagine']) + self.assertEqual(y.case, 'first-letter')
def testNamespaceNameCase(self): """Namespace names are always case-insensitive.""" - kwargs = {u'case': u'first-letter'} - y = Namespace(id=6, custom_name=u'dummy', canonical_name=u'File', - aliases=[u'Image', u'Immagine'], **kwargs) - self.assertIn(u'dummy', y) - self.assertIn(u'Dummy', y) - self.assertIn(u'file', y) - self.assertIn(u'File', y) - self.assertIn(u'image', y) - self.assertIn(u'Image', y) - self.assertIn(u'immagine', y) - self.assertIn(u'Immagine', y) + kwargs = {'case': 'first-letter'} + y = Namespace(id=6, custom_name='dummy', canonical_name='File', + aliases=['Image', 'Immagine'], **kwargs) + self.assertIn('dummy', y) + self.assertIn('Dummy', y) + self.assertIn('file', y) + self.assertIn('File', y) + self.assertIn('image', y) + self.assertIn('Image', y) + self.assertIn('immagine', y) + self.assertIn('Immagine', y)
def testNamespaceToString(self): """Test Namespace __str__ and __unicode__.""" @@ -120,19 +121,19 @@ self.assertEqual(str(ns[1]), 'Talk:') self.assertEqual(str(ns[6]), ':File:')
- self.assertEqual(unicode(ns[0]), u':') - self.assertEqual(unicode(ns[1]), u'Talk:') - self.assertEqual(unicode(ns[6]), u':File:') + self.assertEqual(unicode(ns[0]), ':') + self.assertEqual(unicode(ns[1]), 'Talk:') + self.assertEqual(unicode(ns[6]), ':File:')
- kwargs = {u'case': u'first-letter'} - y = Namespace(id=6, custom_name=u'ملف', canonical_name=u'File', - aliases=[u'Image', u'Immagine'], **kwargs) + kwargs = {'case': 'first-letter'} + y = Namespace(id=6, custom_name='ملف', canonical_name='File', + aliases=['Image', 'Immagine'], **kwargs)
self.assertEqual(str(y), ':File:') if PY2: - self.assertEqual(unicode(y), u':ملف:') + self.assertEqual(unicode(y), ':ملف:') self.assertEqual(y.canonical_prefix(), ':File:') - self.assertEqual(y.custom_prefix(), u':ملف:') + self.assertEqual(y.custom_prefix(), ':ملف:')
def testNamespaceCompare(self): """Test Namespace comparisons.""" @@ -146,12 +147,12 @@
self.assertGreater(a, -1)
- x = Namespace(id=6, custom_name=u'dummy', canonical_name=u'File', - aliases=[u'Image', u'Immagine']) - y = Namespace(id=6, custom_name=u'ملف', canonical_name=u'File', - aliases=[u'Image', u'Immagine']) - z = Namespace(id=7, custom_name=u'dummy 7', canonical_name=u'File', - aliases=[u'Image', u'Immagine']) + x = Namespace(id=6, custom_name='dummy', canonical_name='File', + aliases=['Image', 'Immagine']) + y = Namespace(id=6, custom_name='ملف', canonical_name='File', + aliases=['Image', 'Immagine']) + z = Namespace(id=7, custom_name='dummy 7', canonical_name='File', + aliases=['Image', 'Immagine'])
self.assertEqual(x, x) self.assertEqual(x, y) @@ -159,20 +160,20 @@ self.assertNotEqual(x, z)
self.assertEqual(x, 6) - self.assertEqual(x, u'dummy') - self.assertEqual(x, u'Dummy') - self.assertEqual(x, u'file') - self.assertEqual(x, u'File') - self.assertEqual(x, u':File') - self.assertEqual(x, u':File:') - self.assertEqual(x, u'File:') - self.assertEqual(x, u'image') - self.assertEqual(x, u'Image') + self.assertEqual(x, 'dummy') + self.assertEqual(x, 'Dummy') + self.assertEqual(x, 'file') + self.assertEqual(x, 'File') + self.assertEqual(x, ':File') + self.assertEqual(x, ':File:') + self.assertEqual(x, 'File:') + self.assertEqual(x, 'image') + self.assertEqual(x, 'Image')
self.assertFalse(x < 6) self.assertFalse(x > 6)
- self.assertEqual(y, u'ملف') + self.assertEqual(y, 'ملف')
self.assertLess(a, x) self.assertLess(x, z) @@ -188,40 +189,41 @@
def testNamespaceNormalizeName(self): """Test Namespace.normalize_name.""" - self.assertEqual(Namespace.normalize_name(u'File'), u'File') - self.assertEqual(Namespace.normalize_name(u':File'), u'File') - self.assertEqual(Namespace.normalize_name(u'File:'), u'File') - self.assertEqual(Namespace.normalize_name(u':File:'), u'File') + self.assertEqual(Namespace.normalize_name('File'), 'File') + self.assertEqual(Namespace.normalize_name(':File'), 'File') + self.assertEqual(Namespace.normalize_name('File:'), 'File') + self.assertEqual(Namespace.normalize_name(':File:'), 'File')
- self.assertEqual(Namespace.normalize_name(u''), u'') + self.assertEqual(Namespace.normalize_name(''), '')
- self.assertEqual(Namespace.normalize_name(u':'), False) - self.assertEqual(Namespace.normalize_name(u'::'), False) - self.assertEqual(Namespace.normalize_name(u':::'), False) - self.assertEqual(Namespace.normalize_name(u':File::'), False) - self.assertEqual(Namespace.normalize_name(u'::File:'), False) - self.assertEqual(Namespace.normalize_name(u'::File::'), False) + self.assertEqual(Namespace.normalize_name(':'), False) + self.assertEqual(Namespace.normalize_name('::'), False) + self.assertEqual(Namespace.normalize_name(':::'), False) + self.assertEqual(Namespace.normalize_name(':File::'), False) + self.assertEqual(Namespace.normalize_name('::File:'), False) + self.assertEqual(Namespace.normalize_name('::File::'), False)
def test_repr(self): """Test Namespace.__repr__.""" - a = Namespace(id=0, canonical_name=u'Foo') + a = Namespace(id=0, canonical_name='Foo') s = repr(a) - r = "Namespace(id=0, custom_name=%r, canonical_name=%r, aliases=[])" \ - % (unicode('Foo'), unicode('Foo')) + r = 'Namespace(id=0, custom_name={!r}, canonical_name={!r}, ' \ + 'aliases=[])'.format(unicode('Foo'), unicode('Foo')) self.assertEqual(s, r)
a.defaultcontentmodel = 'bar' s = repr(a) - r = ('Namespace(id=0, custom_name=%r, canonical_name=%r, aliases=[], ' - 'defaultcontentmodel=%r)' % - (unicode('Foo'), unicode('Foo'), unicode('bar'))) + r = ('Namespace(id=0, custom_name={!r}, canonical_name={!r}, ' + 'aliases=[], defaultcontentmodel={!r})' + .format(unicode('Foo'), unicode('Foo'), unicode('bar'))) self.assertEqual(s, r)
a.case = 'upper' s = repr(a) - r = ('Namespace(id=0, custom_name=%r, canonical_name=%r, aliases=[], ' - 'case=%r, defaultcontentmodel=%r)' % - (unicode('Foo'), unicode('Foo'), unicode('upper'), unicode('bar'))) + r = ('Namespace(id=0, custom_name={!r}, canonical_name={!r}, ' + 'aliases=[], case={!r}, defaultcontentmodel={!r})' + .format(unicode('Foo'), unicode('Foo'), unicode('upper'), + unicode('bar'))) self.assertEqual(s, r)
b = eval(repr(a)) @@ -236,7 +238,7 @@ r'identifiers contains inappropriate types: (.*?)' ) INTARGNOTSTRINGORNUMBER_RE = ( - r"int() argument must be a string(, a bytes-like object)? " + r'int() argument must be a string(, a bytes-like object)? ' r"or a number, not '(.*?)'" ) NAMESPACEIDNOTRECOGNISED_RE = (