diff options
| author | Konrad Delong <konryd@gmail.com> | 2010-07-27 14:53:37 +0200 |
|---|---|---|
| committer | Konrad Delong <konryd@gmail.com> | 2010-07-27 14:53:37 +0200 |
| commit | 0fdeba32a151981e522ad6bebdf5c8a1623082a7 (patch) | |
| tree | ed907340ede235ed5ba2402a44e50cdad2b6c047 /src/distutils2 | |
| parent | 1f9c79453c4135240dd14260c936a562c261df13 (diff) | |
| download | disutils2-0fdeba32a151981e522ad6bebdf5c8a1623082a7.tar.gz | |
refactored test command tests and added another functional test
Diffstat (limited to 'src/distutils2')
| -rw-r--r-- | src/distutils2/_backport/__init__.py | 6 | ||||
| -rw-r--r-- | src/distutils2/command/test.py | 17 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/extensions_test/myowntestmodule.py | 4 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/extensions_test/setup.cfg | 2 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/extensions_test/setup.py | 6 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/extensions_test/spammodule.c | 11 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/simple_test/myowntestmodule.py | 4 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/simple_test/setup.cfg | 2 | ||||
| -rw-r--r-- | src/distutils2/tests/dists/simple_test/setup.py | 5 | ||||
| -rw-r--r-- | src/distutils2/tests/test_test.py | 105 |
10 files changed, 99 insertions, 63 deletions
diff --git a/src/distutils2/_backport/__init__.py b/src/distutils2/_backport/__init__.py index c5227d3..df6efb4 100644 --- a/src/distutils2/_backport/__init__.py +++ b/src/distutils2/_backport/__init__.py @@ -1,2 +1,8 @@ """Things that will land in the Python 3.3 std lib but which we must drag along with us for now to support 2.x.""" + +def any(seq): + for elem in seq: + if elem: + return elem + return False diff --git a/src/distutils2/command/test.py b/src/distutils2/command/test.py index 31597bd..b2b985c 100644 --- a/src/distutils2/command/test.py +++ b/src/distutils2/command/test.py @@ -14,17 +14,16 @@ class test(Command): self.test_suite = None def finalize_options(self): - pass - - def distpath(self): - self.run_command('build') - build_cmd = self.get_finalized_command("build") - return os.path.join(build_cmd.build_base, "lib") + self.build_lib = self.get_finalized_command("build").build_lib def run(self): - orig_path = sys.path[:] + prev_cwd = os.getcwd() try: - sys.path.insert(0, self.distpath()) + if self.distribution.has_ext_modules(): + build = self.get_reinitialized_command('build') + build.inplace = 1 + self.run_command('build') + os.chdir(self.build_lib) unittest.main(module=self.test_suite, argv=sys.argv[:1]) finally: - sys.path[:] = orig_path + os.chdir(prev_cwd) diff --git a/src/distutils2/tests/dists/extensions_test/myowntestmodule.py b/src/distutils2/tests/dists/extensions_test/myowntestmodule.py new file mode 100644 index 0000000..ba74d5a --- /dev/null +++ b/src/distutils2/tests/dists/extensions_test/myowntestmodule.py @@ -0,0 +1,4 @@ +import unittest +class SomeTest(unittest.TestCase): + def test_blah(self): + self.fail("horribly") diff --git a/src/distutils2/tests/dists/extensions_test/setup.cfg b/src/distutils2/tests/dists/extensions_test/setup.cfg new file mode 100644 index 0000000..5f14fd4 --- /dev/null +++ b/src/distutils2/tests/dists/extensions_test/setup.cfg @@ -0,0 +1,2 @@ +[test] +test-suite = myowntestmodule diff --git a/src/distutils2/tests/dists/extensions_test/setup.py b/src/distutils2/tests/dists/extensions_test/setup.py new file mode 100644 index 0000000..91dbca8 --- /dev/null +++ b/src/distutils2/tests/dists/extensions_test/setup.py @@ -0,0 +1,6 @@ +from distutils2.core import setup, Extension +setup(name='somedist', + version='0.1', + py_modules=['myowntestmodule', 'somemod'], + ext_modules=[Extension('spam', ['spammodule.c'])], +) diff --git a/src/distutils2/tests/dists/extensions_test/spammodule.c b/src/distutils2/tests/dists/extensions_test/spammodule.c new file mode 100644 index 0000000..88e888a --- /dev/null +++ b/src/distutils2/tests/dists/extensions_test/spammodule.c @@ -0,0 +1,11 @@ +#include <Python.h> + +static PyMethodDef SpamMethods[] = { + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +PyMODINIT_FUNC +initspam(void) +{ + (void) Py_InitModule("spam", SpamMethods); +} diff --git a/src/distutils2/tests/dists/simple_test/myowntestmodule.py b/src/distutils2/tests/dists/simple_test/myowntestmodule.py new file mode 100644 index 0000000..ba74d5a --- /dev/null +++ b/src/distutils2/tests/dists/simple_test/myowntestmodule.py @@ -0,0 +1,4 @@ +import unittest +class SomeTest(unittest.TestCase): + def test_blah(self): + self.fail("horribly") diff --git a/src/distutils2/tests/dists/simple_test/setup.cfg b/src/distutils2/tests/dists/simple_test/setup.cfg new file mode 100644 index 0000000..5f14fd4 --- /dev/null +++ b/src/distutils2/tests/dists/simple_test/setup.cfg @@ -0,0 +1,2 @@ +[test] +test-suite = myowntestmodule diff --git a/src/distutils2/tests/dists/simple_test/setup.py b/src/distutils2/tests/dists/simple_test/setup.py new file mode 100644 index 0000000..151e07a --- /dev/null +++ b/src/distutils2/tests/dists/simple_test/setup.py @@ -0,0 +1,5 @@ +from distutils2.core import setup +setup(name='somedist', + version='0.1', + py_modules=['myowntestmodule', 'somemod'], +) diff --git a/src/distutils2/tests/test_test.py b/src/distutils2/tests/test_test.py index 022cd97..38f03c4 100644 --- a/src/distutils2/tests/test_test.py +++ b/src/distutils2/tests/test_test.py @@ -1,4 +1,4 @@ -import os, sys +import os, sys, shutil, re from copy import copy from os.path import join from StringIO import StringIO @@ -6,33 +6,17 @@ from distutils2.tests.support import unittest, TempdirManager from distutils2.command.test import test import subprocess -TEST_BODY = '''\ -import unittest -class SomeTest(unittest.TestCase): - def test_blah(self): - self.fail("horribly") -testSuite = unittest.makeSuite(SomeTest) -''' - -SETUP_PY = '''\ -from distutils2.core import setup -setup(name='somedist', - version='0.1', - py_modules=['myowntestmodule', 'somemod'], -) -''' - -SETUP_CFG = '''\ -[test] -test-suite = myowntestmodule -''' +try: + any +except NameError: + from distutils2._backport import any -EXPECTED_OUTPUT = '''\ -FAIL: test_blah (myowntestmodule.SomeTest) +EXPECTED_OUTPUT_RE = '''\ +FAIL: test_blah \\(myowntestmodule.SomeTest\\) ---------------------------------------------------------------------- -Traceback (most recent call last): - File "build/lib/myowntestmodule.py", line 4, in test_blah - self.fail("horribly") +Traceback \\(most recent call last\\): + File ".+/myowntestmodule.py", line \\d+, in test_blah + self.fail\\("horribly"\\) AssertionError: horribly ''' @@ -40,10 +24,7 @@ class TestTest(TempdirManager, unittest.TestCase): def setUp(self): super(TestTest, self).setUp() - self.pkg_dir = self.prepare_dist() - self.cwd = os.getcwd() - os.chdir(self.pkg_dir) - self.orig_environ = copy(os.environ) + distutils2path = join(__file__, '..', '..', '..') distutils2path = os.path.abspath(distutils2path) self.old_pythonpath = os.environ.get('PYTHONPATH', '') @@ -51,38 +32,54 @@ class TestTest(TempdirManager, unittest.TestCase): def tearDown(self): super(TestTest, self).tearDown() - os.chdir(self.cwd) os.environ['PYTHONPATH'] = self.old_pythonpath - def prepare_dist(self): - # prepare distribution - pkg_dir = self.mkdtemp() - self.write_file(join(pkg_dir, "setup.py"), SETUP_PY) - self.write_file(join(pkg_dir, "setup.cfg"), SETUP_CFG) - self.write_file(join(pkg_dir, "somemod.py"), "") - self.write_file(join(pkg_dir, "myowntestmodule.py"), TEST_BODY) - return pkg_dir - - def test_runs_simple_tests(self): - command = [sys.executable, "setup.py", "test"] - test_proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - _, errors = test_proc.communicate() - - # ensure right output - self.assert_multiline_substring(EXPECTED_OUTPUT, errors) - - def assert_multiline_substring(self, a, b): + def assert_re_match(self, pattern, string): def quote(s): - lines = ['## ' + line for line in s.split('\n')] + lines = ['## ' + line for line in s.split('\n')] sep = ["#" * 60] return [''] + sep + lines + sep - msg = quote(a) + ['not found in:'] + quote(b) + msg = quote(pattern) + ["didn't match"] + quote(string) msg = "\n".join(msg) - if a not in b: + if not re.search(pattern, string): self.fail(msg) - def _test_setup_py_accepts_options(self): + def run_with_dist_cwd(self, pkg_dir): + cwd = os.getcwd() + command = [sys.executable, "setup.py", "test"] + try: + os.chdir(pkg_dir) + test_proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) + _, errors = test_proc.communicate() + return errors + finally: + os.chdir(cwd) + + def prepare_dist(self, dist_name): + pkg_dir = join(os.path.dirname(__file__), "dists", dist_name) + temp_pkg_dir = join(self.mkdtemp(), dist_name) + shutil.copytree(pkg_dir, temp_pkg_dir) + return temp_pkg_dir + + def test_runs_simple_tests(self): + self.pkg_dir = self.prepare_dist('simple_test') + output = self.run_with_dist_cwd(self.pkg_dir) + self.assert_re_match(EXPECTED_OUTPUT_RE, output) + self.assertFalse(os.path.exists(join(self.pkg_dir, 'build'))) + + def test_builds_extensions(self): + self.pkg_dir = self.prepare_dist("extensions_test") + output = self.run_with_dist_cwd(self.pkg_dir) + self.assert_re_match(EXPECTED_OUTPUT_RE, output) + self.assertTrue(os.path.exists(join(self.pkg_dir, 'build'))) + self.assertTrue(any(x.startswith('lib') for x in os.listdir(join(self.pkg_dir, 'build')))) + + def _test_custom_test_loader(self): pass - def _test_options_preparation(self): + def _test_downloads_test_requires(self): pass + +def test_suite(): + suite = [unittest.makeSuite(TestTest)] + return unittest.TestSuite(suite) |
