diff options
Diffstat (limited to 'Lib/test')
| -rw-r--r-- | Lib/test/test_bytes.py | 2 | ||||
| -rw-r--r-- | Lib/test/test_io.py | 55 | ||||
| -rw-r--r-- | Lib/test/test_xmlrpc.py | 87 |
3 files changed, 142 insertions, 2 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 6e5ffa9..45df1f3 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -725,7 +725,7 @@ class ByteArrayTest(BaseBytesTest): # Issue 4348. Make sure that operations that don't mutate the array # copy the bytes. b = bytearray(b'abc') - #self.assertFalse(b is b.replace(b'abc', b'cde', 0)) + self.assertFalse(b is b.replace(b'abc', b'cde', 0)) t = bytearray([i for i in range(256)]) x = bytearray(b'') diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 9ef2a81..c9bd38d 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -272,6 +272,30 @@ class IOTest(unittest.TestCase): self.assertRaises(ValueError, io.open, test_support.TESTFN, 'w', closefd=False) + def testReadClosed(self): + with io.open(test_support.TESTFN, "w") as f: + f.write("egg\n") + with io.open(test_support.TESTFN, "r") as f: + file = io.open(f.fileno(), "r", closefd=False) + self.assertEqual(file.read(), "egg\n") + file.seek(0) + file.close() + self.assertRaises(ValueError, file.read) + + def test_no_closefd_with_filename(self): + # can't use closefd in combination with a file name + self.assertRaises(ValueError, + io.open, test_support.TESTFN, "r", closefd=False) + + def test_closefd_attr(self): + with io.open(test_support.TESTFN, "wb") as f: + f.write(b"egg\n") + with io.open(test_support.TESTFN, "r") as f: + self.assertEqual(f.buffer.raw.closefd, True) + file = io.open(f.fileno(), "r", closefd=False) + self.assertEqual(file.buffer.raw.closefd, False) + + class MemorySeekTestMixin: def testInit(self): @@ -1225,6 +1249,9 @@ class TextIOWrapperTest(unittest.TestCase): class MiscIOTest(unittest.TestCase): + def tearDown(self): + test_support.unlink(test_support.TESTFN) + def testImport__all__(self): for name in io.__all__: obj = getattr(io, name, None) @@ -1237,6 +1264,34 @@ class MiscIOTest(unittest.TestCase): self.assert_(issubclass(obj, io.IOBase)) + def test_attributes(self): + f = io.open(test_support.TESTFN, "wb", buffering=0) + self.assertEquals(f.mode, "w") + f.close() + + f = io.open(test_support.TESTFN, "U") + self.assertEquals(f.name, test_support.TESTFN) + self.assertEquals(f.buffer.name, test_support.TESTFN) + self.assertEquals(f.buffer.raw.name, test_support.TESTFN) + self.assertEquals(f.mode, "U") + self.assertEquals(f.buffer.mode, "r") + self.assertEquals(f.buffer.raw.mode, "r") + f.close() + + f = io.open(test_support.TESTFN, "w+") + self.assertEquals(f.mode, "w+") + self.assertEquals(f.buffer.mode, "r+") # Does it really matter? + self.assertEquals(f.buffer.raw.mode, "r+") + + g = io.open(f.fileno(), "wb", closefd=False) + self.assertEquals(g.mode, "w") + self.assertEquals(g.raw.mode, "w") + self.assertEquals(g.name, f.fileno()) + self.assertEquals(g.raw.name, f.fileno()) + f.close() + g.close() + + def test_main(): test_support.run_unittest(IOTest, BytesIOTest, StringIOTest, BufferedReaderTest, BufferedWriterTest, diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index bbdb93e..c9294b1 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -9,6 +9,7 @@ import threading import mimetools import httplib import socket +import StringIO import os from test import test_support @@ -639,9 +640,93 @@ class CGIHandlerTestCase(unittest.TestCase): os.remove("xmldata.txt") os.remove(test_support.TESTFN) +class FakeSocket: + + def __init__(self): + self.data = StringIO.StringIO() + + def send(self, buf): + self.data.write(buf) + return len(buf) + + def sendall(self, buf): + self.data.write(buf) + + def getvalue(self): + return self.data.getvalue() + + def makefile(self, x, y): + raise RuntimeError + +class FakeTransport(xmlrpclib.Transport): + """A Transport instance that records instead of sending a request. + + This class replaces the actual socket used by httplib with a + FakeSocket object that records the request. It doesn't provide a + response. + """ + + def make_connection(self, host): + conn = xmlrpclib.Transport.make_connection(self, host) + conn._conn.sock = self.fake_socket = FakeSocket() + return conn + +class TransportSubclassTestCase(unittest.TestCase): + + def issue_request(self, transport_class): + """Return an HTTP request made via transport_class.""" + transport = transport_class() + proxy = xmlrpclib.ServerProxy("http://example.com/", + transport=transport) + try: + proxy.pow(6, 8) + except RuntimeError: + return transport.fake_socket.getvalue() + return None + + def test_custom_user_agent(self): + class TestTransport(FakeTransport): + + def send_user_agent(self, conn): + xmlrpclib.Transport.send_user_agent(self, conn) + conn.putheader("X-Test", "test_custom_user_agent") + + req = self.issue_request(TestTransport) + self.assert_("X-Test: test_custom_user_agent\r\n" in req) + + def test_send_host(self): + class TestTransport(FakeTransport): + + def send_host(self, conn, host): + xmlrpclib.Transport.send_host(self, conn, host) + conn.putheader("X-Test", "test_send_host") + + req = self.issue_request(TestTransport) + self.assert_("X-Test: test_send_host\r\n" in req) + + def test_send_request(self): + class TestTransport(FakeTransport): + + def send_request(self, conn, url, body): + xmlrpclib.Transport.send_request(self, conn, url, body) + conn.putheader("X-Test", "test_send_request") + + req = self.issue_request(TestTransport) + self.assert_("X-Test: test_send_request\r\n" in req) + + def test_send_content(self): + class TestTransport(FakeTransport): + + def send_content(self, conn, body): + conn.putheader("X-Test", "test_send_content") + xmlrpclib.Transport.send_content(self, conn, body) + + req = self.issue_request(TestTransport) + self.assert_("X-Test: test_send_content\r\n" in req) + def test_main(): xmlrpc_tests = [XMLRPCTestCase, HelperTestCase, DateTimeTestCase, - BinaryTestCase, FaultTestCase] + BinaryTestCase, FaultTestCase, TransportSubclassTestCase] # The test cases against a SimpleXMLRPCServer raise a socket error # 10035 (WSAEWOULDBLOCK) in the server thread handle_request call when |
