blob: 9d4366a91b999c55dc9c0de0a4c3cc60c6ed1679 [file] [log] [blame]
# Copyright 2010-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import unicode_literals
import sys
from portage import _encodings, _unicode_encode
from portage.exception import PortageException
from portage.tests import TestCase
from _emerge.DependencyArg import DependencyArg
from _emerge.UseFlagDisplay import UseFlagDisplay
if sys.hexversion >= 0x3000000:
# pylint: disable=W0622
basestring = str
STR_IS_UNICODE = sys.hexversion >= 0x3000000
class StringFormatTestCase(TestCase):
"""
Test that string formatting works correctly in the current interpretter,
which may be either python2 or python3.
"""
# We need unicode_literals in order to get some unicode test strings
# in a way that works in both python2 and python3.
unicode_strings = (
'\u2018',
'\u2019',
)
def testDependencyArg(self):
self.assertEqual(_encodings['content'], 'utf_8')
for arg_unicode in self.unicode_strings:
arg_bytes = _unicode_encode(arg_unicode, encoding=_encodings['content'])
dependency_arg = DependencyArg(arg=arg_unicode)
# Use unicode_literals for unicode format string so that
# __unicode__() is called in Python 2.
formatted_str = "%s" % (dependency_arg,)
self.assertEqual(formatted_str, arg_unicode)
if STR_IS_UNICODE:
# Test the __str__ method which returns unicode in python3
formatted_str = "%s" % (dependency_arg,)
self.assertEqual(formatted_str, arg_unicode)
else:
# Test the __str__ method which returns encoded bytes in python2
formatted_bytes = b"%s" % (dependency_arg,)
self.assertEqual(formatted_bytes, arg_bytes)
def testPortageException(self):
self.assertEqual(_encodings['content'], 'utf_8')
for arg_unicode in self.unicode_strings:
arg_bytes = _unicode_encode(arg_unicode, encoding=_encodings['content'])
e = PortageException(arg_unicode)
# Use unicode_literals for unicode format string so that
# __unicode__() is called in Python 2.
formatted_str = "%s" % (e,)
self.assertEqual(formatted_str, arg_unicode)
if STR_IS_UNICODE:
# Test the __str__ method which returns unicode in python3
formatted_str = "%s" % (e,)
self.assertEqual(formatted_str, arg_unicode)
else:
# Test the __str__ method which returns encoded bytes in python2
formatted_bytes = b"%s" % (e,)
self.assertEqual(formatted_bytes, arg_bytes)
def testUseFlagDisplay(self):
self.assertEqual(_encodings['content'], 'utf_8')
for enabled in (True, False):
for forced in (True, False):
for arg_unicode in self.unicode_strings:
e = UseFlagDisplay(arg_unicode, enabled, forced)
# Use unicode_literals for unicode format string so that
# __unicode__() is called in Python 2.
formatted_str = "%s" % (e,)
self.assertEqual(isinstance(formatted_str, basestring), True)
if STR_IS_UNICODE:
# Test the __str__ method which returns unicode in python3
formatted_str = "%s" % (e,)
self.assertEqual(isinstance(formatted_str, str), True)
else:
# Test the __str__ method which returns encoded bytes in python2
formatted_bytes = b"%s" % (e,)
self.assertEqual(isinstance(formatted_bytes, bytes), True)