diff options
author | Guido van Rossum <guido@python.org> | 2007-08-16 23:48:43 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-08-16 23:48:43 (GMT) |
commit | af554a0e17ceb0e6a3cc0c07e9cf6db2f80c1ad9 (patch) | |
tree | 7719b2787d82dd1cc7afad76ad989fc9b1f1504f /Lib/test | |
parent | 10c17ba299513184e39c85fc5c3ecaf2fd13187e (diff) | |
download | cpython-af554a0e17ceb0e6a3cc0c07e9cf6db2f80c1ad9.zip cpython-af554a0e17ceb0e6a3cc0c07e9cf6db2f80c1ad9.tar.gz cpython-af554a0e17ceb0e6a3cc0c07e9cf6db2f80c1ad9.tar.bz2 |
First merge from the trunk straight into the py3k branch. I'm not
using the message generated by svnmerge, because it contains a lot of
stuff about the Doc tree, which I'm not merging this time due to the
way the Doc tree was initially added. I am however adding roman.py
which was added later to Doc/tools. I'll try to diff the two Doc
trees separately to see if there's stuff I missed.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_exceptions.py | 3 | ||||
-rw-r--r-- | Lib/test/test_import.py | 4 | ||||
-rw-r--r-- | Lib/test/test_macostools.py | 2 | ||||
-rw-r--r-- | Lib/test/test_pep352.py | 2 | ||||
-rw-r--r-- | Lib/test/test_random.py | 2 | ||||
-rw-r--r-- | Lib/test/test_re.py | 4 | ||||
-rw-r--r-- | Lib/test/test_struct.py | 2 | ||||
-rw-r--r-- | Lib/test/test_sundry.py | 4 | ||||
-rw-r--r-- | Lib/test/test_support.py | 10 | ||||
-rw-r--r-- | Lib/test/test_warnings.py | 2 | ||||
-rw-r--r-- | Lib/test/test_xmlrpc.py | 104 |
11 files changed, 115 insertions, 24 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index ed1d6dc..90f6ae7 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -5,8 +5,7 @@ import sys import unittest import pickle -from test.test_support import (TESTFN, unlink, run_unittest, - guard_warnings_filter) +from test.test_support import TESTFN, unlink, run_unittest # XXX This is not really enough, each *operation* should be tested! diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 884d052..3203904 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -1,4 +1,4 @@ -from test.test_support import TESTFN, run_unittest, guard_warnings_filter +from test.test_support import TESTFN, run_unittest, catch_warning import unittest import os @@ -151,7 +151,7 @@ class ImportTest(unittest.TestCase): self.assert_(y is test.test_support, y.__name__) def test_import_initless_directory_warning(self): - with guard_warnings_filter(): + with catch_warning(): # Just a random non-package directory we always expect to be # somewhere in sys.path... warnings.simplefilter('error', ImportWarning) diff --git a/Lib/test/test_macostools.py b/Lib/test/test_macostools.py index 40b690a..eea3601 100644 --- a/Lib/test/test_macostools.py +++ b/Lib/test/test_macostools.py @@ -52,7 +52,7 @@ class TestMacostools(unittest.TestCase): def test_touched(self): # This really only tests that nothing unforeseen happens. import warnings - with test_support.guard_warnings_filter(): + with test_support.catch_warning(): warnings.filterwarnings('ignore', 'macostools.touched*', DeprecationWarning) macostools.touched(test_support.TESTFN) diff --git a/Lib/test/test_pep352.py b/Lib/test/test_pep352.py index dc47737..ddeee1a 100644 --- a/Lib/test/test_pep352.py +++ b/Lib/test/test_pep352.py @@ -1,7 +1,7 @@ import unittest import __builtin__ import warnings -from test.test_support import run_unittest, guard_warnings_filter +from test.test_support import run_unittest import os from platform import system as platform_system diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 43273d8..1989786 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -182,7 +182,7 @@ class WichmannHill_TestBasicOps(TestBasicOps): def test_bigrand(self): # Verify warnings are raised when randrange is too large for random() - with test_support.guard_warnings_filter(): + with test_support.catch_warning(): warnings.filterwarnings("error", "Underlying random") self.assertRaises(UserWarning, self.gen.randrange, 2**60) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index f14ff49..f166188 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -1,7 +1,7 @@ import sys sys.path = ['.'] + sys.path -from test.test_support import verbose, run_unittest, guard_warnings_filter +from test.test_support import verbose, run_unittest, catch_warning import re from re import Scanner import sys, os, traceback @@ -414,7 +414,7 @@ class ReTests(unittest.TestCase): self.pickle_test(pickle) # old pickles expect the _compile() reconstructor in sre module import warnings - with guard_warnings_filter(): + with catch_warning(): warnings.filterwarnings("ignore", "The sre module is deprecated", DeprecationWarning) from sre import _compile diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index 69057fc..d3b7857 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -50,7 +50,7 @@ def any_err(func, *args): def with_warning_restore(func): def _with_warning_restore(*args, **kw): - with test.test_support.guard_warnings_filter(): + with test.test_support.catch_warning(): # Grrr, we need this function to warn every time. Without removing # the warningregistry, running test_tarfile then test_struct would fail # on 64-bit platforms. diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py index 6afc63b..ed2f14d 100644 --- a/Lib/test/test_sundry.py +++ b/Lib/test/test_sundry.py @@ -1,10 +1,10 @@ """Do a minimal test of all the modules that aren't otherwise tested.""" -from test.test_support import guard_warnings_filter +from test.test_support import catch_warning import sys import warnings -with guard_warnings_filter(): +with catch_warning(): from test.test_support import verbose import BaseHTTPServer diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 698507f..fa4c3ef 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -261,14 +261,6 @@ def open_urlresource(url): fn, _ = urllib.urlretrieve(url, filename) return open(fn) -@contextlib.contextmanager -def guard_warnings_filter(): - """Guard the warnings filter from being permanently changed.""" - original_filters = warnings.filters[:] - try: - yield - finally: - warnings.filters = original_filters class WarningMessage(object): "Holds the result of the latest showwarning() call" @@ -292,7 +284,7 @@ def catch_warning(): Use like this: - with catch_warning as w: + with catch_warning() as w: warnings.warn("foo") assert str(w.message) == "foo" """ diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index 5768a68..54d5dd2 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -61,7 +61,7 @@ class TestModule(unittest.TestCase): def test_options(self): # Uses the private _setoption() function to test the parsing # of command-line warning arguments - with test_support.guard_warnings_filter(): + with test_support.catch_warning(): self.assertRaises(warnings._OptionError, warnings._setoption, '1:2:3:4:5:6') self.assertRaises(warnings._OptionError, diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 75a439f..4a15de5 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -4,6 +4,8 @@ import sys import time import unittest import xmlrpclib +import SimpleXMLRPCServer +import threading from test import test_support alist = [{'astring': 'foo@bar.baz.spam', @@ -239,10 +241,108 @@ class BinaryTestCase(unittest.TestCase): self.assertEqual(str(t2), d) +PORT = None + +def http_server(evt, numrequests): + class TestInstanceClass: + def div(self, x, y): + '''This is the div function''' + return x // y + + + serv = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 0), + logRequests=False, bind_and_activate=False) + + try: + serv.socket.settimeout(3) + serv.server_bind() + global PORT + PORT = serv.socket.getsockname()[1] + serv.server_activate() + serv.register_introspection_functions() + serv.register_multicall_functions() + serv.register_function(pow) + serv.register_function(lambda x,y: x+y, 'add') + serv.register_instance(TestInstanceClass()) + + # handle up to 'numrequests' requests + while numrequests > 0: + serv.handle_request() + numrequests -= 1 + + except socket.timeout: + pass + finally: + serv.socket.close() + PORT = None + evt.set() + + +class HTTPTestCase(unittest.TestCase): + def setUp(self): + self.evt = threading.Event() + # start server thread to handle just one request + threading.Thread(target=http_server, args=(self.evt,2)).start() + + # wait for port to be assigned to server + n = 1000 + while n > 0 and PORT is None: + time.sleep(0.001) + n -= 1 + + time.sleep(0.5) + + def tearDown(self): + # wait on the server thread to terminate + self.evt.wait() + + def test_simple1(self): + p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) + self.assertEqual(p.pow(6,8), 6**8) + + def test_introspection1(self): + p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) + meth = p.system.listMethods() + expected_methods = set(['pow', 'div', 'add', 'system.listMethods', + 'system.methodHelp', 'system.methodSignature', 'system.multicall']) + self.assertEqual(set(meth), expected_methods) + + def test_introspection2(self): + p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) + divhelp = p.system.methodHelp('div') + self.assertEqual(divhelp, 'This is the div function') + + def test_introspection3(self): + # the SimpleXMLRPCServer doesn't support signatures, but + # at least check that we can try + p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) + divsig = p.system.methodSignature('div') + self.assertEqual(divsig, 'signatures not supported') + + def test_multicall(self): + p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) + multicall = xmlrpclib.MultiCall(p) + multicall.add(2,3) + multicall.pow(6,8) + multicall.div(127,42) + add_result, pow_result, div_result = multicall() + self.assertEqual(add_result, 2+3) + self.assertEqual(pow_result, 6**8) + self.assertEqual(div_result, 127//42) + + def test_main(): - test_support.run_unittest(XMLRPCTestCase, HelperTestCase, - DateTimeTestCase, BinaryTestCase, FaultTestCase) + xmlrpc_tests = [XMLRPCTestCase, HelperTestCase, DateTimeTestCase, + BinaryTestCase, FaultTestCase] + + # The test cases against a SimpleXMLRPCServer raise a socket error + # 10035 (WSAEWOULDBLOCK) in the server thread handle_request call when + # run on Windows. This only happens on the first test to run, but it + # fails every time and so these tests are skipped on win32 platforms. + if sys.platform != 'win32': + xmlrpc_tests.append(HTTPTestCase) + test_support.run_unittest(*xmlrpc_tests) if __name__ == "__main__": test_main() |