2 lumiere_nfc = u"lumi\u00E8re"
3 Artonwall_nfc = u"\u00C4rtonwall.mp3"
4 Artonwall_nfd = u"A\u0308rtonwall.mp3"
12 # The following main helps to generate a test class for other operating
15 if __name__ == "__main__":
19 if len(sys.argv) != 2:
20 print "Usage: %s lumi<e-grave>re" % sys.argv[0]
24 print "class MyWeirdOS(StringUtils, unittest.TestCase):"
25 print " uname = '%s'" % ' '.join(platform.uname())
26 if sys.platform != "win32":
27 print " argv = %s" % repr(sys.argv[1])
28 print " platform = '%s'" % sys.platform
29 print " filesystem_encoding = '%s'" % sys.getfilesystemencoding()
30 print " output_encoding = '%s'" % sys.stdout.encoding
31 print " argv_encoding = '%s'" % (sys.platform == "win32" and 'ascii' or sys.stdout.encoding)
36 from twisted.trial import unittest
37 from mock import patch
40 from allmydata.test.common_util import ReallyEqualMixin
41 from allmydata.util.encodingutil import argv_to_unicode, unicode_to_url, \
42 unicode_to_output, unicode_platform, get_output_encoding, _reload
44 from twisted.python import usage
46 class StringUtilsErrors(ReallyEqualMixin, unittest.TestCase):
51 def test_get_output_encoding(self, mock_stdout):
52 mock_stdout.encoding = 'UTF-8'
54 self.failUnlessReallyEqual(get_output_encoding(), 'utf-8')
56 mock_stdout.encoding = 'cp65001'
58 self.failUnlessReallyEqual(get_output_encoding(), 'utf-8')
60 mock_stdout.encoding = 'koi8-r'
62 self.failUnlessReallyEqual(get_output_encoding(), 'koi8-r')
64 mock_stdout.encoding = 'nonexistent_encoding'
65 self.failUnlessRaises(AssertionError, _reload)
67 @patch('locale.getpreferredencoding')
68 def test_get_output_encoding_not_from_stdout(self, mock_locale_getpreferredencoding):
69 locale # hush pyflakes
70 mock_locale_getpreferredencoding.return_value = 'koi8-r'
74 old_stdout = sys.stdout
75 sys.stdout = DummyStdout()
78 self.failUnlessReallyEqual(get_output_encoding(), 'koi8-r')
80 sys.stdout.encoding = None
82 self.failUnlessReallyEqual(get_output_encoding(), 'koi8-r')
84 mock_locale_getpreferredencoding.return_value = None
86 self.failUnlessReallyEqual(get_output_encoding(), 'utf-8')
88 sys.stdout = old_stdout
91 def test_argv_to_unicode(self, mock):
92 mock.encoding = 'utf-8'
95 self.failUnlessRaises(usage.UsageError,
97 lumiere_nfc.encode('latin1'))
100 def test_unicode_to_output(self, mock):
101 # Encoding koi8-r cannot represent e-grave
102 mock.encoding = 'koi8-r'
104 self.failUnlessRaises(UnicodeEncodeError, unicode_to_output, lumiere_nfc)
107 class StringUtils(ReallyEqualMixin):
109 # Mock sys.platform because unicode_platform() uses it
110 self.original_platform = sys.platform
111 sys.platform = self.platform
114 sys.platform = self.original_platform
118 def test_argv_to_unicode(self, mock):
119 if 'argv' not in dir(self):
122 mock.encoding = self.output_encoding
126 self.failUnlessReallyEqual(argv_to_unicode(argv), argu)
128 def test_unicode_to_url(self):
129 self.failUnless(unicode_to_url(lumiere_nfc), "lumi\xc3\xa8re")
132 def test_unicode_to_output(self, mock):
133 if 'output' not in dir(self):
136 mock.encoding = self.output_encoding
138 self.failUnlessReallyEqual(unicode_to_output(lumiere_nfc), self.output)
140 def test_unicode_platform(self):
149 self.failUnlessReallyEqual(unicode_platform(), matrix[self.platform])
152 class UbuntuKarmicUTF8(StringUtils, unittest.TestCase):
153 uname = 'Linux korn 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64'
154 output = 'lumi\xc3\xa8re'
155 argv = 'lumi\xc3\xa8re'
157 filesystem_encoding = 'UTF-8'
158 output_encoding = 'UTF-8'
159 argv_encoding = 'UTF-8'
161 class UbuntuKarmicLatin1(StringUtils, unittest.TestCase):
162 uname = 'Linux korn 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64'
163 output = 'lumi\xe8re'
166 filesystem_encoding = 'ISO-8859-1'
167 output_encoding = 'ISO-8859-1'
168 argv_encoding = 'ISO-8859-1'
170 class WindowsXP(StringUtils, unittest.TestCase):
171 uname = 'Windows XP 5.1.2600 x86 x86 Family 15 Model 75 Step ping 2, AuthenticAMD'
172 output = 'lumi\x8are'
174 filesystem_encoding = 'mbcs'
175 output_encoding = 'cp850'
176 argv_encoding = 'ascii'
178 class WindowsXP_UTF8(StringUtils, unittest.TestCase):
179 uname = 'Windows XP 5.1.2600 x86 x86 Family 15 Model 75 Step ping 2, AuthenticAMD'
180 output = 'lumi\xc3\xa8re'
182 filesystem_encoding = 'mbcs'
183 output_encoding = 'cp65001'
184 argv_encoding = 'ascii'
186 class WindowsVista(StringUtils, unittest.TestCase):
187 uname = 'Windows Vista 6.0.6000 x86 x86 Family 6 Model 15 Stepping 11, GenuineIntel'
188 output = 'lumi\x8are'
190 filesystem_encoding = 'mbcs'
191 output_encoding = 'cp850'
192 argv_encoding = 'ascii'
194 class MacOSXLeopard(StringUtils, unittest.TestCase):
195 uname = 'Darwin g5.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh powerpc'
196 output = 'lumi\xc3\xa8re'
197 argv = 'lumi\xc3\xa8re'
199 filesystem_encoding = 'utf-8'
200 output_encoding = 'UTF-8'
201 argv_encoding = 'UTF-8'
203 class MacOSXLeopard7bit(StringUtils, unittest.TestCase):
204 uname = 'Darwin g5.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh powerpc'
206 filesystem_encoding = 'utf-8'
207 output_encoding = 'US-ASCII'
208 argv_encoding = 'US-ASCII'
210 class OpenBSD(StringUtils, unittest.TestCase):
211 uname = 'OpenBSD 4.1 GENERIC#187 i386 Intel(R) Celeron(R) CPU 2.80GHz ("GenuineIntel" 686-class)'
212 platform = 'openbsd4'
213 filesystem_encoding = '646'
214 output_encoding = '646'
215 argv_encoding = '646'
216 # Oops, I cannot write filenames containing non-ascii characters