summaryrefslogtreecommitdiffstats
path: root/pym/portage/tests/unicode/test_string_format.py
blob: 95ef9cb12a3fdd2e13490f2415adfb4e75840b07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

import sys

from portage import _encodings, _unicode_decode
from portage.tests import TestCase
from _emerge.DependencyArg import DependencyArg

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.
	"""

	# In order to get some unicode test strings in a way that works in
	# both python2 and python3, write them here as byte strings and
	# decode them before use. This assumes _encodings['content'] is
	# utf_8.

	unicode_strings = (
		b'\xE2\x80\x98',
		b'\xE2\x80\x99',
	)

	def testDependencyArg(self):

		self.assertEqual(_encodings['content'], 'utf_8')

		for arg_bytes in self.unicode_strings:
			arg_unicode = _unicode_decode(arg_bytes, encoding=_encodings['content'])
			dependency_arg = DependencyArg(arg=arg_unicode)

			# Force unicode format string so that __unicode__() is
			# called in python2.
			formatted_str = _unicode_decode("%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 = "%s" % (dependency_arg,)
				self.assertEqual(formatted_bytes, arg_bytes)