Commit 3686c4d8 authored by PJ Eby's avatar PJ Eby

Enhanced the ``test`` command so that it doesn't install the package, but

instead builds any C extensions in-place, updates the ``.egg-info``
metadata, adds the source directory to ``sys.path``, and runs the tests
directly on the source.  This avoids an "unmanaged" installation of the
package to ``site-packages`` or elsewhere.  (Also, fix a breaking test of
older dependency support; this should probably be removed altogether, as
long as nobody's using it.)

--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041078
parent 4a63bc6f
......@@ -484,8 +484,14 @@ Known Issues
0.5a5
* Added ``egg_info`` command to ``setuptools``-based packages. This command
just creates or updates the "projectname.egg-info" directory, without
building an egg. It's used by the ``bdist_egg`` command now, and will be
used by the ``test`` and ``develop`` commands later on.
building an egg. It's used by the ``bdist_egg`` and ``test`` commands now,
and will be used by the ``develop`` command later on.
* Enhanced the ``test`` command so that it doesn't install the package, but
instead builds any C extensions in-place, updates the ``.egg-info``
metadata, adds the source directory to ``sys.path``, and runs the tests
directly on the source. This avoids an "unmanaged" installation of the
package to ``site-packages`` or elsewhere.
0.5a4
* Added ``--always-copy/-a`` option to always copy needed packages to the
......
from distutils.cmd import Command
from setuptools import Command
from distutils.errors import DistutilsOptionError
import sys
......@@ -40,35 +40,35 @@ class test(Command):
def run(self):
# Ensure metadata is up-to-date
self.run_command('egg_info')
# Install before testing
self.run_command('install')
# Build extensions in-place
self.reinitialize_command('build_ext', inplace=1)
self.run_command('build_ext')
if self.test_suite:
cmd = ' '.join(self.test_args)
if self.dry_run:
self.announce('skipping "unittest %s" (dry run)' % cmd)
else:
self.announce('running "unittest %s"' % cmd)
import unittest
unittest.main(None, None, [unittest.__file__]+self.test_args)
self.run_tests()
def run_tests(self):
import unittest, pkg_resources
old_path = sys.path[:]
ei_cmd = self.get_finalized_command("egg_info")
try:
# put the egg on sys.path, and require() it
sys.path.insert(0, ei_cmd.egg_base)
pkg_resources.require(
"%s==%s" % (ei_cmd.egg_name, ei_cmd.egg_version)
)
unittest.main(None, None, [unittest.__file__]+self.test_args)
finally:
sys.path[:] = old_path
# XXX later this might need to save/restore the WorkingSet
......
......@@ -122,19 +122,19 @@ class DependsTests(TestCase):
def testDependsCmd(self):
path1 = convert_path('foo/bar/baz')
path2 = convert_path('foo/bar/baz/spam')
path = convert_path('foo/bar/baz')
dist = makeSetup(
extra_path='spam',
script_args=['install','--install-lib',path1]
script_args=['install','--install-lib',path]
)
cmd = dist.get_command_obj('depends')
cmd.ensure_finalized()
self.assertEqual(cmd.temp, dist.get_command_obj('build').build_temp)
self.assertEqual(cmd.search_path, [path2,path1]+sys.path)
self.assertEqual(cmd.search_path, [path+os.path.sep,path]+sys.path)
......
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