annotate Lib/test/test_docxmlrpc.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents bc49e82ee013
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47288
346a99df5889 Create xmlrpc package. Issue #2886.
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
1 from xmlrpc.server import DocXMLRPCServer
47318
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47288
diff changeset
2 import http.client
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
3 import sys
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 45192
diff changeset
4 from test import support
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59613
diff changeset
5 threading = support.import_module('threading')
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
6 import time
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 59091
diff changeset
7 import socket
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
8 import unittest
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
9
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
10 PORT = None
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
11
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
12 def make_request_and_skipIf(condition, reason):
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
13 # If we skip the test, we have to make a request because the
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
14 # the server created in setUp blocks expecting one to come in.
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
15 if not condition:
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
16 return lambda func: func
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
17 def decorator(func):
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
18 def make_request_and_skip(self):
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
19 self.client.request("GET", "/")
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
20 self.client.getresponse()
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
21 raise unittest.SkipTest(reason)
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
22 return make_request_and_skip
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
23 return decorator
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
24
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
25
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 def server(evt, numrequests):
49493
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 47318
diff changeset
27 serv = DocXMLRPCServer(("localhost", 0), logRequests=False)
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 47318
diff changeset
28
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29 try:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
30 global PORT
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 PORT = serv.socket.getsockname()[1]
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
32
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
33 # Add some documentation
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 serv.set_server_title("DocXMLRPCServer Test Documentation")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
35 serv.set_server_name("DocXMLRPCServer Test Docs")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
36 serv.set_server_documentation(
58456
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
37 "This is an XML-RPC server's documentation, but the server "
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
38 "can be used by POSTing to /RPC2. Try self.add, too.")
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
39
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
40 # Create and register classes and functions
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
41 class TestClass(object):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
42 def test_method(self, arg):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
43 """Test method's docs. This method truly does very little."""
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44 self.arg = arg
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
45
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
46 serv.register_introspection_functions()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
47 serv.register_instance(TestClass())
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
48
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
49 def add(x, y):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
50 """Add two instances together. This follows PEP008, but has nothing
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
51 to do with RFC1952. Case should matter: pEp008 and rFC1952. Things
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
52 that start with http and ftp should be auto-linked, too:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
53 http://google.com.
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
54 """
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
55 return x + y
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
56
85096
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
57 def annotation(x: int):
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
58 """ Use function annotations. """
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
59 return x
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
60
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
61 class ClassWithAnnotation:
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
62 def method_annotation(self, x: bytes):
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
63 return x.decode()
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
64
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
65 serv.register_function(add)
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
66 serv.register_function(lambda x, y: x-y)
85096
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
67 serv.register_function(annotation)
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
68 serv.register_instance(ClassWithAnnotation())
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
69
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
70 while numrequests > 0:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
71 serv.handle_request()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
72 numrequests -= 1
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
73 except socket.timeout:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
74 pass
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
75 finally:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
76 serv.server_close()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
77 PORT = None
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
78 evt.set()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
79
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
80 class DocXMLRPCHTTPGETServer(unittest.TestCase):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
81 def setUp(self):
56983
713e21a5471e Merged revisions 75960 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
82 self._threads = support.threading_setup()
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
83 # Enable server feedback
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
84 DocXMLRPCServer._send_traceback_header = True
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
85
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
86 self.evt = threading.Event()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
87 threading.Thread(target=server, args=(self.evt, 1)).start()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
88
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
89 # wait for port to be assigned
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
90 n = 1000
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
91 while n > 0 and PORT is None:
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
92 time.sleep(0.001)
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
93 n -= 1
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
94
47318
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47288
diff changeset
95 self.client = http.client.HTTPConnection("localhost:%d" % PORT)
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
96
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
97 def tearDown(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
98 self.client.close()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
99
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
100 self.evt.wait()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
101
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
102 # Disable server feedback
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
103 DocXMLRPCServer._send_traceback_header = False
56983
713e21a5471e Merged revisions 75960 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
104 support.threading_cleanup(*self._threads)
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
105
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
106 def test_valid_get_response(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
107 self.client.request("GET", "/")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
108 response = self.client.getresponse()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
109
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
110 self.assertEqual(response.status, 200)
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
111 self.assertEqual(response.getheader("Content-type"), "text/html")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
112
80928
fdf907708f49 Issue #16714: use 'raise' exceptions, don't 'throw'.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 61073
diff changeset
113 # Server raises an exception if we don't start to read the data
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
114 response.read()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
115
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
116 def test_invalid_get_response(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
117 self.client.request("GET", "/spam")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
118 response = self.client.getresponse()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
119
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
120 self.assertEqual(response.status, 404)
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
121 self.assertEqual(response.getheader("Content-type"), "text/plain")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
122
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
123 response.read()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
124
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
125 def test_lambda(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
126 """Test that lambda functionality stays the same. The output produced
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
127 currently is, I suspect invalid because of the unencoded brackets in the
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
128 HTML, "<lambda>".
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
129
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
130 The subtraction lambda method is tested.
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
131 """
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
132 self.client.request("GET", "/")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
133 response = self.client.getresponse()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
134
58456
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
135 self.assertIn((b'<dl><dt><a name="-&lt;lambda&gt;"><strong>'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
136 b'&lt;lambda&gt;</strong></a>(x, y)</dt></dl>'),
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
137 response.read())
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
138
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
139 @make_request_and_skipIf(sys.flags.optimize >= 2,
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
140 "Docstrings are omitted with -O2 and above")
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
141 def test_autolinking(self):
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
142 """Test that the server correctly automatically wraps references to
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
143 PEPS and RFCs with links, and that it linkifies text starting with
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
144 http or ftp protocol prefixes.
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
145
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
146 The documentation for the "add" method contains the test material.
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
147 """
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
148 self.client.request("GET", "/")
45192
142a11b3057e Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60568-60598,60600-60616 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44257
diff changeset
149 response = self.client.getresponse().read()
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
150
58456
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
151 self.assertIn(
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
152 (b'<dl><dt><a name="-add"><strong>add</strong></a>(x, y)</dt><dd>'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
153 b'<tt>Add&nbsp;two&nbsp;instances&nbsp;together.&nbsp;This&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
154 b'follows&nbsp;<a href="http://www.python.org/dev/peps/pep-0008/">'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
155 b'PEP008</a>,&nbsp;but&nbsp;has&nbsp;nothing<br>\nto&nbsp;do&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
156 b'with&nbsp;<a href="http://www.rfc-editor.org/rfc/rfc1952.txt">'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
157 b'RFC1952</a>.&nbsp;Case&nbsp;should&nbsp;matter:&nbsp;pEp008&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
158 b'and&nbsp;rFC1952.&nbsp;&nbsp;Things<br>\nthat&nbsp;start&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
159 b'with&nbsp;http&nbsp;and&nbsp;ftp&nbsp;should&nbsp;be&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
160 b'auto-linked,&nbsp;too:<br>\n<a href="http://google.com">'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
161 b'http://google.com</a>.</tt></dd></dl>'), response)
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
162
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
163 @make_request_and_skipIf(sys.flags.optimize >= 2,
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
164 "Docstrings are omitted with -O2 and above")
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
165 def test_system_methods(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
166 """Test the precense of three consecutive system.* methods.
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
167
59091
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
168 This also tests their use of parameter type recognition and the
8d3ff2fbbe4b Merged revisions 78351 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 58456
diff changeset
169 systems related to that process.
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
170 """
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
171 self.client.request("GET", "/")
44257
76ce597c72ee Fixed doc xml rpc tests and server
Christian Heimes <christian@cheimes.de>
parents: 44253
diff changeset
172 response = self.client.getresponse().read()
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
173
58456
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
174 self.assertIn(
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
175 (b'<dl><dt><a name="-system.methodHelp"><strong>system.methodHelp'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
176 b'</strong></a>(method_name)</dt><dd><tt><a href="#-system.method'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
177 b'Help">system.methodHelp</a>(\'add\')&nbsp;=&gt;&nbsp;"Adds&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
178 b'two&nbsp;integers&nbsp;together"<br>\n&nbsp;<br>\nReturns&nbsp;a'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
179 b'&nbsp;string&nbsp;containing&nbsp;documentation&nbsp;for&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
180 b'the&nbsp;specified&nbsp;method.</tt></dd></dl>\n<dl><dt><a name'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
181 b'="-system.methodSignature"><strong>system.methodSignature</strong>'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
182 b'</a>(method_name)</dt><dd><tt><a href="#-system.methodSignature">'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
183 b'system.methodSignature</a>(\'add\')&nbsp;=&gt;&nbsp;[double,&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
184 b'int,&nbsp;int]<br>\n&nbsp;<br>\nReturns&nbsp;a&nbsp;list&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
185 b'describing&nbsp;the&nbsp;signature&nbsp;of&nbsp;the&nbsp;method.'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
186 b'&nbsp;In&nbsp;the<br>\nabove&nbsp;example,&nbsp;the&nbsp;add&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
187 b'method&nbsp;takes&nbsp;two&nbsp;integers&nbsp;as&nbsp;arguments'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
188 b'<br>\nand&nbsp;returns&nbsp;a&nbsp;double&nbsp;result.<br>\n&nbsp;'
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
189 b'<br>\nThis&nbsp;server&nbsp;does&nbsp;NOT&nbsp;support&nbsp;system'
85096
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
190 b'.methodSignature.</tt></dd></dl>'), response)
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
191
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
192 def test_autolink_dotted_methods(self):
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
193 """Test that selfdot values are made strong automatically in the
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
194 documentation."""
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
195 self.client.request("GET", "/")
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
196 response = self.client.getresponse()
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
197
58456
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
198 self.assertIn(b"""Try&nbsp;self.<strong>add</strong>,&nbsp;too.""",
f0f221e1a7c0 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 56983
diff changeset
199 response.read())
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
200
85096
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
201 def test_annotations(self):
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
202 """ Test that annotations works as expected """
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
203 self.client.request("GET", "/")
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
204 response = self.client.getresponse()
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
205 self.assertIn(
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
206 (b'<dl><dt><a name="-annotation"><strong>annotation</strong></a>'
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
207 b'(x: int)</dt><dd><tt>Use&nbsp;function&nbsp;annotations.</tt>'
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
208 b'</dd></dl>\n<dl><dt><a name="-method_annotation"><strong>'
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
209 b'method_annotation</strong></a>(x: bytes)</dt></dl>'),
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
210 response.read())
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
211
bc49e82ee013 #8112: Update the documenting xmlrpc server to use getfullargspec.
R David Murray <rdmurray@bitdance.com>
parents: 80928
diff changeset
212
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
213 def test_main():
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 45192
diff changeset
214 support.run_unittest(DocXMLRPCHTTPGETServer)
44253
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
215
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
216 if __name__ == '__main__':
60a740f5a57a Merged revisions 59441-59449 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
217 test_main()