[Python-checkins] r45682 - in python/trunk: Lib/test/test_cmd_line.py Misc/NEWS

nick.coghlan python-checkins at python.org
Mon Apr 24 06:32:49 CEST 2006


Author: nick.coghlan
Date: Mon Apr 24 06:32:47 2006
New Revision: 45682

Modified:
   python/trunk/Lib/test/test_cmd_line.py
   python/trunk/Misc/NEWS
Log:
Add unit tests for the -m and -c command line switches

Modified: python/trunk/Lib/test/test_cmd_line.py
==============================================================================
--- python/trunk/Lib/test/test_cmd_line.py	(original)
+++ python/trunk/Lib/test/test_cmd_line.py	Mon Apr 24 06:32:47 2006
@@ -18,6 +18,11 @@
     def exit_code(self, cmd_line):
         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):
         self.assertNotEqual(self.exit_code('.'), 0)
         self.assertNotEqual(self.exit_code('< .'), 0)
@@ -50,6 +55,56 @@
         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
+        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():
     test.test_support.run_unittest(CmdLineTest)
 

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Mon Apr 24 06:32:47 2006
@@ -158,6 +158,8 @@
 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
   it separately and by hand.  It also wasn't cleaning up its changes to
   the current Decimal context.


More information about the Python-checkins mailing list