Commit 383ad7a4 authored by Stefan H. Holek's avatar Stefan H. Holek

Update tests.

--HG--
branch : distribute
extra : rebase_source : 831e694725e5db1bc360298fbc4b7b58db836bdd
parent 3b26424a
...@@ -9,7 +9,6 @@ import tempfile ...@@ -9,7 +9,6 @@ import tempfile
import unittest import unittest
import urllib import urllib
import unicodedata import unicodedata
import posixpath
from StringIO import StringIO from StringIO import StringIO
...@@ -49,14 +48,22 @@ def unquiet(): ...@@ -49,14 +48,22 @@ def unquiet():
sys.stdout, sys.stderr = old_stdout, old_stderr sys.stdout, sys.stderr = old_stdout, old_stderr
# Fake byte literals to shut up Python <= 2.5 # Fake byte literals for Python <= 2.5
def b(s, encoding='utf-8'): def b(s, encoding='utf-8'):
if sys.version_info >= (3,): if sys.version_info >= (3,):
return s.encode(encoding) return s.encode(encoding)
return s return s
# HFS Plus returns decomposed UTF-8 # Convert to POSIX path
def posix(path):
if sys.version_info >= (3,) and not isinstance(path, str):
return path.replace(os.sep.encode('ascii'), b('/'))
else:
return path.replace(os.sep, '/')
# HFS Plus uses decomposed UTF-8
def decompose(path): def decompose(path):
if isinstance(path, unicode): if isinstance(path, unicode):
return unicodedata.normalize('NFD', path) return unicodedata.normalize('NFD', path)
...@@ -69,20 +76,6 @@ def decompose(path): ...@@ -69,20 +76,6 @@ def decompose(path):
return path return path
# HFS Plus quotes unknown bytes like so: %F6
def hfs_quote(path):
if isinstance(path, unicode):
raise TypeError('bytes are required')
try:
u = path.decode('utf-8')
except UnicodeDecodeError:
path = urllib.quote(path) # Not UTF-8
else:
if sys.version_info >= (3,):
path = u
return path
class TestSdistTest(unittest.TestCase): class TestSdistTest(unittest.TestCase):
def setUp(self): def setUp(self):
...@@ -138,7 +131,7 @@ class TestSdistTest(unittest.TestCase): ...@@ -138,7 +131,7 @@ class TestSdistTest(unittest.TestCase):
os.mkdir('sdist_test.egg-info') os.mkdir('sdist_test.egg-info')
# UTF-8 filename # UTF-8 filename
filename = posixpath.join('sdist_test', 'smörbröd.py') filename = os.path.join('sdist_test', 'smörbröd.py')
# Add UTF-8 filename and write manifest # Add UTF-8 filename and write manifest
quiet() quiet()
...@@ -155,17 +148,58 @@ class TestSdistTest(unittest.TestCase): ...@@ -155,17 +148,58 @@ class TestSdistTest(unittest.TestCase):
# The manifest should be UTF-8 encoded # The manifest should be UTF-8 encoded
try: try:
u = contents.decode('UTF-8') u_contents = contents.decode('UTF-8')
except UnicodeDecodeError, e: except UnicodeDecodeError, e:
self.fail(e) self.fail(e)
# The manifest should contain the UTF-8 filename # The manifest should contain the UTF-8 filename
if sys.version_info >= (3,): if sys.version_info >= (3,):
self.assertTrue(filename in u) self.assertTrue(posix(filename) in u_contents)
else: else:
self.assertTrue(filename in contents) self.assertTrue(posix(filename) in contents)
# Python 3 only
if sys.version_info >= (3,):
def test_manifest_is_written_with_surrogateescape_error_handler(self): def test_write_manifest_allows_utf8_filenames(self):
# Test for #303.
dist = Distribution(SETUP_ATTRS)
dist.script_name = 'setup.py'
mm = manifest_maker(dist)
mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
os.mkdir('sdist_test.egg-info')
# UTF-8 filename
filename = os.path.join(b('sdist_test'), b('smörbröd.py'))
# Add filename and write manifest
quiet()
try:
mm.run()
u_filename = filename.decode('utf-8')
mm.filelist.files.append(u_filename)
# Re-write manifest
mm.write_manifest()
finally:
unquiet()
manifest = open(mm.manifest, 'rbU')
contents = manifest.read()
manifest.close()
# The manifest should be UTF-8 encoded
try:
contents.decode('UTF-8')
except UnicodeDecodeError, e:
self.fail(e)
# The manifest should contain the UTF-8 filename
self.assertTrue(posix(filename) in contents)
# The filelist should have been updated as well
self.assertTrue(u_filename in mm.filelist.files)
def test_write_manifest_skips_non_utf8_filenames(self):
# Test for #303. # Test for #303.
dist = Distribution(SETUP_ATTRS) dist = Distribution(SETUP_ATTRS)
dist.script_name = 'setup.py' dist.script_name = 'setup.py'
...@@ -174,17 +208,15 @@ class TestSdistTest(unittest.TestCase): ...@@ -174,17 +208,15 @@ class TestSdistTest(unittest.TestCase):
os.mkdir('sdist_test.egg-info') os.mkdir('sdist_test.egg-info')
# Latin-1 filename # Latin-1 filename
filename = posixpath.join(b('sdist_test'), LATIN1_FILENAME) filename = os.path.join(b('sdist_test'), LATIN1_FILENAME)
# Add filename with surrogates and write manifest # Add filename with surrogates and write manifest
quiet() quiet()
try: try:
mm.run() mm.run()
if sys.version_info >= (3,): u_filename = filename.decode('utf-8', 'surrogateescape')
u = filename.decode('utf-8', 'surrogateescape') mm.filelist.files.append(u_filename)
mm.filelist.files.append(u) # Re-write manifest
else:
mm.filelist.files.append(filename)
mm.write_manifest() mm.write_manifest()
finally: finally:
unquiet() unquiet()
...@@ -193,8 +225,17 @@ class TestSdistTest(unittest.TestCase): ...@@ -193,8 +225,17 @@ class TestSdistTest(unittest.TestCase):
contents = manifest.read() contents = manifest.read()
manifest.close() manifest.close()
# The manifest should contain the Latin-1 filename # The manifest should be UTF-8 encoded
self.assertTrue(filename in contents) try:
contents.decode('UTF-8')
except UnicodeDecodeError, e:
self.fail(e)
# The Latin-1 filename should have been skipped
self.assertFalse(posix(filename) in contents)
# The filelist should have been updated as well
self.assertFalse(u_filename in mm.filelist.files)
def test_manifest_is_read_with_utf8_encoding(self): def test_manifest_is_read_with_utf8_encoding(self):
# Test for #303. # Test for #303.
...@@ -218,7 +259,10 @@ class TestSdistTest(unittest.TestCase): ...@@ -218,7 +259,10 @@ class TestSdistTest(unittest.TestCase):
filename = decompose(filename) filename = decompose(filename)
self.assertTrue(filename in cmd.filelist.files) self.assertTrue(filename in cmd.filelist.files)
def test_manifest_is_read_with_surrogateescape_error_handler(self): # Python 3 only
if sys.version_info >= (3,):
def test_read_manifest_rejects_surrogates(self):
# Test for #303. # Test for #303.
# This is hard to test on HFS Plus because it quotes unknown # This is hard to test on HFS Plus because it quotes unknown
...@@ -242,14 +286,11 @@ class TestSdistTest(unittest.TestCase): ...@@ -242,14 +286,11 @@ class TestSdistTest(unittest.TestCase):
manifest = open(cmd.manifest, 'ab') manifest = open(cmd.manifest, 'ab')
manifest.write(filename+b('\n')) manifest.write(filename+b('\n'))
manifest.close() manifest.close()
# Re-read manifest
try:
cmd.read_manifest()
except UnicodeDecodeError, e:
self.fail(e)
finally: finally:
unquiet() unquiet()
self.assertRaises(UnicodeDecodeError, cmd.read_manifest)
def test_sdist_with_utf8_encoded_filename(self): def test_sdist_with_utf8_encoded_filename(self):
# Test for #303. # Test for #303.
dist = Distribution(SETUP_ATTRS) dist = Distribution(SETUP_ATTRS)
...@@ -268,9 +309,8 @@ class TestSdistTest(unittest.TestCase): ...@@ -268,9 +309,8 @@ class TestSdistTest(unittest.TestCase):
unquiet() unquiet()
# The filelist should contain the UTF-8 filename # The filelist should contain the UTF-8 filename
# (in one representation or other)
if sys.version_info >= (3,): if sys.version_info >= (3,):
filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape') filename = filename.decode('utf-8')
if sys.platform == 'darwin': if sys.platform == 'darwin':
filename = decompose(filename) filename = decompose(filename)
self.assertTrue(filename in cmd.filelist.files) self.assertTrue(filename in cmd.filelist.files)
...@@ -292,32 +332,14 @@ class TestSdistTest(unittest.TestCase): ...@@ -292,32 +332,14 @@ class TestSdistTest(unittest.TestCase):
finally: finally:
unquiet() unquiet()
# The filelist should contain the Latin-1 filename # The Latin-1 filename should have been skipped
# (in one representation or other)
if sys.platform == 'darwin':
filename = hfs_quote(filename)
elif sys.version_info >= (3,):
filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape')
self.assertTrue(filename in cmd.filelist.files)
def test_decompose(self):
self.assertNotEqual('smörbröd.py', decompose('smörbröd.py'))
if sys.version_info >= (3,):
self.assertEqual(len('smörbröd.py'), 11)
self.assertEqual(len(decompose('smörbröd.py')), 13)
else:
self.assertEqual(len('smörbröd.py'), 13)
self.assertEqual(len(decompose('smörbröd.py')), 15)
def test_hfs_quote(self):
self.assertEqual(hfs_quote(LATIN1_FILENAME), 'sm%F6rbr%F6d.py')
# Bytes are required
if sys.version_info >= (3,): if sys.version_info >= (3,):
self.assertRaises(TypeError, hfs_quote, 'smörbröd.py') filename = filename.decode('latin-1')
self.assertFalse(filename in cmd.filelist.files)
else: else:
self.assertRaises(TypeError, hfs_quote, 'smörbröd.py'.decode('utf-8')) # No conversion takes place under Python 2 and the
# filename is included. We shall keep it that way for BBB.
self.assertTrue(filename in cmd.filelist.files)
def test_suite(): def test_suite():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment