summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-08-16 23:48:43 (GMT)
committerGuido van Rossum <guido@python.org>2007-08-16 23:48:43 (GMT)
commitaf554a0e17ceb0e6a3cc0c07e9cf6db2f80c1ad9 (patch)
tree7719b2787d82dd1cc7afad76ad989fc9b1f1504f /Lib
parent10c17ba299513184e39c85fc5c3ecaf2fd13187e (diff)
downloadcpython-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')
-rw-r--r--Lib/decimal.py3
-rw-r--r--Lib/test/test_exceptions.py3
-rw-r--r--Lib/test/test_import.py4
-rw-r--r--Lib/test/test_macostools.py2
-rw-r--r--Lib/test/test_pep352.py2
-rw-r--r--Lib/test/test_random.py2
-rw-r--r--Lib/test/test_re.py4
-rw-r--r--Lib/test/test_struct.py2
-rw-r--r--Lib/test/test_sundry.py4
-rw-r--r--Lib/test/test_support.py10
-rw-r--r--Lib/test/test_warnings.py2
-rw-r--r--Lib/test/test_xmlrpc.py104
12 files changed, 117 insertions, 25 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 17d67d5..cca0a44 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -612,7 +612,8 @@ class Decimal(object):
except ValueError:
self._is_special = True
self._sign, self._int, self._exp = \
- context._raise_error(ConversionSyntax)
+ context._raise_error(ConversionSyntax,
+ "Invalid literal for Decimal: %r" % value)
return self
raise TypeError("Cannot convert %r to Decimal" % value)
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()