mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00

be called at the end of each test that spawns children (perhaps it should be called from regrtest instead?). This will hopefully prevent some of the unexplained failures in the buildbots (hppa and alpha) during tests that spawn children. The problems were not reproducible. There were many zombies that remained at the end of several tests. In the worst case, this shouldn't cause any more problems, though it may not help either. Time will tell.
93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
|
|
import test.test_support, unittest
|
|
import sys
|
|
import popen2
|
|
import subprocess
|
|
|
|
class CmdLineTest(unittest.TestCase):
|
|
def start_python(self, cmd_line):
|
|
outfp, infp = popen2.popen4('%s %s' % (sys.executable, cmd_line))
|
|
infp.close()
|
|
data = outfp.read()
|
|
outfp.close()
|
|
# try to cleanup the child so we don't appear to leak when running
|
|
# with regrtest -R. This should be a no-op on Windows.
|
|
popen2._cleanup()
|
|
return data
|
|
|
|
def exit_code(self, *args):
|
|
cmd_line = [sys.executable]
|
|
cmd_line.extend(args)
|
|
return subprocess.call(cmd_line, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
|
|
def test_directories(self):
|
|
self.assertNotEqual(self.exit_code('.'), 0)
|
|
self.assertNotEqual(self.exit_code('< .'), 0)
|
|
|
|
def verify_valid_flag(self, cmd_line):
|
|
data = self.start_python(cmd_line)
|
|
self.assertTrue(data == '' or data.endswith('\n'))
|
|
self.assertTrue('Traceback' not in data)
|
|
|
|
def test_environment(self):
|
|
self.verify_valid_flag('-E')
|
|
|
|
def test_optimize(self):
|
|
self.verify_valid_flag('-O')
|
|
self.verify_valid_flag('-OO')
|
|
|
|
def test_q(self):
|
|
self.verify_valid_flag('-Qold')
|
|
self.verify_valid_flag('-Qnew')
|
|
self.verify_valid_flag('-Qwarn')
|
|
self.verify_valid_flag('-Qwarnall')
|
|
|
|
def test_site_flag(self):
|
|
self.verify_valid_flag('-S')
|
|
|
|
def test_usage(self):
|
|
self.assertTrue('usage' in self.start_python('-h'))
|
|
|
|
def test_version(self):
|
|
version = 'Python %d.%d' % sys.version_info[:2]
|
|
self.assertTrue(self.start_python('-V').startswith(version))
|
|
|
|
def test_run_module(self):
|
|
# Test expected operation of the '-m' switch
|
|
# Switch needs an argument
|
|
self.assertNotEqual(self.exit_code('-m'), 0)
|
|
# Check we get an error for a nonexistent module
|
|
self.assertNotEqual(
|
|
self.exit_code('-m', 'fnord43520xyz'),
|
|
0)
|
|
# Check the runpy module also gives an error for
|
|
# a nonexistent module
|
|
self.assertNotEqual(
|
|
self.exit_code('-m', 'runpy', 'fnord43520xyz'),
|
|
0)
|
|
# All good if module is located and run successfully
|
|
self.assertEqual(
|
|
self.exit_code('-m', 'timeit', '-n', '1'),
|
|
0)
|
|
|
|
def test_run_code(self):
|
|
# Test expected operation of the '-c' switch
|
|
# Switch needs an argument
|
|
self.assertNotEqual(self.exit_code('-c'), 0)
|
|
# Check we get an error for an uncaught exception
|
|
self.assertNotEqual(
|
|
self.exit_code('-c', 'raise Exception'),
|
|
0)
|
|
# All good if execution is successful
|
|
self.assertEqual(
|
|
self.exit_code('-c', 'pass'),
|
|
0)
|
|
|
|
|
|
def test_main():
|
|
test.test_support.run_unittest(CmdLineTest)
|
|
test.test_support.reap_children()
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|