home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / TEST_UNICODE.PY < prev    next >
Encoding:
Python Source  |  2000-10-07  |  18.2 KB  |  519 lines

  1. """ Test script for the Unicode implementation.
  2.  
  3. Written by Marc-Andre Lemburg (mal@lemburg.com).
  4.  
  5. (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
  6.  
  7. """
  8. from test_support import verbose
  9. import sys
  10.  
  11. def test(method, input, output, *args):
  12.     if verbose:
  13.         print '%s.%s%s =? %s... ' % (repr(input), method, args, output),
  14.     try:
  15.         f = getattr(input, method)
  16.         value = apply(f, args)
  17.     except:
  18.         value = sys.exc_type
  19.         exc = sys.exc_info()[:2]
  20.     else:
  21.         exc = None
  22.     if value != output:
  23.         if verbose:
  24.             print 'no'
  25.         print '*',f, `input`, `output`, `value`
  26.         if exc:
  27.             print '  value == %s: %s' % (exc)
  28.     else:
  29.         if verbose:
  30.             print 'yes'
  31.  
  32. test('capitalize', u' hello ', u' hello ')
  33. test('capitalize', u'hello ', u'Hello ')
  34.  
  35. test('title', u' hello ', u' Hello ')
  36. test('title', u'hello ', u'Hello ')
  37. test('title', u"fOrMaT thIs aS titLe String", u'Format This As Title String')
  38. test('title', u"fOrMaT,thIs-aS*titLe;String", u'Format,This-As*Title;String')
  39. test('title', u"getInt", u'Getint')
  40.  
  41. test('find', u'abcdefghiabc', 0, u'abc')
  42. test('find', u'abcdefghiabc', 9, u'abc', 1)
  43. test('find', u'abcdefghiabc', -1, u'def', 4)
  44.  
  45. test('rfind', u'abcdefghiabc', 9, u'abc')
  46.  
  47. test('lower', u'HeLLo', u'hello')
  48. test('lower', u'hello', u'hello')
  49.  
  50. test('upper', u'HeLLo', u'HELLO')
  51. test('upper', u'HELLO', u'HELLO')
  52.  
  53. if 0:
  54.     transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
  55.  
  56.     test('maketrans', u'abc', transtable, u'xyz')
  57.     test('maketrans', u'abc', ValueError, u'xyzq')
  58.  
  59. test('split', u'this is the split function',
  60.      [u'this', u'is', u'the', u'split', u'function'])
  61. test('split', u'a|b|c|d', [u'a', u'b', u'c', u'd'], u'|')
  62. test('split', u'a|b|c|d', [u'a', u'b', u'c|d'], u'|', 2)
  63. test('split', u'a b c d', [u'a', u'b c d'], None, 1)
  64. test('split', u'a b c d', [u'a', u'b', u'c d'], None, 2)
  65. test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 3)
  66. test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 4)
  67. test('split', u'a b c d', [u'a b c d'], None, 0)
  68. test('split', u'a  b  c  d', [u'a', u'b', u'c  d'], None, 2)
  69. test('split', u'a b c d ', [u'a', u'b', u'c', u'd'])
  70.  
  71. # join now works with any sequence type
  72. class Sequence:
  73.     def __init__(self): self.seq = 'wxyz'
  74.     def __len__(self): return len(self.seq)
  75.     def __getitem__(self, i): return self.seq[i]
  76.  
  77. test('join', u' ', u'a b c d', [u'a', u'b', u'c', u'd'])
  78. test('join', u'', u'abcd', (u'a', u'b', u'c', u'd'))
  79. test('join', u' ', u'w x y z', Sequence())
  80. test('join', u' ', TypeError, 7)
  81.  
  82. class BadSeq(Sequence):
  83.     def __init__(self): self.seq = [7, u'hello', 123L]
  84.  
  85. test('join', u' ', TypeError, BadSeq())
  86.  
  87. result = u''
  88. for i in range(10):
  89.     if i > 0:
  90.         result = result + u':'
  91.     result = result + u'x'*10
  92. test('join', u':', result, [u'x' * 10] * 10)
  93. test('join', u':', result, (u'x' * 10,) * 10)
  94.  
  95. test('strip', u'   hello   ', u'hello')
  96. test('lstrip', u'   hello   ', u'hello   ')
  97. test('rstrip', u'   hello   ', u'   hello')
  98. test('strip', u'hello', u'hello')
  99.  
  100. test('swapcase', u'HeLLo cOmpUteRs', u'hEllO CoMPuTErS')
  101.  
  102. if 0:
  103.     test('translate', u'xyzabcdef', u'xyzxyz', transtable, u'def')
  104.  
  105.     table = string.maketrans('a', u'A')
  106.     test('translate', u'abc', u'Abc', table)
  107.     test('translate', u'xyz', u'xyz', table)
  108.  
  109. test('replace', u'one!two!three!', u'one@two!three!', u'!', u'@', 1)
  110. test('replace', u'one!two!three!', u'onetwothree', '!', '')
  111. test('replace', u'one!two!three!', u'one@two@three!', u'!', u'@', 2)
  112. test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 3)
  113. test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 4)
  114. test('replace', u'one!two!three!', u'one!two!three!', u'!', u'@', 0)
  115. test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@')
  116. test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@')
  117. test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@', 2)
  118.  
  119. test('startswith', u'hello', 1, u'he')
  120. test('startswith', u'hello', 1, u'hello')
  121. test('startswith', u'hello', 0, u'hello world')
  122. test('startswith', u'hello', 1, u'')
  123. test('startswith', u'hello', 0, u'ello')
  124. test('startswith', u'hello', 1, u'ello', 1)
  125. test('startswith', u'hello', 1, u'o', 4)
  126. test('startswith', u'hello', 0, u'o', 5)
  127. test('startswith', u'hello', 1, u'', 5)
  128. test('startswith', u'hello', 0, u'lo', 6)
  129. test('startswith', u'helloworld', 1, u'lowo', 3)
  130. test('startswith', u'helloworld', 1, u'lowo', 3, 7)
  131. test('startswith', u'helloworld', 0, u'lowo', 3, 6)
  132.  
  133. test('endswith', u'hello', 1, u'lo')
  134. test('endswith', u'hello', 0, u'he')
  135. test('endswith', u'hello', 1, u'')
  136. test('endswith', u'hello', 0, u'hello world')
  137. test('endswith', u'helloworld', 0, u'worl')
  138. test('endswith', u'helloworld', 1, u'worl', 3, 9)
  139. test('endswith', u'helloworld', 1, u'world', 3, 12)
  140. test('endswith', u'helloworld', 1, u'lowo', 1, 7)
  141. test('endswith', u'helloworld', 1, u'lowo', 2, 7)
  142. test('endswith', u'helloworld', 1, u'lowo', 3, 7)
  143. test('endswith', u'helloworld', 0, u'lowo', 4, 7)
  144. test('endswith', u'helloworld', 0, u'lowo', 3, 8)
  145. test('endswith', u'ab', 0, u'ab', 0, 1)
  146. test('endswith', u'ab', 0, u'ab', 0, 0)
  147.  
  148. test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab      def\ng       hi')
  149. test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab      def\ng       hi', 8)
  150. test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab  def\ng   hi', 4)
  151. test('expandtabs', u'abc\r\nab\tdef\ng\thi', u'abc\r\nab  def\ng   hi', 4)
  152.  
  153. if 0:
  154.     test('capwords', u'abc def ghi', u'Abc Def Ghi')
  155.     test('capwords', u'abc\tdef\nghi', u'Abc Def Ghi')
  156.     test('capwords', u'abc\t   def  \nghi', u'Abc Def Ghi')
  157.  
  158. # Comparisons:
  159. print 'Testing Unicode comparisons...',
  160. assert u'abc' == 'abc'
  161. assert 'abc' == u'abc'
  162. assert u'abc' == u'abc'
  163. assert u'abcd' > 'abc'
  164. assert 'abcd' > u'abc'
  165. assert u'abcd' > u'abc'
  166. assert u'abc' < 'abcd'
  167. assert 'abc' < u'abcd'
  168. assert u'abc' < u'abcd'
  169. print 'done.'
  170.  
  171. if 0:
  172.     # Move these tests to a Unicode collation module test...
  173.  
  174.     print 'Testing UTF-16 code point order comparisons...',
  175.     #No surrogates, no fixup required.
  176.     assert u'\u0061' < u'\u20ac'
  177.     # Non surrogate below surrogate value, no fixup required
  178.     assert u'\u0061' < u'\ud800\udc02'
  179.  
  180.     # Non surrogate above surrogate value, fixup required
  181.     def test_lecmp(s, s2):
  182.       assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
  183.  
  184.     def test_fixup(s):
  185.       s2 = u'\ud800\udc01'
  186.       test_lecmp(s, s2)
  187.       s2 = u'\ud900\udc01'
  188.       test_lecmp(s, s2)
  189.       s2 = u'\uda00\udc01'
  190.       test_lecmp(s, s2)
  191.       s2 = u'\udb00\udc01'
  192.       test_lecmp(s, s2)
  193.       s2 = u'\ud800\udd01'
  194.       test_lecmp(s, s2)
  195.       s2 = u'\ud900\udd01'
  196.       test_lecmp(s, s2)
  197.       s2 = u'\uda00\udd01'
  198.       test_lecmp(s, s2)
  199.       s2 = u'\udb00\udd01'
  200.       test_lecmp(s, s2)
  201.       s2 = u'\ud800\ude01'
  202.       test_lecmp(s, s2)
  203.       s2 = u'\ud900\ude01'
  204.       test_lecmp(s, s2)
  205.       s2 = u'\uda00\ude01'
  206.       test_lecmp(s, s2)
  207.       s2 = u'\udb00\ude01'
  208.       test_lecmp(s, s2)
  209.       s2 = u'\ud800\udfff'
  210.       test_lecmp(s, s2)
  211.       s2 = u'\ud900\udfff'
  212.       test_lecmp(s, s2)
  213.       s2 = u'\uda00\udfff'
  214.       test_lecmp(s, s2)
  215.       s2 = u'\udb00\udfff'
  216.       test_lecmp(s, s2)
  217.  
  218.     test_fixup(u'\ue000')
  219.     test_fixup(u'\uff61')
  220.  
  221.     # Surrogates on both sides, no fixup required
  222.     assert u'\ud800\udc02' < u'\ud84d\udc56'
  223.     print 'done.'
  224.  
  225. test('ljust', u'abc',  u'abc       ', 10)
  226. test('rjust', u'abc',  u'       abc', 10)
  227. test('center', u'abc', u'   abc    ', 10)
  228. test('ljust', u'abc',  u'abc   ', 6)
  229. test('rjust', u'abc',  u'   abc', 6)
  230. test('center', u'abc', u' abc  ', 6)
  231. test('ljust', u'abc', u'abc', 2)
  232. test('rjust', u'abc', u'abc', 2)
  233. test('center', u'abc', u'abc', 2)
  234.  
  235. test('islower', u'a', 1)
  236. test('islower', u'A', 0)
  237. test('islower', u'\n', 0)
  238. test('islower', u'\u1FFc', 0)
  239. test('islower', u'abc', 1)
  240. test('islower', u'aBc', 0)
  241. test('islower', u'abc\n', 1)
  242.  
  243. test('isupper', u'a', 0)
  244. test('isupper', u'A', 1)
  245. test('isupper', u'\n', 0)
  246. test('isupper', u'\u1FFc', 0)
  247. test('isupper', u'ABC', 1)
  248. test('isupper', u'AbC', 0)
  249. test('isupper', u'ABC\n', 1)
  250.  
  251. test('istitle', u'a', 0)
  252. test('istitle', u'A', 1)
  253. test('istitle', u'\n', 0)
  254. test('istitle', u'\u1FFc', 1)
  255. test('istitle', u'A Titlecased Line', 1)
  256. test('istitle', u'A\nTitlecased Line', 1)
  257. test('istitle', u'A Titlecased, Line', 1)
  258. test('istitle', u'Greek \u1FFcitlecases ...', 1)
  259. test('istitle', u'Not a capitalized String', 0)
  260. test('istitle', u'Not\ta Titlecase String', 0)
  261. test('istitle', u'Not--a Titlecase String', 0)
  262.  
  263. test('isalpha', u'a', 1)
  264. test('isalpha', u'A', 1)
  265. test('isalpha', u'\n', 0)
  266. test('isalpha', u'\u1FFc', 1)
  267. test('isalpha', u'abc', 1)
  268. test('isalpha', u'aBc123', 0)
  269. test('isalpha', u'abc\n', 0)
  270.  
  271. test('isalnum', u'a', 1)
  272. test('isalnum', u'A', 1)
  273. test('isalnum', u'\n', 0)
  274. test('isalnum', u'123abc456', 1)
  275. test('isalnum', u'a1b3c', 1)
  276. test('isalnum', u'aBc000 ', 0)
  277. test('isalnum', u'abc\n', 0)
  278.  
  279. test('splitlines', u"abc\ndef\n\rghi", [u'abc', u'def', u'', u'ghi'])
  280. test('splitlines', u"abc\ndef\n\r\nghi", [u'abc', u'def', u'', u'ghi'])
  281. test('splitlines', u"abc\ndef\r\nghi", [u'abc', u'def', u'ghi'])
  282. test('splitlines', u"abc\ndef\r\nghi\n", [u'abc', u'def', u'ghi'])
  283. test('splitlines', u"abc\ndef\r\nghi\n\r", [u'abc', u'def', u'ghi', u''])
  284. test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'', u'abc', u'def', u'ghi', u''])
  285. test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'\n', u'abc\n', u'def\r\n', u'ghi\n', u'\r'], 1)
  286.  
  287. test('translate', u"abababc", u'bbbc', {ord('a'):None})
  288. test('translate', u"abababc", u'iiic', {ord('a'):None, ord('b'):ord('i')})
  289. test('translate', u"abababc", u'iiix', {ord('a'):None, ord('b'):ord('i'), ord('c'):u'x'})
  290.  
  291. # Contains:
  292. print 'Testing Unicode contains method...',
  293. assert ('a' in u'abdb') == 1
  294. assert ('a' in u'bdab') == 1
  295. assert ('a' in u'bdaba') == 1
  296. assert ('a' in u'bdba') == 1
  297. assert ('a' in u'bdba') == 1
  298. assert (u'a' in u'bdba') == 1
  299. assert (u'a' in u'bdb') == 0
  300. assert (u'a' in 'bdb') == 0
  301. assert (u'a' in 'bdba') == 1
  302. assert (u'a' in ('a',1,None)) == 1
  303. assert (u'a' in (1,None,'a')) == 1
  304. assert (u'a' in (1,None,u'a')) == 1
  305. assert ('a' in ('a',1,None)) == 1
  306. assert ('a' in (1,None,'a')) == 1
  307. assert ('a' in (1,None,u'a')) == 1
  308. assert ('a' in ('x',1,u'y')) == 0
  309. assert ('a' in ('x',1,None)) == 0
  310. print 'done.'
  311.  
  312. # Formatting:
  313. print 'Testing Unicode formatting strings...',
  314. assert u"%s, %s" % (u"abc", "abc") == u'abc, abc'
  315. assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, 2, 3) == u'abc, abc, 1, 2.000000,  3.00'
  316. assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, -2, 3) == u'abc, abc, 1, -2.000000,  3.00'
  317. assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.5) == u'abc, abc, -1, -2.000000,  3.50'
  318. assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.57) == u'abc, abc, -1, -2.000000,  3.57'
  319. assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 1003.57) == u'abc, abc, -1, -2.000000, 1003.57'
  320. assert u"%c" % (u"a",) == u'a'
  321. assert u"%c" % ("a",) == u'a'
  322. assert u"%c" % (34,) == u'"'
  323. assert u"%c" % (36,) == u'$'
  324. value = u"%r, %r" % (u"abc", "abc") 
  325. if value != u"u'abc', 'abc'":
  326.     print '*** formatting failed for "%s"' % 'u"%r, %r" % (u"abc", "abc")'
  327.  
  328. assert u"%(x)s, %(y)s" % {'x':u"abc", 'y':"def"} == u'abc, def'
  329. try:
  330.     value = u"%(x)s, %(Σ)s" % {'x':u"abc", u'Σ'.encode('utf-8'):"def"} 
  331. except KeyError:
  332.     print '*** formatting failed for "%s"' % "u'abc, def'"
  333. else:
  334.     assert value == u'abc, def'
  335.  
  336. # formatting jobs delegated from the string implementation:
  337. assert '...%(foo)s...' % {'foo':u"abc"} == u'...abc...'
  338. assert '...%(foo)s...' % {'foo':"abc"} == '...abc...'
  339. assert '...%(foo)s...' % {u'foo':"abc"} == '...abc...'
  340. assert '...%(foo)s...' % {u'foo':u"abc"} == u'...abc...'
  341. assert '...%(foo)s...' % {u'foo':u"abc",'def':123} ==  u'...abc...'
  342. assert '...%(foo)s...' % {u'foo':u"abc",u'def':123} == u'...abc...'
  343. assert '...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...1...2...3...abc...'
  344. assert '...%%...%%s...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...%...%s...1...2...3...abc...'
  345. assert '...%s...' % u"abc" == u'...abc...'
  346. print 'done.'
  347.  
  348. # Test builtin codecs
  349. print 'Testing builtin codecs...',
  350.  
  351. # UTF-8 specific encoding tests:
  352. assert u'\u20ac'.encode('utf-8') == \
  353.        ''.join((chr(0xe2), chr(0x82), chr(0xac)))
  354. assert u'\ud800\udc02'.encode('utf-8') == \
  355.        ''.join((chr(0xf0), chr(0x90), chr(0x80), chr(0x82)))
  356. assert u'\ud84d\udc56'.encode('utf-8') == \
  357.        ''.join((chr(0xf0), chr(0xa3), chr(0x91), chr(0x96)))
  358. # UTF-8 specific decoding tests
  359. assert unicode(''.join((chr(0xf0), chr(0xa3), chr(0x91), chr(0x96))),
  360.                'utf-8') == u'\ud84d\udc56'
  361. assert unicode(''.join((chr(0xf0), chr(0x90), chr(0x80), chr(0x82))),
  362.                'utf-8') == u'\ud800\udc02'
  363. assert unicode(''.join((chr(0xe2), chr(0x82), chr(0xac))),
  364.                'utf-8') == u'\u20ac'
  365.  
  366. # Other possible utf-8 test cases:
  367. # * strict decoding testing for all of the
  368. #   UTF8_ERROR cases in PyUnicode_DecodeUTF8
  369.  
  370.  
  371.  
  372. assert unicode('hello','ascii') == u'hello'
  373. assert unicode('hello','utf-8') == u'hello'
  374. assert unicode('hello','utf8') == u'hello'
  375. assert unicode('hello','latin-1') == u'hello'
  376.  
  377. class String:
  378.     x = ''
  379.     def __str__(self):
  380.         return self.x
  381.  
  382. o = String()
  383.  
  384. o.x = 'abc'
  385. assert unicode(o) == u'abc'
  386. assert str(o) == 'abc'
  387.  
  388. o.x = u'abc'
  389. assert unicode(o) == u'abc'
  390. assert str(o) == 'abc'
  391.  
  392. try:
  393.     u'Andr\202 x'.encode('ascii')
  394.     u'Andr\202 x'.encode('ascii','strict')
  395. except ValueError:
  396.     pass
  397. else:
  398.     raise AssertionError, "u'Andr\202'.encode('ascii') failed to raise an exception"
  399. assert u'Andr\202 x'.encode('ascii','ignore') == "Andr x"
  400. assert u'Andr\202 x'.encode('ascii','replace') == "Andr? x"
  401.  
  402. try:
  403.     unicode('Andr\202 x','ascii')
  404.     unicode('Andr\202 x','ascii','strict')
  405. except ValueError:
  406.     pass
  407. else:
  408.     raise AssertionError, "unicode('Andr\202') failed to raise an exception"
  409. assert unicode('Andr\202 x','ascii','ignore') == u"Andr x"
  410. assert unicode('Andr\202 x','ascii','replace') == u'Andr\uFFFD x'
  411.  
  412. assert u'hello'.encode('ascii') == 'hello'
  413. assert u'hello'.encode('utf-8') == 'hello'
  414. assert u'hello'.encode('utf8') == 'hello'
  415. assert u'hello'.encode('utf-16-le') == 'h\000e\000l\000l\000o\000'
  416. assert u'hello'.encode('utf-16-be') == '\000h\000e\000l\000l\000o'
  417. assert u'hello'.encode('latin-1') == 'hello'
  418.  
  419. u = u''.join(map(unichr, range(1024)))
  420. for encoding in ('utf-8', 'utf-16', 'utf-16-le', 'utf-16-be',
  421.                  'raw_unicode_escape', 'unicode_escape', 'unicode_internal'):
  422.     assert unicode(u.encode(encoding),encoding) == u
  423.  
  424. u = u''.join(map(unichr, range(256)))
  425. for encoding in (
  426.     'latin-1',
  427.     ):
  428.     try:
  429.         assert unicode(u.encode(encoding),encoding) == u
  430.     except AssertionError:
  431.         print '*** codec "%s" failed round-trip' % encoding
  432.     except ValueError,why:
  433.         print '*** codec for "%s" failed: %s' % (encoding, why)
  434.  
  435. u = u''.join(map(unichr, range(128)))
  436. for encoding in (
  437.     'ascii',
  438.     ):
  439.     try:
  440.         assert unicode(u.encode(encoding),encoding) == u
  441.     except AssertionError:
  442.         print '*** codec "%s" failed round-trip' % encoding
  443.     except ValueError,why:
  444.         print '*** codec for "%s" failed: %s' % (encoding, why)
  445.  
  446. print 'done.'
  447.  
  448. print 'Testing standard mapping codecs...',
  449.  
  450. print '0-127...',
  451. s = ''.join(map(chr, range(128)))
  452. for encoding in (
  453.     'cp037', 'cp1026',
  454.     'cp437', 'cp500', 'cp737', 'cp775', 'cp850',
  455.     'cp852', 'cp855', 'cp860', 'cp861', 'cp862',
  456.     'cp863', 'cp865', 'cp866', 
  457.     'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',
  458.     'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6',
  459.     'iso8859_7', 'iso8859_9', 'koi8_r', 'latin_1',
  460.     'mac_cyrillic', 'mac_latin2',
  461.  
  462.     'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',
  463.     'cp1256', 'cp1257', 'cp1258',
  464.     'cp856', 'cp857', 'cp864', 'cp869', 'cp874',
  465.  
  466.     'mac_greek', 'mac_iceland','mac_roman', 'mac_turkish',
  467.     'cp1006', 'cp875', 'iso8859_8',
  468.     
  469.     ### These have undefined mappings:
  470.     #'cp424',
  471.     
  472.     ):
  473.     try:
  474.         assert unicode(s,encoding).encode(encoding) == s
  475.     except AssertionError:
  476.         print '*** codec "%s" failed round-trip' % encoding
  477.     except ValueError,why:
  478.         print '*** codec for "%s" failed: %s' % (encoding, why)
  479.  
  480. print '128-255...',
  481. s = ''.join(map(chr, range(128,256)))
  482. for encoding in (
  483.     'cp037', 'cp1026',
  484.     'cp437', 'cp500', 'cp737', 'cp775', 'cp850',
  485.     'cp852', 'cp855', 'cp860', 'cp861', 'cp862',
  486.     'cp863', 'cp865', 'cp866', 
  487.     'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',
  488.     'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6',
  489.     'iso8859_7', 'iso8859_9', 'koi8_r', 'latin_1',
  490.     'mac_cyrillic', 'mac_latin2',
  491.     
  492.     ### These have undefined mappings:
  493.     #'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',
  494.     #'cp1256', 'cp1257', 'cp1258',
  495.     #'cp424', 'cp856', 'cp857', 'cp864', 'cp869', 'cp874',
  496.     #'mac_greek', 'mac_iceland','mac_roman', 'mac_turkish',
  497.     
  498.     ### These fail the round-trip:
  499.     #'cp1006', 'cp875', 'iso8859_8',
  500.     
  501.     ):
  502.     try:
  503.         assert unicode(s,encoding).encode(encoding) == s
  504.     except AssertionError:
  505.         print '*** codec "%s" failed round-trip' % encoding
  506.     except ValueError,why:
  507.         print '*** codec for "%s" failed: %s' % (encoding, why)
  508.  
  509. print 'done.'
  510.  
  511. print 'Testing Unicode string concatenation...',
  512. assert (u"abc" u"def") == u"abcdef"
  513. assert ("abc" u"def") == u"abcdef"
  514. assert (u"abc" "def") == u"abcdef"
  515. assert (u"abc" u"def" "ghi") == u"abcdefghi"
  516. assert ("abc" "def" u"ghi") == u"abcdefghi"
  517. print 'done.'
  518.  
  519.