From 21ead63de1689b99007d0ab9b41a19b09543e7b3 Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Mon, 15 Oct 2012 14:48:49 +0200 Subject: Revert 86d7748 drive-by commit because of unclear BBB consequences. --HG-- branch : distribute extra : rebase_source : 2fb9a6ec09184e238551be4d0ea908e719badd27 --- setuptools/tests/test_sdist.py | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 7e2f0a49..4478d438 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -29,6 +29,17 @@ setup(**%r) """ % SETUP_ATTRS +def compose(path): + # HFS Plus returns decomposed UTF-8 + if sys.platform == 'darwin': + from unicodedata import normalize + if sys.version_info >= (3,): + path = normalize('NFC', path) + else: + path = normalize('NFC', path.decode('utf-8')).encode('utf-8') + return path + + class TestSdistTest(unittest.TestCase): def setUp(self): self.temp_dir = tempfile.mkdtemp() @@ -79,31 +90,6 @@ class TestSdistTest(unittest.TestCase): self.assertTrue(os.path.join('sdist_test', 'b.txt') in manifest) self.assertTrue(os.path.join('sdist_test', 'c.rst') not in manifest) - def test_filelist_is_fully_composed(self): - # Test for #303. Requires HFS Plus to fail. - - # Add file with non-ASCII filename - filename = os.path.join('sdist_test', 'smörbröd.py') - open(filename, 'w').close() - - dist = Distribution(SETUP_ATTRS) - dist.script_name = 'setup.py' - cmd = sdist(dist) - cmd.ensure_finalized() - - # squelch output - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() - try: - cmd.run() - finally: - sys.stdout = old_stdout - sys.stderr = old_stderr - - self.assertTrue(filename in cmd.filelist.files) - def test_manifest_is_written_in_utf8(self): # Test for #303. @@ -162,7 +148,7 @@ class TestSdistTest(unittest.TestCase): cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') cmd.read_manifest() - self.assertTrue(filename in cmd.filelist.files) + self.assertTrue(filename in [compose(x) for x in cmd.filelist.files]) def test_suite(): -- cgit v1.2.3 From 9d66fb61d9579516c5333d51eb85dc3495e6032f Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Wed, 17 Oct 2012 10:54:39 +0200 Subject: Use surrogateescape error handler when reading and writing the manifest. Refs #303. --HG-- branch : distribute extra : rebase_source : f0231cf87e2478f988f798dfe579f28e7561aeff --- setuptools/tests/test_sdist.py | 256 ++++++++++++++++++++++++++++++++++------- 1 file changed, 212 insertions(+), 44 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 4478d438..65b83b6e 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -7,10 +7,13 @@ import shutil import sys import tempfile import unittest +import urllib +import unicodedata from StringIO import StringIO from setuptools.command.sdist import sdist +from setuptools.command.egg_info import manifest_maker from setuptools.dist import Distribution @@ -29,18 +32,58 @@ setup(**%r) """ % SETUP_ATTRS -def compose(path): - # HFS Plus returns decomposed UTF-8 - if sys.platform == 'darwin': - from unicodedata import normalize +if sys.version_info >= (3,): + LATIN1_FILENAME = 'smörbröd.py'.encode('latin-1') +else: + LATIN1_FILENAME = 'sm\xf6rbr\xf6d.py' + + +# Cannot use context manager because of Python 2.4 +def quiet(): + global old_stdout, old_stderr + old_stdout, old_stderr = sys.stdout, sys.stderr + sys.stdout, sys.stderr = StringIO(), StringIO() + +def unquiet(): + sys.stdout, sys.stderr = old_stdout, old_stderr + + +# Fake byte literals to shut up Python <= 2.5 +def b(s, encoding='utf-8'): + if sys.version_info >= (3,): + return s.encode(encoding) + return s + + +# HFS Plus returns decomposed UTF-8 +def decompose(path): + if isinstance(path, unicode): + return unicodedata.normalize('NFD', path) + try: + path = path.decode('utf-8') + path = unicodedata.normalize('NFD', path) + path = path.encode('utf-8') + except UnicodeError: + pass # Not UTF-8 + 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 = normalize('NFC', path) - else: - path = normalize('NFC', path.decode('utf-8')).encode('utf-8') + path = u return path class TestSdistTest(unittest.TestCase): + def setUp(self): self.temp_dir = tempfile.mkdtemp() f = open(os.path.join(self.temp_dir, 'setup.py'), 'w') @@ -74,81 +117,206 @@ class TestSdistTest(unittest.TestCase): cmd.ensure_finalized() # squelch output - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() + quiet() try: cmd.run() finally: - sys.stdout = old_stdout - sys.stderr = old_stderr + unquiet() manifest = cmd.filelist.files - self.assertTrue(os.path.join('sdist_test', 'a.txt') in manifest) self.assertTrue(os.path.join('sdist_test', 'b.txt') in manifest) self.assertTrue(os.path.join('sdist_test', 'c.rst') not in manifest) - def test_manifest_is_written_in_utf8(self): + def test_manifest_is_written_with_utf8_encoding(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') - # Add file with non-ASCII filename + # UTF-8 filename filename = os.path.join('sdist_test', 'smörbröd.py') - open(filename, 'w').close() + # Add UTF-8 filename and write manifest + quiet() + try: + mm.run() + mm.filelist.files.append(filename) + mm.write_manifest() + finally: + unquiet() + + manifest = open(mm.manifest, 'rbU') + contents = manifest.read() + manifest.close() + + # The manifest should be UTF-8 encoded + try: + u = contents.decode('UTF-8') + except UnicodeDecodeError, e: + self.fail(e) + + # The manifest should contain the UTF-8 filename + if sys.version_info >= (3,): + self.assertTrue(filename in u) + else: + self.assertTrue(filename in contents) + + def test_manifest_is_written_with_surrogateescape_error_handler(self): + # Test for #303. dist = Distribution(SETUP_ATTRS) dist.script_name = 'setup.py' - cmd = sdist(dist) - cmd.ensure_finalized() + mm = manifest_maker(dist) + mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + os.mkdir('sdist_test.egg-info') - # squelch output - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() + # Latin-1 filename + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + + # Add filename with surrogates and write manifest + quiet() try: - cmd.run() + mm.run() + if sys.version_info >= (3,): + u = filename.decode('utf-8', 'surrogateescape') + mm.filelist.files.append(u) + else: + mm.filelist.files.append(filename) + mm.write_manifest() finally: - sys.stdout = old_stdout - sys.stderr = old_stderr + unquiet() - manifest = open(os.path.join('sdist_test.egg-info', 'SOURCES.txt'), 'rbU') + manifest = open(mm.manifest, 'rbU') contents = manifest.read() manifest.close() - self.assertTrue(len(contents)) - # This must not fail: - contents.decode('UTF-8') + # The manifest should contain the Latin-1 filename + self.assertTrue(filename in contents) - def test_manifest_is_read_in_utf8(self): + def test_manifest_is_read_with_utf8_encoding(self): # Test for #303. + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() - # Add file with non-ASCII filename + # UTF-8 filename filename = os.path.join('sdist_test', 'smörbröd.py') open(filename, 'w').close() + quiet() + try: + cmd.run() + finally: + unquiet() + + # The filelist should contain the UTF-8 filename + if sys.platform == 'darwin': + filename = decompose(filename) + self.assertTrue(filename in cmd.filelist.files) + + def test_manifest_is_read_with_surrogateescape_error_handler(self): + # Test for #303. + + # This is hard to test on HFS Plus because it quotes unknown + # bytes (see previous test). Furthermore, egg_info.FileList + # only appends filenames that os.path.exist. + + # We therefore write the manifest file by hand and check whether + # read_manifest produces a UnicodeDecodeError. + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() + + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + + quiet() + try: + cmd.run() + # Add Latin-1 filename to manifest + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + manifest = open(cmd.manifest, 'ab') + manifest.write(filename+b('\n')) + manifest.close() + # Re-read manifest + try: + cmd.read_manifest() + except UnicodeDecodeError, e: + self.fail(e) + finally: + unquiet() + + def test_sdist_with_utf8_encoded_filename(self): + # Test for #303. + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() + + # UTF-8 filename + filename = os.path.join(b('sdist_test'), b('smörbröd.py')) + open(filename, 'w').close() + + quiet() + try: + cmd.run() + finally: + unquiet() + + # The filelist should contain the UTF-8 filename + # (in one representation or other) + if sys.version_info >= (3,): + filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape') + if sys.platform == 'darwin': + filename = decompose(filename) + self.assertTrue(filename in cmd.filelist.files) + + def test_sdist_with_latin1_encoded_filename(self): + # Test for #303. dist = Distribution(SETUP_ATTRS) dist.script_name = 'setup.py' cmd = sdist(dist) cmd.ensure_finalized() - # squelch output - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() + # Latin-1 filename + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + open(filename, 'w').close() + + quiet() try: cmd.run() finally: - sys.stdout = old_stdout - sys.stderr = old_stderr + unquiet() + + # The filelist should contain the Latin-1 filename + # (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')) - cmd.filelist.files = [] - cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') - cmd.read_manifest() + 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') - self.assertTrue(filename in [compose(x) for x in cmd.filelist.files]) + # Bytes are required + if sys.version_info >= (3,): + self.assertRaises(TypeError, hfs_quote, 'smörbröd.py') + else: + self.assertRaises(TypeError, hfs_quote, 'smörbröd.py'.decode('utf-8')) def test_suite(): -- cgit v1.2.3 From 44db905fd2d3c3a8cd7218a1c45cf54d353ed9ea Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 21 Oct 2012 03:49:51 -0400 Subject: Fix two failing tests on Windows (paths separated by backslash didn't match manifest paths separated by slash). --HG-- branch : distribute extra : rebase_source : f8cd5491fcfe18f687a67423bb8ccc43d3d76672 --- setuptools/tests/test_sdist.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 65b83b6e..347e0085 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -9,6 +9,7 @@ import tempfile import unittest import urllib import unicodedata +import posixpath from StringIO import StringIO @@ -137,7 +138,7 @@ class TestSdistTest(unittest.TestCase): os.mkdir('sdist_test.egg-info') # UTF-8 filename - filename = os.path.join('sdist_test', 'smörbröd.py') + filename = posixpath.join('sdist_test', 'smörbröd.py') # Add UTF-8 filename and write manifest quiet() @@ -173,7 +174,7 @@ class TestSdistTest(unittest.TestCase): os.mkdir('sdist_test.egg-info') # Latin-1 filename - filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + filename = posixpath.join(b('sdist_test'), LATIN1_FILENAME) # Add filename with surrogates and write manifest quiet() -- cgit v1.2.3 From 383ad7a4f7a1832cf74c250cdae5b63fa4ad61bb Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Thu, 25 Oct 2012 23:45:35 +0200 Subject: Update tests. --HG-- branch : distribute extra : rebase_source : 831e694725e5db1bc360298fbc4b7b58db836bdd --- setuptools/tests/test_sdist.py | 220 ++++++++++++++++++++++------------------- 1 file changed, 121 insertions(+), 99 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 347e0085..a3fde026 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -9,7 +9,6 @@ import tempfile import unittest import urllib import unicodedata -import posixpath from StringIO import StringIO @@ -49,14 +48,22 @@ def unquiet(): 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'): if sys.version_info >= (3,): return s.encode(encoding) 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): if isinstance(path, unicode): return unicodedata.normalize('NFD', path) @@ -69,20 +76,6 @@ def decompose(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): def setUp(self): @@ -138,7 +131,7 @@ class TestSdistTest(unittest.TestCase): os.mkdir('sdist_test.egg-info') # 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 quiet() @@ -155,46 +148,94 @@ class TestSdistTest(unittest.TestCase): # The manifest should be UTF-8 encoded try: - u = contents.decode('UTF-8') + u_contents = contents.decode('UTF-8') except UnicodeDecodeError, e: self.fail(e) # The manifest should contain the UTF-8 filename if sys.version_info >= (3,): - self.assertTrue(filename in u) + self.assertTrue(posix(filename) in u_contents) else: - self.assertTrue(filename in contents) + self.assertTrue(posix(filename) in contents) - def test_manifest_is_written_with_surrogateescape_error_handler(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') + # Python 3 only + if sys.version_info >= (3,): - # Latin-1 filename - filename = posixpath.join(b('sdist_test'), LATIN1_FILENAME) + 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') - # Add filename with surrogates and write manifest - quiet() - try: - mm.run() - if sys.version_info >= (3,): - u = filename.decode('utf-8', 'surrogateescape') - mm.filelist.files.append(u) - else: - mm.filelist.files.append(filename) - mm.write_manifest() - finally: - unquiet() + # UTF-8 filename + filename = os.path.join(b('sdist_test'), b('smörbröd.py')) - manifest = open(mm.manifest, 'rbU') - contents = manifest.read() - manifest.close() + # 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) - # The manifest should contain the Latin-1 filename - self.assertTrue(filename in contents) + def test_write_manifest_skips_non_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') + + # Latin-1 filename + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + + # Add filename with surrogates and write manifest + quiet() + try: + mm.run() + u_filename = filename.decode('utf-8', 'surrogateescape') + 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 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): # Test for #303. @@ -218,37 +259,37 @@ class TestSdistTest(unittest.TestCase): filename = decompose(filename) self.assertTrue(filename in cmd.filelist.files) - def test_manifest_is_read_with_surrogateescape_error_handler(self): - # Test for #303. + # Python 3 only + if sys.version_info >= (3,): - # This is hard to test on HFS Plus because it quotes unknown - # bytes (see previous test). Furthermore, egg_info.FileList - # only appends filenames that os.path.exist. + def test_read_manifest_rejects_surrogates(self): + # Test for #303. - # We therefore write the manifest file by hand and check whether - # read_manifest produces a UnicodeDecodeError. - dist = Distribution(SETUP_ATTRS) - dist.script_name = 'setup.py' - cmd = sdist(dist) - cmd.ensure_finalized() + # This is hard to test on HFS Plus because it quotes unknown + # bytes (see previous test). Furthermore, egg_info.FileList + # only appends filenames that os.path.exist. - filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + # We therefore write the manifest file by hand and check whether + # read_manifest produces a UnicodeDecodeError. + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() - quiet() - try: - cmd.run() - # Add Latin-1 filename to manifest - cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') - manifest = open(cmd.manifest, 'ab') - manifest.write(filename+b('\n')) - manifest.close() - # Re-read manifest + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + + quiet() try: - cmd.read_manifest() - except UnicodeDecodeError, e: - self.fail(e) - finally: - unquiet() + cmd.run() + # Add Latin-1 filename to manifest + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + manifest = open(cmd.manifest, 'ab') + manifest.write(filename+b('\n')) + manifest.close() + finally: + unquiet() + + self.assertRaises(UnicodeDecodeError, cmd.read_manifest) def test_sdist_with_utf8_encoded_filename(self): # Test for #303. @@ -268,9 +309,8 @@ class TestSdistTest(unittest.TestCase): unquiet() # The filelist should contain the UTF-8 filename - # (in one representation or other) if sys.version_info >= (3,): - filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape') + filename = filename.decode('utf-8') if sys.platform == 'darwin': filename = decompose(filename) self.assertTrue(filename in cmd.filelist.files) @@ -292,32 +332,14 @@ class TestSdistTest(unittest.TestCase): finally: unquiet() - # The filelist should contain the Latin-1 filename - # (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 + # The Latin-1 filename should have been skipped 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: - 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(): -- cgit v1.2.3 From 22882958087e20839daf0139a94f8411d17d6a2c Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Fri, 26 Oct 2012 02:10:14 +0200 Subject: Make sdist tests pass on Windows. --HG-- branch : distribute extra : rebase_source : 9fb51372737224be8d5c50265b04a36f19543572 --- setuptools/tests/test_sdist.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index a3fde026..378015a8 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -308,12 +308,19 @@ class TestSdistTest(unittest.TestCase): finally: unquiet() - # The filelist should contain the UTF-8 filename - if sys.version_info >= (3,): - filename = filename.decode('utf-8') if sys.platform == 'darwin': filename = decompose(filename) - self.assertTrue(filename in cmd.filelist.files) + + if sys.version_info >= (3,): + if sys.platform == 'win32': + # Python 3 mangles the UTF-8 filename + filename = filename.decode('cp1252') + self.assertTrue(filename in cmd.filelist.files) + else: + filename = filename.decode('utf-8') + self.assertTrue(filename in cmd.filelist.files) + else: + self.assertTrue(filename in cmd.filelist.files) def test_sdist_with_latin1_encoded_filename(self): # Test for #303. @@ -332,13 +339,17 @@ class TestSdistTest(unittest.TestCase): finally: unquiet() - # The Latin-1 filename should have been skipped if sys.version_info >= (3,): filename = filename.decode('latin-1') - self.assertFalse(filename in cmd.filelist.files) + if sys.platform == 'win32': + # Latin-1 is similar to Windows-1252 + self.assertTrue(filename in cmd.filelist.files) + else: + # The Latin-1 filename should have been skipped + self.assertFalse(filename in cmd.filelist.files) else: - # No conversion takes place under Python 2 and the - # filename is included. We shall keep it that way for BBB. + # No conversion takes place under Python 2 and the file + # is included. We shall keep it that way for BBB. self.assertTrue(filename in cmd.filelist.files) -- cgit v1.2.3 From e485c19015d4fced68b25c09ca66a1743d3ab27c Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Fri, 26 Oct 2012 12:46:41 +0200 Subject: Keep 'surrogateescape' when reading the manifest, to avoid breaking on bad input. --HG-- branch : distribute extra : rebase_source : 6f894cd508e73fae0ad02860654df5181055ba4d --- setuptools/tests/test_sdist.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 378015a8..04b3db66 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -262,7 +262,7 @@ class TestSdistTest(unittest.TestCase): # Python 3 only if sys.version_info >= (3,): - def test_read_manifest_rejects_surrogates(self): + def test_manifest_is_read_with_surrogateescape_error_handler(self): # Test for #303. # This is hard to test on HFS Plus because it quotes unknown @@ -286,11 +286,14 @@ class TestSdistTest(unittest.TestCase): manifest = open(cmd.manifest, 'ab') manifest.write(filename+b('\n')) manifest.close() + # Re-read manifest + try: + cmd.read_manifest() + except UnicodeDecodeError, e: + self.fail(e) finally: unquiet() - self.assertRaises(UnicodeDecodeError, cmd.read_manifest) - def test_sdist_with_utf8_encoded_filename(self): # Test for #303. dist = Distribution(SETUP_ATTRS) -- cgit v1.2.3 From f266bc3745169122fcfcacb781e7e3c70fc58bfb Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Thu, 1 Nov 2012 11:47:24 +0100 Subject: Skip undecodable filenames in read_manifest as well. --HG-- branch : distribute extra : rebase_source : 2dda494b1a4758e84dde81cc61170acd0e55d2f2 --- setuptools/tests/test_sdist.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 04b3db66..a596f4bd 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -262,7 +262,7 @@ class TestSdistTest(unittest.TestCase): # Python 3 only if sys.version_info >= (3,): - def test_manifest_is_read_with_surrogateescape_error_handler(self): + def test_read_manifest_skips_non_utf8_filenames(self): # Test for #303. # This is hard to test on HFS Plus because it quotes unknown @@ -277,6 +277,7 @@ class TestSdistTest(unittest.TestCase): cmd.ensure_finalized() filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) + u_filename = filename.decode('latin-1') quiet() try: @@ -284,7 +285,7 @@ class TestSdistTest(unittest.TestCase): # Add Latin-1 filename to manifest cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') manifest = open(cmd.manifest, 'ab') - manifest.write(filename+b('\n')) + manifest.write(b('\n')+filename) manifest.close() # Re-read manifest try: @@ -294,6 +295,9 @@ class TestSdistTest(unittest.TestCase): finally: unquiet() + # The Latin-1 filename should have been skipped + self.assertFalse(u_filename in cmd.filelist.files) + def test_sdist_with_utf8_encoded_filename(self): # Test for #303. dist = Distribution(SETUP_ATTRS) -- cgit v1.2.3 From 945189affe2ec3d2e25a9255a73bf05b828ab7c3 Mon Sep 17 00:00:00 2001 From: "stefan@epy" Date: Mon, 5 Nov 2012 00:20:39 +0100 Subject: Rewrite tests for read_manifest. --HG-- branch : distribute extra : rebase_source : 8e52687fae6a06e1421c51ddec62870ef7499676 --- setuptools/tests/test_sdist.py | 58 +++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 20 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index a596f4bd..9d2c382f 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -57,7 +57,7 @@ def b(s, encoding='utf-8'): # Convert to POSIX path def posix(path): - if sys.version_info >= (3,) and not isinstance(path, str): + if sys.version_info >= (3,) and not isinstance(path, unicode): return path.replace(os.sep.encode('ascii'), b('/')) else: return path.replace(os.sep, '/') @@ -244,19 +244,35 @@ class TestSdistTest(unittest.TestCase): cmd = sdist(dist) cmd.ensure_finalized() - # UTF-8 filename - filename = os.path.join('sdist_test', 'smörbröd.py') + # Create manifest + quiet() + try: + cmd.run() + finally: + unquiet() + + # Add UTF-8 filename to manifest + filename = os.path.join(b('sdist_test'), b('smörbröd.py')) + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + manifest = open(cmd.manifest, 'ab') + manifest.write(b('\n')+filename) + manifest.close() + + # The file must exist to be included in the filelist open(filename, 'w').close() + # Re-read manifest quiet() try: - cmd.run() + cmd.read_manifest() finally: unquiet() # The filelist should contain the UTF-8 filename if sys.platform == 'darwin': filename = decompose(filename) + if sys.version_info >= (3,): + filename = filename.decode('utf-8') self.assertTrue(filename in cmd.filelist.files) # Python 3 only @@ -264,30 +280,31 @@ class TestSdistTest(unittest.TestCase): def test_read_manifest_skips_non_utf8_filenames(self): # Test for #303. - - # This is hard to test on HFS Plus because it quotes unknown - # bytes (see previous test). Furthermore, egg_info.FileList - # only appends filenames that os.path.exist. - - # We therefore write the manifest file by hand and check whether - # read_manifest produces a UnicodeDecodeError. dist = Distribution(SETUP_ATTRS) dist.script_name = 'setup.py' cmd = sdist(dist) cmd.ensure_finalized() + # Create manifest + quiet() + try: + cmd.run() + finally: + unquiet() + + # Add Latin-1 filename to manifest filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) - u_filename = filename.decode('latin-1') + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + manifest = open(cmd.manifest, 'ab') + manifest.write(b('\n')+filename) + manifest.close() + # The file must exist to be included in the filelist + open(filename, 'w').close() + + # Re-read manifest quiet() try: - cmd.run() - # Add Latin-1 filename to manifest - cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') - manifest = open(cmd.manifest, 'ab') - manifest.write(b('\n')+filename) - manifest.close() - # Re-read manifest try: cmd.read_manifest() except UnicodeDecodeError, e: @@ -296,7 +313,8 @@ class TestSdistTest(unittest.TestCase): unquiet() # The Latin-1 filename should have been skipped - self.assertFalse(u_filename in cmd.filelist.files) + filename = filename.decode('latin-1') + self.assertFalse(filename in cmd.filelist.files) def test_sdist_with_utf8_encoded_filename(self): # Test for #303. -- cgit v1.2.3 From 739d56cdb4f18829de123379488a78cf52e0a6d1 Mon Sep 17 00:00:00 2001 From: "Stefan H. Holek" Date: Mon, 5 Nov 2012 00:26:25 +0100 Subject: No longer decompose filename for comparison. --HG-- branch : distribute extra : rebase_source : 02265fdf50dbe58c41b98e575f1d0d71c95e4bcf --- setuptools/tests/test_sdist.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 9d2c382f..cb601d8c 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -269,8 +269,6 @@ class TestSdistTest(unittest.TestCase): unquiet() # The filelist should contain the UTF-8 filename - if sys.platform == 'darwin': - filename = decompose(filename) if sys.version_info >= (3,): filename = filename.decode('utf-8') self.assertTrue(filename in cmd.filelist.files) -- cgit v1.2.3 From 19a723890b724f92b8c42b162cea2a4052a746f2 Mon Sep 17 00:00:00 2001 From: "stefan@epy" Date: Mon, 5 Nov 2012 01:35:25 +0100 Subject: Warn if filenames cannot be added to the filelist. --HG-- branch : distribute extra : rebase_source : 9fdc3c28b097e191db384cd81319c7a4edccf52b --- setuptools/tests/test_sdist.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index cb601d8c..a9d5d6e5 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -262,6 +262,7 @@ class TestSdistTest(unittest.TestCase): open(filename, 'w').close() # Re-read manifest + cmd.filelist.files = [] quiet() try: cmd.read_manifest() @@ -301,6 +302,7 @@ class TestSdistTest(unittest.TestCase): open(filename, 'w').close() # Re-read manifest + cmd.filelist.files = [] quiet() try: try: -- cgit v1.2.3 From 4bb7aab67a2ba4c890732d053a64737486b31b60 Mon Sep 17 00:00:00 2001 From: Philip Thiem Date: Sat, 16 Feb 2013 15:02:50 -0600 Subject: There were some failing tests on windows. I assume this is a NTFS vs FAT or NT versus 9x things... Seemed odd. In any case. My filesystem is deifnitely NOT cp1252. --HG-- branch : distribute extra : rebase_source : c4d64aff6b811ba36bbf33cd4cf2a12f563a6880 --- setuptools/tests/test_sdist.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index a9d5d6e5..7e6c837c 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -337,10 +337,16 @@ class TestSdistTest(unittest.TestCase): filename = decompose(filename) if sys.version_info >= (3,): - if sys.platform == 'win32': - # Python 3 mangles the UTF-8 filename - filename = filename.decode('cp1252') - self.assertTrue(filename in cmd.filelist.files) + fs_enc = sys.getfilesystemencoding() + + if sys.platform == 'win32': + if fs_enc == 'cp1252': + # Python 3 mangles the UTF-8 filename + filename = filename.decode('cp1252') + self.assertTrue(filename in cmd.filelist.files) + else: + filename = filename.decode('mbcs') + self.assertTrue(filename in cmd.filelist.files) else: filename = filename.decode('utf-8') self.assertTrue(filename in cmd.filelist.files) @@ -357,6 +363,7 @@ class TestSdistTest(unittest.TestCase): # Latin-1 filename filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) open(filename, 'w').close() + self.assertTrue(os.path.isfile(filename)) quiet() try: @@ -365,16 +372,27 @@ class TestSdistTest(unittest.TestCase): unquiet() if sys.version_info >= (3,): - filename = filename.decode('latin-1') + fs_enc = sys.getfilesystemencoding() + + + #not all windows systems have a default FS encoding of cp1252 if sys.platform == 'win32': - # Latin-1 is similar to Windows-1252 + # Latin-1 is similar to Windows-1252 however + # on mbcs filesys it is not in latin-1 encoding + if fs_enc == 'mbcs': + filename = filename.decode('mbcs') + else: + filename = filename.decode('latin-1') + self.assertTrue(filename in cmd.filelist.files) else: # The Latin-1 filename should have been skipped + filename = filename.decode('latin-1') self.assertFalse(filename in cmd.filelist.files) else: # No conversion takes place under Python 2 and the file # is included. We shall keep it that way for BBB. + filename = filename.decode('latin-1') self.assertTrue(filename in cmd.filelist.files) -- cgit v1.2.3 From e9685aa408ac3d118890bd9944bd26260e519908 Mon Sep 17 00:00:00 2001 From: Philip Thiem Date: Sat, 16 Feb 2013 15:22:46 -0600 Subject: don't decode in python 2.x. that's my oops --HG-- branch : distribute extra : rebase_source : 4b981d54c6a171d7a6500c6c62838d8c368ae0b1 --- setuptools/tests/test_sdist.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'setuptools/tests/test_sdist.py') diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 7e6c837c..f51d4567 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -372,13 +372,11 @@ class TestSdistTest(unittest.TestCase): unquiet() if sys.version_info >= (3,): - fs_enc = sys.getfilesystemencoding() - - #not all windows systems have a default FS encoding of cp1252 if sys.platform == 'win32': # Latin-1 is similar to Windows-1252 however # on mbcs filesys it is not in latin-1 encoding + fs_enc = sys.getfilesystemencoding() if fs_enc == 'mbcs': filename = filename.decode('mbcs') else: @@ -392,7 +390,6 @@ class TestSdistTest(unittest.TestCase): else: # No conversion takes place under Python 2 and the file # is included. We shall keep it that way for BBB. - filename = filename.decode('latin-1') self.assertTrue(filename in cmd.filelist.files) -- cgit v1.2.3