Add unit tests for the -m and -c command line switches

This commit is contained in:
Nick Coghlan 2006-04-24 04:32:47 +00:00
parent 877cf234c9
commit 27ec1a773c
2 changed files with 57 additions and 0 deletions

View File

@ -18,6 +18,11 @@ class CmdLineTest(unittest.TestCase):
def exit_code(self, cmd_line): def exit_code(self, cmd_line):
return subprocess.call([sys.executable, cmd_line], stderr=subprocess.PIPE) return subprocess.call([sys.executable, cmd_line], stderr=subprocess.PIPE)
def popen_python(self, *args):
cmd_line = [sys.executable]
cmd_line.extend(args)
return subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def test_directories(self): def test_directories(self):
self.assertNotEqual(self.exit_code('.'), 0) self.assertNotEqual(self.exit_code('.'), 0)
self.assertNotEqual(self.exit_code('< .'), 0) self.assertNotEqual(self.exit_code('< .'), 0)
@ -50,6 +55,56 @@ class CmdLineTest(unittest.TestCase):
version = 'Python %d.%d' % sys.version_info[:2] version = 'Python %d.%d' % sys.version_info[:2]
self.assertTrue(self.start_python('-V').startswith(version)) self.assertTrue(self.start_python('-V').startswith(version))
def test_run_module(self):
# Test expected operation of the '-m' switch
# Switch needs an argument
result = self.popen_python('-m')
exit_code = result.wait()
self.assertNotEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details.startswith('Argument expected'))
# Check we get an import error for a nonexistent module
result = self.popen_python('-m', 'fnord43520xyz')
exit_code = result.wait()
self.assertNotEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue('ImportError' in err_details)
# Traceback shown if the requested module is located for execution
# and subsequently fails (even if that module is runpy)
result = self.popen_python('-m', 'runpy', 'fnord')
exit_code = result.wait()
self.assertNotEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details.startswith('Traceback'))
# Silence if module is located and run successfully
result = self.popen_python('-m', 'timeit', '-n', '1')
exit_code = result.wait()
self.assertEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details in ('', '\n'))
def test_run_code(self):
# Test expected operation of the '-c' switch
# Switch needs an argument
result = self.popen_python('-c')
exit_code = result.wait()
self.assertNotEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details.startswith('Argument expected'))
# Traceback shown for uncaught exceptions
result = self.popen_python('-c', 'raise Exception')
exit_code = result.wait()
self.assertNotEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details.startswith('Traceback'))
# Silence if execution is successful
result = self.popen_python('-c', '""')
exit_code = result.wait()
self.assertEqual(exit_code, 0)
err_details = result.stderr.read()
self.assertTrue(err_details in ('', '\n'))
def test_main(): def test_main():
test.test_support.run_unittest(CmdLineTest) test.test_support.run_unittest(CmdLineTest)

View File

@ -158,6 +158,8 @@ C API
Tests Tests
----- -----
- test_cmd_line now checks operation of the -m and -c command switches
- The test_contextlib test in 2.5a1 wasn't actually run unless you ran - The test_contextlib test in 2.5a1 wasn't actually run unless you ran
it separately and by hand. It also wasn't cleaning up its changes to it separately and by hand. It also wasn't cleaning up its changes to
the current Decimal context. the current Decimal context.