17db96d56Sopenharmony_ci"""Tests for distutils.command.bdist_dumb."""
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport os
47db96d56Sopenharmony_ciimport sys
57db96d56Sopenharmony_ciimport zipfile
67db96d56Sopenharmony_ciimport unittest
77db96d56Sopenharmony_cifrom test.support import run_unittest
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_cifrom distutils.core import Distribution
107db96d56Sopenharmony_cifrom distutils.command.bdist_dumb import bdist_dumb
117db96d56Sopenharmony_cifrom distutils.tests import support
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciSETUP_PY = """\
147db96d56Sopenharmony_cifrom distutils.core import setup
157db96d56Sopenharmony_ciimport foo
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cisetup(name='foo', version='0.1', py_modules=['foo'],
187db96d56Sopenharmony_ci      url='xxx', author='xxx', author_email='xxx')
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci"""
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_citry:
237db96d56Sopenharmony_ci    import zlib
247db96d56Sopenharmony_ci    ZLIB_SUPPORT = True
257db96d56Sopenharmony_ciexcept ImportError:
267db96d56Sopenharmony_ci    ZLIB_SUPPORT = False
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciclass BuildDumbTestCase(support.TempdirManager,
307db96d56Sopenharmony_ci                        support.LoggingSilencer,
317db96d56Sopenharmony_ci                        support.EnvironGuard,
327db96d56Sopenharmony_ci                        unittest.TestCase):
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci    def setUp(self):
357db96d56Sopenharmony_ci        super(BuildDumbTestCase, self).setUp()
367db96d56Sopenharmony_ci        self.old_location = os.getcwd()
377db96d56Sopenharmony_ci        self.old_sys_argv = sys.argv, sys.argv[:]
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci    def tearDown(self):
407db96d56Sopenharmony_ci        os.chdir(self.old_location)
417db96d56Sopenharmony_ci        sys.argv = self.old_sys_argv[0]
427db96d56Sopenharmony_ci        sys.argv[:] = self.old_sys_argv[1]
437db96d56Sopenharmony_ci        super(BuildDumbTestCase, self).tearDown()
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci    @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run')
467db96d56Sopenharmony_ci    def test_simple_built(self):
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci        # let's create a simple package
497db96d56Sopenharmony_ci        tmp_dir = self.mkdtemp()
507db96d56Sopenharmony_ci        pkg_dir = os.path.join(tmp_dir, 'foo')
517db96d56Sopenharmony_ci        os.mkdir(pkg_dir)
527db96d56Sopenharmony_ci        self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
537db96d56Sopenharmony_ci        self.write_file((pkg_dir, 'foo.py'), '#')
547db96d56Sopenharmony_ci        self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
557db96d56Sopenharmony_ci        self.write_file((pkg_dir, 'README'), '')
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci        dist = Distribution({'name': 'foo', 'version': '0.1',
587db96d56Sopenharmony_ci                             'py_modules': ['foo'],
597db96d56Sopenharmony_ci                             'url': 'xxx', 'author': 'xxx',
607db96d56Sopenharmony_ci                             'author_email': 'xxx'})
617db96d56Sopenharmony_ci        dist.script_name = 'setup.py'
627db96d56Sopenharmony_ci        os.chdir(pkg_dir)
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci        sys.argv = ['setup.py']
657db96d56Sopenharmony_ci        cmd = bdist_dumb(dist)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci        # so the output is the same no matter
687db96d56Sopenharmony_ci        # what is the platform
697db96d56Sopenharmony_ci        cmd.format = 'zip'
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci        cmd.ensure_finalized()
727db96d56Sopenharmony_ci        cmd.run()
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci        # see what we have
757db96d56Sopenharmony_ci        dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
767db96d56Sopenharmony_ci        base = "%s.%s.zip" % (dist.get_fullname(), cmd.plat_name)
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci        self.assertEqual(dist_created, [base])
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci        # now let's check what we have in the zip file
817db96d56Sopenharmony_ci        fp = zipfile.ZipFile(os.path.join('dist', base))
827db96d56Sopenharmony_ci        try:
837db96d56Sopenharmony_ci            contents = fp.namelist()
847db96d56Sopenharmony_ci        finally:
857db96d56Sopenharmony_ci            fp.close()
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci        contents = sorted(filter(None, map(os.path.basename, contents)))
887db96d56Sopenharmony_ci        wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py']
897db96d56Sopenharmony_ci        if not sys.dont_write_bytecode:
907db96d56Sopenharmony_ci            wanted.append('foo.%s.pyc' % sys.implementation.cache_tag)
917db96d56Sopenharmony_ci        self.assertEqual(contents, sorted(wanted))
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_cidef test_suite():
947db96d56Sopenharmony_ci    return unittest.TestLoader().loadTestsFromTestCase(BuildDumbTestCase)
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciif __name__ == '__main__':
977db96d56Sopenharmony_ci    run_unittest(test_suite())
98