| 
									
										
										
										
											2001-02-04 03:09:53 +00:00
										 |  |  | # Run the _testcapi module tests (tests for the Python/C API):  by defn, | 
					
						
							| 
									
										
										
										
											2001-04-13 17:03:04 +00:00
										 |  |  | # these are all functions _testcapi exports whose name begins with 'test_'. | 
					
						
							| 
									
										
										
										
											2001-02-02 05:57:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2012-01-18 00:21:11 +01:00
										 |  |  | import pickle | 
					
						
							| 
									
										
										
										
											2010-05-13 18:31:05 +00:00
										 |  |  | import random | 
					
						
							|  |  |  | import subprocess | 
					
						
							| 
									
										
										
										
											2005-03-03 12:26:35 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2015-03-21 15:04:43 +01:00
										 |  |  | import textwrap | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  | import time | 
					
						
							| 
									
										
										
										
											2008-10-16 23:56:29 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2008-05-20 21:35:26 +00:00
										 |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2013-11-23 17:35:48 -08:00
										 |  |  | from test.support import MISSING_C_DOCSTRINGS | 
					
						
							| 
									
										
										
										
											2015-05-06 06:33:17 +03:00
										 |  |  | from test.support.script_helper import assert_python_failure | 
					
						
							| 
									
										
										
										
											2012-08-20 11:04:24 +02:00
										 |  |  | try: | 
					
						
							|  |  |  |     import _posixsubprocess | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     _posixsubprocess = None | 
					
						
							| 
									
										
											  
											
												Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r80552 | victor.stinner | 2010-04-27 23:46:03 +0200 (mar., 27 avril 2010) | 3 lines
  Issue #7449, part 1: fix test_support.py for Python compiled without thread
........
  r80553 | victor.stinner | 2010-04-27 23:47:01 +0200 (mar., 27 avril 2010) | 1 line
  Issue #7449, part 2: regrtest.py -j option requires thread support
........
  r80554 | victor.stinner | 2010-04-27 23:51:26 +0200 (mar., 27 avril 2010) | 9 lines
  Issue #7449 part 3, test_doctest: import trace module in test_coverage()
  Import trace module fail if the threading module is missing. test_coverage() is
  only used if test_doctest.py is used with the -c option. This commit allows to
  execute the test suite without thread support.
  Move "import trace" in test_coverage() and use
  test_support.import_module('trace').
........
  r80555 | victor.stinner | 2010-04-27 23:56:26 +0200 (mar., 27 avril 2010) | 6 lines
  Issue #7449, part 4: skip test_multiprocessing if thread support is disabled
  import threading after _multiprocessing to raise a more revelant error message:
  "No module named _multiprocessing". _multiprocessing is not compiled without
  thread support.
........
  r80556 | victor.stinner | 2010-04-28 00:01:24 +0200 (mer., 28 avril 2010) | 8 lines
  Issue #7449, part 5: split Test.test_open() of ctypes/test/test_errno.py
   * Split Test.test_open() in 2 functions: test_open() and test_thread_open()
   * Skip test_open() and test_thread_open() if we are unable to find the C
     library
   * Skip test_thread_open() if thread support is disabled
   * Use unittest.skipUnless(os.name == "nt", ...) on test_GetLastError()
........
  r80564 | victor.stinner | 2010-04-28 00:59:35 +0200 (mer., 28 avril 2010) | 4 lines
  Issue #7449, part 6: fix test_hashlib for missing threading module
  Move @test_support.reap_thread decorator from test_main() to test_threaded_hashing().
........
  r80565 | victor.stinner | 2010-04-28 01:01:29 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, part 7: simplify threading detection in test_capi
   * Skip TestPendingCalls if threading module is missing
   * Test if threading module is present or not, instead of test the presence of
     _testcapi._test_thread_state
........
  r80566 | victor.stinner | 2010-04-28 01:03:16 +0200 (mer., 28 avril 2010) | 4 lines
  Issue #7449, part 8: don't skip the whole test_asynchat if threading is missing
  TestFifo can be executed without the threading module
........
  r80568 | victor.stinner | 2010-04-28 01:14:58 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, part 9: fix test_xmlrpclib for missing threading module
   * Skip testcases using threads if threading module is missing
   * Use "http://" instead of URL in ServerProxyTestCase if threading is missing
     because URL is not set in this case
........
  r80569 | victor.stinner | 2010-04-28 01:33:58 +0200 (mer., 28 avril 2010) | 6 lines
  Partial revert of r80556 (Issue #7449, part 5, fix ctypes test)
  Rewrite r80556: the thread test have to be executed just after the test on
  libc_open() and so the test cannot be splitted in two functions (without
  duplicating code, and I don't want to duplicate code).
........
  r80570 | victor.stinner | 2010-04-28 01:51:16 +0200 (mer., 28 avril 2010) | 8 lines
  Issue #7449, part 10: test_cmd imports trace module using test_support.import_module()
  Use test_support.import_module() instead of import to raise a SkipTest
  exception if the import fail. Import trace fails if the threading module is
  missing.
  See also part 3: test_doctest: import trace module in test_coverage().
........
  r80571 | victor.stinner | 2010-04-28 01:55:59 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, last part (11): fix many tests if thread support is disabled
   * Use try/except ImportError or test_support.import_module() to import thread
     and threading modules
   * Add @unittest.skipUnless(threading, ...) to testcases using threads
........
											
										 
											2010-04-28 22:31:17 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     import threading | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     threading = None | 
					
						
							| 
									
										
										
										
											2014-02-07 10:06:39 +02:00
										 |  |  | # Skip this test if the _testcapi module isn't available. | 
					
						
							|  |  |  | _testcapi = support.import_module('_testcapi') | 
					
						
							| 
									
										
										
										
											2001-02-02 05:57:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-21 15:04:43 +01:00
										 |  |  | # Were we compiled --with-pydebug or with #define Py_DEBUG? | 
					
						
							|  |  |  | Py_DEBUG = hasattr(sys, 'gettotalrefcount') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-16 23:56:29 +00:00
										 |  |  | def testfunction(self): | 
					
						
							|  |  |  |     """some doc""" | 
					
						
							|  |  |  |     return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InstanceMethod: | 
					
						
							|  |  |  |     id = _testcapi.instancemethod(id) | 
					
						
							|  |  |  |     testfunction = _testcapi.instancemethod(testfunction) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CAPITest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_instancemethod(self): | 
					
						
							|  |  |  |         inst = InstanceMethod() | 
					
						
							|  |  |  |         self.assertEqual(id(inst), inst.id()) | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |         self.assertTrue(inst.testfunction() is inst) | 
					
						
							| 
									
										
										
										
											2008-10-16 23:56:29 +00:00
										 |  |  |         self.assertEqual(inst.testfunction.__doc__, testfunction.__doc__) | 
					
						
							|  |  |  |         self.assertEqual(InstanceMethod.testfunction.__doc__, testfunction.__doc__) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         InstanceMethod.testfunction.attribute = "test" | 
					
						
							|  |  |  |         self.assertEqual(testfunction.attribute, "test") | 
					
						
							|  |  |  |         self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-09 08:56:28 +00:00
										 |  |  |     @unittest.skipUnless(threading, 'Threading required for this test.') | 
					
						
							| 
									
										
										
										
											2010-05-13 18:31:05 +00:00
										 |  |  |     def test_no_FatalError_infinite_loop(self): | 
					
						
							| 
									
										
										
										
											2013-10-08 23:04:32 +02:00
										 |  |  |         with support.SuppressCrashReport(): | 
					
						
							| 
									
										
										
										
											2013-03-05 20:26:17 +02:00
										 |  |  |             p = subprocess.Popen([sys.executable, "-c", | 
					
						
							| 
									
										
										
										
											2013-03-05 20:31:34 +02:00
										 |  |  |                                   'import _testcapi;' | 
					
						
							|  |  |  |                                   '_testcapi.crash_no_current_thread()'], | 
					
						
							|  |  |  |                                  stdout=subprocess.PIPE, | 
					
						
							|  |  |  |                                  stderr=subprocess.PIPE) | 
					
						
							| 
									
										
										
										
											2010-05-13 18:31:05 +00:00
										 |  |  |         (out, err) = p.communicate() | 
					
						
							|  |  |  |         self.assertEqual(out, b'') | 
					
						
							|  |  |  |         # This used to cause an infinite loop. | 
					
						
							| 
									
										
										
										
											2012-05-06 11:34:50 +01:00
										 |  |  |         self.assertTrue(err.rstrip().startswith( | 
					
						
							| 
									
										
										
										
											2010-05-13 18:31:05 +00:00
										 |  |  |                          b'Fatal Python error:' | 
					
						
							| 
									
										
										
										
											2012-05-06 11:34:50 +01:00
										 |  |  |                          b' PyThreadState_Get: no current thread')) | 
					
						
							| 
									
										
										
										
											2010-05-13 18:31:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 20:53:48 +00:00
										 |  |  |     def test_memoryview_from_NULL_pointer(self): | 
					
						
							|  |  |  |         self.assertRaises(ValueError, _testcapi.make_memoryview_from_NULL_pointer) | 
					
						
							| 
									
										
										
										
											2008-10-16 23:56:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-19 14:33:43 +02:00
										 |  |  |     def test_exc_info(self): | 
					
						
							|  |  |  |         raised_exception = ValueError("5") | 
					
						
							|  |  |  |         new_exc = TypeError("TEST") | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             raise raised_exception | 
					
						
							|  |  |  |         except ValueError as e: | 
					
						
							|  |  |  |             tb = e.__traceback__ | 
					
						
							|  |  |  |             orig_sys_exc_info = sys.exc_info() | 
					
						
							|  |  |  |             orig_exc_info = _testcapi.set_exc_info(new_exc.__class__, new_exc, None) | 
					
						
							|  |  |  |             new_sys_exc_info = sys.exc_info() | 
					
						
							|  |  |  |             new_exc_info = _testcapi.set_exc_info(*orig_exc_info) | 
					
						
							|  |  |  |             reset_sys_exc_info = sys.exc_info() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertEqual(orig_exc_info[1], e) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertSequenceEqual(orig_exc_info, (raised_exception.__class__, raised_exception, tb)) | 
					
						
							|  |  |  |             self.assertSequenceEqual(orig_sys_exc_info, orig_exc_info) | 
					
						
							|  |  |  |             self.assertSequenceEqual(reset_sys_exc_info, orig_exc_info) | 
					
						
							|  |  |  |             self.assertSequenceEqual(new_exc_info, (new_exc.__class__, new_exc, None)) | 
					
						
							|  |  |  |             self.assertSequenceEqual(new_sys_exc_info, new_exc_info) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.assertTrue(False) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 11:04:24 +02:00
										 |  |  |     @unittest.skipUnless(_posixsubprocess, '_posixsubprocess required for this test.') | 
					
						
							|  |  |  |     def test_seq_bytes_to_charp_array(self): | 
					
						
							|  |  |  |         # Issue #15732: crash in _PySequence_BytesToCharpArray() | 
					
						
							|  |  |  |         class Z(object): | 
					
						
							|  |  |  |             def __len__(self): | 
					
						
							|  |  |  |                 return 1 | 
					
						
							|  |  |  |         self.assertRaises(TypeError, _posixsubprocess.fork_exec, | 
					
						
							|  |  |  |                           1,Z(),3,[1, 2],5,6,7,8,9,10,11,12,13,14,15,16,17) | 
					
						
							| 
									
										
										
										
											2012-08-21 08:16:09 +02:00
										 |  |  |         # Issue #15736: overflow in _PySequence_BytesToCharpArray() | 
					
						
							|  |  |  |         class Z(object): | 
					
						
							|  |  |  |             def __len__(self): | 
					
						
							|  |  |  |                 return sys.maxsize | 
					
						
							|  |  |  |             def __getitem__(self, i): | 
					
						
							|  |  |  |                 return b'x' | 
					
						
							|  |  |  |         self.assertRaises(MemoryError, _posixsubprocess.fork_exec, | 
					
						
							|  |  |  |                           1,Z(),3,[1, 2],5,6,7,8,9,10,11,12,13,14,15,16,17) | 
					
						
							| 
									
										
										
										
											2012-08-20 11:04:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 14:36:47 +02:00
										 |  |  |     @unittest.skipUnless(_posixsubprocess, '_posixsubprocess required for this test.') | 
					
						
							|  |  |  |     def test_subprocess_fork_exec(self): | 
					
						
							|  |  |  |         class Z(object): | 
					
						
							|  |  |  |             def __len__(self): | 
					
						
							|  |  |  |                 return 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Issue #15738: crash in subprocess_fork_exec() | 
					
						
							|  |  |  |         self.assertRaises(TypeError, _posixsubprocess.fork_exec, | 
					
						
							|  |  |  |                           Z(),[b'1'],3,[1, 2],5,6,7,8,9,10,11,12,13,14,15,16,17) | 
					
						
							| 
									
										
										
										
											2012-08-20 11:04:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-23 17:35:48 -08:00
										 |  |  |     @unittest.skipIf(MISSING_C_DOCSTRINGS, | 
					
						
							|  |  |  |                      "Signature information for builtins requires docstrings") | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |     def test_docstring_signature_parsing(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.no_docstring.__doc__, None) | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.no_docstring.__text_signature__, None) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 18:22:35 -05:00
										 |  |  |         self.assertEqual(_testcapi.docstring_empty.__doc__, None) | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_empty.__text_signature__, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_no_signature.__doc__, | 
					
						
							|  |  |  |             "This docstring has no signature.") | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_no_signature.__text_signature__, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_with_invalid_signature.__doc__, | 
					
						
							| 
									
										
										
										
											2014-02-08 22:15:29 -08:00
										 |  |  |             "docstring_with_invalid_signature($module, /, boo)\n" | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |             "\n" | 
					
						
							|  |  |  |             "This docstring has an invalid signature." | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_with_invalid_signature.__text_signature__, None) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-08 22:15:29 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_invalid_signature2.__doc__, | 
					
						
							|  |  |  |             "docstring_with_invalid_signature2($module, /, boo)\n" | 
					
						
							|  |  |  |             "\n" | 
					
						
							|  |  |  |             "--\n" | 
					
						
							|  |  |  |             "\n" | 
					
						
							|  |  |  |             "This docstring also has an invalid signature." | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_with_invalid_signature2.__text_signature__, None) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_signature.__doc__, | 
					
						
							|  |  |  |             "This docstring has a valid signature.") | 
					
						
							| 
									
										
										
										
											2014-02-08 22:15:29 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_signature.__text_signature__, "($module, /, sig)") | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 18:22:35 -05:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_signature_but_no_doc.__doc__, None) | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.docstring_with_signature_but_no_doc.__text_signature__, | 
					
						
							|  |  |  |             "($module, /, sig)") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_signature_and_extra_newlines.__doc__, | 
					
						
							| 
									
										
										
										
											2014-02-08 22:15:29 -08:00
										 |  |  |             "\nThis docstring has a valid signature and some extra newlines.") | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  |         self.assertEqual(_testcapi.docstring_with_signature_and_extra_newlines.__text_signature__, | 
					
						
							| 
									
										
										
										
											2014-02-08 22:15:29 -08:00
										 |  |  |             "($module, /, parameter)") | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-09 23:55:56 -04:00
										 |  |  |     def test_c_type_with_matrix_multiplication(self): | 
					
						
							|  |  |  |         M = _testcapi.matmulType | 
					
						
							|  |  |  |         m1 = M() | 
					
						
							|  |  |  |         m2 = M() | 
					
						
							|  |  |  |         self.assertEqual(m1 @ m2, ("matmul", m1, m2)) | 
					
						
							|  |  |  |         self.assertEqual(m1 @ 42, ("matmul", m1, 42)) | 
					
						
							|  |  |  |         self.assertEqual(42 @ m1, ("matmul", 42, m1)) | 
					
						
							|  |  |  |         o = m1 | 
					
						
							|  |  |  |         o @= m2 | 
					
						
							|  |  |  |         self.assertEqual(o, ("imatmul", m1, m2)) | 
					
						
							|  |  |  |         o = m1 | 
					
						
							|  |  |  |         o @= 42 | 
					
						
							|  |  |  |         self.assertEqual(o, ("imatmul", m1, 42)) | 
					
						
							|  |  |  |         o = 42 | 
					
						
							|  |  |  |         o @= m1 | 
					
						
							|  |  |  |         self.assertEqual(o, ("matmul", 42, m1)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-21 15:04:43 +01:00
										 |  |  |     def test_return_null_without_error(self): | 
					
						
							|  |  |  |         # Issue #23571: A function must not return NULL without setting an | 
					
						
							|  |  |  |         # error | 
					
						
							|  |  |  |         if Py_DEBUG: | 
					
						
							|  |  |  |             code = textwrap.dedent("""
 | 
					
						
							|  |  |  |                 import _testcapi | 
					
						
							|  |  |  |                 from test import support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 with support.SuppressCrashReport(): | 
					
						
							|  |  |  |                     _testcapi.return_null_without_error() | 
					
						
							|  |  |  |             """)
 | 
					
						
							|  |  |  |             rc, out, err = assert_python_failure('-c', code) | 
					
						
							| 
									
										
										
										
											2015-03-24 14:01:32 +01:00
										 |  |  |             self.assertRegex(err.replace(b'\r', b''), | 
					
						
							| 
									
										
										
										
											2015-03-24 16:28:52 +01:00
										 |  |  |                              br'Fatal Python error: a function returned NULL ' | 
					
						
							|  |  |  |                                 br'without setting an error\n' | 
					
						
							| 
									
										
										
										
											2015-03-24 14:01:32 +01:00
										 |  |  |                              br'SystemError: <built-in function ' | 
					
						
							|  |  |  |                                  br'return_null_without_error> returned NULL ' | 
					
						
							|  |  |  |                                  br'without setting an error\n' | 
					
						
							|  |  |  |                              br'\n' | 
					
						
							|  |  |  |                              br'Current thread.*:\n' | 
					
						
							|  |  |  |                              br'  File .*", line 6 in <module>') | 
					
						
							| 
									
										
										
										
											2015-03-21 15:04:43 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             with self.assertRaises(SystemError) as cm: | 
					
						
							|  |  |  |                 _testcapi.return_null_without_error() | 
					
						
							|  |  |  |             self.assertRegex(str(cm.exception), | 
					
						
							|  |  |  |                              'return_null_without_error.* ' | 
					
						
							|  |  |  |                              'returned NULL without setting an error') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_return_result_with_error(self): | 
					
						
							|  |  |  |         # Issue #23571: A function must not return a result with an error set | 
					
						
							|  |  |  |         if Py_DEBUG: | 
					
						
							|  |  |  |             code = textwrap.dedent("""
 | 
					
						
							|  |  |  |                 import _testcapi | 
					
						
							|  |  |  |                 from test import support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 with support.SuppressCrashReport(): | 
					
						
							|  |  |  |                     _testcapi.return_result_with_error() | 
					
						
							|  |  |  |             """)
 | 
					
						
							|  |  |  |             rc, out, err = assert_python_failure('-c', code) | 
					
						
							| 
									
										
										
										
											2015-03-24 14:01:32 +01:00
										 |  |  |             self.assertRegex(err.replace(b'\r', b''), | 
					
						
							| 
									
										
										
										
											2015-03-24 16:28:52 +01:00
										 |  |  |                              br'Fatal Python error: a function returned a ' | 
					
						
							|  |  |  |                                 br'result with an error set\n' | 
					
						
							| 
									
										
										
										
											2015-03-24 14:01:32 +01:00
										 |  |  |                              br'ValueError\n' | 
					
						
							|  |  |  |                              br'\n' | 
					
						
							|  |  |  |                              br'During handling of the above exception, ' | 
					
						
							|  |  |  |                                 br'another exception occurred:\n' | 
					
						
							|  |  |  |                              br'\n' | 
					
						
							|  |  |  |                              br'SystemError: <built-in ' | 
					
						
							|  |  |  |                                 br'function return_result_with_error> ' | 
					
						
							|  |  |  |                                 br'returned a result with an error set\n' | 
					
						
							|  |  |  |                              br'\n' | 
					
						
							|  |  |  |                              br'Current thread.*:\n' | 
					
						
							|  |  |  |                              br'  File .*, line 6 in <module>') | 
					
						
							| 
									
										
										
										
											2015-03-21 15:04:43 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             with self.assertRaises(SystemError) as cm: | 
					
						
							|  |  |  |                 _testcapi.return_result_with_error() | 
					
						
							|  |  |  |             self.assertRegex(str(cm.exception), | 
					
						
							|  |  |  |                              'return_result_with_error.* ' | 
					
						
							|  |  |  |                              'returned a result with an error set') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 22:31:14 +03:00
										 |  |  |     def test_buildvalue_N(self): | 
					
						
							|  |  |  |         _testcapi.test_buildvalue_N() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-23 15:37:55 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r80552 | victor.stinner | 2010-04-27 23:46:03 +0200 (mar., 27 avril 2010) | 3 lines
  Issue #7449, part 1: fix test_support.py for Python compiled without thread
........
  r80553 | victor.stinner | 2010-04-27 23:47:01 +0200 (mar., 27 avril 2010) | 1 line
  Issue #7449, part 2: regrtest.py -j option requires thread support
........
  r80554 | victor.stinner | 2010-04-27 23:51:26 +0200 (mar., 27 avril 2010) | 9 lines
  Issue #7449 part 3, test_doctest: import trace module in test_coverage()
  Import trace module fail if the threading module is missing. test_coverage() is
  only used if test_doctest.py is used with the -c option. This commit allows to
  execute the test suite without thread support.
  Move "import trace" in test_coverage() and use
  test_support.import_module('trace').
........
  r80555 | victor.stinner | 2010-04-27 23:56:26 +0200 (mar., 27 avril 2010) | 6 lines
  Issue #7449, part 4: skip test_multiprocessing if thread support is disabled
  import threading after _multiprocessing to raise a more revelant error message:
  "No module named _multiprocessing". _multiprocessing is not compiled without
  thread support.
........
  r80556 | victor.stinner | 2010-04-28 00:01:24 +0200 (mer., 28 avril 2010) | 8 lines
  Issue #7449, part 5: split Test.test_open() of ctypes/test/test_errno.py
   * Split Test.test_open() in 2 functions: test_open() and test_thread_open()
   * Skip test_open() and test_thread_open() if we are unable to find the C
     library
   * Skip test_thread_open() if thread support is disabled
   * Use unittest.skipUnless(os.name == "nt", ...) on test_GetLastError()
........
  r80564 | victor.stinner | 2010-04-28 00:59:35 +0200 (mer., 28 avril 2010) | 4 lines
  Issue #7449, part 6: fix test_hashlib for missing threading module
  Move @test_support.reap_thread decorator from test_main() to test_threaded_hashing().
........
  r80565 | victor.stinner | 2010-04-28 01:01:29 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, part 7: simplify threading detection in test_capi
   * Skip TestPendingCalls if threading module is missing
   * Test if threading module is present or not, instead of test the presence of
     _testcapi._test_thread_state
........
  r80566 | victor.stinner | 2010-04-28 01:03:16 +0200 (mer., 28 avril 2010) | 4 lines
  Issue #7449, part 8: don't skip the whole test_asynchat if threading is missing
  TestFifo can be executed without the threading module
........
  r80568 | victor.stinner | 2010-04-28 01:14:58 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, part 9: fix test_xmlrpclib for missing threading module
   * Skip testcases using threads if threading module is missing
   * Use "http://" instead of URL in ServerProxyTestCase if threading is missing
     because URL is not set in this case
........
  r80569 | victor.stinner | 2010-04-28 01:33:58 +0200 (mer., 28 avril 2010) | 6 lines
  Partial revert of r80556 (Issue #7449, part 5, fix ctypes test)
  Rewrite r80556: the thread test have to be executed just after the test on
  libc_open() and so the test cannot be splitted in two functions (without
  duplicating code, and I don't want to duplicate code).
........
  r80570 | victor.stinner | 2010-04-28 01:51:16 +0200 (mer., 28 avril 2010) | 8 lines
  Issue #7449, part 10: test_cmd imports trace module using test_support.import_module()
  Use test_support.import_module() instead of import to raise a SkipTest
  exception if the import fail. Import trace fails if the threading module is
  missing.
  See also part 3: test_doctest: import trace module in test_coverage().
........
  r80571 | victor.stinner | 2010-04-28 01:55:59 +0200 (mer., 28 avril 2010) | 6 lines
  Issue #7449, last part (11): fix many tests if thread support is disabled
   * Use try/except ImportError or test_support.import_module() to import thread
     and threading modules
   * Add @unittest.skipUnless(threading, ...) to testcases using threads
........
											
										 
											2010-04-28 22:31:17 +00:00
										 |  |  | @unittest.skipUnless(threading, 'Threading required for this test.') | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  | class TestPendingCalls(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def pendingcalls_submit(self, l, n): | 
					
						
							|  |  |  |         def callback(): | 
					
						
							|  |  |  |             #this function can be interrupted by thread switching so let's | 
					
						
							|  |  |  |             #use an atomic operation | 
					
						
							|  |  |  |             l.append(None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for i in range(n): | 
					
						
							|  |  |  |             time.sleep(random.random()*0.02) #0.01 secs on average | 
					
						
							|  |  |  |             #try submitting callback until successful. | 
					
						
							|  |  |  |             #rely on regular interrupt to flush queue if we are | 
					
						
							|  |  |  |             #unsuccessful. | 
					
						
							|  |  |  |             while True: | 
					
						
							|  |  |  |                 if _testcapi._pending_threadfunc(callback): | 
					
						
							|  |  |  |                     break; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |     def pendingcalls_wait(self, l, n, context = None): | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |         #now, stick around until l[0] has grown to 10 | 
					
						
							|  |  |  |         count = 0; | 
					
						
							|  |  |  |         while len(l) != n: | 
					
						
							|  |  |  |             #this busy loop is where we expect to be interrupted to | 
					
						
							|  |  |  |             #run our callbacks.  Note that callbacks are only run on the | 
					
						
							|  |  |  |             #main thread | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |             if False and support.verbose: | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |                 print("(%i)"%(len(l),),) | 
					
						
							|  |  |  |             for i in range(1000): | 
					
						
							|  |  |  |                 a = i*i | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |             if context and not context.event.is_set(): | 
					
						
							|  |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |             count += 1 | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |             self.assertTrue(count < 10000, | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |                 "timeout waiting for %i callbacks, got %i"%(n, len(l))) | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |         if False and support.verbose: | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |             print("(%i)"%(len(l),)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_pendingcalls_threaded(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         #do every callback on a separate thread | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |         n = 32 #total callbacks | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |         threads = [] | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |         class foo(object):pass | 
					
						
							|  |  |  |         context = foo() | 
					
						
							|  |  |  |         context.l = [] | 
					
						
							|  |  |  |         context.n = 2 #submits per thread | 
					
						
							|  |  |  |         context.nThreads = n // context.n | 
					
						
							|  |  |  |         context.nFinished = 0 | 
					
						
							|  |  |  |         context.lock = threading.Lock() | 
					
						
							|  |  |  |         context.event = threading.Event() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-01 13:01:14 +03:00
										 |  |  |         threads = [threading.Thread(target=self.pendingcalls_thread, | 
					
						
							|  |  |  |                                     args=(context,)) | 
					
						
							|  |  |  |                    for i in range(context.nThreads)] | 
					
						
							|  |  |  |         with support.start_threads(threads): | 
					
						
							|  |  |  |             self.pendingcalls_wait(context.l, n, context) | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 68547,68607,68610,68618,68621-68622,68649,68722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r68547 | kristjan.jonsson | 2009-01-12 12:09:27 -0600 (Mon, 12 Jan 2009) | 1 line
  Add tests for invalid format specifiers in strftime, and for handling of invalid file descriptors in the os module.
........
  r68607 | kristjan.jonsson | 2009-01-14 04:50:57 -0600 (Wed, 14 Jan 2009) | 2 lines
  Re-enable all tests for windows platforms.
  Also, explicitly connect to the IPV4 address.  On windows platforms supporting AF_INET6, the SocketProxy would connect using socket.create_connection('localhost', port) which would cycle through all address families and try to connect.  It would try connecting using AF_INET6 first and this would cause a delay of up to a second.
........
  r68610 | kristjan.jonsson | 2009-01-15 03:09:13 -0600 (Thu, 15 Jan 2009) | 3 lines
  Fix recently introduced test cases.
  For datetime, gentoo didn't seem to mind the %e format for strftime.  So, we just excercise those instead making sure that we don't crash.
  For test_os, two cases were incorrect.
........
  r68618 | kristjan.jonsson | 2009-01-15 11:20:21 -0600 (Thu, 15 Jan 2009) | 1 line
  Issue 4929:  Handle socket errors when receiving
........
  r68621 | kristjan.jonsson | 2009-01-15 16:40:03 -0600 (Thu, 15 Jan 2009) | 1 line
  Fix two test cases in test_os.  ftruncate raises IOError unlike all the others which raise OSError.  And close() on some platforms doesn't complain when given an invalid file descriptor.
........
  r68622 | kristjan.jonsson | 2009-01-15 16:46:26 -0600 (Thu, 15 Jan 2009) | 1 line
  Make all the invalid fd tests for os subject to the function being available.
........
  r68649 | benjamin.peterson | 2009-01-16 22:39:05 -0600 (Fri, 16 Jan 2009) | 1 line
  trying to find some fpathconf() settings that all unixs support...
........
  r68722 | kristjan.jonsson | 2009-01-18 04:58:44 -0600 (Sun, 18 Jan 2009) | 1 line
  issue 4293:  make test_capi.py more robutst, it times out on some platforms, presumably waiting for threads.  Lower the thread count to 16.
........
											
										 
											2009-01-18 21:02:37 +00:00
										 |  |  |     def pendingcalls_thread(self, context): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             self.pendingcalls_submit(context.l, context.n) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             with context.lock: | 
					
						
							|  |  |  |                 context.nFinished += 1 | 
					
						
							|  |  |  |                 nFinished = context.nFinished | 
					
						
							|  |  |  |                 if False and support.verbose: | 
					
						
							|  |  |  |                     print("finished threads: ", nFinished) | 
					
						
							|  |  |  |             if nFinished == context.nThreads: | 
					
						
							|  |  |  |                 context.event.set() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |     def test_pendingcalls_non_threaded(self): | 
					
						
							| 
									
										
										
										
											2011-03-16 11:05:33 +02:00
										 |  |  |         #again, just using the main thread, likely they will all be dispatched at | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  |         #once.  It is ok to ask for too many, because we loop until we find a slot. | 
					
						
							|  |  |  |         #the loop can be interrupted to dispatch. | 
					
						
							|  |  |  |         #there are only 32 dispatch slots, so we go for twice that! | 
					
						
							|  |  |  |         l = [] | 
					
						
							|  |  |  |         n = 64 | 
					
						
							|  |  |  |         self.pendingcalls_submit(l, n) | 
					
						
							|  |  |  |         self.pendingcalls_wait(l, n) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-01 20:43:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class SubinterpreterTest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-18 00:21:11 +01:00
										 |  |  |     def test_subinterps(self): | 
					
						
							|  |  |  |         import builtins | 
					
						
							|  |  |  |         r, w = os.pipe() | 
					
						
							|  |  |  |         code = """if 1:
 | 
					
						
							|  |  |  |             import sys, builtins, pickle | 
					
						
							|  |  |  |             with open({:d}, "wb") as f: | 
					
						
							|  |  |  |                 pickle.dump(id(sys.modules), f) | 
					
						
							|  |  |  |                 pickle.dump(id(builtins), f) | 
					
						
							|  |  |  |             """.format(w)
 | 
					
						
							|  |  |  |         with open(r, "rb") as f: | 
					
						
							| 
									
										
										
										
											2013-11-23 12:27:24 +01:00
										 |  |  |             ret = support.run_in_subinterp(code) | 
					
						
							| 
									
										
										
										
											2012-01-18 00:21:11 +01:00
										 |  |  |             self.assertEqual(ret, 0) | 
					
						
							|  |  |  |             self.assertNotEqual(pickle.load(f), id(sys.modules)) | 
					
						
							|  |  |  |             self.assertNotEqual(pickle.load(f), id(builtins)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-01 20:43:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-29 14:47:46 +00:00
										 |  |  | # Bug #6012 | 
					
						
							|  |  |  | class Test6012(unittest.TestCase): | 
					
						
							|  |  |  |     def test(self): | 
					
						
							|  |  |  |         self.assertEqual(_testcapi.argparsing("Hello", "World"), 1) | 
					
						
							| 
									
										
										
										
											2009-01-13 02:11:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  | class EmbeddingTests(unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2015-12-05 00:16:55 -06:00
										 |  |  |         here = os.path.abspath(__file__) | 
					
						
							|  |  |  |         basepath = os.path.dirname(os.path.dirname(os.path.dirname(here))) | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         exename = "_testembed" | 
					
						
							|  |  |  |         if sys.platform.startswith("win"): | 
					
						
							|  |  |  |             ext = ("_d" if "_d" in sys.executable else "") + ".exe" | 
					
						
							|  |  |  |             exename += ext | 
					
						
							|  |  |  |             exepath = os.path.dirname(sys.executable) | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2014-09-25 19:48:15 +10:00
										 |  |  |             exepath = os.path.join(basepath, "Programs") | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         self.test_exe = exe = os.path.join(exepath, exename) | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  |         if not os.path.exists(exe): | 
					
						
							|  |  |  |             self.skipTest("%r doesn't exist" % exe) | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  |         # This is needed otherwise we get a fatal error: | 
					
						
							|  |  |  |         # "Py_Initialize: Unable to get the locale encoding | 
					
						
							|  |  |  |         # LookupError: no codec search functions registered: can't find encoding" | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  |         self.oldcwd = os.getcwd() | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  |         os.chdir(basepath) | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         os.chdir(self.oldcwd) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def run_embedded_interpreter(self, *args): | 
					
						
							|  |  |  |         """Runs a test in the embedded interpreter""" | 
					
						
							|  |  |  |         cmd = [self.test_exe] | 
					
						
							|  |  |  |         cmd.extend(args) | 
					
						
							|  |  |  |         p = subprocess.Popen(cmd, | 
					
						
							|  |  |  |                              stdout=subprocess.PIPE, | 
					
						
							| 
									
										
										
										
											2014-11-01 15:11:05 -07:00
										 |  |  |                              stderr=subprocess.PIPE, | 
					
						
							|  |  |  |                              universal_newlines=True) | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  |         (out, err) = p.communicate() | 
					
						
							|  |  |  |         self.assertEqual(p.returncode, 0, | 
					
						
							|  |  |  |                          "bad returncode %d, stderr is %r" % | 
					
						
							|  |  |  |                          (p.returncode, err)) | 
					
						
							| 
									
										
										
										
											2014-11-01 15:11:05 -07:00
										 |  |  |         return out, err | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_subinterps(self): | 
					
						
							|  |  |  |         # This is just a "don't crash" test | 
					
						
							|  |  |  |         out, err = self.run_embedded_interpreter() | 
					
						
							|  |  |  |         if support.verbose: | 
					
						
							|  |  |  |             print() | 
					
						
							|  |  |  |             print(out) | 
					
						
							|  |  |  |             print(err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def _get_default_pipe_encoding(): | 
					
						
							|  |  |  |         rp, wp = os.pipe() | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             with os.fdopen(wp, 'w') as w: | 
					
						
							|  |  |  |                 default_pipe_encoding = w.encoding | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             os.close(rp) | 
					
						
							|  |  |  |         return default_pipe_encoding | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  |     def test_forced_io_encoding(self): | 
					
						
							|  |  |  |         # Checks forced configuration of embedded interpreter IO streams | 
					
						
							|  |  |  |         out, err = self.run_embedded_interpreter("forced_io_encoding") | 
					
						
							|  |  |  |         if support.verbose: | 
					
						
							|  |  |  |             print() | 
					
						
							|  |  |  |             print(out) | 
					
						
							|  |  |  |             print(err) | 
					
						
							| 
									
										
										
										
											2014-03-18 02:38:12 +01:00
										 |  |  |         expected_errors = sys.__stdout__.errors | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         expected_stdin_encoding = sys.__stdin__.encoding | 
					
						
							|  |  |  |         expected_pipe_encoding = self._get_default_pipe_encoding() | 
					
						
							| 
									
										
										
										
											2014-11-01 15:11:05 -07:00
										 |  |  |         expected_output = '\n'.join([ | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         "--- Use defaults ---", | 
					
						
							|  |  |  |         "Expected encoding: default", | 
					
						
							|  |  |  |         "Expected errors: default", | 
					
						
							| 
									
										
										
										
											2014-03-18 02:38:12 +01:00
										 |  |  |         "stdin: {in_encoding}:{errors}", | 
					
						
							|  |  |  |         "stdout: {out_encoding}:{errors}", | 
					
						
							|  |  |  |         "stderr: {out_encoding}:backslashreplace", | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         "--- Set errors only ---", | 
					
						
							|  |  |  |         "Expected encoding: default", | 
					
						
							| 
									
										
										
										
											2014-03-18 02:38:12 +01:00
										 |  |  |         "Expected errors: ignore", | 
					
						
							|  |  |  |         "stdin: {in_encoding}:ignore", | 
					
						
							|  |  |  |         "stdout: {out_encoding}:ignore", | 
					
						
							|  |  |  |         "stderr: {out_encoding}:backslashreplace", | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         "--- Set encoding only ---", | 
					
						
							|  |  |  |         "Expected encoding: latin-1", | 
					
						
							|  |  |  |         "Expected errors: default", | 
					
						
							| 
									
										
										
										
											2014-03-18 02:38:12 +01:00
										 |  |  |         "stdin: latin-1:{errors}", | 
					
						
							|  |  |  |         "stdout: latin-1:{errors}", | 
					
						
							| 
									
										
										
										
											2013-11-03 16:54:46 +10:00
										 |  |  |         "stderr: latin-1:backslashreplace", | 
					
						
							|  |  |  |         "--- Set encoding and errors ---", | 
					
						
							|  |  |  |         "Expected encoding: latin-1", | 
					
						
							| 
									
										
										
										
											2014-03-18 02:38:12 +01:00
										 |  |  |         "Expected errors: replace", | 
					
						
							|  |  |  |         "stdin: latin-1:replace", | 
					
						
							|  |  |  |         "stdout: latin-1:replace", | 
					
						
							|  |  |  |         "stderr: latin-1:backslashreplace"]) | 
					
						
							|  |  |  |         expected_output = expected_output.format( | 
					
						
							|  |  |  |                                 in_encoding=expected_stdin_encoding, | 
					
						
							|  |  |  |                                 out_encoding=expected_pipe_encoding, | 
					
						
							|  |  |  |                                 errors=expected_errors) | 
					
						
							| 
									
										
										
										
											2013-10-18 23:59:58 +10:00
										 |  |  |         # This is useful if we ever trip over odd platform behaviour | 
					
						
							| 
									
										
										
										
											2013-10-18 01:44:22 +10:00
										 |  |  |         self.maxDiff = None | 
					
						
							| 
									
										
										
										
											2013-10-17 22:35:35 +10:00
										 |  |  |         self.assertEqual(out.strip(), expected_output) | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-22 03:56:29 -07:00
										 |  |  | class SkipitemTest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_skipitem(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         If this test failed, you probably added a new "format unit" | 
					
						
							|  |  |  |         in Python/getargs.c, but neglected to update our poor friend | 
					
						
							|  |  |  |         skipitem() in the same file.  (If so, shame on you!) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-22 12:58:36 -07:00
										 |  |  |         With a few exceptions**, this function brute-force tests all | 
					
						
							|  |  |  |         printable ASCII*** characters (32 to 126 inclusive) as format units, | 
					
						
							|  |  |  |         checking to see that PyArg_ParseTupleAndKeywords() return consistent | 
					
						
							|  |  |  |         errors both when the unit is attempted to be used and when it is | 
					
						
							|  |  |  |         skipped.  If the format unit doesn't exist, we'll get one of two | 
					
						
							|  |  |  |         specific error messages (one for used, one for skipped); if it does | 
					
						
							|  |  |  |         exist we *won't* get that error--we'll get either no error or some | 
					
						
							|  |  |  |         other error.  If we get the specific "does not exist" error for one | 
					
						
							|  |  |  |         test and not for the other, there's a mismatch, and the test fails. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            ** Some format units have special funny semantics and it would | 
					
						
							| 
									
										
										
										
											2016-05-26 05:35:26 +00:00
										 |  |  |               be difficult to accommodate them here.  Since these are all | 
					
						
							| 
									
										
										
										
											2012-06-22 12:58:36 -07:00
										 |  |  |               well-established and properly skipped in skipitem() we can | 
					
						
							|  |  |  |               get away with not testing them--this test is really intended | 
					
						
							|  |  |  |               to catch *new* format units. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           *** Python C source files must be ASCII.  Therefore it's impossible | 
					
						
							|  |  |  |               to have non-ASCII format units. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-22 03:56:29 -07:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         empty_tuple = () | 
					
						
							|  |  |  |         tuple_1 = (0,) | 
					
						
							|  |  |  |         dict_b = {'b':1} | 
					
						
							|  |  |  |         keywords = ["a", "b"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-22 12:58:36 -07:00
										 |  |  |         for i in range(32, 127): | 
					
						
							| 
									
										
										
										
											2012-06-22 03:56:29 -07:00
										 |  |  |             c = chr(i) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # skip parentheses, the error reporting is inconsistent about them | 
					
						
							|  |  |  |             # skip 'e', it's always a two-character code | 
					
						
							|  |  |  |             # skip '|' and '$', they don't represent arguments anyway | 
					
						
							| 
									
										
										
										
											2012-06-22 12:58:36 -07:00
										 |  |  |             if c in '()e|$': | 
					
						
							| 
									
										
										
										
											2012-06-22 03:56:29 -07:00
										 |  |  |                 continue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # test the format unit when not skipped | 
					
						
							|  |  |  |             format = c + "i" | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 # (note: the format string must be bytes!) | 
					
						
							|  |  |  |                 _testcapi.parse_tuple_and_keywords(tuple_1, dict_b, | 
					
						
							|  |  |  |                     format.encode("ascii"), keywords) | 
					
						
							|  |  |  |                 when_not_skipped = False | 
					
						
							|  |  |  |             except TypeError as e: | 
					
						
							| 
									
										
										
										
											2016-02-08 01:06:11 +02:00
										 |  |  |                 s = "argument 1 (impossible<bad format char>)" | 
					
						
							| 
									
										
										
										
											2012-06-22 03:56:29 -07:00
										 |  |  |                 when_not_skipped = (str(e) == s) | 
					
						
							|  |  |  |             except RuntimeError as e: | 
					
						
							|  |  |  |                 when_not_skipped = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # test the format unit when skipped | 
					
						
							|  |  |  |             optional_format = "|" + format | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 _testcapi.parse_tuple_and_keywords(empty_tuple, dict_b, | 
					
						
							|  |  |  |                     optional_format.encode("ascii"), keywords) | 
					
						
							|  |  |  |                 when_skipped = False | 
					
						
							|  |  |  |             except RuntimeError as e: | 
					
						
							|  |  |  |                 s = "impossible<bad format char>: '{}'".format(format) | 
					
						
							|  |  |  |                 when_skipped = (str(e) == s) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             message = ("test_skipitem_parity: " | 
					
						
							|  |  |  |                 "detected mismatch between convertsimple and skipitem " | 
					
						
							|  |  |  |                 "for format unit '{}' ({}), not skipped {}, skipped {}".format( | 
					
						
							|  |  |  |                     c, i, when_skipped, when_not_skipped)) | 
					
						
							|  |  |  |             self.assertIs(when_skipped, when_not_skipped, message) | 
					
						
							| 
									
										
										
										
											2011-04-25 21:21:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-04 16:06:30 +02:00
										 |  |  |     def test_parse_tuple_and_keywords(self): | 
					
						
							|  |  |  |         # parse_tuple_and_keywords error handling tests | 
					
						
							|  |  |  |         self.assertRaises(TypeError, _testcapi.parse_tuple_and_keywords, | 
					
						
							|  |  |  |                           (), {}, 42, []) | 
					
						
							|  |  |  |         self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, | 
					
						
							|  |  |  |                           (), {}, b'', 42) | 
					
						
							|  |  |  |         self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, | 
					
						
							|  |  |  |                           (), {}, b'', [''] * 42) | 
					
						
							|  |  |  |         self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, | 
					
						
							|  |  |  |                           (), {}, b'', [42]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 05:52:46 +02:00
										 |  |  | @unittest.skipUnless(threading, 'Threading required for this test.') | 
					
						
							|  |  |  | class TestThreadState(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @support.reap_threads | 
					
						
							|  |  |  |     def test_thread_state(self): | 
					
						
							|  |  |  |         # some extra thread-state tests driven via _testcapi | 
					
						
							|  |  |  |         def target(): | 
					
						
							|  |  |  |             idents = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def callback(): | 
					
						
							| 
									
										
										
										
											2013-02-23 05:58:38 +02:00
										 |  |  |                 idents.append(threading.get_ident()) | 
					
						
							| 
									
										
										
										
											2013-02-23 05:52:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             _testcapi._test_thread_state(callback) | 
					
						
							|  |  |  |             a = b = callback | 
					
						
							|  |  |  |             time.sleep(1) | 
					
						
							|  |  |  |             # Check our main thread is in the list exactly 3 times. | 
					
						
							| 
									
										
										
										
											2013-02-23 05:58:38 +02:00
										 |  |  |             self.assertEqual(idents.count(threading.get_ident()), 3, | 
					
						
							| 
									
										
										
										
											2013-02-23 05:52:46 +02:00
										 |  |  |                              "Couldn't find main thread correctly in the list") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         target() | 
					
						
							|  |  |  |         t = threading.Thread(target=target) | 
					
						
							|  |  |  |         t.start() | 
					
						
							|  |  |  |         t.join() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-11 22:47:04 -06:00
										 |  |  | class Test_testcapi(unittest.TestCase): | 
					
						
							|  |  |  |     def test__testcapi(self): | 
					
						
							|  |  |  |         for name in dir(_testcapi): | 
					
						
							|  |  |  |             if name.startswith('test_'): | 
					
						
							| 
									
										
										
										
											2013-11-11 22:59:23 -06:00
										 |  |  |                 with self.subTest("internal", name=name): | 
					
						
							|  |  |  |                     test = getattr(_testcapi, name) | 
					
						
							|  |  |  |                     test() | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2013-11-11 22:47:04 -06:00
										 |  |  |     unittest.main() |