summaryrefslogtreecommitdiff
path: root/src/distutils2
diff options
context:
space:
mode:
authorKonrad Delong <konryd@gmail.com>2010-07-27 14:53:37 +0200
committerKonrad Delong <konryd@gmail.com>2010-07-27 14:53:37 +0200
commit0fdeba32a151981e522ad6bebdf5c8a1623082a7 (patch)
treeed907340ede235ed5ba2402a44e50cdad2b6c047 /src/distutils2
parent1f9c79453c4135240dd14260c936a562c261df13 (diff)
downloaddisutils2-0fdeba32a151981e522ad6bebdf5c8a1623082a7.tar.gz
refactored test command tests and added another functional test
Diffstat (limited to 'src/distutils2')
-rw-r--r--src/distutils2/_backport/__init__.py6
-rw-r--r--src/distutils2/command/test.py17
-rw-r--r--src/distutils2/tests/dists/extensions_test/myowntestmodule.py4
-rw-r--r--src/distutils2/tests/dists/extensions_test/setup.cfg2
-rw-r--r--src/distutils2/tests/dists/extensions_test/setup.py6
-rw-r--r--src/distutils2/tests/dists/extensions_test/spammodule.c11
-rw-r--r--src/distutils2/tests/dists/simple_test/myowntestmodule.py4
-rw-r--r--src/distutils2/tests/dists/simple_test/setup.cfg2
-rw-r--r--src/distutils2/tests/dists/simple_test/setup.py5
-rw-r--r--src/distutils2/tests/test_test.py105
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)