summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/ctypes/__init__.py5
-rw-r--r--Lib/ctypes/test/test_arrays.py2
-rw-r--r--Lib/ctypes/test/test_callbacks.py4
-rw-r--r--Lib/ctypes/test/test_cfuncs.py12
-rw-r--r--Lib/ctypes/test/test_functions.py12
-rw-r--r--Lib/ctypes/test/test_repr.py2
-rw-r--r--Lib/distutils/dep_util.py3
-rw-r--r--Lib/httplib.py4
-rw-r--r--Lib/imaplib.py4
-rwxr-xr-xLib/smtplib.py6
-rw-r--r--Lib/test/crashers/infinite_rec_1.py11
-rw-r--r--Lib/test/crashers/infinite_rec_2.py10
-rw-r--r--Lib/test/test_descr.py18
-rw-r--r--Lib/test/test_ssl.py13
-rw-r--r--Lib/test/test_uuid.py12
15 files changed, 78 insertions, 40 deletions
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index f55d194b8f..c4131277e9 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -188,6 +188,11 @@ class c_double(_SimpleCData):
_type_ = "d"
_check_size(c_double)
+class c_longdouble(_SimpleCData):
+ _type_ = "D"
+if sizeof(c_longdouble) == sizeof(c_double):
+ c_longdouble = c_double
+
if _calcsize("l") == _calcsize("q"):
# if long and long long have the same size, make c_longlong an alias for c_long
c_longlong = c_long
diff --git a/Lib/ctypes/test/test_arrays.py b/Lib/ctypes/test/test_arrays.py
index f4870139ca..f8bce5a976 100644
--- a/Lib/ctypes/test/test_arrays.py
+++ b/Lib/ctypes/test/test_arrays.py
@@ -4,7 +4,7 @@ from ctypes import *
formats = "bBhHiIlLqQfd"
formats = c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint, \
- c_long, c_ulonglong, c_float, c_double
+ c_long, c_ulonglong, c_float, c_double, c_longdouble
class ArrayTestCase(unittest.TestCase):
def test_simple(self):
diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
index 9b2ea8c9a4..d870eb424c 100644
--- a/Lib/ctypes/test/test_callbacks.py
+++ b/Lib/ctypes/test/test_callbacks.py
@@ -77,6 +77,10 @@ class Callbacks(unittest.TestCase):
self.check_type(c_double, 3.14)
self.check_type(c_double, -3.14)
+ def test_longdouble(self):
+ self.check_type(c_longdouble, 3.14)
+ self.check_type(c_longdouble, -3.14)
+
def test_char(self):
self.check_type(c_char, b"x")
self.check_type(c_char, b"a")
diff --git a/Lib/ctypes/test/test_cfuncs.py b/Lib/ctypes/test/test_cfuncs.py
index 63564a80ab..8f97fc46a1 100644
--- a/Lib/ctypes/test/test_cfuncs.py
+++ b/Lib/ctypes/test/test_cfuncs.py
@@ -158,6 +158,18 @@ class CFunctions(unittest.TestCase):
self.failUnlessEqual(self._dll.tf_bd(0, 42.), 14.)
self.failUnlessEqual(self.S(), 42)
+ def test_longdouble(self):
+ self._dll.tf_D.restype = c_longdouble
+ self._dll.tf_D.argtypes = (c_longdouble,)
+ self.failUnlessEqual(self._dll.tf_D(42.), 14.)
+ self.failUnlessEqual(self.S(), 42)
+
+ def test_longdouble_plus(self):
+ self._dll.tf_bD.restype = c_longdouble
+ self._dll.tf_bD.argtypes = (c_byte, c_longdouble)
+ self.failUnlessEqual(self._dll.tf_bD(0, 42.), 14.)
+ self.failUnlessEqual(self.S(), 42)
+
def test_callwithresult(self):
def process_result(result):
return result * 2
diff --git a/Lib/ctypes/test/test_functions.py b/Lib/ctypes/test/test_functions.py
index d7a3edf7d7..3af11cc5de 100644
--- a/Lib/ctypes/test/test_functions.py
+++ b/Lib/ctypes/test/test_functions.py
@@ -143,6 +143,18 @@ class FunctionTestCase(unittest.TestCase):
self.failUnlessEqual(result, -21)
self.failUnlessEqual(type(result), float)
+ def test_longdoubleresult(self):
+ f = dll._testfunc_D_bhilfD
+ f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_longdouble]
+ f.restype = c_longdouble
+ result = f(1, 2, 3, 4, 5.0, 6.0)
+ self.failUnlessEqual(result, 21)
+ self.failUnlessEqual(type(result), float)
+
+ result = f(-1, -2, -3, -4, -5.0, -6.0)
+ self.failUnlessEqual(result, -21)
+ self.failUnlessEqual(type(result), float)
+
def test_longlongresult(self):
try:
c_longlong
diff --git a/Lib/ctypes/test/test_repr.py b/Lib/ctypes/test/test_repr.py
index 8e69444780..3f1e8191da 100644
--- a/Lib/ctypes/test/test_repr.py
+++ b/Lib/ctypes/test/test_repr.py
@@ -4,7 +4,7 @@ import unittest
subclasses = []
for base in [c_byte, c_short, c_int, c_long, c_longlong,
c_ubyte, c_ushort, c_uint, c_ulong, c_ulonglong,
- c_float, c_double, c_bool]:
+ c_float, c_double, c_longdouble, c_bool]:
class X(base):
pass
subclasses.append(X)
diff --git a/Lib/distutils/dep_util.py b/Lib/distutils/dep_util.py
index a9d589a256..07b3549c6f 100644
--- a/Lib/distutils/dep_util.py
+++ b/Lib/distutils/dep_util.py
@@ -17,7 +17,8 @@ def newer (source, target):
Raise DistutilsFileError if 'source' does not exist.
"""
if not os.path.exists(source):
- raise DistutilsFileError("file '%s' does not exist" % source)
+ raise DistutilsFileError("file '%s' does not exist" %
+ os.path.abspath(source))
if not os.path.exists(target):
return 1
diff --git a/Lib/httplib.py b/Lib/httplib.py
index a6ac4e3034..3a830182d6 100644
--- a/Lib/httplib.py
+++ b/Lib/httplib.py
@@ -71,6 +71,7 @@ import io
import mimetools
import socket
from urlparse import urlsplit
+import warnings
__all__ = ["HTTPResponse", "HTTPConnection",
"HTTPException", "NotConnected", "UnknownProtocol",
@@ -988,6 +989,9 @@ else:
def FakeSocket (sock, sslobj):
+ warnings.warn("FakeSocket is deprecated, and won't be in 3.x. " +
+ "Use the result of ssl.sslsocket directly instead.",
+ DeprecationWarning, stacklevel=2)
return sslobj
__all__.append("HTTPSConnection")
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index 0a973720bd..78d17f8599 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -1165,7 +1165,6 @@ else:
def readline(self):
"""Read line from remote."""
- # NB: socket.ssl needs a "readline" method, or perhaps a "makefile" method.
line = []
while 1:
char = self.sslobj.read(1)
@@ -1175,7 +1174,6 @@ else:
def send(self, data):
"""Send data to remote."""
- # NB: socket.ssl needs a "sendall" method to match socket objects.
bytes = len(data)
while bytes > 0:
sent = self.sslobj.write(data)
@@ -1201,7 +1199,7 @@ else:
def ssl(self):
"""Return SSLObject instance used to communicate with the IMAP4 server.
- ssl = <instance>.socket.ssl()
+ ssl = ssl.sslsocket(<instance>.socket)
"""
return self.sslobj
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 7423ae0126..5e4ebe8e31 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -161,7 +161,6 @@ try:
except ImportError:
_have_ssl = False
else:
-
class SSLFakeFile:
"""A fake file like object that really wraps a SSLObject.
@@ -722,9 +721,8 @@ if _have_ssl:
def _get_socket(self, host, port, timeout):
if self.debuglevel > 0: print('connect:', (host, port), file=stderr)
self.sock = socket.create_connection((host, port), timeout)
- sslobj = socket.ssl(self.sock, self.keyfile, self.certfile)
- self.sock = SSLFakeSocket(self.sock, sslobj)
- self.file = SSLFakeFile(sslobj)
+ self.sock = ssl.sslsocket(self.sock, self.keyfile, self.certfile)
+ self.file = SSLFakeFile(self.sock)
__all__.append("SMTP_SSL")
diff --git a/Lib/test/crashers/infinite_rec_1.py b/Lib/test/crashers/infinite_rec_1.py
deleted file mode 100644
index 573a509b5f..0000000000
--- a/Lib/test/crashers/infinite_rec_1.py
+++ /dev/null
@@ -1,11 +0,0 @@
-
-# http://python.org/sf/1202533
-
-import new, operator
-
-class A:
- pass
-A.__mul__ = new.instancemethod(operator.mul, None, A)
-
-if __name__ == '__main__':
- A()*2 # segfault: infinite recursion in C
diff --git a/Lib/test/crashers/infinite_rec_2.py b/Lib/test/crashers/infinite_rec_2.py
deleted file mode 100644
index 5a14b33eaa..0000000000
--- a/Lib/test/crashers/infinite_rec_2.py
+++ /dev/null
@@ -1,10 +0,0 @@
-
-# http://python.org/sf/1202533
-
-class A(str):
- __get__ = getattr
-
-if __name__ == '__main__':
- a = A('a')
- A.a = a
- a.a # segfault: infinite recursion in C
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index bfa6a642ec..12bec1a304 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4,6 +4,7 @@ from test.test_support import verify, vereq, verbose, TestFailed, TESTFN
from test.test_support import get_original_stdout
from copy import deepcopy
import types
+import new
def veris(a, b):
if a is not b:
@@ -1834,6 +1835,10 @@ def specials():
## unsafecmp(1, 1L)
## unsafecmp(1L, 1)
+def recursions():
+ if verbose:
+ print("Testing recursion checks ...")
+
## class Letter(str):
## def __new__(cls, letter):
## if letter == 'EPS':
@@ -1843,7 +1848,6 @@ def specials():
## if not self:
## return 'EPS'
## return self
-
## # sys.stdout needs to be the original to trigger the recursion bug
## import sys
## test_stdout = sys.stdout
@@ -1857,6 +1861,17 @@ def specials():
## raise TestFailed, "expected a RuntimeError for print recursion"
## sys.stdout = test_stdout
+ # Bug #1202533.
+ class A(object):
+ pass
+ A.__mul__ = new.instancemethod(lambda self, x: self * x, None, A)
+ try:
+ A()*2
+ except RuntimeError:
+ pass
+ else:
+ raise TestFailed("expected a RuntimeError")
+
def weakrefs():
if verbose: print("Testing weak references...")
import weakref
@@ -4153,6 +4168,7 @@ def test_main():
overloading()
methods()
specials()
+ recursions()
weakrefs()
properties()
supers()
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 35c6af994c..04daab2f36 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -137,18 +137,15 @@ class ConnectedTests(unittest.TestCase):
cert = c2.getpeercert()
if not cert:
raise test_support.TestFailed("Can't get peer certificate.")
+ if test_support.verbose:
+ sys.stdout.write(pprint.pformat(cert) + '\n')
if not cert.has_key('subject'):
raise test_support.TestFailed(
"No subject field in certificate: %s." %
pprint.pformat(cert))
- if not (cert['subject'].has_key('organizationName')):
- raise test_support.TestFailed(
- "No 'organizationName' field in certificate subject: %s." %
- pprint.pformat(cert))
- if (cert['subject']['organizationName'] !=
- "Python Software Foundation"):
+ if not ('organizationName', 'Python Software Foundation') in cert['subject']:
raise test_support.TestFailed(
- "Invalid 'organizationName' field in certificate subject; "
+ "Missing or invalid 'organizationName' field in certificate subject; "
"should be 'Python Software Foundation'.");
c2.close()
@@ -336,7 +333,7 @@ def create_cert_files(hostname=None):
def test_main(verbose=False):
if skip_expected:
- raise test_support.TestSkipped("socket module has no ssl support")
+ raise test_support.TestSkipped("No SSL support")
global CERTFILE
CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir,
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 5ccdcb1926..92d62946e1 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -364,6 +364,12 @@ class TestUUID(TestCase):
self.assertEqual(node1, node2)
def test_uuid1(self):
+ # uuid1 requires ctypes.
+ try:
+ import ctypes
+ except ImportError:
+ return
+
equal = self.assertEqual
# Make sure uuid1() generates UUIDs that are actually version 1.
@@ -417,6 +423,12 @@ class TestUUID(TestCase):
equal(str(u), v)
def test_uuid4(self):
+ # uuid4 requires ctypes.
+ try:
+ import ctypes
+ except ImportError:
+ return
+
equal = self.assertEqual
# Make sure uuid4() generates UUIDs that are actually version 4.