Commits

Jason R. Coombs  committed dc1045d

Issue #11638: Adding test to ensure .tar.gz files can be generated by sdist command with unicode metadata, based on David Barnett's patch.
Issue #11638: Added tests to capture failures in make_tarball with various unicode strings.
Following fix for Issue #13639, these tests now pass.

  • Participants
  • Parent commits b48991f
  • Branches 2.7

Comments (0)

Files changed (3)

File Lib/distutils/tests/test_archive_util.py

+# -*- coding: utf-8 -*-
 """Tests for distutils.archive_util."""
 __revision__ = "$Id$"
 
 
     @unittest.skipUnless(zlib, "requires zlib")
     def test_make_tarball(self):
+        self._make_tarball('archive')
+
+    def _make_tarball(self, target_name):
         # creating something to tar
         tmpdir = self.mkdtemp()
         self.write_file([tmpdir, 'file1'], 'xxx')
         unittest.skipUnless(splitdrive(tmpdir)[0] == splitdrive(tmpdir2)[0],
                             "source and target should be on same drive")
 
-        base_name = os.path.join(tmpdir2, 'archive')
+        base_name = os.path.join(tmpdir2, target_name)
 
         # working with relative paths to avoid tar warnings
         old_dir = os.getcwd()
         self.assertTrue(os.path.exists(tarball))
 
         # trying an uncompressed one
-        base_name = os.path.join(tmpdir2, 'archive')
+        base_name = os.path.join(tmpdir2, target_name)
         old_dir = os.getcwd()
         os.chdir(tmpdir)
         try:
         finally:
             del ARCHIVE_FORMATS['xxx']
 
+    @unittest.skipUnless(zlib, "requires zlib")
+    def test_make_tarball_unicode(self):
+        """
+        Mirror test_make_tarball, except filename is unicode.
+        """
+        self._make_tarball(u'archive')
+
+    @unittest.skipUnless(zlib, "requires zlib")
+    def test_make_tarball_unicode_latin1(self):
+        """
+        Mirror test_make_tarball, except filename is unicode and contains
+        latin characters.
+        """
+        self._make_tarball(u'årchiv') # note this isn't a real word
+
+    @unittest.skipUnless(zlib, "requires zlib")
+    def test_make_tarball_unicode_extended(self):
+        """
+        Mirror test_make_tarball, except filename is unicode and contains
+        characters outside the latin charset.
+        """
+        self._make_tarball(u'のアーカイブ') # japanese for archive
+
 def test_suite():
     return unittest.makeSuite(ArchiveUtilTestCase)
 

File Lib/distutils/tests/test_sdist.py

         self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz'])
 
     @unittest.skipUnless(zlib, "requires zlib")
+    def test_unicode_metadata_tgz(self):
+        """
+        Unicode name or version should not break building to tar.gz format.
+        Reference issue #11638.
+        """
+
+        # create the sdist command with unicode parameters
+        dist, cmd = self.get_cmd({'name': u'fake', 'version': u'1.0'})
+
+        # create the sdist as gztar and run the command
+        cmd.formats = ['gztar']
+        cmd.ensure_finalized()
+        cmd.run()
+
+        # The command should have created the .tar.gz file
+        dist_folder = join(self.tmp_dir, 'dist')
+        result = os.listdir(dist_folder)
+        self.assertEqual(result, ['fake-1.0.tar.gz'])
+
+        os.remove(join(dist_folder, 'fake-1.0.tar.gz'))
+
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_add_defaults(self):
 
         # http://bugs.python.org/issue2279
 Core and Builtins
 -----------------
 
+- Issue #11638: Unicode strings in 'name' and 'version' no longer cause
+  UnicodeDecodeErrors.
+
 - Fix the fix for issue #12149: it was incorrect, although it had the side
   effect of appearing to resolve the issue.  Thanks to Mark Shannon for
   noticing.