test-encoding-func.py
80 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
/ tests / test-encoding-func.py
Yuya Nishihara
|
r33927 | from __future__ import absolute_import | ||
import unittest | ||||
from mercurial import ( | ||||
encoding, | ||||
) | ||||
class IsasciistrTest(unittest.TestCase): | ||||
asciistrs = [ | ||||
b'a', | ||||
b'ab', | ||||
b'abc', | ||||
b'abcd', | ||||
b'abcde', | ||||
b'abcdefghi', | ||||
b'abcd\0fghi', | ||||
] | ||||
def testascii(self): | ||||
for s in self.asciistrs: | ||||
self.assertTrue(encoding.isasciistr(s)) | ||||
def testnonasciichar(self): | ||||
for s in self.asciistrs: | ||||
for i in range(len(s)): | ||||
t = bytearray(s) | ||||
t[i] |= 0x80 | ||||
self.assertFalse(encoding.isasciistr(bytes(t))) | ||||
Yuya Nishihara
|
r33928 | class LocalEncodingTest(unittest.TestCase): | ||
def testasciifastpath(self): | ||||
s = b'\0' * 100 | ||||
self.assertTrue(s is encoding.tolocal(s)) | ||||
self.assertTrue(s is encoding.fromlocal(s)) | ||||
Yuya Nishihara
|
r33929 | class Utf8bEncodingTest(unittest.TestCase): | ||
Yuya Nishihara
|
r37965 | def setUp(self): | ||
self.origencoding = encoding.encoding | ||||
def tearDown(self): | ||||
encoding.encoding = self.origencoding | ||||
Yuya Nishihara
|
r33929 | def testasciifastpath(self): | ||
s = b'\0' * 100 | ||||
self.assertTrue(s is encoding.toutf8b(s)) | ||||
self.assertTrue(s is encoding.fromutf8b(s)) | ||||
Yuya Nishihara
|
r37965 | def testlossylatin(self): | ||
encoding.encoding = b'ascii' | ||||
s = u'\xc0'.encode('utf-8') | ||||
l = encoding.tolocal(s) | ||||
self.assertEqual(l, b'?') # lossy | ||||
self.assertEqual(s, encoding.toutf8b(l)) # utf8 sequence preserved | ||||
Yuya Nishihara
|
r37966 | def testlosslesslatin(self): | ||
encoding.encoding = b'latin-1' | ||||
s = u'\xc0'.encode('utf-8') | ||||
l = encoding.tolocal(s) | ||||
self.assertEqual(l, b'\xc0') # lossless | ||||
self.assertEqual(s, encoding.toutf8b(l)) # convert back to utf-8 | ||||
Yuya Nishihara
|
r37965 | def testlossy0xed(self): | ||
encoding.encoding = b'euc-kr' # U+Dxxx Hangul | ||||
s = u'\ud1bc\xc0'.encode('utf-8') | ||||
l = encoding.tolocal(s) | ||||
self.assertIn(b'\xed', l) | ||||
self.assertTrue(l.endswith(b'?')) # lossy | ||||
self.assertEqual(s, encoding.toutf8b(l)) # utf8 sequence preserved | ||||
Yuya Nishihara
|
r37966 | def testlossless0xed(self): | ||
encoding.encoding = b'euc-kr' # U+Dxxx Hangul | ||||
s = u'\ud1bc'.encode('utf-8') | ||||
l = encoding.tolocal(s) | ||||
self.assertEqual(l, b'\xc5\xed') # lossless | ||||
self.assertEqual(s, encoding.toutf8b(l)) # convert back to utf-8 | ||||
Yuya Nishihara
|
r33927 | if __name__ == '__main__': | ||
import silenttestrunner | ||||
silenttestrunner.main(__name__) | ||||